{
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        }
      }
    }
  },
  "basePath": "",
  "baseUrl": "https://contentwarehouse.googleapis.com/",
  "batchPath": "batch",
  "canonicalName": "contentwarehouse",
  "description": "",
  "discoveryVersion": "v1",
  "documentationLink": "https://cloud.google.com/document-warehouse",
  "fullyEncodeReservedExpansion": true,
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "id": "contentwarehouse:v1",
  "kind": "discovery#restDescription",
  "mtlsRootUrl": "https://contentwarehouse.mtls.googleapis.com/",
  "name": "contentwarehouse",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "parameters": {
    "$.xgafv": {
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query",
      "type": "string"
    },
    "access_token": {
      "description": "OAuth access token.",
      "location": "query",
      "type": "string"
    },
    "alt": {
      "default": "json",
      "description": "Data format for response.",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query",
      "type": "string"
    },
    "callback": {
      "description": "JSONP",
      "location": "query",
      "type": "string"
    },
    "fields": {
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query",
      "type": "string"
    },
    "key": {
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query",
      "type": "string"
    },
    "oauth_token": {
      "description": "OAuth 2.0 token for the current user.",
      "location": "query",
      "type": "string"
    },
    "prettyPrint": {
      "default": "true",
      "description": "Returns response with indentations and line breaks.",
      "location": "query",
      "type": "boolean"
    },
    "quotaUser": {
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query",
      "type": "string"
    },
    "uploadType": {
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query",
      "type": "string"
    }
  },
  "protocol": "rest",
  "resources": {
    "projects": {
      "methods": {
        "fetchAcl": {
          "description": "Gets the access control policy for a resource. Returns NOT_FOUND error if the resource does not exist. Returns an empty policy if the resource exists but does not have a policy set.",
          "flatPath": "v1/projects/{projectsId}:fetchAcl",
          "httpMethod": "POST",
          "id": "contentwarehouse.projects.fetchAcl",
          "parameterOrder": [
            "resource"
          ],
          "parameters": {
            "resource": {
              "description": "Required. REQUIRED: The resource for which the policy is being requested. Format for document: projects/{project_number}/locations/{location}/documents/{document_id}. Format for project: projects/{project_number}.",
              "location": "path",
              "pattern": "^projects/[^/]+$",
              "required": true,
              "type": "string"
            }
          },
          "path": "v1/{+resource}:fetchAcl",
          "request": {
            "$ref": "GoogleCloudContentwarehouseV1FetchAclRequest"
          },
          "response": {
            "$ref": "GoogleCloudContentwarehouseV1FetchAclResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ]
        },
        "setAcl": {
          "description": "Sets the access control policy for a resource. Replaces any existing policy.",
          "flatPath": "v1/projects/{projectsId}:setAcl",
          "httpMethod": "POST",
          "id": "contentwarehouse.projects.setAcl",
          "parameterOrder": [
            "resource"
          ],
          "parameters": {
            "resource": {
              "description": "Required. REQUIRED: The resource for which the policy is being requested. Format for document: projects/{project_number}/locations/{location}/documents/{document_id}. Format for project: projects/{project_number}.",
              "location": "path",
              "pattern": "^projects/[^/]+$",
              "required": true,
              "type": "string"
            }
          },
          "path": "v1/{+resource}:setAcl",
          "request": {
            "$ref": "GoogleCloudContentwarehouseV1SetAclRequest"
          },
          "response": {
            "$ref": "GoogleCloudContentwarehouseV1SetAclResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ]
        }
      },
      "resources": {
        "locations": {
          "methods": {
            "initialize": {
              "description": "Provisions resources for given tenant project. Returns a long running operation.",
              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}:initialize",
              "httpMethod": "POST",
              "id": "contentwarehouse.projects.locations.initialize",
              "parameterOrder": [
                "location"
              ],
              "parameters": {
                "location": {
                  "description": "Required. The location to be initialized Format: projects/{project_number}/locations/{location}.",
                  "location": "path",
                  "pattern": "^projects/[^/]+/locations/[^/]+$",
                  "required": true,
                  "type": "string"
                }
              },
              "path": "v1/{+location}:initialize",
              "request": {
                "$ref": "GoogleCloudContentwarehouseV1InitializeProjectRequest"
              },
              "response": {
                "$ref": "GoogleLongrunningOperation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ]
            },
            "runPipeline": {
              "description": "Run a predefined pipeline.",
              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}:runPipeline",
              "httpMethod": "POST",
              "id": "contentwarehouse.projects.locations.runPipeline",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The resource name which owns the resources of the pipeline. Format: projects/{project_number}/locations/{location}.",
                  "location": "path",
                  "pattern": "^projects/[^/]+/locations/[^/]+$",
                  "required": true,
                  "type": "string"
                }
              },
              "path": "v1/{+name}:runPipeline",
              "request": {
                "$ref": "GoogleCloudContentwarehouseV1RunPipelineRequest"
              },
              "response": {
                "$ref": "GoogleLongrunningOperation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ]
            }
          },
          "resources": {
            "collections": {
              "methods": {
                "create": {
                  "description": "Creates a collection.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/collections",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.collections.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent name.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/collections",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1Collection"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Collection"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "delete": {
                  "description": "Deletes a collection.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/collections/{collectionsId}",
                  "httpMethod": "DELETE",
                  "id": "contentwarehouse.projects.locations.collections.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the collection to delete.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/collections/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "fetchCollectionAcl": {
                  "description": "Gets the access control policy for the collection. Returns NOT_FOUND error if the collection does not exist. Returns an empty policy if the collection exists but does not have a policy set.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/collections/{collectionsId}:fetchCollectionAcl",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.collections.fetchCollectionAcl",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the collection. projects/{project_number}/locations/{location}/collections/{document_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/collections/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}:fetchCollectionAcl",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1FetchCollectionAclRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1FetchCollectionAclResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "get": {
                  "description": "Gets a collection.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/collections/{collectionsId}",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.collections.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the collection to retrieve.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/collections/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Collection"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "search": {
                  "description": "Searches for collections using provided SearchCollectionsRequest. This call only returns collections that the caller has permission to search against.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/collections:search",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.collections.search",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent, which owns the collections. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/collections:search",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1SearchCollectionsRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SearchCollectionsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "setCollectionAcl": {
                  "description": "Sets the access control policy for the collection. Replaces any existing policy.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/collections/{collectionsId}:setCollectionAcl",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.collections.setCollectionAcl",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the collection for which the policy is being set. projects/{project_number}/locations/{location}/collections/{document_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/collections/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}:setCollectionAcl",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1SetCollectionAclRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SetCollectionAclResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              }
            },
            "documentSchemas": {
              "methods": {
                "create": {
                  "description": "Creates a document schema.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documentSchemas",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documentSchemas.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent name.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/documentSchemas",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1DocumentSchema"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1DocumentSchema"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "delete": {
                  "description": "Deletes a document schema. Returns NOT_FOUND if the document schema does not exist. Returns BAD_REQUEST if the document schema has documents depending on it.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documentSchemas/{documentSchemasId}",
                  "httpMethod": "DELETE",
                  "id": "contentwarehouse.projects.locations.documentSchemas.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document schema to delete.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documentSchemas/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "get": {
                  "description": "Gets a document schema. Returns NOT_FOUND if the document schema does not exist.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documentSchemas/{documentSchemasId}",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.documentSchemas.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document schema to retrieve.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documentSchemas/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1DocumentSchema"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "list": {
                  "description": "Lists document schemas.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documentSchemas",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.documentSchemas.list",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of document schemas to return. The service may return fewer than this value. If unspecified, at most 50 document schemas will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                      "format": "int32",
                      "location": "query",
                      "type": "integer"
                    },
                    "pageToken": {
                      "description": "A page token, received from a previous `ListDocumentSchemas` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListDocumentSchemas` must match the call that provided the page token.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "description": "Required. The parent, which owns this collection of document schemas. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/documentSchemas",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1ListDocumentSchemasResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "patch": {
                  "description": "Updates a Document Schema. Returns INVALID_ARGUMENT if the name of the Document Schema is non-empty and does not equal the existing name. Supports only appending new properties, adding new ENUM possible values, and updating the EnumTypeOptions.validation_check_disabled flag for ENUM possible values. Updating existing properties will result into INVALID_ARGUMENT.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documentSchemas/{documentSchemasId}",
                  "httpMethod": "PATCH",
                  "id": "contentwarehouse.projects.locations.documentSchemas.patch",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document schema to update. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documentSchemas/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1UpdateDocumentSchemaRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1DocumentSchema"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              }
            },
            "documents": {
              "methods": {
                "create": {
                  "description": "Creates a document.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent name. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/documents",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1CreateDocumentRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1CreateDocumentResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "delete": {
                  "description": "Deletes a document. Returns NOT_FOUND if the document does not exist.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}:delete",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document to delete. Format: projects/{project_number}/locations/{location}/documents/{document_id} or projects/{project_number}/locations/{location}/documents/referenceId/{reference_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}:delete",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1DeleteDocumentRequest"
                  },
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "fetchAcl": {
                  "description": "Gets the access control policy for a resource. Returns NOT_FOUND error if the resource does not exist. Returns an empty policy if the resource exists but does not have a policy set.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}:fetchAcl",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.fetchAcl",
                  "parameterOrder": [
                    "resource"
                  ],
                  "parameters": {
                    "resource": {
                      "description": "Required. REQUIRED: The resource for which the policy is being requested. Format for document: projects/{project_number}/locations/{location}/documents/{document_id}. Format for project: projects/{project_number}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+resource}:fetchAcl",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1FetchAclRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1FetchAclResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "get": {
                  "description": "Gets a document. Returns NOT_FOUND if the document does not exist.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}:get",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document to retrieve. Format: projects/{project_number}/locations/{location}/documents/{document_id} or projects/{project_number}/locations/{location}/documents/referenceId/{reference_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}:get",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1GetDocumentRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Document"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "linkedSources": {
                  "description": "Return all source document-links from the document.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}/linkedSources",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.linkedSources",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The name of the document, for which all source links are returned. Format: projects/{project_number}/locations/{location}/documents/{source_document_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/linkedSources",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1ListLinkedSourcesRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1ListLinkedSourcesResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "linkedTargets": {
                  "description": "Return all target document-links from the document.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}/linkedTargets",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.linkedTargets",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The name of the document, for which all target links are returned. Format: projects/{project_number}/locations/{location}/documents/{target_document_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/linkedTargets",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1ListLinkedTargetsRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1ListLinkedTargetsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "lock": {
                  "description": "Lock the document so the document cannot be updated by other users.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}:lock",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.lock",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document to lock. Format: projects/{project_number}/locations/{location}/documents/{document}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}:lock",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1LockDocumentRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Document"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "patch": {
                  "description": "Updates a document. Returns INVALID_ARGUMENT if the name of the document is non-empty and does not equal the existing name.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}",
                  "httpMethod": "PATCH",
                  "id": "contentwarehouse.projects.locations.documents.patch",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the document to update. Format: projects/{project_number}/locations/{location}/documents/{document_id} or projects/{project_number}/locations/{location}/documents/referenceId/{reference_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1UpdateDocumentRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1UpdateDocumentResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "search": {
                  "description": "Searches for documents using provided SearchDocumentsRequest. This call only returns documents that the caller has permission to search against.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents:search",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.search",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent, which owns this collection of documents. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/documents:search",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1SearchDocumentsRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SearchDocumentsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "setAcl": {
                  "description": "Sets the access control policy for a resource. Replaces any existing policy.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}:setAcl",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.documents.setAcl",
                  "parameterOrder": [
                    "resource"
                  ],
                  "parameters": {
                    "resource": {
                      "description": "Required. REQUIRED: The resource for which the policy is being requested. Format for document: projects/{project_number}/locations/{location}/documents/{document_id}. Format for project: projects/{project_number}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+resource}:setAcl",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1SetAclRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SetAclResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              },
              "resources": {
                "documentLinks": {
                  "methods": {
                    "create": {
                      "description": "Create a link between a source document and a target document.",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}/documentLinks",
                      "httpMethod": "POST",
                      "id": "contentwarehouse.projects.locations.documents.documentLinks.create",
                      "parameterOrder": [
                        "parent"
                      ],
                      "parameters": {
                        "parent": {
                          "description": "Required. Parent of the document-link to be created. parent of document-link should be a document. Format: projects/{project_number}/locations/{location}/documents/{source_document_id}.",
                          "location": "path",
                          "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+$",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "path": "v1/{+parent}/documentLinks",
                      "request": {
                        "$ref": "GoogleCloudContentwarehouseV1CreateDocumentLinkRequest"
                      },
                      "response": {
                        "$ref": "GoogleCloudContentwarehouseV1DocumentLink"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    },
                    "delete": {
                      "description": "Remove the link between the source and target documents.",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/{documentsId}/documentLinks/{documentLinksId}:delete",
                      "httpMethod": "POST",
                      "id": "contentwarehouse.projects.locations.documents.documentLinks.delete",
                      "parameterOrder": [
                        "name"
                      ],
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the document-link to be deleted. Format: projects/{project_number}/locations/{location}/documents/{source_document_id}/documentLinks/{document_link_id}.",
                          "location": "path",
                          "pattern": "^projects/[^/]+/locations/[^/]+/documents/[^/]+/documentLinks/[^/]+$",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "path": "v1/{+name}:delete",
                      "request": {
                        "$ref": "GoogleCloudContentwarehouseV1DeleteDocumentLinkRequest"
                      },
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    }
                  }
                },
                "referenceId": {
                  "methods": {
                    "delete": {
                      "description": "Deletes a document. Returns NOT_FOUND if the document does not exist.",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/referenceId/{referenceIdId}:delete",
                      "httpMethod": "POST",
                      "id": "contentwarehouse.projects.locations.documents.referenceId.delete",
                      "parameterOrder": [
                        "name"
                      ],
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the document to delete. Format: projects/{project_number}/locations/{location}/documents/{document_id} or projects/{project_number}/locations/{location}/documents/referenceId/{reference_id}.",
                          "location": "path",
                          "pattern": "^projects/[^/]+/locations/[^/]+/documents/referenceId/[^/]+$",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "path": "v1/{+name}:delete",
                      "request": {
                        "$ref": "GoogleCloudContentwarehouseV1DeleteDocumentRequest"
                      },
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    },
                    "get": {
                      "description": "Gets a document. Returns NOT_FOUND if the document does not exist.",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/referenceId/{referenceIdId}:get",
                      "httpMethod": "POST",
                      "id": "contentwarehouse.projects.locations.documents.referenceId.get",
                      "parameterOrder": [
                        "name"
                      ],
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the document to retrieve. Format: projects/{project_number}/locations/{location}/documents/{document_id} or projects/{project_number}/locations/{location}/documents/referenceId/{reference_id}.",
                          "location": "path",
                          "pattern": "^projects/[^/]+/locations/[^/]+/documents/referenceId/[^/]+$",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "path": "v1/{+name}:get",
                      "request": {
                        "$ref": "GoogleCloudContentwarehouseV1GetDocumentRequest"
                      },
                      "response": {
                        "$ref": "GoogleCloudContentwarehouseV1Document"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    },
                    "patch": {
                      "description": "Updates a document. Returns INVALID_ARGUMENT if the name of the document is non-empty and does not equal the existing name.",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/documents/referenceId/{referenceIdId}",
                      "httpMethod": "PATCH",
                      "id": "contentwarehouse.projects.locations.documents.referenceId.patch",
                      "parameterOrder": [
                        "name"
                      ],
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the document to update. Format: projects/{project_number}/locations/{location}/documents/{document_id} or projects/{project_number}/locations/{location}/documents/referenceId/{reference_id}.",
                          "location": "path",
                          "pattern": "^projects/[^/]+/locations/[^/]+/documents/referenceId/[^/]+$",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "path": "v1/{+name}",
                      "request": {
                        "$ref": "GoogleCloudContentwarehouseV1UpdateDocumentRequest"
                      },
                      "response": {
                        "$ref": "GoogleCloudContentwarehouseV1UpdateDocumentResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    }
                  }
                }
              }
            },
            "links": {
              "methods": {
                "create": {
                  "description": "Creates a link.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/links",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.links.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent name.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/links",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1Link"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Link"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "delete": {
                  "description": "Deletes a link between a collection and a document.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/links/{linksId}",
                  "httpMethod": "DELETE",
                  "id": "contentwarehouse.projects.locations.links.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the link to delete.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/links/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "get": {
                  "description": "Gets a link.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/links/{linksId}",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.links.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the link to retrieve.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/links/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Link"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "patch": {
                  "description": "Updates the link using provided UpdateLinkRequest.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/links/{linksId}",
                  "httpMethod": "PATCH",
                  "id": "contentwarehouse.projects.locations.links.patch",
                  "parameterOrder": [
                    "name",
                    "linksId"
                  ],
                  "parameters": {
                    "linksId": {
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "name": {
                      "description": "The resource name of the link. Format: projects/{project_number}/locations/{location}/links/{link}. The name is ignored when creating a link.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}/links/{linksId}",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1Link"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1Link"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              }
            },
            "operations": {
              "methods": {
                "get": {
                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.operations.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "The name of the operation resource.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleLongrunningOperation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              }
            },
            "ruleSets": {
              "methods": {
                "create": {
                  "description": "Creates a ruleset.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/ruleSets",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.ruleSets.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent name. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/ruleSets",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1RuleSet"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1RuleSet"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "delete": {
                  "description": "Deletes a ruleset. Returns NOT_FOUND if the document does not exist.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/ruleSets/{ruleSetsId}",
                  "httpMethod": "DELETE",
                  "id": "contentwarehouse.projects.locations.ruleSets.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the rule set to delete. Format: projects/{project_number}/locations/{location}/ruleSets/{rule_set_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/ruleSets/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "get": {
                  "description": "Gets a ruleset. Returns NOT_FOUND if the ruleset does not exist.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/ruleSets/{ruleSetsId}",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.ruleSets.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the rule set to retrieve. Format: projects/{project_number}/locations/{location}/ruleSets/{rule_set_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/ruleSets/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1RuleSet"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "list": {
                  "description": "Lists rulesets.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/ruleSets",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.ruleSets.list",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of rule sets to return. The service may return fewer than this value. If unspecified, at most 50 rule sets will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                      "format": "int32",
                      "location": "query",
                      "type": "integer"
                    },
                    "pageToken": {
                      "description": "A page token, received from a previous `ListRuleSets` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRuleSets` must match the call that provided the page token.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "description": "Required. The parent, which owns this collection of document. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/ruleSets",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1ListRuleSetsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "patch": {
                  "description": "Updates a ruleset. Returns INVALID_ARGUMENT if the name of the ruleset is non-empty and does not equal the existing name.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/ruleSets/{ruleSetsId}",
                  "httpMethod": "PATCH",
                  "id": "contentwarehouse.projects.locations.ruleSets.patch",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the rule set to update. Format: projects/{project_number}/locations/{location}/ruleSets/{rule_set_id}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/ruleSets/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1UpdateRuleSetRequest"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1RuleSet"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              }
            },
            "synonymSets": {
              "methods": {
                "create": {
                  "description": "Creates a SynonymSet for a single context. Throws an ALREADY_EXISTS exception if a synonymset already exists for the context.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/synonymSets",
                  "httpMethod": "POST",
                  "id": "contentwarehouse.projects.locations.synonymSets.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent name. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/synonymSets",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1SynonymSet"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SynonymSet"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "delete": {
                  "description": "Deletes a SynonymSet for a given context. Throws a NOT_FOUND exception if the SynonymSet is not found.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/synonymSets/{synonymSetsId}",
                  "httpMethod": "DELETE",
                  "id": "contentwarehouse.projects.locations.synonymSets.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the synonymSet to delete Format: projects/{project_number}/locations/{location}/synonymSets/{context}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/synonymSets/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "get": {
                  "description": "Gets a SynonymSet for a particular context. Throws a NOT_FOUND exception if the Synonymset does not exist",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/synonymSets/{synonymSetsId}",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.synonymSets.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the synonymSet to retrieve Format: projects/{project_number}/locations/{location}/synonymSets/{context}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/synonymSets/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SynonymSet"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "list": {
                  "description": "Returns all SynonymSets (for all contexts) for the specified location.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/synonymSets",
                  "httpMethod": "GET",
                  "id": "contentwarehouse.projects.locations.synonymSets.list",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of synonymSets to return. The service may return fewer than this value. If unspecified, at most 50 rule sets will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                      "format": "int32",
                      "location": "query",
                      "type": "integer"
                    },
                    "pageToken": {
                      "description": "A page token, received from a previous `ListSynonymSets` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListSynonymSets` must match the call that provided the page token.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "description": "Required. The parent name. Format: projects/{project_number}/locations/{location}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+parent}/synonymSets",
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1ListSynonymSetsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                },
                "patch": {
                  "description": "Remove the existing SynonymSet for the context and replaces it with a new one. Throws a NOT_FOUND exception if the SynonymSet is not found.",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/synonymSets/{synonymSetsId}",
                  "httpMethod": "PATCH",
                  "id": "contentwarehouse.projects.locations.synonymSets.patch",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the synonymSet to update Format: projects/{project_number}/locations/{location}/synonymSets/{context}.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/synonymSets/[^/]+$",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "path": "v1/{+name}",
                  "request": {
                    "$ref": "GoogleCloudContentwarehouseV1SynonymSet"
                  },
                  "response": {
                    "$ref": "GoogleCloudContentwarehouseV1SynonymSet"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "revision": "20230314",
  "rootUrl": "https://contentwarehouse.googleapis.com/",
  "schemas": {
    "AbuseiamAbuseType": {
      "id": "AbuseiamAbuseType",
      "properties": {
        "id": {
          "enum": [
            "NONE",
            "OTHER_ABUSE",
            "CHILD_PORN",
            "PORNOGRAPHY",
            "SPAM",
            "PHISHING",
            "HATE",
            "TOS_OTHER",
            "MALWARE",
            "MALICIOUS_JAVASCRIPT",
            "NOT_FAMILY_SAFE",
            "IMPERSONATION",
            "PEDOPHILIA",
            "PERSONAL_INFO",
            "COPYRIGHT",
            "HIGH_RISK",
            "VIOLENCE",
            "UNSAFE_RACY",
            "UNSAFE_OTHER",
            "FAKE_USER",
            "NAME_VIOLATION",
            "PLUSONE_VIOLATION",
            "DEFAMATION",
            "TRADEMARK",
            "COURT_ORDER",
            "GOVERNMENT_ORDER",
            "LOCAL_LAWS",
            "PRIVACY",
            "ES_BLACKLIST",
            "ES_COMMENTS_BLACKLIST",
            "HARASSMENT",
            "COMPROMISED",
            "LOW_QUALITY",
            "API_VIOLATION",
            "REGULATED",
            "CAROUSEL_FRAME_BLACKLIST",
            "QUOTA_EXCEEDED",
            "FOUNTAIN_BLACKLIST",
            "COPPA_REGULATED",
            "DOXXING",
            "SOFT_HATE",
            "SOFT_HARASSMENT",
            "OBNOXIOUS",
            "UNWANTED",
            "NOT_UNICORN_SAFE",
            "FAKE_ENGAGEMENT",
            "COUNTERFEIT",
            "CTM"
          ],
          "enumDescriptions": [
            "no abuse",
            "generic abuse that isn't enumerated here",
            "illegal child porn images",
            "",
            "",
            "",
            "",
            "To be only used for Multi-Image Review.",
            "MALWARE includes viruses, worms, trojans, adware and even potentially unwanted software which may not necessarily be harmful.",
            "",
            "DEPRECATED - For safe searches, etc.",
            "",
            "Not illegal, but image or text content",
            "promoting or related to young pornography Personally identifiable information",
            "",
            "High risk reviews for any client.",
            "",
            "Content that is unsafe because it is sexually",
            "suggestive/racy Content that is unsafe for other reasons than",
            "being sexually suggestive/racy. Category for users who are not real",
            "User's name that violates policy.",
            "Violates PLUSONE policy.",
            "Defamation claims",
            "Trademark violations where Google could be",
            "liable Third-party court orders",
            "Government request, regardless of reason",
            "Other misc country-specific laws",
            "Local privacy laws",
            "Internal type to check es content against",
            "the ocelot blacklist. Internal type.",
            "Consistent harassing behaviour directed",
            "towards a person. Hijacked or Compromised profile.",
            "Low quality/Annoying content.",
            "Violates APIARY policy.",
            "Contains regulated products and services, such as pharmaceuticals, alcohol, tobacco, etc. For details, https://sites.google.com/a/google.com/crt-policy-site/regulated",
            "Internal type.",
            "Quota exceeded for the action.",
            "Internal type.",
            "Contains content regulated by COPPA.",
            "Revealing personal/protected information.",
            "Pattern of behavior verdicts. Used to aggregate verdicts that aren't typically bad enough for one of the above verdicts, but something we want to keep track of in cases of rotten behavior. Hate without incitement",
            "Harassment that does meet the harm bar.",
            "Obnoxious, Lousy behavior, not against TOS.",
            "Content targeted at a person who considered",
            "Not safe for kids.",
            "Engagements that are not organic.",
            "Promotion of counterfeit product claims.",
            "Circumvention of Technological measures"
          ],
          "type": "string"
        },
        "subtype": {
          "description": "Optional client specific subtype of abuse that is too specific to belong in the above enumeration. For example, some client may want to differentiate nudity from graphic sex, but both are PORNOGRAPHY.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamAgeRestriction": {
      "id": "AbuseiamAgeRestriction",
      "properties": {
        "ageYears": {
          "description": "This restriction applies if the user is between [min_age_years, age_years) years old.",
          "format": "int32",
          "type": "integer"
        },
        "minAgeYears": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AbuseiamAndRestriction": {
      "id": "AbuseiamAndRestriction",
      "properties": {
        "child": {
          "description": "This restriction applies if all of the children apply.",
          "items": {
            "$ref": "AbuseiamUserRestriction"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AbuseiamClient": {
      "description": "A client is be a Google product, or subproduct that provides content for AbuseIAm to classify.",
      "id": "AbuseiamClient",
      "properties": {
        "id": {
          "enum": [
            "ABUSE_TEAM",
            "SQE",
            "SEARCH",
            "POSTINI",
            "BLOGGER",
            "ORKUT",
            "ZIPIT",
            "GROUPS",
            "RIPTIDE",
            "GADGETS",
            "SITES",
            "READER",
            "DOCS",
            "U2U",
            "YOUTUBE",
            "POPTART",
            "COSMO",
            "PROFILES",
            "KNOL",
            "SKETCHUP",
            "CALENDAR",
            "HOTSHOTS",
            "TRIKI",
            "MAPS",
            "COMMUNITY_TRANSLATION",
            "WRITELY",
            "SPREADSHEET_FORM",
            "SPREADSHEET",
            "EXPLORER",
            "FINANCE",
            "GMR",
            "LAIBA",
            "CONFUCIUS",
            "PRESENTATION",
            "CHROME_EXTENSION",
            "WENDA",
            "TACOTOWN",
            "KRAKEN",
            "URL_SHORTENER",
            "WAREHOUSE",
            "ANDROID_VM",
            "CODESITE",
            "FRIEND_CONNECT",
            "GEOWIKI",
            "GOOGLE_LABS",
            "HELP_CENTER",
            "SEARCHWIKI",
            "SIDEWIKI",
            "TOPIC_SEARCH",
            "VIDEO",
            "GOOGLEBASE",
            "FEEDBURNER",
            "PUBLISHER_QUALITY",
            "NOTEBOOK",
            "SMARTLISTS",
            "ENTERPRISE_MARKETPLACE",
            "BOOKS",
            "IGOOGLE",
            "USENET",
            "TRANSLATE",
            "PERFECT_STREAM",
            "PHOTOS",
            "AFMA",
            "LIKES",
            "QUESTIONS",
            "SKYJAM",
            "MIC",
            "ANDROID_MARKET",
            "CHROME_WEBSTORE",
            "FINSKY",
            "BARNOWL",
            "STREET_VIEW",
            "ADCONNECT",
            "ES",
            "HELLO",
            "TRADER",
            "SCHEMER",
            "ANDROID",
            "MINE",
            "GAIA",
            "GOGGLES",
            "SIGNUP",
            "BABEL",
            "CHECKOUT",
            "TASTEMAKER",
            "STRATUS",
            "DRAGONFLY",
            "APIARY",
            "CAROUSEL",
            "FOUNTAIN",
            "GEOPIX",
            "VILLAGE",
            "KIX",
            "AMARNA",
            "GINKGO",
            "TEE",
            "SHOPPING",
            "SLAM",
            "APPENGINE",
            "GUNS",
            "CULTURAL",
            "COMPUTEENGINE",
            "BIGSTORE",
            "COPACABANA",
            "ANALYTICS",
            "GRANDCENTRAL",
            "GMAIL",
            "GLASS",
            "CRISIS_RESPONSE",
            "GJOBS",
            "HAZMAT",
            "SAFE_BROWSING",
            "CLOUD",
            "PANTHEON",
            "CLUSTER",
            "KEEP",
            "APP_HISTORY",
            "COMMERCIAL_ENTITY",
            "ARES_DATA_PROVIDER",
            "ARES_DATA_WRITER",
            "BIZBUILDER",
            "RITZ",
            "POLLS",
            "APPINVITE"
          ],
          "enumDescriptions": [
            "",
            "Search Quality Eval",
            "Web Search.",
            "",
            "",
            "",
            "",
            "",
            "",
            "OpenSocial",
            "",
            "",
            "Obsolete. Use WRITELY.",
            "Obsolete. Merged into Google Groups.",
            "",
            "Obsolete.",
            "",
            "",
            "Obsolete.",
            "",
            "",
            "",
            "Obsolete.",
            "",
            "",
            "Being superseded by KIX soon.",
            "Freebird forms only.",
            "Trix, and Bluebird forms.",
            "Blobs stored by explorer.",
            "Obsolete.",
            "",
            "Obsolete. Product has been shut down.",
            "Obsolete. Product has been shut down.",
            "",
            "Obsolete. It will be replaced by CHROME_WEBSTORE",
            "Obsolete. It has been merged into Confucius.",
            "Obsolete. Has been replaced with ES.",
            "Obsolete.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Obsolete.",
            "Obsolete.",
            "Obsolete.",
            "Obsolete.",
            "",
            "",
            "",
            "",
            "Obsolete.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Obsolete.",
            "",
            "Obsolete.",
            "",
            "",
            "",
            "Obsolete.",
            "",
            "",
            "",
            "",
            "",
            "Obsolete.",
            "Emerald Sea.",
            "Obsolete. Project has been terminated.",
            "",
            "",
            "Android and its clients/subservice.",
            "Obsolete.",
            "",
            "Obsolete.",
            "",
            "",
            "",
            "",
            "Stratus uses the corpus name as subservice.",
            "Obsolete.",
            "API integration with DevConsole.",
            "ES FrameService traffic (initialy intended for Diary).",
            "ES content from fountain widget.",
            "Photo content in geo (e.g. Google+ Local).",
            "UGC for knowledge graph",
            "Replaces WRITELY.",
            "Image search indexing pipeline team.",
            "Social shopping.",
            "Obsolete. Helpouts has been shut down.",
            "Product reviews.",
            "SLAM server",
            "App Engine",
            "Google Unified Notifications Service",
            "Cultural Institute products.",
            "Compute Engine.",
            "Big Store.",
            "Service that keeps a COPPA content list.",
            "Google Analytics and its subservices.",
            "Google Voice.",
            "Gmail.",
            "Project Glass.",
            "OBSOLETE - Google.org Crisis Response UGC.",
            "Garage, or G+ Jobs.",
            "Hazmat, or Child Safety Server.",
            "Safe browsing team (Mawler, Ictis, anti-phishing).",
            "Common client for Cloud services.",
            "Cloud main front end console.",
            "Common client for Cluff pipelines.",
            "Google Keep client.",
            "App History.",
            "For expanding commercial entity graph: go/daisy-design",
            "Access data provided by Ares. go/project-ares for more details.",
            "",
            "Local businesses.",
            "Google Sheets (this and SPREADSHEET_FORM replace SPREADSHEET)",
            "Google Polls client.",
            "Social Platform AppInvite (go/appinvite)."
          ],
          "type": "string"
        },
        "subservice": {
          "description": "The name of the subservice within a client. This subservice can be used to affect the flow of decision script, or selection of backend classifiers. For example, StreetView may want to specify a panel is insufficiently blurred (maybe there is a lisense plate or public sex, etc), which requires manual review then the subservice might be \"blurring\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamClusterEvaluationContext": {
      "description": "Extra information regarding evaluations received through cluster review.",
      "id": "AbuseiamClusterEvaluationContext",
      "properties": {
        "clusterFamily": {
          "description": "The family of the cluster where the case received the evaluation.",
          "type": "string"
        },
        "clusterRowkey": {
          "description": "The AbuseIAm rowkey of the cluster where the case received an evaluation.",
          "type": "string"
        },
        "gaiaIdToEscalate": {
          "description": "The gaia id of a mail box that ops can send inquiries to for appeals. Used only by user clusters to fill a required gatekeeper param. See gaia_disableserver.DisableSpec.escalate_to field.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamConstantRestriction": {
      "id": "AbuseiamConstantRestriction",
      "properties": {
        "type": {
          "description": "A constant of type TRUE always applies, and of type FALSE never applies.",
          "enum": [
            "ALWAYS_TRUE",
            "ALWAYS_FALSE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamContentRestriction": {
      "description": "Pair of Verdicts used for ProjectR age/geo gating. See http://go/projectr for more information.",
      "id": "AbuseiamContentRestriction",
      "properties": {
        "adminVerdict": {
          "description": "Takedowns specified by admins via AbuseIAm",
          "items": {
            "$ref": "AbuseiamVerdict"
          },
          "type": "array"
        },
        "userVerdict": {
          "description": "User-specified takedowns",
          "items": {
            "$ref": "AbuseiamVerdict"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AbuseiamEvaluation": {
      "description": "Backends return Evaluations to AbuseIAm. One of the things Evaluations are used for is to explain Verdicts.",
      "id": "AbuseiamEvaluation",
      "properties": {
        "abuseType": {
          "$ref": "AbuseiamAbuseType"
        },
        "backend": {
          "description": "Who creates this Evaluation. This field is required.",
          "enum": [
            "UNKNOWN",
            "ADMIN",
            "GRADS",
            "OCELOT",
            "SPAMIAM",
            "MANUAL_REVIEW",
            "MAWLER",
            "SNEAKY_JS",
            "DOWNLOADER",
            "PORN_CLASSIFIER",
            "GIBBERISH_DETECTOR",
            "ANTIVIRUS",
            "GAUSS",
            "REALUSERS",
            "USERRANK",
            "GRADS_AGGRESSIVE",
            "BULK_ACTION",
            "BADWORD",
            "GAIA",
            "LINKS_COUNT",
            "RE_RULE",
            "SLAM",
            "AUTHORRANK",
            "USERRANK_BADNESS",
            "GAUSS_EXPLICIT",
            "GAUSS_IMPLICIT",
            "RETRIEVE_MESSAGE",
            "SPAM_REPORT",
            "SQUEAL",
            "BLOGGER_LOGS",
            "TRUSTRANK_PHISHING",
            "CATFOOD",
            "IMAGE_PORN_CLASSIFIER",
            "OCELOT_IMPORT",
            "FIFE_IMAGE_FETCHER",
            "FAST_RISING_FEATURES",
            "BOTGUARD",
            "NAME_CHECKER",
            "CHEETAH",
            "GALLIFREY",
            "OCELOT_DELETE",
            "RULE",
            "FOCUS",
            "VIDEO_THUMBNAILER",
            "PATTERNLIST",
            "METADATA",
            "METADATA_IMPORT",
            "NAME_DETECTOR",
            "SHINGLE_COMPUTER",
            "WIGGUM",
            "BINARY_EXPLORATION",
            "REVNET",
            "FURS",
            "YOUTUBE_CLASSIFIER",
            "IDV",
            "CLUSTERCAT",
            "CHEETAH_IMPORT",
            "CHEETAH_READ",
            "BOTGUARD_DECODE",
            "QUOTASERVER",
            "YOUTUBE",
            "BLOGGER",
            "SOCIAL_GRAPH",
            "WEB_SIGNALS",
            "TRAWLER",
            "NOTIFICATIONS",
            "CASES",
            "BADURLS",
            "LINK_IMPORT",
            "SHINGLE_DEDUPER",
            "DEV_CONSOLE",
            "METADATA_QUERY",
            "PLUS_PAGE",
            "YOUTUBE_VIDEO_INFO",
            "GOOGLE_ADMIN",
            "RESPAY",
            "COOKBOOK",
            "EASY_LEARN",
            "QUALITY_SAMPLER",
            "BLOBSTORE",
            "OWNER",
            "POLICY",
            "EXTERNAL",
            "ABUSEIAM_FEEDBACK",
            "BIGSTORE",
            "PHOTO_SERVICE",
            "GRADS_RELATED",
            "REAPER",
            "GATEKEEPER",
            "VIPER",
            "MSISDN",
            "VIDEO_REVIEW",
            "CSAI_MATCH",
            "REDQUEEN",
            "STREAMER_INDEXER",
            "DREMEL",
            "VISUAL_SEARCH_SERVICE_PORN",
            "VISUAL_SEARCH_SERVICE_OCR",
            "IMPLICIT_SOCIAL_GRAPH",
            "EASY_LEARN_BLEND",
            "USER_AURA",
            "GOOPS",
            "ANDROID_CHECKIN",
            "ARES_DATA_PROVIDER",
            "DROIDGUARD_VERDICT",
            "ARES_DATA_WRITER",
            "ADAPTIVE_QUOTA",
            "AIAPLX",
            "INFAME",
            "ARES",
            "VISUAL_SEARCH_SERVICE_ICA",
            "VISUAL_SEARCH_SERVICE_BUTTON_DETECTION",
            "VISUAL_SEARCH_SERVICE_LOGO_DETECTION"
          ],
          "enumDescriptions": [
            "",
            "Eval directly from the AbuseIAm server.",
            "",
            "",
            "",
            "",
            "",
            "Deprecated and code removed.",
            "",
            "Text-based porn classifier.",
            "Language model-based gibberish detector.",
            "",
            "Gauss positive score.",
            "",
            "Gmail userrank goodness score.",
            "",
            "Intended for manually executed bulk actions.",
            "Deprecated. Please use PATTERNLIST instead.",
            "Gaia account maninuplation (disable, enable).",
            "",
            "The most common type of rule.",
            "",
            "Authorrank.percentile -> score.",
            "Gmail userrank badness score.",
            "",
            "",
            "For message retrieving only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Special rule in decision scripts.",
            "",
            "Deprecated. Do not use. Use CHEETAH_IMPORT",
            "",
            "",
            "For miscellaneous rules in decision scripts",
            "that are not separate backends.",
            "",
            "Check texts against a list of regex patterns.",
            "Reads data from metadata store (aka BadWolf).",
            "Metadata import adapter.",
            "Name detector adapter.",
            "Computes shingles for text messages.",
            "Does search-by-image using Wiggum Server.",
            "Slow backend. See http://go/bineval.",
            "Review graph analysis, stored in metadata.",
            "",
            "Classifies messages using the youtube models.",
            "Reads UserProfile from the IDV server.",
            "",
            "Adapter that writes to Cheetah.",
            "Adapter that reads from Cheetah.",
            "Adapter that decodes BotGuard response.",
            "Quota server adapter.",
            "Video classification from youtube.",
            "",
            "Evaluation from SocialGraph adapter.",
            "",
            "",
            "Adapter that sends notifications to users.",
            "Adapter that interacts with Cases.",
            "",
            "Adatper that imports link signals.",
            "Badwolf based shingle deduper.",
            "Dev Console info for cloud projects.",
            "Rich query facility for BadWolf.",
            "Adapter for querying pluspage info.",
            "Queries video info from YT.",
            "Google Admin for manual operations.",
            "Clould billing information and termination.",
            "Matched to some Cookbook recipes.",
            "Machine learning models evaluations.",
            "Decides if a message is sampled for quality.",
            "Blobstore adapter.",
            "For evaluation initiated by content owner.",
            "For evaluation generated according to policy.",
            "For evaluations generated by services outside",
            "AbuseIAm. Adapter that sends feedbacks between clients.",
            "Adapters that access Bigstore files.",
            "Adapter that queries Photo Service.",
            "Fetch grads related accounts.",
            "Site reputation service by safe browsing team",
            "Gaia disableserver.",
            "Adapters that run a Viper graph.",
            "Phone metadata adapter.",
            "The YouTube Video review service.",
            "Video matching for CSAI.",
            "RedQueen reputation adapter.",
            "Streamer Indexer Service to get locations",
            "of a video for various formats. Dremel service.",
            "Visual search service for porn scores.",
            "Visual search service for OCR.",
            "implicit social graph for affinity scores",
            "Blend Service for Easy Learn (ML models)",
            "User aura service.",
            "Goops adapter used for publishing messages.",
            "Android checkin data including device info",
            "Adapter that fetches data from Ares.",
            "Retrieves droidguard verdict for the device.",
            "Adapter that writes data into Ares.",
            "Adapter to talk to Adaptive Quota system.",
            "For evaluations derived from aia-plx queries.",
            "For evaluations derived from infame.",
            "For evaluations generated by Ares.",
            "Visual search service for ICA.",
            "",
            "Visual search service for"
          ],
          "type": "string"
        },
        "clusterEvaluationContext": {
          "$ref": "AbuseiamClusterEvaluationContext",
          "description": "Extra information regarding the cluster review context where the case received the evaluation."
        },
        "comment": {
          "description": "Backends can choose to put some debug info in addition to abuse_type, score, and status.",
          "type": "string"
        },
        "feature": {
          "description": "A set of repeated features to allow adapters to return semi structured data. Please, prefer using feature instead of the old misc_data field since it supports richer and more structured data to be passed back.",
          "items": {
            "$ref": "AbuseiamFeature"
          },
          "type": "array"
        },
        "manualReviewInfo": {
          "$ref": "AbuseiamManualReviewEvaluationInfo",
          "description": "Information about the manual review, for manual review evaluations. Do NOT expect this field to be set if `backend != MANUAL_REVIEW`."
        },
        "miscData": {
          "description": "This field is used to store miscellaneous information that Backend might provide. If you find youself here considering to use this field, please prefer using the repeated feature field below instead. It supports a richer structure for passing complex data back from the backend.",
          "items": {
            "$ref": "AbuseiamNameValuePair"
          },
          "type": "array"
        },
        "processTimeMillisecs": {
          "description": "Time in milliseconds when the Backend processed this Evaluation.",
          "format": "int64",
          "type": "string"
        },
        "processedMicros": {
          "description": "When the evaluation was processed by the decision script.",
          "format": "int64",
          "type": "string"
        },
        "region": {
          "description": "The list of regions where the evaluation applies.",
          "items": {
            "$ref": "AbuseiamRegion"
          },
          "type": "array"
        },
        "score": {
          "format": "double",
          "type": "number"
        },
        "status": {
          "enum": [
            "OK",
            "ERROR"
          ],
          "enumDescriptions": [
            "",
            "The Backend failed to process the target."
          ],
          "type": "string"
        },
        "target": {
          "$ref": "AbuseiamTarget"
        },
        "timestampMicros": {
          "description": "When the Evaluation was generated.",
          "format": "int64",
          "type": "string"
        },
        "userRestriction": {
          "$ref": "AbuseiamUserRestriction",
          "description": "A boolean expression tree used to define the restrictions where the verdict applies. Please use java/com/google/ccc/abuse/abuseiam/client/TakedownManager.java to evaluate this proto."
        },
        "version": {
          "description": "Version of Backend. For rules, this string is the only way to differentiate between them.",
          "type": "string"
        },
        "videoReviewData": {
          "$ref": "AbuseiamVideoReviewData",
          "description": "Information about the video review, for video review evaluations. Do NOT expect this field to be set if `backend != VIDEO_REVIEW`."
        }
      },
      "type": "object"
    },
    "AbuseiamFeature": {
      "id": "AbuseiamFeature",
      "properties": {
        "booleanValue": {
          "description": "Exactly one of the following should be filled in.",
          "type": "boolean"
        },
        "doubleValue": {
          "format": "double",
          "type": "number"
        },
        "featureCount": {
          "description": "Useful for applications that need to know how many times a specific feature occurs",
          "format": "int64",
          "type": "string"
        },
        "int64Value": {
          "description": "Useful for timestamps, or for numerical features where it is helpful for decision scripts to have exact values.",
          "format": "int64",
          "type": "string"
        },
        "integerValue": {
          "description": "integer value field is deprecated and shall only be used for passing the following features hardcoded in spamiam::SpamIAmMessage: spamiam::OrkutSenderId spamiam::OrkutPostnumReports spamiam::BloggerNumComments spamiam::BloggerNumCommentsByOthers Another hard-coded spamiam feature is spamiam::BlogName, which can be specified via string value.",
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "stringValue": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "timestampSequence": {
          "description": "This field should only be used to store a sequence of timestamps associated with the feature.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AbuseiamGeoRestriction": {
      "description": "A node representing a table of regions and restrictions that apply to those regions. This table understands region inclusion and knows to apply the most specific rule, for example, a rule for France would override a rule for the EU for a user in France.",
      "id": "AbuseiamGeoRestriction",
      "properties": {
        "locale": {
          "items": {
            "$ref": "AbuseiamGeoRestrictionLocale"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AbuseiamGeoRestrictionLocale": {
      "id": "AbuseiamGeoRestrictionLocale",
      "properties": {
        "location": {
          "description": "The location where the restriction applies. Defaults to the \"The world\". See go/iii.",
          "type": "string"
        },
        "restriction": {
          "$ref": "AbuseiamUserRestriction",
          "description": "The UserRestriction that applies to this location. If not specified evaluates to true."
        }
      },
      "type": "object"
    },
    "AbuseiamHash": {
      "description": "Information about various hashes that can be computed on a message ex: simhash, attachment hash, etc",
      "id": "AbuseiamHash",
      "properties": {
        "hash": {
          "description": "64 bit hash in the hex form.",
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamManualReviewEvaluationInfo": {
      "description": "Relevant information for manual review evaluations.",
      "id": "AbuseiamManualReviewEvaluationInfo",
      "properties": {
        "reviewer": {
          "$ref": "AbuseiamManualReviewerInfo",
          "description": "Reviewer performing the manual review."
        },
        "tool": {
          "$ref": "AbuseiamManualReviewTool",
          "description": "Tool used to perform the manual review."
        }
      },
      "type": "object"
    },
    "AbuseiamManualReviewTool": {
      "id": "AbuseiamManualReviewTool",
      "properties": {
        "experimentId": {
          "type": "string"
        },
        "name": {
          "enum": [
            "UNKNOWN",
            "NUFF",
            "GOOGLE_ADMIN",
            "YOUTUBE"
          ],
          "enumDescriptions": [
            "",
            "content-review.corp.google.com",
            "google-admin.corp.google.com",
            "admin.youtube.com"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamManualReviewerInfo": {
      "id": "AbuseiamManualReviewerInfo",
      "properties": {
        "credential": {
          "items": {
            "enum": [
              "UNKNOWN",
              "LEGAL",
              "POLICY",
              "ANALYST",
              "LEGAL_PANEL"
            ],
            "enumDescriptions": [
              "",
              "Member of mdb/legal-removals-contentreview-abuseiam.",
              "Member of mdb/user-policy.",
              "Member of mdb/abuse-analysts.",
              "A group of two or more members of mdb/legal-removals-contentreview-abuseiam who review content collectively. This credential will be set manually in decision scripts when reviews come from the appropriate queue and will not be automatically set by the manual review server."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "username": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamNameValuePair": {
      "id": "AbuseiamNameValuePair",
      "properties": {
        "name": {
          "type": "string"
        },
        "nonUtf8Value": {
          "format": "byte",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamNotRestriction": {
      "id": "AbuseiamNotRestriction",
      "properties": {
        "child": {
          "description": "This restriction applies if the child does not apply. Only one is allowed. \"repeated\" is used to avoid breaking Sawzall (See b/6758277).",
          "items": {
            "$ref": "AbuseiamUserRestriction"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AbuseiamOrRestriction": {
      "id": "AbuseiamOrRestriction",
      "properties": {
        "child": {
          "description": "This restriction applies if any of the children apply.",
          "items": {
            "$ref": "AbuseiamUserRestriction"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AbuseiamRegion": {
      "id": "AbuseiamRegion",
      "properties": {
        "region": {
          "description": "This is a CLDR Region Code: http://wiki/Main/IIIHowTo#using_region It is used to denote the region affected by a verdict.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamSpecialRestriction": {
      "description": "A SpecialRestriction is a standardized UserRestriction which lives in a table maintained via CDD.",
      "id": "AbuseiamSpecialRestriction",
      "properties": {
        "type": {
          "enum": [
            "ALCOHOL"
          ],
          "enumDescriptions": [
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamTarget": {
      "id": "AbuseiamTarget",
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "enum": [
            "MESSAGE_ID",
            "CHUNK_ID",
            "IMAGE_URL",
            "URL",
            "USER_ID",
            "IP",
            "SITE",
            "SITEDOMAIN",
            "ENTITY_ID",
            "PERFECT_STREAM_ID",
            "ACTIVITY_ID",
            "COMMENT_ID",
            "AD_ID",
            "TEXT",
            "TEXT_FRAGMENT",
            "CLUSTER_MEMBER_ID",
            "EMBED_ID",
            "ANDROID_ID"
          ],
          "enumDescriptions": [
            "verdict is issued on the whole message",
            "verdict is issued on the specified chunk",
            "target id is an image url inside chunk content",
            "target id is a non-image url inside chunk content",
            "abuse happens at gaia user level",
            "target id is an IP address",
            "target id is a sitechunk",
            "target id is a domain",
            "The 4 entries below are *only* for the +1 pipeline. Please do not use elsewhere. entity id is a generic Zipit ID",
            "Obsolete.",
            "activity id in ASBE for ES",
            "comment id for ASBE comments in ES",
            "ad id for ES",
            "text target. Used in Ocelot name reputation.",
            "text fragment. Ocelot for name reputation.",
            "Targets for Cluster reviews. See http://go/cluff-design-doc. Message ID for the targetted cluster member",
            "embed_id for ASBE embeds in ES",
            "android_id of the device"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamUserNotification": {
      "description": "A structure used to configure a notification to a user.",
      "id": "AbuseiamUserNotification",
      "properties": {
        "channel": {
          "enum": [
            "UNKNOWN",
            "BUILT_IN",
            "EMAIL",
            "GAIA"
          ],
          "enumDescriptions": [
            "",
            "Use product built-in notification, such as pop-ups.",
            "Email user, e.g., through ANS(http://sites/cat/ans).",
            "Show notifications at Gaia level, such as during login."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamUserRestriction": {
      "description": "Describes restrictions on where the verdict applies. Please use {@code TakedownManager} to evaluate this proto.",
      "id": "AbuseiamUserRestriction",
      "properties": {
        "ageRestriction": {
          "$ref": "AbuseiamAgeRestriction"
        },
        "andRestriction": {
          "$ref": "AbuseiamAndRestriction",
          "description": "Operators"
        },
        "constantRestriction": {
          "$ref": "AbuseiamConstantRestriction",
          "description": "Constant"
        },
        "geoRestriction": {
          "$ref": "AbuseiamGeoRestriction",
          "description": "Leaf Nodes"
        },
        "notRestriction": {
          "$ref": "AbuseiamNotRestriction"
        },
        "orRestriction": {
          "$ref": "AbuseiamOrRestriction"
        },
        "specialRestriction": {
          "$ref": "AbuseiamSpecialRestriction"
        }
      },
      "type": "object"
    },
    "AbuseiamVerdict": {
      "description": "Verdict against a target. AbuseIAm generates a verdict based on evaluations. AbuseIAm can send such verdicts to clients for enforcement.",
      "id": "AbuseiamVerdict",
      "properties": {
        "client": {
          "$ref": "AbuseiamClient",
          "description": "Target client of the verdict. It can be used to differentiate verdicts from multiple clients when such verdicts are processed in one common place."
        },
        "comment": {
          "description": "Additional info regarding the verdict.",
          "type": "string"
        },
        "decision": {
          "enum": [
            "ERROR",
            "NO_ACTION",
            "GOOD",
            "DELETE",
            "INTERSTITIAL",
            "HIDE",
            "BLACK_LIST",
            "MARK_AS_SPAM",
            "REWRITE_LINKS",
            "HIDE_AND_NOTIFY",
            "FREEZE_SERVICE",
            "SUSPEND_SERVICE",
            "SMS_DISABLE",
            "NOTIFY"
          ],
          "enumDescriptions": [
            "",
            "The content is okay and no action needs to be taken.",
            "To mark content/user as good.",
            "",
            "Give a user an interstial message. E.g., via a pop-up or an email.",
            "",
            "The product should black list this content itself.",
            "",
            "There's something bad about the links, so we recommend that the links be 'scrubbed' to go through the GWS redirector to protect against malware and phishing: http://wiki.corp.google.com/twiki/bin/view/Main/SafeRedirector",
            "HIDE_AND_NOTIFY is used when the target needs to be hidden, but the UI needs to show an appropriate error message.",
            "Freeze a user on service level. E.g., a frozen user can not generate new content.",
            "Suspend a user on service level.",
            "SMS-disable a user on Gaia level.",
            "Notify a user (e.g., warn a user)."
          ],
          "type": "string"
        },
        "durationMins": {
          "description": "Time duration (in minutes) of the verdict.",
          "format": "int32",
          "type": "integer"
        },
        "evaluation": {
          "description": "Evaluations relevant to this verdict. Every Verdict should contain at least one Evaluation.",
          "items": {
            "$ref": "AbuseiamEvaluation"
          },
          "type": "array"
        },
        "hashes": {
          "description": "Details of all the hashes that can be computed on a message, such as simhash and attachment hash",
          "items": {
            "$ref": "AbuseiamHash"
          },
          "type": "array"
        },
        "isLegalIssued": {
          "description": "Is this verdict issued by legal?",
          "type": "boolean"
        },
        "miscScores": {
          "description": "This field is used to pass relevant / necessary scores to our clients. For eg: ASBE propogates these scores to moonshine.",
          "items": {
            "$ref": "AbuseiamNameValuePair"
          },
          "type": "array"
        },
        "reasonCode": {
          "description": "A short description of the reason why the verdict decision is made.",
          "type": "string"
        },
        "region": {
          "description": "The regions in which this verdict should be enforced. Absence of this field indicates that the verdict is applicable everywhere.",
          "items": {
            "$ref": "AbuseiamRegion"
          },
          "type": "array"
        },
        "restriction": {
          "description": "Restrictions on where this verdict applies. If any restriction is met, the verdict is applied there. If no restrictions are present, the verdict is considered global.",
          "items": {
            "$ref": "AbuseiamVerdictRestriction"
          },
          "type": "array"
        },
        "strikeCategory": {
          "description": "Category of the strike if this is a strike verdict.",
          "enum": [
            "ES",
            "CP",
            "COPYRIGHT",
            "BLOGGER",
            "GRANDCENTRAL",
            "DRIVE",
            "CLOUD",
            "SITES"
          ],
          "enumDescriptions": [
            "General Emerald Sea.",
            "Child porn.",
            "Copyright violations.",
            "Blogger.",
            "Google Voice.",
            "Drive.",
            "Cloud platform.",
            "Google Sites."
          ],
          "type": "string"
        },
        "target": {
          "$ref": "AbuseiamTarget"
        },
        "targetTimestampMicros": {
          "description": "The timestamp of the target. E.g., the time when the target was updated.",
          "format": "int64",
          "type": "string"
        },
        "timestampMicros": {
          "description": "When the verdict is generated",
          "format": "int64",
          "type": "string"
        },
        "userNotification": {
          "description": "Extra notification(s) to be delivered to target user or message owner about the verdict.",
          "items": {
            "$ref": "AbuseiamUserNotification"
          },
          "type": "array"
        },
        "version": {
          "description": "version of decision script",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamVerdictRestriction": {
      "description": "Describes restrictions on where the verdict applies.",
      "id": "AbuseiamVerdictRestriction",
      "properties": {
        "context": {
          "description": "For a restriction to apply, all contexts must be satisfied. For example, if context[0] is COUNTRY/'GERMANY' and context[1] is DESTINATION_STREAM/'gplus:SQUARE:knitting_discussion', then the verdict applies only when the 'knitting discussion' square is viewed from inside Germany. Please note that this is present for legacy reasons and users of this field would be migrated to use the user_restriction field defined below.",
          "items": {
            "$ref": "AbuseiamVerdictRestrictionContext"
          },
          "type": "array"
        },
        "userRestriction": {
          "$ref": "AbuseiamUserRestriction",
          "description": "A boolean expression tree used to define the restrictions where the verdict applies. Please use java/com/google/ccc/abuse/abuseiam/client/TakedownManager.java to evaluate this proto."
        }
      },
      "type": "object"
    },
    "AbuseiamVerdictRestrictionContext": {
      "description": "Describes a dimension of a context where a verdict applies.",
      "id": "AbuseiamVerdictRestrictionContext",
      "properties": {
        "id": {
          "description": "String identifying the context.",
          "type": "string"
        },
        "type": {
          "enum": [
            "UNKNOWN",
            "DESTINATION_STREAM"
          ],
          "enumDescriptions": [
            "Dummy default value. Avoid using it explicitly as a Type.",
            "DESTINATION_STREAM is used when a verdict only applies to content in a particular indexed stream/channel. Examples include Squares, Blogs, and Youtube videos."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamVideoReviewData": {
      "description": "Information about a video review.",
      "id": "AbuseiamVideoReviewData",
      "properties": {
        "referenceFragment": {
          "description": "Serialized repeated youtube_admin.adminmatch.csai.ReferenceFragment",
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "reviewer": {
          "$ref": "AbuseiamVideoReviewer",
          "description": "Information about the video reviewer."
        },
        "videoId": {
          "description": "The Viper id of the video.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AbuseiamVideoReviewer": {
      "description": "Information about video reviewers.",
      "id": "AbuseiamVideoReviewer",
      "properties": {
        "type": {
          "enum": [
            "UNKNOWN",
            "CRT",
            "TIERED_CRT",
            "POLICY",
            "ANALYSTS",
            "LEGAL",
            "LEGAL_CSAI",
            "LEGAL_REMOVALS",
            "HIJACKING_TEAM",
            "CRT_CSAI",
            "LEGAL_CSAI_LOW_PRIORITY"
          ],
          "enumDescriptions": [
            "Default value, do not use explicitly.",
            "Content review team. This team does general reviews.",
            "Special high quality CRT which do more high confidence reviews.",
            "Policy team.",
            "Analysts from the abuse team.",
            "The general legal team.",
            "Queue for LEGAL_CSAI team for high priority items.",
            "The legal team which handles content removals (e.g. copyright).",
            "Team which deals with hijacking reviews.",
            "CRT Team in Dublin, which handles CSAI-related reviews.",
            "Queue for lower priority suspected CSAI items (e.g. content from disabled users)"
          ],
          "type": "string"
        },
        "username": {
          "description": "The username of the person doing the video review.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AdsShoppingReportingOffersSerializedSoriId": {
      "description": "The serialized form of a SORI id. NOTE that this proto is stored in V4/O4 index and that new fields should not be added without getting an agreement from the serving team as well.",
      "id": "AdsShoppingReportingOffersSerializedSoriId",
      "properties": {
        "highId": {
          "format": "uint64",
          "type": "string"
        },
        "lowId1": {
          "format": "uint64",
          "type": "string"
        },
        "lowId2": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "Anchors": {
      "id": "Anchors",
      "properties": {
        "anchor": {
          "items": {
            "$ref": "AnchorsAnchor"
          },
          "type": "array"
        },
        "homepageAnchorsDropped": {
          "description": "The total # of local homepage anchors dropped in AnchorAccumulator.",
          "format": "int64",
          "type": "string"
        },
        "indexTier": {
          "description": "The index tier from which the anchors were extracted. Note that this is only valid in the anchor record written by linkextractor. The value can be one of the enum values defined in segindexer/types.h.",
          "format": "int32",
          "type": "integer"
        },
        "localAnchorsDropped": {
          "description": "The total # of local non-homepage anchors dropped in AnchorAccumulator.",
          "format": "int64",
          "type": "string"
        },
        "nonlocalAnchorsDropped": {
          "description": "The total # of non-local anchors dropped in AnchorAccumulator.",
          "format": "int64",
          "type": "string"
        },
        "redundantAnchorsDropped": {
          "description": "The *_anchors_dropped fields below are not populated by Alexandria, which uses cdoc.anchor_stats instead. The total # of redundant anchors dropped in linkextractor.",
          "format": "int64",
          "type": "string"
        },
        "redundantanchorinfo": {
          "items": {
            "$ref": "AnchorsRedundantAnchorInfo"
          },
          "type": "array"
        },
        "supplementalAnchorsDropped": {
          "description": "The total # of supplemental anchors dropped in AnchorAccumulator. ## DEPRECATED.",
          "format": "int64",
          "type": "string"
        },
        "targetDocid": {
          "description": "may be implicit",
          "format": "uint64",
          "type": "string"
        },
        "targetSite": {
          "description": "HOST_LEVEL site chunking.",
          "type": "string"
        },
        "targetUrl": {
          "description": "This is produced during link extraction but not written out in the linklogs in order to save space.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AnchorsAnchor": {
      "id": "AnchorsAnchor",
      "properties": {
        "bucket": {
          "format": "int32",
          "type": "integer"
        },
        "catfishTags": {
          "description": "CATfish tags attached to a link. These are similar to link tags, except the values are created on the fly within Cookbook. See: http://sites/cookbook/exporting/indexing",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "compressedImageUrls": {
          "description": "If the anchor contained images, these image urls are stored here in compressed form.",
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "compressedOriginalTargetUrl": {
          "description": "The anchor's original target url, compressed. Available only in Alexandria docjoins when the anchor is forwarded.",
          "format": "byte",
          "type": "string"
        },
        "context": {
          "format": "int32",
          "type": "integer"
        },
        "context2": {
          "description": "This is a hash of terms near the anchor. (This is a second-generation hash replacing the value stored in the 'context' field.)",
          "format": "int32",
          "type": "integer"
        },
        "creationDate": {
          "description": "used for history - the first and last time we have seen this anchor. creation_date also used for Freshdocs Twitter indexing, a retweet is an anchor of the original tweet. This field records the time when a retweet is created.",
          "format": "int32",
          "type": "integer"
        },
        "deleted": {
          "type": "boolean"
        },
        "deletionDate": {
          "format": "int32",
          "type": "integer"
        },
        "demotionreason": {
          "description": "DEPRECATED",
          "format": "int32",
          "type": "integer"
        },
        "encodedNewsAnchorData": {
          "description": "Encoded data containing information about newsiness of anchor. Populated only if anchor is classified as coming from a newsy, high quality site. Encoded data for anchor sources are being stored in googledata/quality/freshness/news_anchors/encoded_news_anchors_data.txt Scores are being computed with quality/freshness/news_anchors/ routines.",
          "format": "uint32",
          "type": "integer"
        },
        "experimental": {
          "description": "If true, the anchor is for experimental purposes and should not be used in serving.",
          "type": "boolean"
        },
        "expired": {
          "description": "true iff exp domain",
          "type": "boolean"
        },
        "firstseenDate": {
          "description": "# days past Dec 31, 1994, 23:00:00 UTC (Unix time @788914800) that this link was first seen. Should never occupy more than 15 bits. NOTE: this is NOT the same as creation_date; firstseen_date is filled during link extraction",
          "format": "int32",
          "type": "integer"
        },
        "firstseenNearCreation": {
          "description": "true if we think 'firstseen_date' is an accurate estimate of when the link was actually added to the source page. false if it may have existed for some time before we saw it.",
          "type": "boolean"
        },
        "fontsize": {
          "format": "int32",
          "type": "integer"
        },
        "forwardingTypes": {
          "description": "How the anchor is forwarded to the canonical, available only for forwarded anchors (i.e., the field is set). The forwarding types are defined in URLForwardingUtil (segindexer/segment-indexer-util.h). Always use URLForwardingUtil to access this field and use URLForwardingUtil::GetAnchorForwardingReason to get the explanation how the anchor is forwarded to the canonical. NOTE: Use with caution as it is only set for docjoins generated using the urlmap from repository/updater.",
          "format": "uint32",
          "type": "integer"
        },
        "fragment": {
          "description": "The URL fragment for this anchor (the foo in http://www.google.com#foo)",
          "type": "string"
        },
        "fullLeftContext": {
          "description": "The full context. These are not written out in the linklogs.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "fullRightContext": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "isLocal": {
          "description": "The bit ~roughly~ indicates whether an anchor's source and target pages are on the same domain. Note: this plays no role in determining whether an anchor is onsite, ondomain, or offdomain in mustang (i.e., the bit above).",
          "type": "boolean"
        },
        "lastUpdateTimestamp": {
          "description": "Used for history and freshness tracking - the timestamp this anchor is updated in indexing.",
          "format": "int32",
          "type": "integer"
        },
        "linkAdditionalInfo": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Additional information related to the anchor, such as additional anchor text or scores."
        },
        "linkTags": {
          "description": "Contains info on link type, source page, etc.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "locality": {
          "description": "For ranking purposes, the quality of an anchor is measured by its \"locality\" and \"bucket\". See quality/anchors/definitions.h for more information.",
          "format": "int32",
          "type": "integer"
        },
        "offset": {
          "description": "This is the offset for the first term in the anchor - it can be used as a unique ID for the anchor within the document and compared against all per-tag data. This is measured in bytes from the start of the document. We write this out to the linklogs to recover the original order of links after source/target forwarding. This is necessary for computing the global related data.",
          "format": "int32",
          "type": "integer"
        },
        "origText": {
          "description": "Original text, including capitalization and punctuation. Runs of whitespace are collapsed into a single space.",
          "type": "string"
        },
        "originalTargetDocid": {
          "description": "The docid of the anchor's original target. This field is available if and only if the anchor is forwarded.",
          "format": "uint64",
          "type": "string"
        },
        "pagerankWeight": {
          "description": "Weight to be stored in linkmaps for pageranker",
          "format": "float",
          "type": "number"
        },
        "parallelLinks": {
          "description": "The number of additional links from the same source page to the same target domain. Not populated if is_local is true.",
          "format": "int32",
          "type": "integer"
        },
        "possiblyOldFirstseenDate": {
          "description": "DEPRECATED. It used to be set if firstseen_date is not set. It's to indicate that the anchor is possibly old, but we don't have enough information to tell until the linkage map is updated. TODO(hxu) rename it to possibly_old_firstseen_date_DEPRECATED after clean up other dependencies.",
          "type": "boolean"
        },
        "setiPagerankWeight": {
          "description": "TEMPORARY",
          "format": "float",
          "type": "number"
        },
        "source": {
          "$ref": "AnchorsAnchorSource"
        },
        "sourceType": {
          "description": " is to record the quality of the anchor's source page and is correlated with but not identical to the index tier of the source page. In the docjoins built by the indexing pipeline (Alexandria), - Anchors marked TYPE_HIGH_QUALITY are from base documents. - Anchors marked TYPE_MEDIUM_QUALITY are from documents of medium quality (roughly but not exactly supplemental tier documents). - Anchors marked TYPE_LOW_QUALITY are from documents of low quality (roughly but not exactly blackhole documents). Note that the source_type can also be used as an importance indicator of an anchor (a lower source_type value indicates a more important anchor), so it is important to enforce that TYPE_HIGH_QUALITY < TYPE_MEDIUM_QUALITY < TYPE_LOW_QUALITY To add a new source type in future, please maintain the proper relationship among the types as well. TYPE_FRESHDOCS, only available in freshdocs indexing, is a special case and is considered the same type as TYPE_HIGH_QUALITY for the purpose of anchor importance in duplicate anchor removal.",
          "format": "int32",
          "type": "integer"
        },
        "targetUrlEncoding": {
          "description": "A given target URL may be found in different encodings in different documents. We store the URL encoding with each source anchor so that we can count them later to find the encoding most likely to be expected by the Web site. Around 0.7% of target URLs are expected to require a non-default value here. The default value 0 is referenced in C++ as webutil::kDefaultUrlEncoding. See also webutil/urlencoding.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "Space-delimited anchor words. Text that needs segmentation (like CJK or Thai) is unsegmented, since we set FLAGS_segment_during_lexing to false in mr-linkextractor.cc .",
          "type": "string"
        },
        "timestamp": {
          "description": "This field is DEPRECATED and no longer filled. For source page crawl timestamp, use Source.crawl_timestamp. Next tag id should be 62.",
          "format": "int64",
          "type": "string"
        },
        "type": {
          "description": "DEPRECATED: Now in link_tags",
          "format": "int32",
          "type": "integer"
        },
        "weight": {
          "description": "weights are 0-127",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AnchorsAnchorSource": {
      "description": "attributes of the source document for the link",
      "id": "AnchorsAnchorSource",
      "properties": {
        "additionalInfo": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Additional information related to the source, such as news hub info."
        },
        "cluster": {
          "description": "anchor++ cluster id",
          "format": "int32",
          "type": "integer"
        },
        "compressedUrl": {
          "description": "compressed source url",
          "format": "byte",
          "type": "string"
        },
        "crawlTimestamp": {
          "description": "Source page crawl timestamp.",
          "format": "int64",
          "type": "string"
        },
        "docid": {
          "description": "The docid field used to be \"required\", but it is now \"optional\" because it is not present when anchors are stored in webtable. When anchors are stored as part of docjoin files in the segment indexer, however, docid should be considered required.",
          "format": "uint64",
          "type": "string"
        },
        "doclength": {
          "description": "necessary for anything?",
          "format": "int32",
          "type": "integer"
        },
        "homePageInfo": {
          "description": "Information about if the source page is a home page. It can be one of the enum values defined in PerDocData::HomePageInfo (NOT_HOMEPAGE, NOT_TRUSTED, PARTIALLY_TRUSTED, and FULLY_TRUSTED).",
          "format": "int32",
          "type": "integer"
        },
        "indyrank": {
          "description": "uint16 scale",
          "format": "int32",
          "type": "integer"
        },
        "ipaddr": {
          "description": "DEPRECATED, use packed_ipaddress",
          "format": "int32",
          "type": "integer"
        },
        "language": {
          "description": "default -> English",
          "format": "int32",
          "type": "integer"
        },
        "linkhash": {
          "description": "0 -> no hash",
          "format": "uint64",
          "type": "string"
        },
        "localCountryCodes": {
          "description": "Countries to which the source page is local/most relevant; stored as III identifiers for country/region codes (see http://go/iii).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "nsr": {
          "description": "This NSR value has range [0,1000] and is the original value [0.0,1.0] multiplied by 1000 rounded to an integer.",
          "format": "uint32",
          "type": "integer"
        },
        "outdegree": {
          "format": "int32",
          "type": "integer"
        },
        "outsites": {
          "description": "approx num of pointed-to sites",
          "format": "int32",
          "type": "integer"
        },
        "packedIpaddress": {
          "description": "string in IPAddress::ToPackedString() format.",
          "format": "byte",
          "type": "string"
        },
        "pageTags": {
          "description": "Page tags are described by enum PageTag in PerDocData. Page tags are used in anchors to identify properties of the linking page. These are DEPRECATED: in the future, use link_tags instead. DEPRECATED",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "pagerank": {
          "description": "uint16 scale",
          "format": "int32",
          "type": "integer"
        },
        "pagerankNs": {
          "description": "unit16 scale",
          "format": "int32",
          "type": "integer"
        },
        "seglanguage": {
          "description": "DEPRECATED",
          "format": "int32",
          "type": "integer"
        },
        "site": {
          "type": "string"
        },
        "spamrank": {
          "description": "uint16 scale",
          "format": "int32",
          "type": "integer"
        },
        "spamscore1": {
          "description": "deprecated, to be removed after October 20. 0-127 scale",
          "format": "int32",
          "type": "integer"
        },
        "spamscore2": {
          "description": "0-127 scale",
          "format": "int32",
          "type": "integer"
        },
        "webtableKey": {
          "description": "Webtable key of source",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AnchorsRedundantAnchorInfo": {
      "description": "NOTE: in docjoins, the following anchor sampling information is only ## available in the first record of a document (under the same docid). The total number of redundant anchors dropped per (domain, text) in linkextractor. If we receive a large number of anchors from a particular domain, then we'll throw out all but a sampling of them from that domain. The data is sorted by the (domain,text) pairs. This field is not populated by Alexandria, which uses cdoc.anchor_stats instead.",
      "id": "AnchorsRedundantAnchorInfo",
      "properties": {
        "anchorsDropped": {
          "format": "int64",
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsDynamiteCustomerId": {
      "description": "Represents a GSuite customer ID. Obfuscated with CustomerIdObfuscator.",
      "id": "AppsDynamiteCustomerId",
      "properties": {
        "customerId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsDynamiteSharedOrganizationInfo": {
      "description": "Contains info about the entity that something is, or is owned by.",
      "id": "AppsDynamiteSharedOrganizationInfo",
      "properties": {
        "consumerInfo": {
          "$ref": "AppsDynamiteSharedOrganizationInfoConsumerInfo"
        },
        "customerInfo": {
          "$ref": "AppsDynamiteSharedOrganizationInfoCustomerInfo"
        }
      },
      "type": "object"
    },
    "AppsDynamiteSharedOrganizationInfoConsumerInfo": {
      "description": "Intentionally empty. Used to disambiguate consumer and customer use cases in oneof below.",
      "id": "AppsDynamiteSharedOrganizationInfoConsumerInfo",
      "properties": {},
      "type": "object"
    },
    "AppsDynamiteSharedOrganizationInfoCustomerInfo": {
      "id": "AppsDynamiteSharedOrganizationInfoCustomerInfo",
      "properties": {
        "customerId": {
          "$ref": "AppsDynamiteCustomerId"
        }
      },
      "type": "object"
    },
    "AppsPeopleActivityBackendDestinationStream": {
      "description": "A DestinationStream is a /namespace/id[0]/id[1]/.../id[n] that represents a collection of Activities. Example destinations: -The Profile Stream on http://plus.google.com/+JohnDoe/posts -A Square Stream on http://plus.google.com/squares/123 -A \"comment Stream\" (Fountain) on http://www.youtube.com/watch?id=123 It's possible for a single Activity to show in each of these destinations - and it might behave/look slightly differently for each one. Destinations can have their own business logic associated with them at both write-time and read-time server-side (these are documented below). Each DestinationStream is indexed and can be retrieved using the GetDestinationStreamRequest. For the repeated ID space indexing happens at all levels, e.g. if you have: /square/123/abc /square/123/efd /square/456 You can fetch /square/123/abc directly or /square/123 (which includes all Activities in both /square/123/abc and /square/123/efd), or even /square which retrieves all Activities in the Square namespace (visible for that user). On the storage layer, we represent DestinationStream as Channel (http://cs/#google3/social/common/channel/channel.proto), since the storage does not have the concept of a Stream. Both terms are used interchangeably within the service layer, but client of Social Infrastructure should use the term DestinationStream. Next ID: 3",
      "id": "AppsPeopleActivityBackendDestinationStream",
      "properties": {
        "id": {
          "description": "The hierarchy of IDs. Each individual ID is \"flat\" and the repeated list defines the hierarchy. Namespaces define the \"validity\" of this hierachy (depth, naming convention, etc) and the server will reject invalid IDs.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "namespace": {
          "enum": [
            "UNKNOWN_DESTINATION_NAMESPACE",
            "SQUARES",
            "FOUNTAIN",
            "PROFILE",
            "COLLEXIONS",
            "TEST",
            "HIGHLIGHT",
            "SOCIETY",
            "MEMEGEN",
            "PHOTOS",
            "SUPPLY_CHAIN_CENTRAL",
            "PAISA",
            "SOCIETY_CHAT",
            "PLUS_ENTERPRISE_LOG",
            "SEARCH_UGC",
            "LOUPE",
            "MINDSEARCH",
            "SOS_LIVE_COMMENTS",
            "SBE_LOADTEST",
            "SYSTEM1",
            "G_PLUS",
            "YOUTUBE",
            "EVENTS",
            "DEPRECATED_COLLECTIONS",
            "REVIEWS",
            "BACKSTAGE",
            "SPACES"
          ],
          "enumDescriptions": [
            "To prevent issues with out-of-sync clients sending unexpected values.",
            "Use for G+ community. The ID is the square gaia id. If this is a square substream, second ID is the substream stream ID. Write-time logic: -Verify that the AUTHOR is a member of this Square. Read-time logic: -Fetch the name of the Square and substream.",
            "For Blogger Fountain, the ID is the canonical URL of the site. For Distiller, the ID is \"youtube\"/channel_id/video_id. For Distiller Discussion Page, the ID is \"youtube\"/channel_id/\"channel\". For Distiller Private Msg, the ID is \"youtube\"/channel_id/\"private\". For Backstage, the ID is \"youtube\"/channel_id/\"backstage\". For Live, the ID is \"youtube\"/channel_id/\"live\"/\"chat\" and \"youtube\"/channel_id/video_id/\"live\"/\"chat\".",
            "Used for Profile Stream fetches. The ID is the (decimal) Gaia ID of the user whose profile is being fetched.",
            "Used for Collexions feature (go/g+c) ID is the Collexion ID to which the post is assigned. These IDs are allocated from their own id space maintained via UniqueId. They are NOT gaia ids, nor do they need to be used in conjunction with a gaia id when identifying a collection. In general a post will be assigned to at most 1 collexion, however there do exist corner cases where multi-inclusion can occur.",
            "Used for test data for clients to prototype with. This should only ever be used in the SBE_PLAYGROUND corpus (go/sbe-playground), or in tests.",
            "Used for Search Highlight (go/seng-highlight). The ID is the account id to which a highlight belongs.",
            "Used for Society (go/society) ID is an s2 cell id (go/s2), optionally with an additional ID of a \"topic\" string within that cell.",
            "Used for Memegen integration with SBE (go/memegen-sbe-onboarding) The ID is \"meme\" followed by the meme id to which a comment belongs.",
            "Used for Photos integration with SBE (go/envelope-comments-design-doc)",
            "Used for Supply Chain Central commenting capability (go/scc-comment). ID format: - For purchase order app: resource/purchase_order//line_item/ - For data exchange app: application/data_exchange/report/",
            "Used for Paisa integration with SBE (go/paisa-stanza-plan)",
            "Use for Society Chat (http://go/society-chat). The ID format is /society/users/private/.",
            "Use for G+ Enterprise Log API Event API (http://go/gplus_interaction_event_sync_queue) The ID format is /enterprise//",
            "Used for UGC for knowledge (go/knowledge-ugc). The ID format is /livestream/sports/",
            "Loupe go/sbe-loupe-requirements.",
            "Mindsearch go/india-qa.",
            "Used for SOS Live comments (go/live-comments-sos-alerts). The ID format is /livestream/sos/",
            "Used for SBE loadtests.",
            "Used for System 1 (go/sys1-sbe)",
            "Use if you want the Activity to show in the regular G+ product, i.e. the main Stream, user's profile streams, the G+ search stream, etc. No ID should be used with this DestinationNamespace.",
            "Used to serve consumption stream on Youtube homepage. The stream is essentially a user's consumption stream with restricts set during write-time indexing such that only activities with Youtube video are retrieved during read-time. Deprecated - Do not use.",
            "DEPRECATED - once used for the G+ Events feature, but never launched.",
            "It is deprecated and replaced by COLLEXIONS.",
            "Used for Review Stream fetches. The ID is the canonical representation of the entity being reviewed (for place reviews, it is cluster_id).",
            "Deprecated - do not use. Backstage uses FOUNTAIN DestinationNamespace.",
            "Deprecated. Used for Spaces (go/spaces) ID is the space ID in which the post is made. Posts will reside in exactly one space."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleActivityStreamqualityDistillerEngagements": {
      "description": "Stores the number of different kind of user engagement actions. Abuse Report is also consider an engagement. Currently we only have abuse report engagements but in future we might add other types of engagements as well.",
      "id": "AppsPeopleActivityStreamqualityDistillerEngagements",
      "properties": {
        "reportCompromised": {
          "description": "Corresponds on \"This account might be compromised or hacked\" reporting action.",
          "format": "int64",
          "type": "string"
        },
        "reportHarassment": {
          "description": "Corresponds on \"Harassment or bullying\" reporting action.",
          "format": "int64",
          "type": "string"
        },
        "reportHate": {
          "description": "Corresponds on \"Hate speach or graphic violence\" reporting action.",
          "format": "int64",
          "type": "string"
        },
        "reportPorn": {
          "description": "Corresponds on \"Pornography or sexually explicit material\" reporting action.",
          "format": "int64",
          "type": "string"
        },
        "reportSpam": {
          "description": "Corresponds on \"Unwanted commercial content or spam\" reporting action.",
          "format": "int64",
          "type": "string"
        },
        "serveCount": {
          "description": "Number of times this activity was served out of asbe/stanza.",
          "format": "int64",
          "type": "string"
        },
        "timeSec": {
          "description": "Timestamp in seconds for which time this record is valid.",
          "format": "int64",
          "type": "string"
        },
        "ytThumbsDown": {
          "description": "Corresponds on Distiller comment thumbs down action.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAbout": {
      "id": "AppsPeopleOzExternalMergedpeopleapiAbout",
      "properties": {
        "contentType": {
          "enum": [
            "TEXT_PLAIN",
            "TEXT_HTML"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "safeHtmlValue": {
          "$ref": "WebutilHtmlTypesSafeHtmlProto",
          "description": "Sanitized HTML value that is only populated when the SANITIZE_ABOUT_HTML extension is requested."
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedData": {
      "description": "Extension data for use in AboutMe.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedData",
      "properties": {
        "nameDisplayOptions": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataNameDisplayOptions"
        },
        "photosCompareData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataPhotosCompareData"
        },
        "profileEditability": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataProfileEditability"
        },
        "profileNameModificationHistory": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataProfileNameModificationHistory"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataNameDisplayOptions": {
      "description": "See NameDisplayOptions in //depot/google3/focus/backend/proto/backend.proto. See also go/nickname-mess.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataNameDisplayOptions",
      "properties": {
        "nicknameOption": {
          "enum": [
            "UNKNOWN_NICKNAME_OPTION",
            "QUOTED_NICKNAME",
            "PAREN_NICKNAME"
          ],
          "enumDescriptions": [
            "",
            "Include the nickname, in quotes, in the display name. In English, the nickname appears between the given and family names. Example: Victor \"Pug\" Henry.",
            "Include the nickname, in parentheses, in the display name. In English, the nickname appears after the given and family names. Example: Victor Henry (Pug)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataPhotosCompareData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataPhotosCompareData",
      "properties": {
        "diffData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataPhotosCompareDataDiffData"
        },
        "highResUrl": {
          "type": "string"
        },
        "inconsistentPhoto": {
          "description": "True if photo diff is greater than 0.01 on any color band, or if the user has a low res photo but no high res photo. This field is primarily for use in About Me and for other uses it's recommended to use the DiffData values directly instead. The cutoff is based on a heuristic determined in go/comparing-profile-photos",
          "type": "boolean"
        },
        "lowResData": {
          "description": "Only present if the photo diff is greater than 0.01 on any color band.",
          "format": "byte",
          "type": "string"
        },
        "lowResUrl": {
          "type": "string"
        },
        "monogramUrl": {
          "type": "string"
        },
        "privateLowResAcl": {
          "description": "True if the low-res photo has a private ACL set.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataPhotosCompareDataDiffData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataPhotosCompareDataDiffData",
      "properties": {
        "blueDiff": {
          "format": "float",
          "type": "number"
        },
        "greenDiff": {
          "format": "float",
          "type": "number"
        },
        "redDiff": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataProfileEditability": {
      "description": "See UserEditedLockedMask in //depot/google3/focus/backend/proto/backend.proto.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataProfileEditability",
      "properties": {
        "lockedField": {
          "description": "Read-only set of zero or more field paths that are locked for update on this person, such as \"person.name\", \"person.email\", etc. The set of fields is only populated for the requester's profile. Fields in the set cannot be edited, added, or deleted from the profile. Attempting to update any of these fields will result in an exception.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataProfileNameModificationHistory": {
      "description": "See ABUSE_NAME_LAST_MODIFIED in //depot/google3/focus/backend/proto/backend.proto which maps to //depot/google3/focus/proto/profileattribute.proto",
      "id": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedDataProfileNameModificationHistory",
      "properties": {
        "computedNameChangesRemaining": {
          "description": "The number of name changes remaining at RPC request time. This can be more than name_changes_remaining, if user hasn't changed name for some time and accrued quota since last change.",
          "format": "int32",
          "type": "integer"
        },
        "computedNicknameChangesRemaining": {
          "description": "The number of nickname changes remaining at RPC request time. This can be more than nickname_changes_remaining, if user hasn't changed nickname for some time and accrued quota since last change.",
          "format": "int32",
          "type": "integer"
        },
        "nameChangesRemaining": {
          "description": "The number of name changes remaining at the time the name was last modified.",
          "format": "int32",
          "type": "integer"
        },
        "nameLastModified": {
          "description": "The last time the profile name was modified in milliseconds UTC.",
          "format": "int64",
          "type": "string"
        },
        "nicknameChangesRemaining": {
          "description": "The number of nickname changes remaining at the time the nickname was last modified.",
          "format": "int32",
          "type": "integer"
        },
        "nicknameLastModified": {
          "description": "The last time the profile nickname was modified in milliseconds UTC.",
          "format": "int64",
          "type": "string"
        },
        "quotaEnforcementStatus": {
          "enum": [
            "UNKNOWN_QUOTA_ENFORCEMENT_STATUS",
            "ENFORCED",
            "NOT_ENFORCED",
            "NOT_APPLICABLE"
          ],
          "enumDescriptions": [
            "",
            "Name change quota is enforced.",
            "Name change quota exists but is not enforced. This is used for users suspended due to abusive names, where users are allowed to change their names back to non-abusive state without being charged against the quota.",
            "Name change quota does not apply. This is used for premium dasher users."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAccountEmail": {
      "id": "AppsPeopleOzExternalMergedpeopleapiAccountEmail",
      "properties": {
        "email": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAdditionalContainerInfo": {
      "description": "Additional information about a container. TO BE DELETED: replaced by DeviceContactInfo.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAdditionalContainerInfo",
      "properties": {
        "rawDeviceContactInfo": {
          "description": "When the container is a DEVICE_CONTACT, this list provides account information from the raw contact which is the source of this field.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAddress": {
      "id": "AppsPeopleOzExternalMergedpeopleapiAddress",
      "properties": {
        "country": {
          "type": "string"
        },
        "countryCode": {
          "type": "string"
        },
        "encodedPlaceId": {
          "description": "FeatureId associated with the address. The format is the same as that used for ids in PLACE containers in SourceIdentity.",
          "type": "string"
        },
        "extendedAddress": {
          "type": "string"
        },
        "formatted": {
          "type": "string"
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "locality": {
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "poBox": {
          "type": "string"
        },
        "pointSpec": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPointSpec"
        },
        "postalCode": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "streetAddress": {
          "type": "string"
        },
        "type": {
          "description": "The type of the address. The type can be free form or one of these predefined values: * `home` * `work` * `other`",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAffinity": {
      "description": "Similar to social.graph.storage.Affinity, but pared down to what the clients of the People API are interested in.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAffinity",
      "properties": {
        "affinityMetadata": {
          "$ref": "SocialGraphWireProtoPeopleapiAffinityMetadata",
          "description": "Contains extra ranking information returned by DAS."
        },
        "affinityType": {
          "enum": [
            "AFFINITY_TYPE_UNKNOWN",
            "EMAIL_AUTOCOMPLETE",
            "CONTACTS_PLUS_FREQUENTLY_CONTACTED",
            "CHAT_AUTOCOMPLETE",
            "GPLUS_AUTOCOMPLETE",
            "GLASS_AFFINITY",
            "PEOPLE_AUTOCOMPLETE_SOCIAL",
            "FIELD_AUTOCOMPLETE_SOCIAL",
            "CONTACTS_PLUS_EMAIL",
            "PHOTOS_PEOPLE_TO_SHARE_WITH_SUGGESTIONS",
            "PHOTOS_FIELDS_TO_SHARE_WITH_SUGGESTIONS",
            "INBOX_AFFINITY",
            "DYNAMITE_AFFINITY",
            "PHOTOS_SUGGESTIONS_AFFINITY",
            "PHOTOS_SUGGESTED_TARGETS",
            "PHOTOS_ASSISTANT_SUGGESTIONS_AFFINITY",
            "DRIVE_AUTOCOMPLETE",
            "WALLET_PEOPLE_TO_PAY_SUGGESTIONS",
            "CONTACTS_PLUS_CONTACT_CENTRIC",
            "POMEROY_AFFINITY",
            "CALENDAR_AFFINITY",
            "SPACES_APP_PEOPLE_AFFINITY",
            "HOMEROOM_AFFINITY",
            "PEOPLE_PLAYGROUND_AFFINITY",
            "FAMILY_AFFINITY",
            "CONTACTS_ASSISTANT_SUGGESTED_CONTACTS",
            "TRIPS_AFFINITY",
            "GOOGLE_VOICE_AFFINITY",
            "PHOTOS_FACE_AFFINITY",
            "G3DOC_AUTOCOMPLETE",
            "LOUPE_SUGGESTIONS_AFFINITY",
            "MAPS_SHARING_AFFINITY",
            "CLOUD_SEARCH_AFFINITY",
            "YOUTUBE_UNPLUGGED",
            "JAM_AFFINITY",
            "ITEM_SUGGEST_AFFINITY",
            "ISSUE_TRACKER_AFFINITY",
            "APPS_ASSISTANT_AFFINITY",
            "APDL_CONTACT_CENTRIC_DEFAULT_AFFINITY",
            "APDL_PROFILE_CENTRIC_DEFAULT_AFFINITY",
            "SOCIAL_RECOVERY",
            "TEZ_AFFINITY",
            "NEWS_AFFINITY",
            "ALLO_AFFINITY",
            "GPLUS_PEOPLE_RECOMMENDATIONS",
            "GPLUS_PEOPLE_RECOMMENDATIONS_SAME_DOMAIN",
            "DRIVE_AFFINITY",
            "PODIUM_AFFINITY",
            "ZOOM_SIGHTS_EMAIL_AFFINITY",
            "AIRDROME_AFFINITY",
            "HANGOUTS_MEET_AFFINITY",
            "GALLERY_AFFINITY",
            "AGSA_AFFINITY",
            "PAY_AFFINITY",
            "SAVES_AFFINITY",
            "JASPER_AFFINITY",
            "GOOGLE_HOME_APP_AFFINITY",
            "TOPAZ_TEAMS_AFFINITY",
            "DYNAMITE_OUT_OF_DOMAIN_AFFINITY",
            "GOOGLE_VOICE_SIRI_EXTENSION_AFFINITY",
            "COURSE_KIT_AFFINITY",
            "FORMS_AFFINITY",
            "NOVITAS_AFFINITY",
            "GTI_PEER_INTERACTIONS_AFFINITY",
            "ANDROID_EMERGENCY_AFFINITY",
            "DATA_STUDIO_AFFINITY",
            "SPUR_AFFINITY",
            "PLAY_GAMES_SERVICES_AFFINITY",
            "GROUPS_ADD_MEMBER_AFFINITY",
            "DUO_AFFINITY",
            "MY_BUSINESS_AFFINITY",
            "GMAIL_COMPOSE",
            "NON_GPLUS_AFFINITY",
            "ABUSE_AFFINITY",
            "ABUSE_AFFINITY_LITE",
            "CALENDAR_PEEK_AFFINITY",
            "HUB_CALL_AFFINITY",
            "GSUITE_WORKFLOW_AFFINITY",
            "VR_POLY_PRO_AFFINITY",
            "TASKS_AFFINITY",
            "GOOGLE_ONE_AFFINITY",
            "TRAVEL_AFFINITY",
            "GEO_DISCOVERY_FOLLOW_AFFINITY",
            "GMAIL_WEB_AFFINITY",
            "ASSISTANT_SETTINGS_WEB_UI_AFFINITY",
            "ARTIFEX_AFFINITY",
            "CONTACT_STORE_DEFAULT_AFFINITY",
            "CONTACT_STORE_SELF_EXCLUSIVE",
            "PHOTOS_FACE_STALE_AFFINITY",
            "LANDSPEEDER_AFFINITY",
            "GOOGLE_FI_AFFINITY",
            "CONTACTS_PLUS_DOMAIN_ONLY",
            "PHOTOS_SUGGESTED_TARGETS_IN_APP_ONLY",
            "SOCIETY_AFFINITY",
            "NANDHI_TEST_SCHEDULER_AFFINITY",
            "HIJACKING_HIGH_RISK_AFFINITY",
            "TRUECOLOURS_AFFINITY",
            "ESPRESSO_AFFINITY",
            "TAG_AFFINITY",
            "CORPBOT_AFFINITY",
            "SHOPPING_LIST_AFFINITY",
            "INTEGRATION_PLATFORM_AFFINITY",
            "HOT_ORDERS_UI_AFFINITY",
            "TELLY_MOBILE_APP_AFFINITY",
            "NGA_SUGGESTION_RESOLUTION_AFFINITY",
            "DUC_COMPANION_AFFINITY",
            "TOG_AFFINITY",
            "ANDROID_SYSTEM_INTELLIGENCE_AFFINITY",
            "EARTH_AFFINITY",
            "SHORTCUT_AFFINITY",
            "CHROME_OS_SCALING_AFFINITY",
            "SHOWTIME_AFFINITY",
            "PLAY_GAMES_SERVICES_EXPERIMENTAL",
            "GUPPEEPS_AFFINITY",
            "NEST_AFFINITY",
            "BLOGGER_AFFINITY",
            "INDIVIDUAL_OUTGOING_INTERACTIONS_RECENCY_RANK",
            "ASSISTANT_TOOLCHAIN_AFFINITY",
            "CHAT_CONSERVER_FAVORITE_CONTACTS_AFFINITY",
            "CHAT_CONSERVER_INVITEE_AFFINITY",
            "GANTRY_AFFINITY",
            "KINTARO_AFFINITY",
            "KEEP_AFFINITY",
            "INCIDENTFLOW_AFFINITY",
            "DRIVE_MENTION_AFFINITY",
            "DRIVE_LOOKUP_AFFINITY",
            "PODCASTS_MANAGER_AFFINITY",
            "EMAIL_AUTOCOMPLETE_GG",
            "ONE_REVIEWER_TOOL_AFFINITY",
            "ASSISTANT_FAMILY_VERTICAL_AFFINITY",
            "STADIA_AFFINITY",
            "ATLAS_AFFINITY",
            "CONSTELLATION_AFFINITY",
            "CORONADO_AFFINITY",
            "WALLET_GOLDEN_GATE_AFFINITY",
            "PUMICE_AFFINITY",
            "DEMO_AFFINITY_DEFAULT_ALGO",
            "DEMO_AFFINITY_DEFAULT_ALGO_DOMAIN_ONLY",
            "DEMO_AFFINITY_EMAIL_ALGO",
            "DEMO_AFFINITY_EMAIL_ALGO_DOMAIN_ONLY",
            "BACKLIGHT_AFFINITY",
            "DYNAMITE_GROUPS_AFFINITY",
            "DYNAMITE_OUT_OF_DOMAIN_GROUPS_AFFINITY",
            "GLOSSARY_MANAGER_AFFINITY",
            "ONEDEV_WORKFLOW_AFFINITY",
            "GSUITE_HUB_CALL_AFFINITY",
            "AVALANCHE_AFFINITY",
            "SANDTROUT_DEVICE_CONTACTS_AFFINITY",
            "DYNAMITE_ROOM_AFFINITY",
            "DESKBOOKING_AFFINITY",
            "TEZ_EXTENDED_AFFINITY",
            "DRIVE_PROFILE_ONLY_AFFINITY",
            "OFFSEC_AFFINITY",
            "GOOGLE_HOME_FAMILY_AFFINITY",
            "ONEMARKET_CALENDAR_AFFINITY",
            "GPAY_MERCHANT_CONSOLE_AFFINITY",
            "WORDFLOW_AFFINITY",
            "YOUTUBE_CREATOR_STUDIO_AFFINITY",
            "BRICKS_AFFINITY",
            "BUG_OBSERVER_AFFINITY",
            "ALPHASCHEDULE_AFFINITY",
            "BURROW_AFFINITY",
            "TEAMSPACES_AFFINITY",
            "GMAIL_SMARTADDRESS_REPLACE_AFFINITY",
            "GMAIL_SMARTADDRESS_EXPAND_AFFINITY",
            "ASSISTANT_OPA_AFFINITY",
            "POLYGLOT_AFFINITY",
            "TRANSLATION_MEMORY_MANAGER_AFFINITY",
            "THREADIT_AFFINITY",
            "RESOURCE_SYMPHONY_AFFINITY",
            "HOUSEHOLD_CONTACTS_PICKER_AFFINITY",
            "L10N_INFRA_SHARED_AFFINITY",
            "WORK_TRACKER_AFFINITY",
            "ARIANE_AFFINITY",
            "DRIVE_ROOM_AFFINITY",
            "MOMA_SEARCH_AFFINITY",
            "COLAB_INTERNAL_AFFINITY",
            "COLAB_EXTERNAL_AFFINITY",
            "TALENT_GROW_AFFINITY",
            "SOCIAL_CONNECTION_CHECKER_AFFINITY",
            "GMS_PEOPLE_AFFINITY",
            "ROCKET_LABS_AFFINITY",
            "DYNAMITE_ROOM_AND_INDIVIDUAL_ONLY_AFFINITY",
            "TEZ_PHONE_SEARCH_AFFINITY",
            "MY_GOOGLE_FAMILIES_AFFINITY",
            "DYNAMITE_UNIFIED_AFFINITY",
            "SHORTCUT_SERVER_AFFINITY",
            "LEGAL_CONTRACTS_AFFINITY",
            "CALENDAR_WEB_AFFINITY",
            "DATA_CATALOG_AFFINITY",
            "BRIEF_API_AFFINITY",
            "HARDWARE_MFG_DATA_VENUS_AFFINITY",
            "BETTERBUG_AFFINITY",
            "DCMS_AFFINITY",
            "PLAY_BOOKS_PUBENG_AFFINITY",
            "YAQS_AFFINITY",
            "RESPONSIBLE_FEATURE_ACCESS_AFFINITY",
            "PROSPER_AFFINITY",
            "PEOPLE_TO_ADD_BIRTHDAY_FOR_AFFINITY",
            "FLOURISH_AFFINITY",
            "CAMPAIGN_MANAGEMENT_TOOL_AFFINITY",
            "RECORDER_AFFINITY",
            "CLASSROOM_SEARCH_AFFINITY",
            "HIRING_AFFINITY",
            "DATACENTER_SOFTWARE_AFFINITY",
            "PHOTOS_INVITE_AFFINITY",
            "PHOTOS_PARTNER_SHARING_AFFINITY",
            "MARKETING_WORKFLOWS_AFFINITY",
            "INTROSPECT_AFFINITY",
            "YOUTUBE_PARENT_TOOLS_AFFINITY",
            "RELIABILITY_INSIGHTS_PST_AFFINITY",
            "GMAIL_ANDROID_AFFINITY",
            "CUSTOMER_CARE_PORTAL_AFFINITY",
            "MOMAHOME_3C_AFFINITY",
            "DIGITAL_CAR_KEY_AFFINITY",
            "PLAY_BOOKS_DISTRIBUTION_AFFINITY",
            "GOOGLE_ASSIGNMENTS_AFFINITY",
            "TEST_FUSION_AFFINITY",
            "PRODUCTION2020_UIE_AFFINITY",
            "SPEAKEASY_AFFINITY",
            "DOCS_TASKS_AFFINITY",
            "DYNAMITE_SEARCH_AFFINITY",
            "GPAY_RELEASE_OPS_AFFINITY",
            "VOICE_PBX_AFFINITY",
            "VOICE_WEB_AFFINITY",
            "SKILLSSTACK_AFFINITY",
            "WHOSTORY_AFFINITY",
            "PHOTOS_PARTNER_SHARING_EMAIL_ONLY",
            "MEMORIZE_AFFINITY",
            "BETTANY_AFFINITY",
            "BASECAMP_AFFINITY",
            "DRIVE_SEARCH_FILTER_AFFINITY",
            "CULTURE_EVENTS_CALENDAR_AFFINITY",
            "DATABRIDGE_CONSOLE_AFFINITY",
            "COMMSTAR_AFFINITY",
            "CDDB_AFFINITY",
            "DATA_STUDIO_SPACES_AFFINITY",
            "SOJI_AFFINITY",
            "PLAY_MOVIES_ANDROID_AFFINITY",
            "DATA_STUDIO_DOMAIN_ONLY_AFFINITY",
            "MONOSPACE_AFFINITY",
            "MY_ACCOUNT_AFFINITY",
            "NUDGEIT_CAMPAIGN_MANAGER_AFFINITY",
            "LEGAL_CONTRACTS_EXTERNAL_AFFINITY",
            "CONTACTS_TO_STAR_AFFINITY",
            "DECS_AFFINITY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Will eventually be deprecated in favor of PHOTOS_SUGGESTED_TARGETS.",
            "Will eventually be deprecated in favor of PHOTOS_SUGGESTED_TARGETS.",
            "",
            "",
            "Will eventually be deprecated in favour of PHOTOS_SUGGESTED_TARGETS.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "containerId": {
          "description": "The ID of the container",
          "type": "string"
        },
        "containerType": {
          "description": "The type of container to which this affinity applies",
          "enum": [
            "UNKNOWN_CONTAINER",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "NAMED_CHAT_ROOM",
            "UNNAMED_CHAT_ROOM",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Deprecated. E-mail only circle membership should be dead. E-mail only circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact. An entity that is owned by a domain and represents a person, but is not a user in the domain. For more details see https://support.google.com/a/answer/9281635.",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Dynamite \"Named Flat Room\" (NFR). This is a Baggins Roster with label DYNAMITE_SPACE *and* label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Dynamite \"Unnamed Flat Room\" (UFR). This is a Baggins Roster with label DYNAMITE_SPACE but does *not* have label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Device contacts that are used in interaction ranking, but have not been uploaded to Google. These are synthesized people from interaction data. This container type is only used in ListRankedPeople and ListRankedTargets actions. See go/TopNWithClusteringPart1.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "loggingId": {
          "description": "Used to log events for this affinity value, for disco diagnostic-purposes. See go/disco-diagnostics.",
          "type": "string"
        },
        "value": {
          "description": "Affinity value. Frequently represented as an inverse ranking, sometimes with additional data encoded. If data_formats.affinity_formats.score_format is set to RAW_SCORE then the value will be the score returned by DAS.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAgeRangeType": {
      "description": "Please read go/people-api-howto:age on how to get age data. Message for the `Person.age_range_repeated` field. Replaces the existing `Person.age_range` field.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAgeRangeType",
      "properties": {
        "ageInYears": {
          "description": "Please read go/people-api-howto:age on how to get age data. Age of the user. The field is set based on profile storage fields such as account birthday. If the source fields are not present, `age_in_years` will be left unset.",
          "format": "int32",
          "type": "integer"
        },
        "ageOfConsentStatus": {
          "description": "Deprecated. Use go/supervised-accounts#capabilities-for-child-accounts instead. Denotes whether the user is under the region based Age of Consent. The user's region is based on ClientUserInfo.GlobalTos.AgreedLocation The age is inferred from Birthday field or CertifiedBornBefore field. The region based AoC is specified at go/aoc.",
          "enum": [
            "AOC_STATUS_UNKNOWN",
            "UNDER_AOC",
            "AT_OR_ABOVE_AOC"
          ],
          "enumDescriptions": [
            "We do not have enough information to determine the user's age. e.g. user has no declared age or region is not known.",
            "The user is under the Age of Consent of the region the user is in.",
            "The user is at or older than the Age of Consent of the region the user is in."
          ],
          "type": "string"
        },
        "ageRange": {
          "description": "Deprecated. Please read go/people-api-howto:age on how to get age data. Age range is populated based on `account_birthday` and `certified_born_before`, which may not be set for dasher users.",
          "enum": [
            "UNKNOWN",
            "LESS_THAN_EIGHTEEN",
            "TWENTY_ONE_OR_OLDER",
            "EIGHTEEN_TO_TWENTY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiAppUniqueInfo": {
      "description": "Store all app unique info that are needed for app action fulfillment.",
      "id": "AppsPeopleOzExternalMergedpeopleapiAppUniqueInfo",
      "properties": {
        "appUniqueId": {
          "description": "Store the app unique id endpoint. This will be passed over to app to fulfill the action. For example, app_unique_id for Whatsapp will be \"11234567890@s.whatsapp.net\"",
          "type": "string"
        },
        "displayAppUniqueId": {
          "description": "Store third party endpoint that is displayed to users. For example, display_app_unique_id for Whatsapp will be \"Message +11234567890\".",
          "type": "string"
        },
        "label": {
          "description": "Store third party endpoint label. For example, \"HOME\", \"WORK\"",
          "type": "string"
        },
        "mimetype": {
          "description": "Store mimetype of this endpoint. We will use this as the differentiator for Assistant to know whether to use the RawContact for messaging, call or video call. For example, send message mimetype for whatsapp: \"vnd.android.cursor.item/vnd.com.whatsapp.profile\" voice call mimetype for whatsapp: \"vnd.android.cursor.item/vnd.com.whatsapp.voip.call\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiBestDisplayName": {
      "description": "The best suggested name to use for the Person from the available source fields, which may include FileAs, Name, Org, Email, IM, Phone, ... Rough source container priority order is Contact, then Profile, then Place.",
      "id": "AppsPeopleOzExternalMergedpeopleapiBestDisplayName",
      "properties": {
        "containerType": {
          "description": "The container the suggested name was sourced from",
          "enum": [
            "UNKNOWN_CONTAINER",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "NAMED_CHAT_ROOM",
            "UNNAMED_CHAT_ROOM",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Deprecated. E-mail only circle membership should be dead. E-mail only circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact. An entity that is owned by a domain and represents a person, but is not a user in the domain. For more details see https://support.google.com/a/answer/9281635.",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Dynamite \"Named Flat Room\" (NFR). This is a Baggins Roster with label DYNAMITE_SPACE *and* label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Dynamite \"Unnamed Flat Room\" (UFR). This is a Baggins Roster with label DYNAMITE_SPACE but does *not* have label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Device contacts that are used in interaction ranking, but have not been uploaded to Google. These are synthesized people from interaction data. This container type is only used in ListRankedPeople and ListRankedTargets actions. See go/TopNWithClusteringPart1.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "displayName": {
          "description": "The display name. This name is intended to be the best name to display for this Person. It may be built from a variety of fields, even if those fields are not explicitly requested in the request mask. Generally, the display name is formatted in 'first last' format. If the name appears to be a CJK name (as determined by a heuristic), the 'last first' format will be used. There may be other cases that the 'last first' format is used which are not documented here. See the code at: http://google3/java/com/google/focus/backend/client/DisplayNameFormatter.java?l=659&rcl=351360938",
          "type": "string"
        },
        "displayNameLastFirst": {
          "description": "The display name, always in 'last first' format. This field does not depend on the format of `display_name` and will always be in 'last first' format.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiBirthday": {
      "description": "IMPORTANT NOTES: - Requesting person.birthday requires membership in the purpose limited data ACL group sgbe-ac-d-birthday-(read|mutate). Contact people-api-eng@ for assistance with initial setup. - The birthday field should not be used to calculate the requester's age! To determine the requester's age, use person.age_range_repeated. - For more details about age see go/peopleapi-howto/age Birthday value may not be present: - Consumer users generally required to have account birthday set (required at account creation), though some users created via legacy flows may not have birthday present. - Dasher users generally don't require birthday, but could optionally have it set by users. - Any other types of accounts (e.g. robot, service) do not have birthdays. - Account Birthday field may be present but without birthday value set for grace period birthday (provisional new birthday). For users that do have birthday data: - \"Profile Birthday\" (person.birthday.metadata.container is PROFILE) may not have a year set if user \"hides\" the year. - \"Account Birthday\" (see api-specific notes below) will only be returned for the requester's own profile. - People API (go/peopleapi): * Account birthday is only supported in GetPeople for PeopleAPI. * If account birthday is needed, use a request mask with: `include_field { paths: \"person.birthday\" }` `include_container: ACCOUNT` - People API++ (go/peopleapi++): * Account birthday is supported for most apis in PeopleAPI++. * If account birthday is needed, use a request mask with: `include_field { paths: \"person.account_birthday\" }` `include_container: PROFILE` (note: it will also need `include_container: DOMAIN_PROFILE` because they must be requested together: go/people-api-masks#profile-domain_profile) - See go/papi-vs-papi++#birthday for more details.",
      "id": "AppsPeopleOzExternalMergedpeopleapiBirthday",
      "properties": {
        "ageDisableGracePeriod": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiBirthdayAgeDisableGracePeriod",
          "description": "Only supported for PROFILE/DOMAIN_PROFILE/ACCOUNT container."
        },
        "birthdayDecoration": {
          "$ref": "SocialGraphApiProtoBirthdayDecoration",
          "description": "Whether the user has opted in to display their birthday via photo decorations. Only supported for PROFILE/DOMAIN_PROFILE container."
        },
        "birthdayResolution": {
          "description": "Only supported for PROFILE/DOMAIN_PROFILE/ACCOUNT container.",
          "enum": [
            "FULL",
            "MONTH_AND_APPROXIMATED_YEAR",
            "APPROXIMATED_YEAR"
          ],
          "enumDescriptions": [
            "Birthday includes year, month, and day.",
            "Birthday includes approximate year and month.",
            "Birthday includes an approximate year."
          ],
          "type": "string"
        },
        "calendarDay": {
          "$ref": "GoogleTypeDate",
          "description": "Birthdays are more accurately represented as a calendar day that does not depend on a timestamp representation at all. When given a timestamp, there are lots of opportunities to make mistakes, so a CalendarDay proto is replacing timestamps. Currently this is always returned by PeopleApi on reads that include birthday fields. New clients should write using calendar_day. Clients that were already writing via date_ms are allowlisted such that writes use that field. Old callers should migrate to writing BOTH date_ms and calendar_day values. If those are consistent, they may be removed from the 'legacy_timestamp_event_write_behavior_enabled' capability."
        },
        "dateMs": {
          "description": "Birthdays are currently represented as timestamp values, although the interpretation of these timestamp values is a calendar date. Clients are recommended to read the calendar_day field, which is easier to work with than date_ms. New clients writing to PeopleApi must set calendar_day instead of date_ms. There are a few important details about how this value should be mapped to a calendar date that should be consistent among all clients. 1. Epoch - The epoch or calendar date equivalent to 0 ms is chosen to be 1970-01-01 UTC. 2. Timezone - All of the conversions to calendars should occur in the UTC timezone. We don't typically think of someones birthday changing when they travel, so clients should not use local times. 3. Calendar - The calendar used for the dates should be a Gregorian proleptic calendar. Proleptic means that the rules of the Gregorian calendar are retrofitted to before its adoption. It is easy to get this wrong, particularly with the java GregorianCalendar class, which by default is a mixed Gregorian/Julian calendar. Joda Time makes this easy, but if it's not an option, look into GregorianCalendar.setGregorianChange(). 4. Omitted years - Clients have chosen to represent birthdays or events without years as timestamps within the year zero. When the computed date has a year of 0, it means the client did not specify a year. Note that a year 0 does not exist in a chronology like the familiar Anno Domini (A.D. and B.C.); clients must agree on year numbering. 5. Year Numbering - The chronology used to map dates to the calendar should use Astronomical Year Numbering so that the year 0 is defined and dates before it have a negative year. If libraries only provide Anno Domini, then the year of 1 BC corresponds to year zero and an omitted user provided year. Other BC values are presumed rare, but clients should still not ignore the era and interpret the year as an A.D. value, especially if writing values back to PeopleApi.",
          "format": "int64",
          "type": "string"
        },
        "dateMsAsNumber": {
          "description": "date_ms_as_number contains the same data as date_ms, but has a different type in generated javascript bindings. Non javascript clients can ignore it.",
          "format": "int64",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "prompt": {
          "$ref": "SocialGraphApiProtoPrompt",
          "description": "People Prompts settings for contact birthday data. Only supported for CONTACT container."
        },
        "value": {
          "description": "Actual value entered. Allows unstructured values.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiBirthdayAgeDisableGracePeriod": {
      "description": "Whether this field is set or not determines whether an account is in the grace period. While in the grace period, the user is unable to change their birthday on their own, and will be age-disabled if they don't act in a limited amount of time. Applies only to ServiceData Birthday. Users enter the grace period if they choose a birthday below the Age of Consent (go/aoc). After the grace period ends, the account will be age disabled. See go/age-disable-grace-period-dd.",
      "id": "AppsPeopleOzExternalMergedpeopleapiBirthdayAgeDisableGracePeriod",
      "properties": {
        "calendarDay": {
          "$ref": "GoogleTypeDate",
          "description": "Provisional birthday <AoC the user provided, which made them enter the grace period. The main birthday fields were not altered yet while in the grace period."
        },
        "gracePeriodEnd": {
          "description": "Timestamp which signifies the end of the grace period for this account.",
          "format": "google-datetime",
          "type": "string"
        },
        "gracePeriodStart": {
          "description": "Timestamp which signifies the start of the grace period for this account.",
          "format": "google-datetime",
          "type": "string"
        },
        "gracePeriodType": {
          "enum": [
            "UNKNOWN",
            "USER_SPECIFIED_BIRTHDAY",
            "UNDERAGE_SUSPECTED"
          ],
          "enumDescriptions": [
            "",
            "When CalendarDay is populated by user specified birthday.",
            "Account is marked as underage by other means. The CalendarDay field is not populated."
          ],
          "type": "string"
        },
        "manualGracePeriodInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiBirthdayAgeDisableGracePeriodManualGracePeriodInfo"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiBirthdayAgeDisableGracePeriodManualGracePeriodInfo": {
      "description": "Information provided within MutateDataRequest when setting a user into AgeDisableGracePeriod manually. When the grace period expires, this info will be forwarded to Gaia when disabling the user. cs//symbol:InitiateAgeDisableGracePeriodArguments",
      "id": "AppsPeopleOzExternalMergedpeopleapiBirthdayAgeDisableGracePeriodManualGracePeriodInfo",
      "properties": {
        "escalateTo": {
          "description": "The Gaia ID of an email that ops can send inquiries to for appeals.",
          "format": "int64",
          "type": "string"
        },
        "executedBy": {
          "description": "The Gaia ID of a Googler who initiated this disable.",
          "format": "int64",
          "type": "string"
        },
        "reason": {
          "description": "When setting a user into age grace period manually, the requester can additionally supply a short human-readable reason of why the account is put into manual grace period. The description will be forwarded to Gaia when we disable the account when the grace period expires.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiBraggingRights": {
      "id": "AppsPeopleOzExternalMergedpeopleapiBraggingRights",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCalendar": {
      "description": "A url to the person's calendar. As of 03/2018 is not supported for user Profile.",
      "id": "AppsPeopleOzExternalMergedpeopleapiCalendar",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "description": "The type of the calendar URL. The type can be free form or one of these predefined values: * `home` * `freeBusy` * `work`",
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCallerIdExtendedData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiCallerIdExtendedData",
      "properties": {
        "callerIdSource": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiCallerIdExtendedDataCallerIdSource",
          "description": "Indicates which data source was used to populate the caller ID result"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCallerIdExtendedDataCallerIdSource": {
      "id": "AppsPeopleOzExternalMergedpeopleapiCallerIdExtendedDataCallerIdSource",
      "properties": {
        "sourceType": {
          "enum": [
            "UNKNOWN_SOURCE_TYPE",
            "PLACE",
            "SCOOBY_MANUAL",
            "SCOOBY_GOOGLE_VOICE",
            "SCOOBY_CSA",
            "SCOOBY_KNOWLEDGE_GRAPH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCertifiedBornBefore": {
      "description": "Information related to domain administrator (or authority) certification of a users age.",
      "id": "AppsPeopleOzExternalMergedpeopleapiCertifiedBornBefore",
      "properties": {
        "bornBefore": {
          "description": "Indicates that the user was born at or before this time.",
          "format": "google-datetime",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiChannelData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiChannelData",
      "properties": {
        "channelId": {
          "description": "Unique ID that corresponds to a Youtube channel.",
          "type": "string"
        },
        "commentCount": {
          "description": "Number of comments for a given Youtube channel.",
          "format": "int64",
          "type": "string"
        },
        "description": {
          "description": "Description of the channel.",
          "type": "string"
        },
        "playlistCount": {
          "format": "int64",
          "type": "string"
        },
        "profilePictureUrl": {
          "description": "A FIFE URL pointing to the channel's profile image (go/avatar-fife-urls) with default fife url options. Also refer to go/people-api-concepts:photos for People API's FIFE best practices. The image could be up to a couple of days stale, though it is much fresher in practice. If a fresh image is required, contact the YouTubeAccountProfileService. The URL itself expires ~30 days after generation.",
          "type": "string"
        },
        "profileUrl": {
          "description": "URL of user's Youtube channel profile.",
          "type": "string"
        },
        "subscriberCount": {
          "description": "Number of subscribers for a given Youtube channel.",
          "format": "int64",
          "type": "string"
        },
        "title": {
          "description": "Title of the YouTube channel",
          "type": "string"
        },
        "usesYoutubeNames": {
          "description": "Whether or not the channel's profile has a title/avatar that is canonical in YouTube. Used to determine if the product profile card should be part of the core persona or have their own persona.",
          "type": "boolean"
        },
        "videoCount": {
          "description": "Number of videos uploaded in a given Youtube channel.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCircleMembership": {
      "description": "A circle membership that the person has. A circle membership is created by adding a person to a circle by person-id or by email.",
      "id": "AppsPeopleOzExternalMergedpeopleapiCircleMembership",
      "properties": {
        "circleId": {
          "description": "The circle that the person belongs to.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiClientData": {
      "description": "Arbitrary client data that is populated based on the client",
      "id": "AppsPeopleOzExternalMergedpeopleapiClientData",
      "properties": {
        "key": {
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "namespace": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCommunicationEmail": {
      "description": "Email for Google product communication with the user. This is only allowed in ServiceData. It is purely synthesized and read-only, and contains at most one field. It proxies from RawCommunicationEmail and only includes the primary field if exists. Otherwise if RawCommunicationEmail does not have primary, this includes a field synthesized from valid Gaia primary account email. Otherwise if Gaia primary account email is invalid, this field is empty. See go/comm-email-use for more details.",
      "id": "AppsPeopleOzExternalMergedpeopleapiCommunicationEmail",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiConnectionReminder": {
      "description": "Contact-level people-prompts settings and contact-level connection reminders. Part of go/people-prompts.",
      "id": "AppsPeopleOzExternalMergedpeopleapiConnectionReminder",
      "properties": {
        "contactPromptSettings": {
          "$ref": "SocialGraphApiProtoContactPromptSettings",
          "description": "Contains the Contact level settings that will affect all reminders."
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "prompt": {
          "description": "Contact-level \"reminder to connect\" prompts for this contact.",
          "items": {
            "$ref": "SocialGraphApiProtoPrompt"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiContactCreateContextInfo": {
      "description": "Contact creation timestamps and related metadata. See go/contact-edit-history. This message is a pure wrapper of the shared ContactCreactionContext message so that it can be a top-level person field. No other fields should be added to the message.",
      "id": "AppsPeopleOzExternalMergedpeopleapiContactCreateContextInfo",
      "properties": {
        "contactCreateContext": {
          "$ref": "SocialGraphApiProtoContactCreateContext"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiContactEditContextInfo": {
      "description": "Contact edit timestamps and related metadata. See go/contact-edit-history. This message is a pure wrapper of the shared ContactCreactionContext message so that it can be a top-level person field. No other fields should be added to the message.",
      "id": "AppsPeopleOzExternalMergedpeopleapiContactEditContextInfo",
      "properties": {
        "contactEditContext": {
          "$ref": "SocialGraphApiProtoContactEditContext"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiContactGroupMembership": {
      "description": "A membership that the person has. The person can be a member of multiple circles and multiple contact-groups. A circle membership is created by adding a person to a circle by person-id or by email. A contact-group membership is created by adding a contact to a contact-group.",
      "id": "AppsPeopleOzExternalMergedpeopleapiContactGroupMembership",
      "properties": {
        "contactGroupId": {
          "description": "The contact-group that the person belong to. The id can be either a hex-formatted id or a camel-cased SystemContactGroup predefined group name. The id will be predefined group name iff the system_contact_group_id has a value.",
          "type": "string"
        },
        "delegatedGroupInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiDelegatedGroupInfo",
          "description": "Information related to delegated group that this contact belongs to."
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "systemContactGroupId": {
          "description": "This field will be populated when the membership is in a system-reserved contact-group.",
          "enum": [
            "UNKNOWN",
            "MY_CONTACTS",
            "STARRED",
            "FRIENDS",
            "FAMILY",
            "COWORKERS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiContactStateInfo": {
      "description": "Contact state and related metadata. See go/fbs-contacts-trash. This message is a pure wrapper of the shared ContactState message so that it can be a top-level person field. No other fields should be added to the message.",
      "id": "AppsPeopleOzExternalMergedpeopleapiContactStateInfo",
      "properties": {
        "contactState": {
          "$ref": "SocialGraphApiProtoContactState"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCoverPhoto": {
      "description": "CoverPhoto is the long banner photo (also called full bleed photo) at the top of G+ profile page.",
      "id": "AppsPeopleOzExternalMergedpeopleapiCoverPhoto",
      "properties": {
        "imageHeight": {
          "format": "int32",
          "type": "integer"
        },
        "imageId": {
          "type": "string"
        },
        "imageUrl": {
          "type": "string"
        },
        "imageWidth": {
          "format": "int32",
          "type": "integer"
        },
        "isAnimated": {
          "type": "boolean"
        },
        "isDefault": {
          "type": "boolean"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCustomSchemaField": {
      "description": "Custom fields associated with a person, from the custom schema defined on the domain. See go/custompeopleapi and go/customfocus. NOTE: these are only updatable via Cloud Directory (go/cd).",
      "id": "AppsPeopleOzExternalMergedpeopleapiCustomSchemaField",
      "properties": {
        "fieldDisplayName": {
          "type": "string"
        },
        "fieldId": {
          "type": "string"
        },
        "fieldType": {
          "enum": [
            "CUSTOM_FIELD_TYPE_UNKNOWN",
            "STRING",
            "INT64",
            "BOOL",
            "DOUBLE",
            "EMAIL",
            "PHONE",
            "DATE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "multiValued": {
          "type": "boolean"
        },
        "schemaDisplayName": {
          "type": "string"
        },
        "schemaId": {
          "type": "string"
        },
        "type": {
          "description": "The type of the custom schema field. The type can be free form or one of these predefined values: * `home` * `other` * `work`",
          "type": "string"
        },
        "value": {
          "description": "String representation of the value, based on FieldType",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiCustomerInfo": {
      "description": "Contains customer data for profile owner proxied from D3.",
      "id": "AppsPeopleOzExternalMergedpeopleapiCustomerInfo",
      "properties": {
        "customerId": {
          "description": "DEPRECATED. Use obfuscated_customer_id instead. If result has a GSuite Customer ID, this field will continue to be populated with -1 to indicate the presence of a value for backwards compatibility with clients in the wild. See b/144596193.",
          "format": "int64",
          "type": "string"
        },
        "customerName": {
          "description": "Customer organization name for dasher user.",
          "type": "string"
        },
        "obfuscatedCustomerId": {
          "description": "Obfuscated FlexOrgs customer ID for Dasher user. See cs/symbol:CustomerIdObfuscator.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiDedupedContainerInfo": {
      "description": "Container information for deduping. When two fields have the same value and only differ by field.metadata a service implementation can choose to avoid duplicating the fields and instead set field.metadata.other_deduped_containers This type can include information on the dedupe type (for example, strict value match vs. lenient value match)",
      "id": "AppsPeopleOzExternalMergedpeopleapiDedupedContainerInfo",
      "properties": {
        "containerType": {
          "description": "See SourceIdentity.container_type",
          "enum": [
            "UNKNOWN_CONTAINER",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "NAMED_CHAT_ROOM",
            "UNNAMED_CHAT_ROOM",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Deprecated. E-mail only circle membership should be dead. E-mail only circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact. An entity that is owned by a domain and represents a person, but is not a user in the domain. For more details see https://support.google.com/a/answer/9281635.",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Dynamite \"Named Flat Room\" (NFR). This is a Baggins Roster with label DYNAMITE_SPACE *and* label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Dynamite \"Unnamed Flat Room\" (UFR). This is a Baggins Roster with label DYNAMITE_SPACE but does *not* have label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Device contacts that are used in interaction ranking, but have not been uploaded to Google. These are synthesized people from interaction data. This container type is only used in ListRankedPeople and ListRankedTargets actions. See go/TopNWithClusteringPart1.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "id": {
          "description": "See SourceIdentity.id",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiDelegatedGroupInfo": {
      "description": "Information related to delegated group that this contact belongs to.",
      "id": "AppsPeopleOzExternalMergedpeopleapiDelegatedGroupInfo",
      "properties": {
        "delegatedGroupId": {
          "$ref": "SocialGraphApiProtoDelegatedGroupId",
          "description": "Required. The additional id specifically for a delegated group."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata": {
      "description": "Extra metadata for an aggregated or raw device contact.",
      "id": "AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata",
      "properties": {
        "attributes": {
          "description": "Attributes for this device contact.",
          "items": {
            "enum": [
              "ATTRIBUTE_UNKNOWN",
              "STARRED"
            ],
            "enumDescriptions": [
              "",
              "This contact is starred."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "usageInfo": {
          "description": "Usage info for this device contact.",
          "items": {
            "$ref": "SocialGraphApiProtoUsageInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiDeviceContactId": {
      "description": "Unique id for an aggregated device contact.",
      "id": "AppsPeopleOzExternalMergedpeopleapiDeviceContactId",
      "properties": {
        "contactId": {
          "description": "Aggregated device contact id on the source device.",
          "format": "int64",
          "type": "string"
        },
        "deviceId": {
          "description": "Source device id (go/client-instance-id) of this device contact.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiDeviceContactInfo": {
      "description": "Device contact information.",
      "id": "AppsPeopleOzExternalMergedpeopleapiDeviceContactInfo",
      "properties": {
        "deviceContactMetadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata",
          "description": "Metadata for this device contact."
        },
        "hasCrossDeviceData": {
          "description": "Output only. True if any of the contact's phone, email or address fields can be used on devices other than the one it originated from. Note that there can be other fields, typically name, and metadata such as some of the raw_contact_infos that can be used on other devices. Assigned by the server.",
          "type": "boolean"
        },
        "id": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiDeviceContactId",
          "description": "Id of the device contact."
        },
        "lastClientUpdateTime": {
          "description": "Last time a device contact was updated on device.",
          "format": "google-datetime",
          "type": "string"
        },
        "lookupKey": {
          "description": "An opaque value used by the device to look up this contact if its row id changed as a result of a sync or aggregation. See: https://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html#LOOKUP_KEY",
          "type": "string"
        },
        "rawContactInfo": {
          "description": "Info about the raw device contacts that make up this device contact.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEdgeKeyInfo": {
      "id": "AppsPeopleOzExternalMergedpeopleapiEdgeKeyInfo",
      "properties": {
        "containerId": {
          "description": "The container ID of the entity this field creates a join to. See `SourceIdentity.id`.",
          "type": "string"
        },
        "containerType": {
          "description": "The type of container that this edge points to. See `SourceIdentity.container_type`.",
          "enum": [
            "UNKNOWN_CONTAINER",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "NAMED_CHAT_ROOM",
            "UNNAMED_CHAT_ROOM",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Deprecated. E-mail only circle membership should be dead. E-mail only circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact. An entity that is owned by a domain and represents a person, but is not a user in the domain. For more details see https://support.google.com/a/answer/9281635.",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Dynamite \"Named Flat Room\" (NFR). This is a Baggins Roster with label DYNAMITE_SPACE *and* label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Dynamite \"Unnamed Flat Room\" (UFR). This is a Baggins Roster with label DYNAMITE_SPACE but does *not* have label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Device contacts that are used in interaction ranking, but have not been uploaded to Google. These are synthesized people from interaction data. This container type is only used in ListRankedPeople and ListRankedTargets actions. See go/TopNWithClusteringPart1.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "extendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiEdgeKeyInfoExtensionData",
          "description": "Data that is added to the proto by peopleapi read extensions."
        },
        "materialized": {
          "description": "True indicates this edge links this source to a container represented by this person object. Note: Except for certain legacy clients, EdgeKeyInfo is only created for for edges to an entity in this person and this will always be true.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEdgeKeyInfoExtensionData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiEdgeKeyInfoExtensionData",
      "properties": {
        "gdataCompatibilityExtensionId": {
          "description": "The GDataCompatibilityExtension will (temporarily) return mobile_owner_id for profile containers.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmail": {
      "id": "AppsPeopleOzExternalMergedpeopleapiEmail",
      "properties": {
        "certificate": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiEmailCertificate"
          },
          "type": "array"
        },
        "classification": {
          "enum": [
            "EMAIL_CLASSIFICATION_UNKNOWN",
            "SIGNUP_EMAIL"
          ],
          "enumDescriptions": [
            "",
            "This is the email user provided when signing up with Google (ie. this email is stored in Gaia). There may be more than 1 signup email. This is set for an Email of container type PROFILE."
          ],
          "type": "string"
        },
        "contactGroupPreference": {
          "description": "To read or update, use the CONTACT_GROUP_PREFERENCE mask field.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiEmailContactGroupPreference"
          },
          "type": "array"
        },
        "displayName": {
          "type": "string"
        },
        "extendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiEmailExtendedData"
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "signupEmailMetadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiEmailSignupEmailMetadata"
        },
        "type": {
          "description": "The type of the email address. The type can be free form or one of these predefined values: * `home` * `work` * `other`",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmailCertificate": {
      "description": "Represents a S/MIME certificate config for use with Gmail. See //caribou/smime/proto/certificate_status.proto. There can be zero or more certificates associated with an email address, be it profile email or contact email.",
      "id": "AppsPeopleOzExternalMergedpeopleapiEmailCertificate",
      "properties": {
        "configurationName": {
          "description": "The name of this certificate configuration. Examples could be \"High security level\" or \"For domain emails only\".",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata",
          "description": "It is conceivable that certificates could be ACLed. We also need to indicate which certificate is the default. The PersonFieldMetadata can accomplish both of these."
        },
        "status": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiEmailCertificateCertificateStatus"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmailCertificateCertificateStatus": {
      "description": "Minimal S/MIME certificate status i.e. two fields per email address.",
      "id": "AppsPeopleOzExternalMergedpeopleapiEmailCertificateCertificateStatus",
      "properties": {
        "notAfterSec": {
          "description": "The certificate expiration timestamp in seconds.",
          "format": "int64",
          "type": "string"
        },
        "statusCode": {
          "description": "Current status of the email's certificate chain.",
          "enum": [
            "UNKNOWN",
            "CERTIFICATE_VALID",
            "CERTIFICATE_MISSING",
            "CERTIFICATE_EXPIRED",
            "CERTIFICATE_REVOKED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmailContactGroupPreference": {
      "description": "Preferred email addresses for contact groups.",
      "id": "AppsPeopleOzExternalMergedpeopleapiEmailContactGroupPreference",
      "properties": {
        "contactGroupId": {
          "type": "string"
        },
        "isSynthetic": {
          "description": "If the Preference was implicitly set by PeopleApi/Contacts Service. A preference with this bit will not be saved to storage. See go/contact-group-email-preference-papi-problem for more info.",
          "type": "boolean"
        },
        "type": {
          "enum": [
            "UNKNOWN",
            "GMAIL"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmailExtendedData": {
      "description": "Extension data for a person email.",
      "id": "AppsPeopleOzExternalMergedpeopleapiEmailExtendedData",
      "properties": {
        "internalExternal": {
          "$ref": "PeoplestackFlexorgsProtoInternalExternal",
          "description": "For use with the CUSTOMER_INFO_ADDITIONAL_DATA extension. This includes information on whether the given email is internal to or external to the requesting user's domain."
        },
        "isPlaceholder": {
          "description": "For ListPeoplebyKnownId to indicate an email is sythesized from a lookup email.",
          "type": "boolean"
        },
        "smtpServerSupportsTls": {
          "description": "For use with the TLS extension. Whether the SMTP server that handles delivery for this email address supports TLS encryption.",
          "type": "boolean"
        },
        "usesConfusingCharacters": {
          "description": "For use with the Gmail Homograph Warning extension. Whether the email contains mixed character sets that could be used to decieve users. This field is populated by the GMAIL_SECURITY_DATA extension.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmailSignupEmailMetadata": {
      "description": "Additional metadata for a signup email. This will only be set if the email's classification is SIGNUP_EMAIL.",
      "id": "AppsPeopleOzExternalMergedpeopleapiEmailSignupEmailMetadata",
      "properties": {
        "primary": {
          "description": "This is considered to be the primary signup email. At most 1 signup email will have this set.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEmergencyInfo": {
      "description": "Emergency info for Person. See go/emergency-trusted-contacts-papi.",
      "id": "AppsPeopleOzExternalMergedpeopleapiEmergencyInfo",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "pomeroyId": {
          "description": "Opaque id from Pomeroy (go/pomeroy). Non-empty pomeroy_id means that this contact has the potential to become trusted contact or it's already trusted contact. Trust is eventually gaia<->gaia link, but when the trust link is initiated gaia might not be known. Until gaia is discovered, pomeroy_id is used to identify the contact uniquely. If trust_level is missing or set to TRUST_LEVEL_UNSPECIFIED pomeroy_id must be empty.",
          "type": "string"
        },
        "trustLevel": {
          "enum": [
            "TRUST_LEVEL_UNSPECIFIED",
            "TRUST_LEVEL_EMERGENCY_CONTACT"
          ],
          "enumDescriptions": [
            "The person does not have a specified trust level.",
            "The person is an Emergency Contact."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiEvent": {
      "id": "AppsPeopleOzExternalMergedpeopleapiEvent",
      "properties": {
        "calendarDay": {
          "$ref": "GoogleTypeDate",
          "description": "Event are more accurately represented as a calendar day that does not depend on a timestamp representation at all. When given a timestamp, there are lots of opportunities to make mistakes, so a CalendarDay proto is replacing timestamps. PeopleApi will return these values on reads, and unless the client is a legacy caller in the legacy_timestamp_event_write_behavior_enabled capability allowlist, this value is what is used for Person writes."
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "prompt": {
          "$ref": "SocialGraphApiProtoPrompt",
          "description": "People Prompts settings for contact event data."
        },
        "timestampMillis": {
          "description": "Clients are recommended to read the calendar_day field instead of timestamp_millis. When writing events, new clients must set calendar_day instead of timestamp_millis. Events are currently represented as timestamp values, although the interpretation of these timestamp values is a calendar date. There are a few important details about how this value should be mapped to a calendar date that should be consistent among all clients. For detailed information, see Birthday.date_ms.",
          "format": "int64",
          "type": "string"
        },
        "type": {
          "description": "The type of the event. The type can be free form or one of these predefined values: * `anniversary` * `other`",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiExternalId": {
      "description": "External identifier associated with the person.",
      "id": "AppsPeopleOzExternalMergedpeopleapiExternalId",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "description": "The type of the external ID. The type can be free form or one of these predefined values: * `account` * `customer` * `loginId` * `network` * `organization`",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAcl": {
      "description": "The field ACL. Currently only populated on profile fields for the profile owner. A Person field ACL; see http://go/peopleapi-acl",
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAcl",
      "properties": {
        "aclEntry": {
          "description": "A custom type of field ACL entry. The set of all ACL entries includes those listed in acl_entry as well as predefined_acl_entry.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntry"
          },
          "type": "array"
        },
        "authorizedViewers": {
          "description": "Set of users that will be authorized to view the field by this field ACL. If the ACL is public, this will only contain ALL_USERS. This field is synthesized, read-only, and currently only used for profile photos. It's populated under \"person.photo.metadata.field_acl\" for the current photo ACL and \"person.photo.metadata.acl_choices\" for available photo ACL choices. Note: The set of authorized viewers for a given FieldAcl may depend on the user's account type and domain configuration. For example, a PRIVATE_READ FieldAcl could have any of the following authorized viewers: Consumer user: [IDENTITY_ACL_ESTABLISHED] Dasher user without domain contact sharing: [IDENTITY_ACL_ESTABLISHED] Unicorn user: [SAME_UNICORN_FAMILY] Hafez user: []",
          "items": {
            "enum": [
              "AUTHORIZED_VIEWER_UNSPECIFIED",
              "IDENTITY_ACL_ESTABLISHED",
              "SAME_ORGANIZATION",
              "SAME_UNICORN_FAMILY",
              "ALL_USERS"
            ],
            "enumDescriptions": [
              "",
              "Users with an identity ACL established with the field owner through user-to-user interactions.",
              "Users in the same enterprise organization as the field owner.",
              "Users in the same Unicorn family as the field owner.",
              "All users, including anonymous viewers."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "predefinedAclEntry": {
          "description": "A common type of field ACL entry. A predefined ACL entry is a shortcut for a commonly occurring case of role and scope. For example, PUBLIC_READ is the same as an AclEntry with role = READER and scope.all_users = true. The set of all ACL entries includes those listed in acl_entry as well as predefined_acl_entry.",
          "items": {
            "enum": [
              "UNKNOWN",
              "OWNER",
              "PUBLIC_READ",
              "DOMAIN_READ",
              "YOUR_CIRCLES_READ",
              "EXTENDED_CIRCLES_READ",
              "PRIVATE_READ"
            ],
            "enumDescriptions": [
              "",
              "Equivalent to role = OWNER and scope.person.person_id = requester's person ID.",
              "Equivalent to role = READER and scope.all_users = true.",
              "Equivalent to role = READER and scope.domain_users = true.",
              "Equivalent to role = READER and scope.membership.circle.circle_set = YOUR_CIRCLES.",
              "Equivalent to role = READER and scope.membership.circle.circle_set = EXTENDED_CIRCLES.",
              "This is under implementation and not populated in PeopleAPI yet. Equivalent to role = READER and scope.person.person_id = requester's person ID. Presence of this entry means the field is private and is not visible to others."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntry": {
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntry",
      "properties": {
        "role": {
          "enum": [
            "UNKNOWN",
            "READER",
            "WRITER",
            "OWNER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "owner can change ACL"
          ],
          "type": "string"
        },
        "scope": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScope"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScope": {
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScope",
      "properties": {
        "allUsers": {
          "description": "Indicates that the field is accessible to all users including unauthenticated users. For some fields this means \"to everyone except blocked users\".",
          "type": "boolean"
        },
        "domainUsers": {
          "description": "This is a \"synthetic\" field. In reality domains are treated as gaia- groups. This field will be 'true' when the field is ACLed to the gaia-group of the requester's domain.",
          "type": "boolean"
        },
        "membership": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAcl"
        },
        "person": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopePersonAcl",
          "description": "Indicates that the field is accessible to a person."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAcl": {
      "description": "Used when the field is accessible to a membership that the person has.",
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAcl",
      "properties": {
        "circle": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAclCircleAcl"
        },
        "contactGroup": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAclContactGroupAcl"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAclCircleAcl": {
      "description": "Used when a field is accessible to a circle.",
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAclCircleAcl",
      "properties": {
        "circleId": {
          "type": "string"
        },
        "circleSet": {
          "enum": [
            "UNKNOWN",
            "YOUR_CIRCLES",
            "EXTENDED_CIRCLES"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "displayName": {
          "description": "Equivalent to Circle.display_name for the circle_id. Included when FieldAclOption.FULL_ACL_WITH_DETAILS is requested. This field is read-only and ignored on update.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAclContactGroupAcl": {
      "description": "Used when a field is accessible to a legacy contact group. Contact groups are discouraged and may be deprecated soon. ContactGroupAcls are read-only. If they are included as part of an ACL on an Update, an exception is thrown.",
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopeMembershipAclContactGroupAcl",
      "properties": {
        "contactGroupId": {
          "description": "A contact group ID. This is either a user-defined contact group hex ID, or it is the string name of the enum constant in Group.PredefinedId in FBS backend.proto for predefined groups. Common values for the predefined name include, but are not limited to: all, myContacts, starred, chatBuddies, friends, family, coworkers, and blocked.",
          "type": "string"
        },
        "displayName": {
          "description": "The localized display name for the predefined group, if known; or, the display name for the user-defined contact group. Included when FieldAclOption.FULL_ACL_WITH_DETAILS is requested.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopePersonAcl": {
      "description": "Used when a field is accessible to a person. NOTE: ACLs to a circle or to a non-self person are no longer supported, so this can only be applied to the requester self.",
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldAclAclEntryScopePersonAcl",
      "properties": {
        "displayName": {
          "description": "DEPRECATED. This is not different than reading from person.name for a self-read; ACLs to a circle or to a non-self person are no longer supported. Equivalent to Name.display_name for the person_id profile. Included when the profile Name is ACLed to the requester and FieldAclOption.FULL_ACL_WITH_DETAILS is requested. This field is read-only and ignored on update.",
          "type": "string"
        },
        "personId": {
          "type": "string"
        },
        "photoUrl": {
          "description": "DEPRECATED. This is not different than reading from person.photo for a self-read; ACLs to a circle or to a non-self person are no longer supported. Equivalent to Photo.url for the person_id profile. Included when the profile Photo is ACLed to the requester and FieldAclOption.FULL_ACL_WITH_DETAILS is requested. This field is read-only and ignored on update.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFieldEmergencyInfo": {
      "description": "Emergency information for Person field, such as Phone or Email. See go/emergency-trusted-contacts-papi.",
      "id": "AppsPeopleOzExternalMergedpeopleapiFieldEmergencyInfo",
      "properties": {
        "emergencyLevel": {
          "enum": [
            "EMERGENCY_LEVEL_UNSPECIFIED",
            "EMERGENCY_LEVEL_PRIMARY"
          ],
          "enumDescriptions": [
            "The field (such as phone) is not designated for emergency communication.",
            "The field (such as phone) is designated for emergency communication."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiFileAs": {
      "description": "The FileAs field in Contacts is used to override the DisplayName of a Contact for that User. ",
      "id": "AppsPeopleOzExternalMergedpeopleapiFileAs",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiGPayExtendedData": {
      "description": "Extension data for use in GPay Product Profile. go/gpay-product-profile-1-pager Contact: profiles-eng-fe@google.com",
      "id": "AppsPeopleOzExternalMergedpeopleapiGPayExtendedData",
      "properties": {
        "failure": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiProductProfileFailure",
          "description": "Failure type if there is an error when fetching product profile data."
        },
        "internationalNumber": {
          "description": "A number in international format including the country code that is made user readable by including formatting such as spaces. Example: \"+41 44 668 1800\" DEPRECATED: A user's phone number should be masked and not in an international format",
          "type": "string"
        },
        "maskedNumber": {
          "description": "The masked string of a user's phone number The number will be obfucsated with * except the last 4 digits. Refer to: //java/com/google/nbu/paisa/common/PhoneNumberMasker.java",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiGender": {
      "description": "Gender in PeopleApi has some odd semantics about writing and reading that are not obvious from the proto definition. First, the `type` string, when read, always maps to the constrained domain of \"male\", \"female\", and \"other\", aside from a pathological case that PeopleApi would like to fix. There are two typical patterns: 1. `type` is either \"male\" or \"female\" and `custom_type` and `address_me_as` are exactly as specified by an update to PeopleApi, although they are most often absent for \"male\" and \"female\" writes. 2. `type` is \"other\" and `custom_type` is set to a freeform string from the request. `address_me_as` is equal to whatever was provided at write time. When writing, the free-form string for `custom_type` can come from either `custom_type` if the field is present on the request, or if `custom_type` is absent, the string value of `type` will be copied into it. Any value in `type` will be coerced to \"other\" and the free-form value will be copied into `custom_type`, even if `type` is exactly \"other\". Prefer to explicitly set `custom_type` and set type to \"other\" instead of setting type to a free-form value. There are weird edge cases when the value is \"unknown\". Consider the behavior for `type` == \"unknown\" unspecified. Clients reading the gender should use the value from `formatted_type` if `type` is \"male\" or \"female\". If `type` is \"other\", `formatted_type` will be \"Other\" (or some translation) and clients should read `custom_type` for more specificity. ",
      "id": "AppsPeopleOzExternalMergedpeopleapiGender",
      "properties": {
        "addressMeAs": {
          "description": "Preferred pronoun choice. It's unclear whether this value is constrained to a finite domain by UIs. `address_me_as` may be populated regardless of whether `type` is \"male\", \"female\", or \"other\", although most writers only set it if `type` is \"other\".",
          "type": "string"
        },
        "customType": {
          "description": "A free-form string indicating what the user entered as their gender. `custom_type` may exist even if the type is \"male\" or \"female\", although most writers do not set it unless `type` is \"other\".",
          "type": "string"
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "description": "The gender. \"male\", \"female\", or \"other\". If \"other\", typically, additional fields will have additional information.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiGplusExtendedData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiGplusExtendedData",
      "properties": {
        "contentRestriction": {
          "enum": [
            "UNKNOWN",
            "PUBLIC",
            "DISCOVERY",
            "WALLED_GARDEN"
          ],
          "enumDescriptions": [
            "",
            "Can send and consume public content",
            "Restricted to only sending content internally, cannot mutate external content in any manner",
            "Restricted to sending content internally, no public content naturally surfaces"
          ],
          "type": "string"
        },
        "isEnterpriseUser": {
          "description": "Equivalent to having the DASHER_POLICY bit in the REGISTERED state.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiHangoutsExtendedData": {
      "description": "Extension data for use in Hangouts.",
      "id": "AppsPeopleOzExternalMergedpeopleapiHangoutsExtendedData",
      "properties": {
        "hadPastHangoutState": {
          "enum": [
            "UNKNOWN_PAST_HANGOUT_STATE",
            "HAD_PAST_HANGOUT",
            "NO_PAST_HANGOUT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "invitationStatus": {
          "description": "Populated for all contacts. Only set if had_past_hangout_state == HAD_PAST_HANGOUT. INVITATION_NEEDED is not a valid value because there already is a past hangout, which means either the invitation is still pending or it\u2019s been accepted.",
          "enum": [
            "UNKNOWN_INVITATION_STATUS",
            "PENDING_INVITATION",
            "ACCEPTED_INVITATION",
            "INVITATION_NEEDED"
          ],
          "enumDescriptions": [
            "",
            "The invitation is still pending, or was declined",
            "The other user accepted the invitation",
            "An invitation is needed to chat with this user"
          ],
          "type": "string"
        },
        "isBot": {
          "description": "True if this is a Hangouts bot.",
          "type": "boolean"
        },
        "isDismissed": {
          "type": "boolean"
        },
        "isFavorite": {
          "type": "boolean"
        },
        "isPinned": {
          "type": "boolean"
        },
        "userType": {
          "enum": [
            "UNKNOWN_USER_TYPE",
            "INVALID",
            "GAIA",
            "OFF_NETWORK_PHONE",
            "MALFORMED_PHONE_NUMBER",
            "UNKNOWN_PHONE_NUMBER",
            "ANONYMOUS_PHONE_NUMBER"
          ],
          "enumDescriptions": [
            "",
            "No entity found.",
            "Regular GAIA users.",
            "Phone numbers represented as GAIA ids.",
            "Malformed number. Those are numbers that don't comfirm to an E.164 format that we get with phone calls/voicemails (e.g. \"HELLO\").",
            "Unknown number. This is a number that the caller has chosen not to broadcast.",
            "Phone number that Google knows about, but the caller chose not to reveal to the recipient."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiIdentityInfo": {
      "id": "AppsPeopleOzExternalMergedpeopleapiIdentityInfo",
      "properties": {
        "originalLookupToken": {
          "description": "Original lookup token from the request that resulted in this person or one of its containers.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "previousPersonId": {
          "description": "Any former IDs this person may have had, in the case that their ID may have changed. Populated only for sync requests. Examples of such changes include adding an edge to a contact that links to a profile. The ID will change from being contact-oriented to being profile-oriented. To be used to clear out old versions of a person.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "sourceIds": {
          "description": "A list of sources contributing to the merged person, including profiles (with gaia-id), contacts and synthetic-contacts.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiSourceIdentity"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiIm": {
      "id": "AppsPeopleOzExternalMergedpeopleapiIm",
      "properties": {
        "formattedProtocol": {
          "description": "The `protocol` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "protocol": {
          "description": "The protocol of the IM. The protocol can be free form or one of these predefined values: * `aim` * `msn` * `yahoo` * `skype` * `qq` * `googleTalk` * `icq` * `jabber` * `netMeeting`",
          "type": "string"
        },
        "type": {
          "description": "The type of the IM. The type can be free form or one of these predefined values: * `home` * `work` * `other`",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTarget": {
      "description": "How and where to send notifications to this person in other apps, and why the requester can do so. See go/reachability for more info. \"How\" and \"where\" identify the recipient in a P2P Bridge (glossary/p2p bridge), and \"why\" may be helpful in a UI to disambiguate which of several ways may be used to contact the recipient. How: Via a Google profile or a reachable-only phone number that the requester has access to. Specified in the target \"type\" and \"value\". Where: Apps in which the profile/phone number owner may receive notifications. Specified in the repeated \"app\". Why: Which fields in, e.g., a contact associated with this person make the notification target info visible to the requester. Specified in the repeated originating_field param. Example: Alice has a contact Bob, with: Email 0 = bob@gmail.com Phone 0 = +12223334444 Phone 1 = +15556667777 Email 0 and Phone 0 let Alice see Bob's public profile (obfuscated gaia ID = 123). Public profiles are visible by email by default, and Bob has explicitly made it visible via Phone 0. Bob says people can send notifications to his public profile in YouTube. Phone 2 is associated with another Google profile that Bob owns, but he doesn't want others to see it. He is okay with people sending notifications to him in Who's Down if they have this phone number, however. There will be separate InAppNotificationTargets: one for Bob's public Google profile, and one for the second phone number, which is in his private profile. IANT #1 - targeting Bob's public profile (visible via Email 0 and Phone 0): app = [YOUTUBE] type = OBFUSCATED_GAIA_ID value = 123 originating_field: [ { field_type = EMAIL, field_index = 0 } // For Email 0 { field_type = PHONE, field_index = 0 } // For Phone 0 ] IANT #2 - targeting Bob's private profile phone number Phone 1: app = [WHOS_DOWN] type = PHONE value = +15556667777 originating_field: [ { field_type = PHONE, field_index = 1 } // For Phone 1 ]",
      "id": "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTarget",
      "properties": {
        "app": {
          "items": {
            "enum": [
              "UNKNOWN",
              "BABEL",
              "YOUTUBE",
              "WHOS_DOWN",
              "YOUTUBE_MANGO",
              "PHOTOS",
              "GOOGLE_ASSISTANT",
              "KABOO",
              "COMMERCE_PLATFORM",
              "SPACES",
              "MAPS",
              "LOUPE_UNUSED",
              "POMEROY",
              "LOUPE",
              "PEOPLE_PLAYGROUND",
              "NEWS_360",
              "DUO"
            ],
            "enumDescriptions": [
              "Should never be stored in practice",
              "Aka Hangouts",
              "Aka Reactr",
              "Aka Who's Down",
              "Aka YouTube for Emerging Markets",
              "Aka Google Photos",
              "",
              "Aka PAISA, aka Tez",
              "Aka Naksha",
              "Aka Google Spaces",
              "Aka Google Map",
              "This field is deprecated.",
              "Aka Trusted Contacts",
              "Aka Camera by Google Photos",
              "See go/people-playground-design.",
              "Also mdb/social-magazines",
              "Aka Taychon"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "clientData": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTargetClientData"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "originatingField": {
          "description": "There may be more than one field from which this IANT originates, as in the case of Bob's public profile.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTargetOriginatingField"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "UNKNOWN_KEY_TYPE",
            "PHONE",
            "OBFUSCATED_GAIA_ID",
            "EMAIL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "description": "The value of the target, used for delivery. E.g., the obfuscated gaia ID for a visible profile.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTargetClientData": {
      "description": "Client-specific data pertaining to app reachability. No PII data or user content should be stored in this blob.",
      "id": "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTargetClientData",
      "properties": {
        "app": {
          "description": "The app to which this client data applies.",
          "enum": [
            "UNKNOWN",
            "BABEL",
            "YOUTUBE",
            "WHOS_DOWN",
            "YOUTUBE_MANGO",
            "PHOTOS",
            "GOOGLE_ASSISTANT",
            "KABOO",
            "COMMERCE_PLATFORM",
            "SPACES",
            "MAPS",
            "LOUPE_UNUSED",
            "POMEROY",
            "LOUPE",
            "PEOPLE_PLAYGROUND",
            "NEWS_360",
            "DUO"
          ],
          "enumDescriptions": [
            "Should never be stored in practice",
            "Aka Hangouts",
            "Aka Reactr",
            "Aka Who's Down",
            "Aka YouTube for Emerging Markets",
            "Aka Google Photos",
            "",
            "Aka PAISA, aka Tez",
            "Aka Naksha",
            "Aka Google Spaces",
            "Aka Google Map",
            "This field is deprecated.",
            "Aka Trusted Contacts",
            "Aka Camera by Google Photos",
            "See go/people-playground-design.",
            "Also mdb/social-magazines",
            "Aka Taychon"
          ],
          "type": "string"
        },
        "byteValue": {
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTargetOriginatingField": {
      "description": "Info for identifying the specific field in this person that lets the requester send them notifications. These are typically fields added to a contact (e.g., email). There will not always be in originating field, typically in the case that whatever permits the requester to see this target info is not something that can be used on its own for contacting this person.",
      "id": "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTargetOriginatingField",
      "properties": {
        "fieldIndex": {
          "description": "The index of the relevant field in the merged person",
          "format": "int32",
          "type": "integer"
        },
        "fieldType": {
          "enum": [
            "UNKNOWN_FIELD_TYPE",
            "PHONE",
            "EMAIL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "description": "The value of the origin field",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInAppReachability": {
      "description": "This is deprecated in PEOPLE_API/SHARPEN, and should only be used for PROFILES. Which apps the person has indicated they are reachable at for the requester. See go/d13y and com.google.focus.proto.InAppReachability.",
      "id": "AppsPeopleOzExternalMergedpeopleapiInAppReachability",
      "properties": {
        "appType": {
          "enum": [
            "UNKNOWN",
            "BABEL",
            "YOUTUBE",
            "WHOS_DOWN",
            "YOUTUBE_MANGO",
            "PHOTOS",
            "KABOO",
            "COMMERCE_PLATFORM",
            "SPACES",
            "GOOGLE_ASSISTANT",
            "PEOPLE_PLAYGROUND",
            "MAPS",
            "LOUPE_UNUSED",
            "POMEROY",
            "LOUPE",
            "NEWS_360",
            "DUO"
          ],
          "enumDescriptions": [
            "should never be stored in practice",
            "aka Hangouts",
            "aka Reactr",
            "aka Who's Down?",
            "aka YouTube for Emerging Markets",
            "aka Google Photos",
            "aka PAISA",
            "aka Naksha",
            "",
            "",
            "See go/people-playground-design.",
            "Aka Google Map",
            "This field is deprecated.",
            "aka Trusted Contacts",
            "Aka Camera by Google Photos",
            "Also mdb/social-magazines",
            "aka Taychon"
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "reachabilityKey": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiInAppReachabilityReachabilityKey"
        },
        "status": {
          "enum": [
            "UNKNOWN_REACHABLE_STATUS",
            "REACHABLE",
            "NOT_REACHABLE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInAppReachabilityReachabilityKey": {
      "description": "Information pertaining to how this reachable state was established.",
      "id": "AppsPeopleOzExternalMergedpeopleapiInAppReachabilityReachabilityKey",
      "properties": {
        "keyType": {
          "enum": [
            "UNKNOWN_KEY_TYPE",
            "PHONE",
            "OBFUSCATED_GAIA_ID"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "keyValue": {
          "description": "The value of the key by which the user said they may be reachable. E.g., the phone number.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInteractionSettings": {
      "description": "Defines interactions that are allowed or disallowed with this person.",
      "id": "AppsPeopleOzExternalMergedpeopleapiInteractionSettings",
      "properties": {
        "allowed": {
          "type": "boolean"
        },
        "interaction": {
          "enum": [
            "UNKNOWN",
            "INCOMING_CIRCLE_MEMBERSHIP",
            "INCOMING_SOCIAL_EDGE",
            "INVITE_TO_EMAIL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiInterest": {
      "id": "AppsPeopleOzExternalMergedpeopleapiInterest",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiLanguage": {
      "description": "The value can either by a language code conforming to the IETF BCP 47 specification or a custom freeform value. By default the returned value is proxied from FBS Profile.Language. If `include_account_locale` is set on the `MergePersonSourceOptions` the language from go/uls is preferred and returned as primary along with a secondary language from FBS.",
      "id": "AppsPeopleOzExternalMergedpeopleapiLanguage",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiLatLng": {
      "id": "AppsPeopleOzExternalMergedpeopleapiLatLng",
      "properties": {
        "lat": {
          "format": "double",
          "type": "number"
        },
        "lng": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiLegacyFields": {
      "description": "Fields used in legacy applications. Useful for joining legacy and new data streams. Most applications should not care about these fields.",
      "id": "AppsPeopleOzExternalMergedpeopleapiLegacyFields",
      "properties": {
        "mobileOwnerId": {
          "description": "Mobile obfuscated gaia id. This is the same gaia id in metadata.owner_id, but obfuscated with the legacy mobile obfuscator.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiLimitedProfileSettingsField": {
      "id": "AppsPeopleOzExternalMergedpeopleapiLimitedProfileSettingsField",
      "properties": {
        "limitedProfileSettings": {
          "$ref": "SocialGraphApiProtoLimitedProfileSettings"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiLocation": {
      "id": "AppsPeopleOzExternalMergedpeopleapiLocation",
      "properties": {
        "buildingId": {
          "type": "string"
        },
        "buildingName": {
          "description": "The building_name field is only filled if the DESK_LOCATION_ADDITIONAL_DATA extension is active.",
          "type": "string"
        },
        "current": {
          "type": "boolean"
        },
        "deskCode": {
          "description": "Most specific textual description of individual desk location.",
          "type": "string"
        },
        "floorName": {
          "type": "string"
        },
        "floorSection": {
          "type": "string"
        },
        "lastUpdateTime": {
          "description": "Indicates the time this location was added or last edited.",
          "format": "google-datetime",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "source": {
          "description": "Value indicates the origin of this location information.",
          "enum": [
            "UNKNOWN",
            "EXPLICIT",
            "INFERRED"
          ],
          "enumDescriptions": [
            "",
            "The location was directly set by the user or admin.",
            "The location was inferred from available signals (e.g. past rooms usage)."
          ],
          "type": "string"
        },
        "type": {
          "description": "Describes the type of location. For e.g. Grew_up, Desk. Corresponds to FBS backend.proto Location.StandardTag",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiManagementUpchain": {
      "id": "AppsPeopleOzExternalMergedpeopleapiManagementUpchain",
      "properties": {
        "indirectManager": {
          "description": "List of managers in the chain. If user has manager email \"abc@google.com\" and manager's manager has email \"xyz@google.com\" then the list will be: [0]: { email: \"abc@google.com\" } [1]: { email: \"xyz@google.com\" }",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiManagementUpchainIndirectManager"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "status": {
          "enum": [
            "UNKNOWN",
            "OK",
            "PARTIAL",
            "LOOP"
          ],
          "enumDescriptions": [
            "",
            "",
            "An error occurred while retrieving next manager so resulting management upchain is partial up to manager that was not retrieved.",
            "A loop was found in management upchain so resulting upchain contains all managers retrieved in first iteration of the loop."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiManagementUpchainIndirectManager": {
      "id": "AppsPeopleOzExternalMergedpeopleapiManagementUpchainIndirectManager",
      "properties": {
        "email": {
          "type": "string"
        },
        "personId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMapsExtendedData": {
      "description": "Extension data for use in Maps Product Profile.",
      "id": "AppsPeopleOzExternalMergedpeopleapiMapsExtendedData",
      "properties": {
        "failure": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiProductProfileFailure",
          "description": "Failure type if there is an error when fetching product profile data."
        },
        "followeeCount": {
          "description": "Number of people the user is following.",
          "format": "int64",
          "type": "string"
        },
        "followerCount": {
          "description": "Number of people who are following the user.",
          "format": "int32",
          "type": "integer"
        },
        "numContributions": {
          "description": "Sum of creators contributions i.e. reviews, rating, questions, etc.",
          "format": "int64",
          "type": "string"
        },
        "profilePhotoUrl": {
          "description": "The user's profile photo that might have a badge rendered at the corner if the user is eligible for a badge.",
          "type": "string"
        },
        "tagline": {
          "description": "A user's bio, or tagline.",
          "type": "string"
        },
        "topicExpertise": {
          "description": "A topic that creator has expertise in. This will be in the format: emoji associated with the topic, display name of the topic, topic score",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "userCaption": {
          "description": "A user's caption displayed under the user name on their profile page i.e. 'Local Guide Level 8'",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMapsProfile": {
      "description": "Maps Profile Data. See go/product-profiles-backend-api.",
      "id": "AppsPeopleOzExternalMergedpeopleapiMapsProfile",
      "properties": {
        "fieldRestriction": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiMapsProfileFieldRestriction"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "tagline": {
          "type": "string"
        },
        "websiteLink": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiMapsProfileUrlLink",
          "description": "A link to the profile owner's website to be displayed in profile."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMapsProfileFieldRestriction": {
      "id": "AppsPeopleOzExternalMergedpeopleapiMapsProfileFieldRestriction",
      "properties": {
        "clientData": {
          "description": "Opaque data associated with this restriction e.g. abuse status.",
          "format": "byte",
          "type": "string"
        },
        "type": {
          "enum": [
            "TYPE_UNSPECIFIED",
            "HIDE_TAGLINE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMapsProfileUrlLink": {
      "id": "AppsPeopleOzExternalMergedpeopleapiMapsProfileUrlLink",
      "properties": {
        "anchorText": {
          "description": "Anchor text to be displayed as clickable link. If not present, the URL should be displayed directly.",
          "type": "string"
        },
        "url": {
          "description": "The URL to be linked to.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMatchInfo": {
      "description": "Represents the matching information for a field when there is a query.",
      "id": "AppsPeopleOzExternalMergedpeopleapiMatchInfo",
      "properties": {
        "match": {
          "description": "The list of matches ordered by most relevant matching for autocomplete coming first.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiMatchInfoLookupTokenMatch"
          },
          "type": "array"
        },
        "query": {
          "description": "The query token we are matching against.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMatchInfoLookupTokenMatch": {
      "description": "All the substring that were matched for the given query against the current field. Represents a substring of another string.",
      "id": "AppsPeopleOzExternalMergedpeopleapiMatchInfoLookupTokenMatch",
      "properties": {
        "endIndex": {
          "description": "Index right after the last character that matches the query. length = end-start, we have substring = [start, end).",
          "format": "int32",
          "type": "integer"
        },
        "startIndex": {
          "description": "Index of the first unicode character that matches the query.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMembership": {
      "description": "A membership that the person has. The person can be a member of multiple circles and multiple contact-groups. A circle membership is created by adding a person to a circle by person-id or by email. A contact-group membership is created by adding a contact to a contact-group.",
      "id": "AppsPeopleOzExternalMergedpeopleapiMembership",
      "properties": {
        "circleId": {
          "description": "A circle that the person belongs to.",
          "type": "string"
        },
        "contactGroupId": {
          "description": "A contact-group that the person belong to. The id can be either a hex-formatted id or a camel-cased SystemContactGroup predefined group name. The id will be predefined group name iff the system_contact_group_id has a value.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata",
          "description": "The metadata field can be used to determine which container generated the membership. For example, when the membership has a contact_group_id, the metadata.container will be CONTACT and the container_id will be the contact Id."
        },
        "systemContactGroupId": {
          "description": "The membership has a contact_group_id, this field will be populated when the membership is in a system-reserved contact-group.",
          "enum": [
            "UNKNOWN",
            "MY_CONTACTS",
            "STARRED",
            "FRIENDS",
            "FAMILY",
            "COWORKERS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiMission": {
      "id": "AppsPeopleOzExternalMergedpeopleapiMission",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiName": {
      "description": "See go/people-api-howto:names for an overview of name usage in PeopleAPI. The `unstructured_name` field contains a free form name value. The `given_name`, `middle_name`, `family_name`, etc, fields contain the structured name. For CONTACT mutates, (i.e. when Name.metadata.container is CONTACT), it is recommended for clients to set either the `unstructured_name` or the set of structured name fields, not both. * When only the `unstructured_name` is set, it is parsed to produce a best-guess set of structured name values for the `given_name`, `family_name`, etc. * When only the structured name fields are set, the various values are combined to produce an `unstructured_name`. * When both are set, the `unstructured_name` is saved as-is and the structured name fields are saved as-is. This may be confusing as they might not \"match\". For PROFILE mutates, (i.e. when Name.metadata.container is PROFILE), it is _required_ for clients to use the structured name fields as the unstructured field value is ignored on write. The unstructured name fields are generated for convenience on read. For DEVICE_CONTACTS, see b/156020778.",
      "id": "AppsPeopleOzExternalMergedpeopleapiName",
      "properties": {
        "displayName": {
          "description": "Read-only. A name synthesized based on `unstructured_name` and the structured name fields. Example: \"John Smith\" If a language code is passed in the side channel using http://cs/symbol:framework.rpc.DeprecatedPropagatedLanguageCode.value or http://cs/symbol:google.rpc.context.OriginContext.accept_language and the name does not have `honorific_prefix`, `middle_name`, or `honorific_suffix` set, the language code will be used to format `display_name`. If `include_account_locale` is set on the `MergePersonSourceOptions` and a language code is not passed in the side channel. The language code from go/uls will be used as the language code for formatting `display_name`.",
          "type": "string"
        },
        "displayNameLastFirst": {
          "description": "Read-only. A name synthesized based on `unstructured_name` and the structured name fields with the last name first. Example: \"Smith, John\"",
          "type": "string"
        },
        "displayNameSource": {
          "$ref": "SocialGraphApiProtoDisplayNameSource",
          "description": "Read-only. The source of the display name."
        },
        "familyName": {
          "type": "string"
        },
        "formattedName": {
          "description": "DEPRECATED(b/70571931). Use `unstructured_name` instead.",
          "type": "string"
        },
        "givenName": {
          "type": "string"
        },
        "honorificPrefix": {
          "type": "string"
        },
        "honorificSuffix": {
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "middleName": {
          "type": "string"
        },
        "pronunciations": {
          "$ref": "SocialGraphApiProtoPronunciations",
          "description": "This field is stored in contact annotations and merged at read-time. It is available with CONTACT_ANNOTATION container type at read time."
        },
        "shortDisplayName": {
          "description": "Read-only. A possibly shorter version of the user's name. - The purpose of this field is to address the needs of UIs where a full display name might be too large to fit. Instead of relying on `first_name`, which might not be present, `short_display_name` is preferred. - This is only available for PROFILE and DOMAIN_PROFILE container types. - About the actual content in this field: will be the first name when it's visible to the requester, or the same as `display_name`, otherwise. A sample scenario where the first name may not be visible is when the limited profile is returned. For more info, see: http://shortn/_9iV7TJ33la",
          "type": "string"
        },
        "unstructuredName": {
          "description": "The free form name value. For contact mutates it is recommended for clients to set either the `unstructured_name` or the set of structured name fields, not both.",
          "type": "string"
        },
        "yomiFamilyName": {
          "type": "string"
        },
        "yomiFullName": {
          "type": "string"
        },
        "yomiGivenName": {
          "type": "string"
        },
        "yomiHonorificPrefix": {
          "type": "string"
        },
        "yomiHonorificSuffix": {
          "type": "string"
        },
        "yomiMiddleName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiNamePronunciationAudioMetadataInfo": {
      "description": "Pronunciation audio metadata info. See go/name-pronunciation-backend. The metadata itself tracks the state of a user's name pronunciation audio.",
      "id": "AppsPeopleOzExternalMergedpeopleapiNamePronunciationAudioMetadataInfo",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "namePronunciationAudioMetadata": {
          "$ref": "SocialGraphApiProtoNamePronunciationAudioMetadata",
          "description": "Actual metadata proto, shared with FBS backends."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiNickname": {
      "id": "AppsPeopleOzExternalMergedpeopleapiNickname",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "enum": [
            "NICKNAME_UNKNOWN",
            "DEFAULT",
            "OTHER_NAME",
            "MAIDEN_NAME",
            "SHORT_NAME",
            "INITIALS",
            "ALTERNATE_NAME"
          ],
          "enumDescriptions": [
            "",
            "",
            "Used in Profiles UI",
            "",
            "",
            "",
            "The nickname or alternate name, incorporated into Display Name."
          ],
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOccupation": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOccupation",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOpeningHours": {
      "description": "The periods that this place is open during the week. The periods are in chronological order, starting with today in the place-local timezone. An empty (but not absent) value indicates a place that is never open, e.g. because it is closed temporarily for renovations.",
      "id": "AppsPeopleOzExternalMergedpeopleapiOpeningHours",
      "properties": {
        "openNow": {
          "description": "Is this place open right now? Always present unless we lack time-of-day or timezone data for these opening hours.",
          "type": "boolean"
        },
        "periods": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiOpeningHoursPeriod"
          },
          "type": "array"
        },
        "weekdayTexts": {
          "description": "Localized strings describing the opening hours of this place, one string for each day of the week. Will be empty if the hours are unknown or could not be converted to localized text. Example: \"Sun: 18:00-06:00\"",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOpeningHoursEndpoint": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOpeningHoursEndpoint",
      "properties": {
        "day": {
          "description": "A day of the week, as an integer in the range 0-6. 0 is Sunday, 1 is Monday, etc.",
          "format": "uint32",
          "type": "integer"
        },
        "time": {
          "description": "A time in 24-hour \"hhmm\" format (i.e. range is 0000 to 2359).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOpeningHoursPeriod": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOpeningHoursPeriod",
      "properties": {
        "close": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiOpeningHoursEndpoint"
        },
        "open": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiOpeningHoursEndpoint"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOrganization": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOrganization",
      "properties": {
        "assignment": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiOrganizationAssignment"
          },
          "type": "array"
        },
        "certification": {
          "type": "string"
        },
        "costCenter": {
          "type": "string"
        },
        "current": {
          "type": "boolean"
        },
        "department": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "endCalendarDay": {
          "$ref": "GoogleTypeDate",
          "description": "Start and End Dates are better represented as calendar entities. The intention is to replace timestamps. Not set if no value exists. Clients can choose whether to use has* semantics or default value semantics. For writes, the default proto and an absent message are equivalent. Legacy callers in the legacy_timestamp_event_write_behavior_enabled capability allowlist should write to PeopleApi via end_ms and migrate to setting both so they can be removed from the whitelist."
        },
        "endMs": {
          "description": "Clients are encouraged to read the end_calendar_day instead. PeopleApi writes will still use end_ms for legacy callers that are in the legacy_timestamp_event_write_behavior_enabled capability allowlist. New writers must use the calendar_day fields.",
          "format": "int64",
          "type": "string"
        },
        "endMsAsNumber": {
          "format": "int64",
          "type": "string"
        },
        "formattedStringType": {
          "description": "The `string_type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "fteMilliPercent": {
          "format": "int32",
          "type": "integer"
        },
        "importance": {
          "format": "float",
          "type": "number"
        },
        "location": {
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "name": {
          "type": "string"
        },
        "project": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiOrganizationProject"
          },
          "type": "array"
        },
        "startCalendarDay": {
          "$ref": "GoogleTypeDate",
          "description": "Start and End Dates are better represented as calendar entities. The intention is to replace timestamps. Not set if no value exists. Clients can choose whether to use has* semantics or default value semantics. For writes, the default proto and an absent message are equivalent. Legacy callers in the legacy_timestamp_event_write_behavior_enabled capability allowlist should write to PeopleApi via start_ms and migrate to setting both so they can be removed from the allowlist."
        },
        "startMs": {
          "description": "Clients are encouraged to read the start_calendar_day instead. PeopleApi writes will still use start_ms for legacy callers that are in the legacy_timestamp_event_write_behavior_enabled capability allowlist. New writers must use the calendar_day fields.",
          "format": "int64",
          "type": "string"
        },
        "startMsAsNumber": {
          "format": "int64",
          "type": "string"
        },
        "stringType": {
          "description": "The type of the organization. The type can be free form or one of these predefined values: * `work` * `school`",
          "type": "string"
        },
        "symbol": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "type": {
          "enum": [
            "UNKNOWN",
            "WORK",
            "SCHOOL",
            "DOMAIN_ONLY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Used for domains inferred from verified email addresses. May be deprecated when/if we start mapping SCHOOL and WORK Names to Domain."
          ],
          "type": "string"
        },
        "yomiName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOrganizationAssignment": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOrganizationAssignment",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOrganizationProject": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOrganizationProject",
      "properties": {
        "description": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "role": {
          "type": "string"
        },
        "type": {
          "description": "Mapped from StandardProjectTag / CustomProjectTag",
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiOtherKeyword": {
      "id": "AppsPeopleOzExternalMergedpeopleapiOtherKeyword",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "source": {
          "enum": [
            "SOURCE_UNKNOWN",
            "OUTLOOK",
            "CUSTOM"
          ],
          "enumDescriptions": [
            "",
            "Following field is added to support Outlook schema. This field is a general storage for Outlook string data that shall be encoded as: \"name:\" + value strings where name of the Outlook field cannot contain colons. Multiple Outlook fields shall be encoded as multiple Keywords.",
            ""
          ],
          "type": "string"
        },
        "type": {
          "description": "The type of the event. The type depends on the `OtherKeyword.source`. `OUTLOOK` source fields must be one of: * `billing_information` * `directory_server` * `keyword` * `mileage` * `sensitivity` * `user` * `subject` All other fields are treated as a `CUSTOM` source field. The value can be free form or one of these predefined values: * `home` * `other` * `work`",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPerson": {
      "description": "Merged-person combines multiple sources of data like contacts and profiles. See go/people-api and go/understanding-merged-person NOTE: Why are all the fields repeated? See go/people-api-concepts#repeated",
      "id": "AppsPeopleOzExternalMergedpeopleapiPerson",
      "properties": {
        "about": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiAbout"
          },
          "type": "array"
        },
        "address": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiAddress"
          },
          "type": "array"
        },
        "ageRange": {
          "description": "Deprecated. If age is needed use `person.age_range_repeated` instead. Please see go/people-api-howto:age on how to correctly get age data.",
          "enum": [
            "UNKNOWN",
            "LESS_THAN_EIGHTEEN",
            "TWENTY_ONE_OR_OLDER",
            "EIGHTEEN_TO_TWENTY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ageRangeRepeated": {
          "description": "Data on the person's age range, adult status, and age of consent. NOTE: Please read go/people-api-howto:age on how to correctly get age data.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiAgeRangeType"
          },
          "type": "array"
        },
        "birthday": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiBirthday"
          },
          "type": "array"
        },
        "braggingRights": {
          "description": "Used only by contacts, no data will be returned for profiles.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiBraggingRights"
          },
          "type": "array"
        },
        "calendar": {
          "description": "b/145671020: Deprecated for Profiles, but not for Contacts.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiCalendar"
          },
          "type": "array"
        },
        "certifiedBornBefore": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiCertifiedBornBefore"
          },
          "type": "array"
        },
        "circleMembership": {
          "description": "Circles that this person is a member of.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiCircleMembership"
          },
          "type": "array"
        },
        "clientData": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiClientData"
          },
          "type": "array"
        },
        "communicationEmail": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiCommunicationEmail"
          },
          "type": "array"
        },
        "connectionReminder": {
          "description": "Reminder to connect with a Contact (part of go/people-prompts). Also contains contact-level prompts settings. Each Contact can have a single `connection_reminder` (but can have multiple Prompts inside of it). Field is repeated per PeopleAPI data model go/people-api-concepts#repeated. Only supported for CONTACT container.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiConnectionReminder"
          },
          "type": "array"
        },
        "contactCreateContextInfo": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiContactCreateContextInfo"
          },
          "type": "array"
        },
        "contactEditContextInfo": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiContactEditContextInfo"
          },
          "type": "array"
        },
        "contactGroupMembership": {
          "description": "Contact groups that this person is a member of.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiContactGroupMembership"
          },
          "type": "array"
        },
        "contactStateInfo": {
          "description": "Contact state and related metadata. See go/fbs-contacts-trash. If this field was requested but is not set on the Person then the contact is in the DEFAULT contact state. This field is read-only, and should not be set on a mutate (e.g. UpdatePerson) call. Clients must call the explicit APIs (e.g. UntrashPerson) to change contact state.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiContactStateInfo"
          },
          "type": "array"
        },
        "coverPhoto": {
          "description": "DEPRECATED. Now always returns a default cover photo. See go/sunset-cover-photo.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiCoverPhoto"
          },
          "type": "array"
        },
        "customSchemaField": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiCustomSchemaField"
          },
          "type": "array"
        },
        "email": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiEmail"
          },
          "type": "array"
        },
        "emergencyInfo": {
          "description": "Emergency information. See go/emergency-trusted-contacts-papi.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiEmergencyInfo"
          },
          "type": "array"
        },
        "event": {
          "description": "Event is currently in use by contacts.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiEvent"
          },
          "type": "array"
        },
        "extendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonExtendedData",
          "description": "Data added by extensions that are not specific to a particular field."
        },
        "externalId": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiExternalId"
          },
          "type": "array"
        },
        "fileAs": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiFileAs"
          },
          "type": "array"
        },
        "fingerprint": {
          "description": "A fingerprint that can be used to reliably determine if a resource has changed. Externally it is used as part of the etag.",
          "type": "string"
        },
        "gender": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiGender"
          },
          "type": "array"
        },
        "im": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiIm"
          },
          "type": "array"
        },
        "inAppNotificationTarget": {
          "description": "Ways to send in-app notifications to this person. See go/reachability. This field is read-only and ignored for mutates.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiInAppNotificationTarget"
          },
          "type": "array"
        },
        "inAppReachability": {
          "description": "Used only by profile service, deprecated for PeopleAPI and Sharpen. If you aren't sure, contact people-api-users@ and profile-service-eng@.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiInAppReachability"
          },
          "type": "array"
        },
        "interactionSettings": {
          "description": "DEPRECATED. This field isn't populated in people.list.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiInteractionSettings"
          },
          "type": "array"
        },
        "interest": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiInterest"
          },
          "type": "array"
        },
        "language": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiLanguage"
          },
          "type": "array"
        },
        "legacyFields": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiLegacyFields",
          "description": "DEPRECATED. This field was only for backwards compatibility with legacy GData callers, and should not be used by new clients. Legacy fields used for mobile clients."
        },
        "limitedProfileSettings": {
          "description": "Settings for the limited profile. See go/limited-profiles-api.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiLimitedProfileSettingsField"
          },
          "type": "array"
        },
        "linkedPerson": {
          "description": "Other person resources linked indirectly by an edge. The full person or just the IDs may be populated depending on request parameters. We consider linked people distinct people, but they share information. Example: A contact with two outgoing edges. The two edges are considered separate, but linked people.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "location": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiLocation"
          },
          "type": "array"
        },
        "managementUpchain": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiManagementUpchain"
          },
          "type": "array"
        },
        "mapsProfile": {
          "description": "MapsProfile, see go/product-profiles-backend-api",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiMapsProfile"
          },
          "type": "array"
        },
        "membership": {
          "description": "DEPRECATED. Please use `circle_membership` or `contact_group_membership` instead. Contact-groups and circles that this person is a member of.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiMembership"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonMetadata"
        },
        "mission": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiMission"
          },
          "type": "array"
        },
        "name": {
          "description": "See go/people-api-howto:names for details about names in PeopleAPI.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiName"
          },
          "type": "array"
        },
        "namePronunciationAudioMetadataInfo": {
          "description": "Metadata info for a user's name pronunciation audio. See go/name-pronunication-backend.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiNamePronunciationAudioMetadataInfo"
          },
          "type": "array"
        },
        "nickname": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiNickname"
          },
          "type": "array"
        },
        "occupation": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiOccupation"
          },
          "type": "array"
        },
        "organization": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiOrganization"
          },
          "type": "array"
        },
        "otherKeyword": {
          "description": "Legacy arbitrary key value fields",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiOtherKeyword"
          },
          "type": "array"
        },
        "peopleInCommon": {
          "description": "DEPRECATED. This feature was stubbed, but never implemented. This field will not be populated with any results.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "personAttribute": {
          "description": "In order to request this field, the client must set desired PersonAttributeKey in the dedicated RequestMask field `person_attribute`. Unlike other person fields, this field cannot be requested in the `include_field` field mask.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonAttribute"
          },
          "type": "array"
        },
        "personId": {
          "description": "The ID of the person. This is determined by the backend, is unstable, and may not be the same as a user_id. Internally referred as 'personKey' to distinguish from the common PersonId pojo. See go/people-api-concepts#person-id",
          "type": "string"
        },
        "phone": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPhone"
          },
          "type": "array"
        },
        "photo": {
          "description": "See go/people-api-concepts/photos for usage details",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPhoto"
          },
          "type": "array"
        },
        "placeDetails": {
          "description": "Data specific to places. Data which also applies to contacts and profiles such as name, phone, photo, etc. are returned in the corresponding Person fields.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPlaceDetails"
          },
          "type": "array"
        },
        "plusPageInfo": {
          "description": "DEPRECATED. Info about plus pages in the person.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPlusPageInfo"
          },
          "type": "array"
        },
        "posixAccount": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPosixAccount"
          },
          "type": "array"
        },
        "profileUrl": {
          "description": "DEPRECATED. (go/people-api-concepts#repeated): Use person.profile_url_repeated instead. Access to this field is restricted to a set of legacy clients. This is a Google+-only field. See go/fbs-g+-deprecation. NOTE: `Person.profile_url` is only populated for profile-centric person.",
          "type": "string"
        },
        "profileUrlRepeated": {
          "description": "This is a Google+-only field. See go/fbs-g+-deprecation.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiProfileUrl"
          },
          "type": "array"
        },
        "pronoun": {
          "description": "Pronouns are not supported for consumer profiles. See go/pronouns-in-people-system-prd for more details.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPronoun"
          },
          "type": "array"
        },
        "readOnlyProfileInfo": {
          "description": "Information about the profiles that are a part of this Person. This is only applicable to PROFILE and DOMAIN_PROFILE containers.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiReadOnlyProfileInfo"
          },
          "type": "array"
        },
        "relation": {
          "description": "See go/relation-vs-relationship for relation vs relationship explanation.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRelation"
          },
          "type": "array"
        },
        "relationshipInterest": {
          "description": "DEPRECATED. No data is returned for this field anymore.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRelationshipInterest"
          },
          "type": "array"
        },
        "relationshipStatus": {
          "description": "DEPRECATED. No data is returned for this field anymore.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRelationshipStatus"
          },
          "type": "array"
        },
        "rightOfPublicityState": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRightOfPublicityState"
          },
          "type": "array"
        },
        "rosterDetails": {
          "description": "Data specific to rosters (such as Google Groups and Chat Rooms). Data which also applies to contacts and profiles such as name, email, and photo, etc are returned in the corresponding Person fields.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRosterDetails"
          },
          "type": "array"
        },
        "searchProfile": {
          "description": "Profile for Janata and Search. go/janata-profile-in-sgbe",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiSearchProfile"
          },
          "type": "array"
        },
        "sipAddress": {
          "description": "SipAddress is currently in use by contacts.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiSipAddress"
          },
          "type": "array"
        },
        "skills": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiSkills"
          },
          "type": "array"
        },
        "socialConnection": {
          "description": "NOTE: this is used by go/starlight, but not actually used or returned in PeopleAPI. See b/27281119 for context. Please reach out to people-api-eng@ if you have questions.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiSocialConnection"
          },
          "type": "array"
        },
        "sortKeys": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiSortKeys"
        },
        "sshPublicKey": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiSshPublicKey"
          },
          "type": "array"
        },
        "tagline": {
          "description": "Only supported for PLACE container results, no data will be returned for profiles.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiTagline"
          },
          "type": "array"
        },
        "teamsExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiTeamsExtendedData",
          "description": "DEPRECATED. *UNSUPPORTED*. This field is never populated."
        },
        "userDefined": {
          "description": "UserDefined is currently in use by contacts.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiUserDefined"
          },
          "type": "array"
        },
        "visibleToGuests": {
          "description": "Add annotation_id and metadata (product_source) for visible to guests contacts go/visible-to-guests.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiVisibleToGuests"
          },
          "type": "array"
        },
        "website": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiWebsite"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonAttribute": {
      "description": "Client-specific binary blob stored with Person data. This differs from ClientData, which stores structured, key-value pairs.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonAttribute",
      "properties": {
        "attributeKey": {
          "enum": [
            "PERSON_ATTRIBUTE_UNKNOWN",
            "REJECTED_CLEANUP_CARD_SUGGESTIONS"
          ],
          "enumDescriptions": [
            "",
            "The value field of a PersonAttribute object with this key will contain a byte serialized RejectedCleanupCardSuggestions proto, see http://shortn/_3KyFdhbZfW"
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonExtendedData": {
      "description": "Extension data for the whole person entity.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonExtendedData",
      "properties": {
        "aboutMeExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAboutMeExtendedData",
          "description": "For use by AboutMe and SmartProfile clients."
        },
        "appsWaldoExtendedData": {
          "$ref": "SocialGraphWireProtoPeopleapiExtensionAppsWaldoExtendedData",
          "description": "For use with Apps Waldo Availability Data extension"
        },
        "callerIdExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiCallerIdExtendedData",
          "description": "For use with caller ID extension"
        },
        "contactsExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiWebContactsExtendedData",
          "description": "For use with Contacts extension."
        },
        "domainName": {
          "description": "Hosted domain this person is a member of. The domain_name is also returned as part of the person's ReadOnlyProfileInfo, so requesting it via this extension is no longer necessary.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "dynamiteExtendedData": {
          "$ref": "SocialGraphWireProtoPeopleapiExtensionDynamiteExtendedData",
          "description": "For use with Dynamite extension."
        },
        "gpayExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiGPayExtendedData",
          "description": "For use with Google Pay extension."
        },
        "gplusExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiGplusExtendedData",
          "description": "For use with Google+ extension."
        },
        "hangoutsExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiHangoutsExtendedData",
          "description": "For use with Hangouts extension."
        },
        "isPlaceholder": {
          "description": "For use with gmail extensions and lookup by email. If true, no person was actually found using the specified email address, but we want to return TLS info about the email address regardless.",
          "type": "boolean"
        },
        "mapsExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiMapsExtendedData",
          "description": "For use with Maps extension."
        },
        "paisaExtendedData": {
          "$ref": "SocialGraphWireProtoPeopleapiExtensionPaisaExtendedData",
          "description": "For use with Paisa extension"
        },
        "peopleStackExtendedData": {
          "$ref": "SocialGraphWireProtoPeopleapiExtensionPeopleStackExtendedData",
          "description": "DEPRECATED: Use people_stack_person_extended_data instead. For use with PeopleStack extension."
        },
        "peopleStackPersonExtendedData": {
          "$ref": "SocialGraphWireProtoPeopleapiExtensionPeopleStackPersonExtendedData",
          "description": "For use with PeopleStack extension."
        },
        "playGamesExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPlayGamesExtendedData",
          "description": "For use with Play Games Product Profile extension. See go/jam-games-profile. The play games profile will be returned only for profile-centric requests."
        },
        "tlsIsPlaceholder": {
          "description": "For use with the TLS extension and lookup by email. If true, no person was actually found using the specified email address, but we want to return TLS info about the email address regardless. DEPRECATED: Use is_placeholder instead.",
          "type": "boolean"
        },
        "youtubeExtendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiYoutubeExtendedData",
          "description": "For use with Youtube extension."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata": {
      "description": "Metadata for a single Person field. See go/understanding-merged-person",
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata",
      "properties": {
        "aclChoices": {
          "description": "When the container is PROFILE/DOMAIN_PROFILE and the profile owner is the requester, this read-only, synthesized field indicates which ACLs the user is allowed to set on the profile field. This is distinct from field_acl, which is the field's currently set ACL. field_acl will always be a valid ACL choice, except for the case of default synthesized profile fields like monogram profile photos. For those, field_acl does not represent a user-set field ACL, so it may or may not be a valid choice. In all cases, default_acl_choice will always be a valid choice. This is currently only populated on the photo field when the \"person.photo.metadata.acl_choices\" mask is set.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAcl"
          },
          "type": "array"
        },
        "additionalContainerInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAdditionalContainerInfo",
          "description": "Additional information about the container of this field."
        },
        "affinity": {
          "description": "For field-level affinity scores. The affinity between the requester and this particular field in the Person (e.g., frequency of calling a particular phone number).",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiAffinity"
          },
          "type": "array"
        },
        "contactVisibility": {
          "description": "Each field can have different visibility settings Only returned when explicitly requested.",
          "items": {
            "enum": [
              "CONTACT_VISIBILITY_UNSPECIFIED",
              "VISIBLE_TO_GUEST"
            ],
            "enumDescriptions": [
              "",
              "This can be set for annotation fields(e.g. nicknames, relationship) that the user wants to expose to other people in their household. Example use case: differentiate between speed dial nicknames, regular nicknames and relationships"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "container": {
          "description": "DEPRECATED. Use container_type instead. Having the Container be an enum at the PFM message level causes circular dependency when other types try to refer to it. It breaks javascript build targets.",
          "enum": [
            "UNKNOWN",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Data from the user's frequent interactions.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "containerId": {
          "description": "DEPRECATED. Use encoded_container_id instead. The numeric id of the data source. The id is only unique within a single container type. This is only set when the id of the container is numeric, e.g. contact id.",
          "format": "int64",
          "type": "string"
        },
        "containerPrimary": {
          "description": "Indicates if this field is the primary field for the container and container_id.",
          "type": "boolean"
        },
        "containerType": {
          "description": "The source for the data in the field.",
          "enum": [
            "UNKNOWN_CONTAINER",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "NAMED_CHAT_ROOM",
            "UNNAMED_CHAT_ROOM",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Deprecated. E-mail only circle membership should be dead. E-mail only circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact. An entity that is owned by a domain and represents a person, but is not a user in the domain. For more details see https://support.google.com/a/answer/9281635.",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Dynamite \"Named Flat Room\" (NFR). This is a Baggins Roster with label DYNAMITE_SPACE *and* label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Dynamite \"Unnamed Flat Room\" (UFR). This is a Baggins Roster with label DYNAMITE_SPACE but does *not* have label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Device contacts that are used in interaction ranking, but have not been uploaded to Google. These are synthesized people from interaction data. This container type is only used in ListRankedPeople and ListRankedTargets actions. See go/TopNWithClusteringPart1.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "crossDeviceAllowed": {
          "description": "True if this field can be used on other devices than the one it originated from. Assigned by the server. Currently only used for device contacts.",
          "type": "boolean"
        },
        "defaultAclChoice": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAcl",
          "description": "When the container is PROFILE/DOMAIN_PROFILE and the profile owner is the requester, this read-only, synthesized field contains the default ACL choice. This can be used to select a preferred choice from acl_choices. Generally, default_acl_choice should only be preferred for default synthesized profile fields like monogram profile photos. Otherwise, the existing field_acl should be preferred. This is currently only populated on the photo field when the \"person.photo.metadata.acl_choices\" mask is set."
        },
        "deprecatedContactContainerId": {
          "description": "DEPRECATED. Use container_id. Not populated or used at all.",
          "format": "int64",
          "type": "string"
        },
        "edgeKey": {
          "description": "Field is an edge key for this person. Modifying it breaks the link between data sources. This is equivalent to edge_key_info having at least one entry with materialized = true.",
          "type": "boolean"
        },
        "edgeKeyInfo": {
          "description": "Edges that this field creates. This includes all edges and not necessarily just the edge relevant to the joined entities.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiEdgeKeyInfo"
          },
          "type": "array"
        },
        "encodedContainerId": {
          "description": "The encoded id of the data source. The id is only unique within a single container type. This field correlates to person.metadata.identity_info.source_id.id. This field may not be populated in some special cases, where the id is not visible to the querying user. e.g. ListAutocompletions with full phone number query.",
          "type": "string"
        },
        "fieldAcl": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldAcl",
          "description": "When the container is PROFILE and the profile owner is the requester, this field indicates how the profile field is accessible."
        },
        "lastUpdateTime": {
          "description": "Indicates the time that the field was added or last edited. Currently this is populated for: (1) person.birthday with ContainerType PROFILE, DOMAIN_PROFILE or ACCOUNT. (2) person.name, person.address, person.relation, person.email and person.phone with ContainerType CONTACT_ANNOTATION;",
          "format": "google-datetime",
          "type": "string"
        },
        "matchingInfo": {
          "description": "The matching informations if there was a query against this field.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiMatchInfo"
          },
          "type": "array"
        },
        "otherDedupedContainers": {
          "description": "When deduping fields by value, list of containers of the fields that where deduped.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiDedupedContainerInfo"
          },
          "type": "array"
        },
        "primary": {
          "description": "If true, indicates this field is the Person's primary field eg. Contact, and (Profile) Person could have different Name fields, and the Name represented by the Person is primary. For selecting a primary field from RepeatedFields within a Person, use container_primary.",
          "type": "boolean"
        },
        "productMetadata": {
          "description": "The product(s) that generated the data in this field. Empty is equivalent to DEFAULT. ST_USER_METADATA",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiProductMetadata"
          },
          "type": "array"
        },
        "verified": {
          "description": "Indicates whether this is a verified field. It is synthesized from verification and is read-only. If there is at least one verification with status PASSED, the field is considered verified. Currently this is applicable to address, email, name, and phone for PROFILE and DOMAIN_PROFILE. Use .metadata.verified in the request mask.",
          "type": "boolean"
        },
        "visibility": {
          "description": "Currently, only people.get may set this value",
          "enum": [
            "VISIBILITY_UNKNOWN",
            "PUBLIC",
            "USER"
          ],
          "enumDescriptions": [
            "",
            "The field is visible to every user.",
            "The field is visible to the requester. The server cannot provide additional indication beyond that. The field may or may not be also visible to users other than the requester."
          ],
          "type": "string"
        },
        "writeable": {
          "description": "Whether the field is writeable to the requester.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonListWithTotalNumber": {
      "description": "A person list with total number specified.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonListWithTotalNumber",
      "properties": {
        "people": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "totalNumber": {
          "description": "The total number of people, which is aways no less than the size of the above list.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonMetadata": {
      "description": "Metadata for the entire Person resource.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonMetadata",
      "properties": {
        "affinity": {
          "description": "Affinities associated with the person, with respect to the requester.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiAffinity"
          },
          "type": "array"
        },
        "attribution": {
          "description": "Populated when the data for the MergedPerson comes from a 3rd party provider or data source. Clients must display these attributions to the user if they are present. NOTE: This field is only relevant when requesting the following containers: - PLACE (data read from Maps)",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "bestDisplayName": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiBestDisplayName",
          "description": "The best name to use for this person for user-facing display. See go/people-api-howto:names for details about how this field is computed. In many cases this will simply be Person.name[0]. However, Person.name returns only explicit Name fields, but other fields maybe usable as a name (for example: nicknames, file_as, ...). `best_display_name` will be calculated from all fields in storage which are usable as a name, even fields which are not explicitly requested in the MergedPerson result. See go/javagoog/apps/tacotown/socialgraph/entity/PersonNameFormatter.java"
        },
        "blockType": {
          "description": "DEPRECATED. Indicates whether the profile owner has blocked this person. Please use `person.read_only_profile_info.block_type` instead.",
          "items": {
            "enum": [
              "BLOCK_TYPE_UNKNOWN",
              "CIRCLE",
              "LEGACY"
            ],
            "enumDescriptions": [
              "",
              "Profile-blocked users",
              "Chat-blocked users"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "circleId": {
          "description": "DEPRECATED. The circles the person belongs to.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "contactGroupId": {
          "description": "DEPRECATED. Please use `person.contact_group_memberships` instead. The contact groups the person belongs to.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "contactId": {
          "description": "The IDs of all contacts contributing to this person.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "customResponseMaskingType": {
          "description": "DEPRECATED. Customized masking of the response similar to the legacy People2RequestMask People2Params request message. NOTE: This param is inherently client-specific, limited to specific legacy clients, and not open to new usage. NOTE: Effects may be applied to a subset of people in the response.",
          "enum": [
            "UNKNOWN",
            "NONE",
            "MENAGERIE"
          ],
          "enumDescriptions": [
            "",
            "No filtering of the response.",
            "Used by Menagerie to request menagerie-specific custom filtering or masking on the response."
          ],
          "type": "string"
        },
        "deleted": {
          "description": "For sync requests (i.e., changed since the provided sync_token), indicates the resource is a tombstone for a Person resource that has been entirely deleted.",
          "type": "boolean"
        },
        "deprecatedBlocked": {
          "description": "DEPRECATED. Please use `person.read_only_profile_info.block_type` instead.",
          "type": "boolean"
        },
        "deprecatedMembershipCircleId": {
          "description": "DEPRECATED. This field is no longer populated or read.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "deprecatedMembershipContactGroupId": {
          "description": "DEPRECATED. This field is no longer populated or read.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "deviceContactInfo": {
          "description": "Info about the aggregated device contacts. When the person contains RAW_DEVICE_CONTACT containers, each DeviceContactInfo represents a single aggregate device contact made up of one or more raw device contacts.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiDeviceContactInfo"
          },
          "type": "array"
        },
        "identityInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiIdentityInfo",
          "description": "Detailed metadata about the lookup IDs and data sources included in a MergedPerson result."
        },
        "inViewerDomain": {
          "description": "DEPRECATED. Indicates whether this person is in the same domain as the viewer. For proxying trust between two users based on organization membership, see: - go/flex-orgs-platform - go/flex-orgs-compliance-handbook (especially http://shortn/_ChwfAY36Ys)",
          "type": "boolean"
        },
        "incomingBlockType": {
          "description": "DEPRECATED. Indicates whether this person is blocking the profile owner. Please use `person.read_only_profile_info.incoming_block_type` instead.",
          "items": {
            "enum": [
              "BLOCK_TYPE_UNKNOWN",
              "CIRCLE",
              "LEGACY"
            ],
            "enumDescriptions": [
              "",
              "Profile-blocked users",
              "Chat-blocked users"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "lastUpdateTimeMicros": {
          "description": "DEPRECATED. The last update timestamps for the constituent components of this person are available in `identity_info.source_ids`. The time of the most recent change to this person, in !!!NANOS!!! (due to a bug). May be a change to any of the underlying parts of the person (profile, contact, etc.). Not guaranteed to be the timestamp of the most recent change, due to limitations in the backend. This field is not fully deprecated for backend container-specific storage services like ProfileService which lack identity_info. The use is still discouraged in such systems and they should prefer to use the `last_update_time` field of this message instead.",
          "format": "int64",
          "type": "string"
        },
        "model": {
          "description": "The person model that is used to construct this person.",
          "enum": [
            "PERSON_MODEL_UNKNOWN",
            "PROFILE_CENTRIC",
            "CONTACT_CENTRIC"
          ],
          "enumDescriptions": [
            "",
            "The default People API model where a person can contain no more than one profile and potentially many contacts.",
            "The inversion of the default profile-centric model, i.e. a person can contain no more than one contact but potentially many profiles. See go/contact-centric-person-model for more details."
          ],
          "type": "string"
        },
        "objectType": {
          "description": "DEPRECATED.",
          "enum": [
            "OBJECT_TYPE_UNKNOWN",
            "PERSON",
            "PAGE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ownerId": {
          "description": "DEPRECATED. Please use `person.read_only_profile_info.owner_id` instead.",
          "type": "string"
        },
        "ownerUserType": {
          "description": "DEPRECATED. See `person.read_only_profile_info.owner_user_type` instead.",
          "items": {
            "enum": [
              "OWNER_USER_TYPE_UNKNOWN",
              "GOOGLE_USER",
              "GPLUS_USER",
              "GPLUS_DISABLED_BY_ADMIN",
              "GOOGLE_APPS_USER",
              "GOOGLE_APPS_SELF_MANAGED_USER",
              "GOOGLE_FAMILY_USER",
              "GOOGLE_FAMILY_CHILD_USER",
              "GOOGLE_APPS_ADMIN_DISABLED",
              "GOOGLE_ONE_USER",
              "GOOGLE_FAMILY_CONVERTED_CHILD_USER"
            ],
            "enumDescriptions": [
              "",
              "The owner is a Google user.",
              "The owner is a Currents user.",
              "Google+, i.e. INSServiceID::GOOGLE_ME service, is disabled by dasher admin. Only returned for requester's own profile.",
              "The owner is a Google Apps for Work user.",
              "The owner is a self-managed Google Apps for Work user. Only returned for requester's own profile.",
              "The owner is a Google for Families user. Only returned for requester's own profile.",
              "The owner is a Google for Families child user. Only returned for requester's own profile.",
              "The owner has been disabled (archived, suspended) by the G Suite admin.",
              "The owner is a Google One user (go/googleone). Only returned for requester's own profile.",
              "The owner is a Google for Families child user that was converted from an existing user. Only returned for requester's own profile. (go/griffin-account)"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "plusPageType": {
          "description": "DEPRECATED. Please use `Person.plus_page_info` instead.",
          "enum": [
            "PLUS_PAGE_TYPE_UNKNOWN",
            "LOCAL",
            "COMPANY",
            "BRAND",
            "CELEBRITY",
            "CAUSE",
            "ENTERTAINMENT",
            "OTHER",
            "OBSOLETE_PRIVATE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Formerly a private madison account(go/private-madison-account). Don't use it anymore."
          ],
          "type": "string"
        },
        "previousPersonId": {
          "description": "DEPRECATED. This field is no longer populated or read.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "profileOwnerStats": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiProfileOwnerStats",
          "description": "DEPRECATED. Stats/counters pertaining to followers and incoming edges. Please use `person.read_only_profile_info.profile_owner_stats` instead."
        },
        "scoringInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonMetadataScoringInfo",
          "description": "Contact people-directory-dev-team@ if you want to use this field."
        },
        "userVisibleStats": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiUserVisibleStats",
          "description": "DEPRECATED. This field is no longer populated or read."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonMetadataScoringInfo": {
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonMetadataScoringInfo",
      "properties": {
        "rawMatchQualityScore": {
          "description": "Only populated on a SearchDirectoryPeople call, when results are scored. Contact people-directory-dev-team@ if you want to use this field.",
          "format": "double",
          "type": "number"
        },
        "stExpressionResults": {
          "description": "Only populated on a SearchDirectoryPeople call that sends a request with StFieldSpecExpressions. - Used for linking indexed terms with query terms for go/better-name-matching - Name should be alphanumeric or underscores - Value should be an st expression following the syntax at go/stsyntax Contact people-directory-dev-team@ if you want to use this field.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonMetadataScoringInfoStExpressionResult"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPersonMetadataScoringInfoStExpressionResult": {
      "id": "AppsPeopleOzExternalMergedpeopleapiPersonMetadataScoringInfoStExpressionResult",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPhone": {
      "id": "AppsPeopleOzExternalMergedpeopleapiPhone",
      "properties": {
        "canonicalizedForm": {
          "description": "Canonicalized form that follows ITU-T E.164 international public telecommunication numbering plan.",
          "type": "string"
        },
        "emergencyInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiFieldEmergencyInfo",
          "description": "Emergency information. See go/emergency-trusted-contacts-papi."
        },
        "extendedData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPhoneExtendedData",
          "description": "Read-only. Field requested by specifying `HANGOUTS_PHONE_DATA` in `extension_set.extension_names`."
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "description": "The type of the phone number. The type can be free form or one of these predefined values: * `home` * `work` * `mobile` * `homeFax` * `workFax` * `otherFax` * `pager` * `workMobile` * `workPager` * `main` * `googleVoice` * `other`",
          "type": "string"
        },
        "uri": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPhoneExtendedData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiPhoneExtendedData",
      "properties": {
        "structuredPhone": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiStructuredPhone",
          "description": "For use with Hangouts extension."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPhoto": {
      "id": "AppsPeopleOzExternalMergedpeopleapiPhoto",
      "properties": {
        "decoration": {
          "description": "Read-only. Use UpdatePersonPhoto to change photo decorations. If this photo is decorated, this field contains information about its decorations. For now, this will contain at most one entry.",
          "items": {
            "$ref": "SocialGraphApiProtoDecorationOverlay"
          },
          "type": "array"
        },
        "emojiAvatarUrl": {
          "description": "URL of an emoji avatar as an image. See go/emoji-cdn. PeopleAPI will return the SVG format so that it can be scaled client side and so that the images will not be animated. All clients that use this field must also have fall-back handling for using the `Photo.url` field if this is empty. When we have FIFE-compatible emoji-image URLs we will drop this field and return the Photo.url instead. Clients that have their own go/emoji-rendering integration may prefer to render the emoji-avatar from `Photo.glyph` field using their rendering system so that the emoji version/style match the rest of the application. For further background, see go/chatroom-avatar-as-roster-metadata. This field will only be populated if all of: - The PersonFieldMetadata `container_type` for the Photo is NAMED_CHAT_ROOM - The chat room has an emoji type avatar image set",
          "type": "string"
        },
        "glyph": {
          "description": "Unicode emoji representation of the chat room emoji avatar. This can be used by clients that use go/emoji-rendering directly so that they can present this with the same version/style as the rest of their application. This value may also be useful to clients as alt-text for the image. This field will only be populated if all of: - The PersonFieldMetadata `container_type` for the Photo is NAMED_CHAT_ROOM - The chat room has an emoji type avatar image set",
          "type": "string"
        },
        "htmlAttribution": {
          "description": "A set of HTML data provider attributions that must be shown with the result. Supported for PLACES photos only. See: go/understanding-places-api-attribution-requirements",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isDefault": {
          "description": "True when the photo is synthetic or generated (i.e. a monogram or default photo), false when the person has a custom photo.",
          "type": "boolean"
        },
        "isMonogram": {
          "description": "Indicates if the photo is a monogram avatar. Combined with is_default, the type of photo can be determined by: is_default=true, is_monogram=true: Default monogram avatar. is_default=true, is_monogram=false: Default silhouette avatar. is_default=false: Custom photo. is_monogram is irrelevant in this case.",
          "type": "boolean"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "monogramBackground": {
          "description": "When is_monogram=true, this is the background color of the monogram photo as a hex RGB formatted string \"RRGGBB\".",
          "type": "string"
        },
        "originalPhoto": {
          "$ref": "SocialGraphApiProtoImageReference",
          "description": "Read-only. A reference to the original, undecorated profile photo in storage. This field is not stored. It is populated by a live read to /SocialGraphImageService.GetActiveProfilePhoto. This field is only returned when \"person.photo.original_photo\" is specified in the request mask."
        },
        "photoId": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPhotoPhotoStorageId",
          "description": "For writes only. Indicates photo content for person photo-field update. Currently only used for profile-photo updates (not contact photos yet)."
        },
        "photoToken": {
          "description": "Most clients don't need to worry about this field and should just use the `url` to fetch the photo. See go/phototoken-migration-plan for some more context about this field. If you think you want to use this please talk with people-api-eng@ first.",
          "type": "string"
        },
        "url": {
          "description": "See go/people-api-concepts/photos for info on the different representations of URLs.",
          "type": "string"
        },
        "viewerUrl": {
          "description": "A URL for a UI to view the photo in its original context. For example, for a place photo, this is the url of a Google Maps page displaying the photo. Supported for place photos only.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPhotoPhotoStorageId": {
      "description": "Info necessary for looking up a photo in storage.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPhotoPhotoStorageId",
      "properties": {
        "mediaKey": {
          "description": "For writes only, pass the media key that represents the image in photos backend. Note, this is not populated on reads.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPlaceDetails": {
      "description": "Metadata specific to places.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPlaceDetails",
      "properties": {
        "googleUrl": {
          "description": "A URL hosted by Google providing more information about this place This is the URL returned by Places API in the Place.Url.google field",
          "type": "string"
        },
        "latLng": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiLatLng"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "openingHours": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiOpeningHours"
        },
        "primaryTypeName": {
          "description": "The name of the primary type. Examples of primary type are: \"art_school\", \"clothing_wholesaler\", etc. All primary types can be found at http://shortn/_veqh6UwWdc",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPlayGamesExtendedData": {
      "description": "Extension data for use in Play Games Product Profile. See go/jam-games-profile.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPlayGamesExtendedData",
      "properties": {
        "achievements": {
          "description": "User's top achievements that are sorted for example by rarity.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPlayGamesExtendedDataAchievement"
          },
          "type": "array"
        },
        "avatarImageUrl": {
          "description": "The avatar image to display for the user.",
          "type": "string"
        },
        "failure": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiProductProfileFailure",
          "description": "Failure type if there is an error when fetching product profile data."
        },
        "gamerTag": {
          "description": "The gamer tag set by the user. Not set if the user hasn't set a gamer tag yet.",
          "type": "string"
        },
        "playerLevel": {
          "description": "User's level.",
          "format": "int32",
          "type": "integer"
        },
        "profileVisibility": {
          "description": "Specifies the visibility of the player's profile.",
          "enum": [
            "UNKNOWN_CLIENT_PLAYER_PROFILE_VISIBILITY",
            "PRIVATE_VISIBILITY",
            "PUBLIC_VISIBILITY",
            "FRIENDS_VISIBILITY"
          ],
          "enumDescriptions": [
            "Safe default.",
            "The profile is not visible to anyone but the player themselves.",
            "The profile is visible to everyone.",
            "The profile is visible to the player and their PGS friends."
          ],
          "type": "string"
        },
        "totalFriendsCount": {
          "description": "Total number of friends.",
          "format": "int64",
          "type": "string"
        },
        "totalUnlockedAchievements": {
          "description": "How many achievements this player has unlocked.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPlayGamesExtendedDataAchievement": {
      "description": "Details of an achievement that the user has unlocked.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPlayGamesExtendedDataAchievement",
      "properties": {
        "achievementName": {
          "description": "The name of the achievement.",
          "type": "string"
        },
        "achievementUnlockedIconUrl": {
          "description": "The achievement icon url shown to the user if it is unlocked.",
          "type": "string"
        },
        "rarityPercentage": {
          "description": "Rarity of unlocking this achievement (3% of players unlocked would be 3)",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPlusPageInfo": {
      "description": "Information about a plus page and the entity it represents.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPlusPageInfo",
      "properties": {
        "applicationId": {
          "description": "Int64 ID of packaging-service entry; if set, the plus page is associated with a third-party application.",
          "format": "int64",
          "type": "string"
        },
        "entityType": {
          "enum": [
            "ENTITY_TYPE_UNSPECIFIED",
            "LOCAL",
            "COMPANY",
            "BRAND",
            "CELEBRITY",
            "CAUSE",
            "ENTERTAINMENT",
            "OTHER",
            "OBSOLETE_PRIVATE"
          ],
          "enumDescriptions": [
            "",
            "These are the top-level entity types for plus pages.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Used to identify a private madison account(go/private-madison-account). Don't use it anymore."
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPointSpec": {
      "description": "Map marker location for an address.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPointSpec",
      "properties": {
        "bounds": {
          "$ref": "GeostoreRectProto"
        },
        "point": {
          "$ref": "GeostorePointProto"
        },
        "pointSource": {
          "enum": [
            "UNKNOWN_POINT_SOURCE",
            "POINT_SOURCE_UNSPECIFIED",
            "USER_PROVIDED",
            "SYSTEM_PROVIDED",
            "USER_CONFIRMED"
          ],
          "enumDescriptions": [
            "",
            "",
            "User has explicitly moved the point.",
            "System has generated the marker.",
            "System has generated the marker, but user has viewed and saved it unchanged."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPosixAccount": {
      "description": "Custom field that represents POSIX account information. Description of the field family: go/fbs-posix. If account has non-empty Username or Uid we will enforce global uniqueness of (AccountNamespace, CustomerKey, SystemId, Uid) and (AccountNamespace, CustomerKey, SystemId, Username) tuples to ensure there are no duplicates.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPosixAccount",
      "properties": {
        "accountId": {
          "description": "The user visible value is used to distinguish identical posix account fields with different customer key values.",
          "type": "string"
        },
        "accountNamespace": {
          "description": "Value indicates the uniqueness namespace that applies to the POSIX information. The value is included in all POSIX account uniqueness indices. The indexing prevents two accounts within the same customer from having the same username. Namespacing allows Windows and Linux users to share the same username.",
          "enum": [
            "LINUX_GSUITE",
            "LINUX_CONSUMER",
            "WINDOWS_GSUITE",
            "WINDOWS_CONSUMER"
          ],
          "enumDescriptions": [
            "A Linux user for a G Suite domain.",
            "A Linux user for a Google account.",
            "A Windows user for a G Suite domain.",
            "A Windows user for a Google account."
          ],
          "type": "string"
        },
        "accountType": {
          "description": "Value indicates whether the POSIX information is associated with a non-human entity and the validation logic to apply during PosixAccount mutation.",
          "enum": [
            "LINUX_USER_ACCOUNT",
            "LINUX_SERVICE_ACCOUNT",
            "LINUX_EXTERNAL_USER",
            "WINDOWS_USER_ACCOUNT",
            "WINDOWS_SERVICE_ACCOUNT",
            "WINDOWS_EXTERNAL_USER"
          ],
          "enumDescriptions": [
            "Linux account associated with a human user.",
            "Linux account for a non-human entity. Service accounts are used for unattended automation scripts. See go/riseoftherobots for details.",
            "Linux account associated with a human user where the owner of the POSIX data is granted access to resources (VMs) owned by a different (external) organization.",
            "Windows account associated with a human user.",
            "Windows account for a non-human entity. Service accounts are used for unattended automation scripts.",
            "Windows account associated with a human user where the owner of the account data is granted access to resources (VMs) owned by a different (external) organization."
          ],
          "type": "string"
        },
        "customerKey": {
          "description": "The customer associated with the POSIX identity. If the user is already associated with a G Suite Customer, this field has the same value as http://google3/ccc/hosted/policies/settings/dthree_customer_info.proto",
          "format": "int64",
          "type": "string"
        },
        "fingerprint": {
          "description": "The value is automatically set to a SHA-256 fingerprint of the POSIX account. A fingerprint should uniquely identify a POSIX account entry.",
          "type": "string"
        },
        "gecos": {
          "description": "The GECOS (user information) entry for this account.",
          "type": "string"
        },
        "gid": {
          "description": "The default group ID.",
          "format": "uint64",
          "type": "string"
        },
        "homeDirectory": {
          "description": "The path to the home directory for this account.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "operatingSystemType": {
          "description": "Value indicates whether to use Linux or Windows specific validation logic during PosixAccount mutation.",
          "enum": [
            "OPERATING_SYSTEM_TYPE_UNSPECIFIED",
            "LINUX",
            "WINDOWS"
          ],
          "enumDescriptions": [
            "The operating system type associated with the user account information is unspecified.",
            "Linux user account information.",
            "Windows user account information."
          ],
          "type": "string"
        },
        "shell": {
          "description": "The path to the login shell for this account.",
          "type": "string"
        },
        "systemId": {
          "description": "System identifier for which account Username or Uid apply to. If not specified on mutate by a caller it will default to empty value if either Username or Uid are being set. SystemId does require to have a value (even an empty one) because it is included into null-filtered Spanner index used to enforce uniqueness on Username and Uid fields.",
          "type": "string"
        },
        "uid": {
          "description": "The user ID.",
          "format": "uint64",
          "type": "string"
        },
        "username": {
          "description": "The username of the account.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiProductMetadata": {
      "id": "AppsPeopleOzExternalMergedpeopleapiProductMetadata",
      "properties": {
        "productSource": {
          "enum": [
            "PRODUCT_SOURCE_UNKNOWN",
            "PRODUCT_SOURCE_DEFAULT",
            "PRODUCT_SOURCE_ASSISTANT",
            "PRODUCT_SOURCE_JANATA",
            "PRODUCT_SOURCE_SPEED_DIAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "The product for non-prominent people creating their profiles and sharing contact info on Google search (go/project-janata).",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiProductProfileFailure": {
      "description": "Product profiles failure type: the status of the rpc to fetch the product profile.",
      "id": "AppsPeopleOzExternalMergedpeopleapiProductProfileFailure",
      "properties": {
        "failureType": {
          "enum": [
            "PRODUCT_PROFILE_FAILURE_TYPE_UNKNOWN",
            "RPC_FAILURE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiProfileOwnerStats": {
      "description": "Stats pertaining to incoming edges and views, visible to the requester (with acls applied). Related to, but not equal to, com.google.focus.proto.Storage.UserVisibleStats.",
      "id": "AppsPeopleOzExternalMergedpeopleapiProfileOwnerStats",
      "properties": {
        "incomingAnyCircleCount": {
          "description": "Replacement for deprecated follower_count. Comes from the EdgeSummary.",
          "format": "int64",
          "type": "string"
        },
        "viewCount": {
          "description": "Deprecated. This field is no longer populated by the server.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiProfileUrl": {
      "description": "This is a Google+-only field (and thus does not exist for consumer users). See go/fbs-g+-deprecation.",
      "id": "AppsPeopleOzExternalMergedpeopleapiProfileUrl",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiPronoun": {
      "description": "Message to represent a user's set of preferred pronouns, see go/pronouns-backend.",
      "id": "AppsPeopleOzExternalMergedpeopleapiPronoun",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "pronounData": {
          "$ref": "SocialGraphApiProtoPronounData"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactAnalyticalInfo": {
      "id": "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactAnalyticalInfo",
      "properties": {
        "dataSet": {
          "description": "The data set within the account that this raw contact belongs to.",
          "type": "string"
        },
        "dirty": {
          "description": "The CP2 dirty field which indicates the sync state of the raw contact: https://developer.android.com/reference/android/provider/ContactsContract.SyncColumns#DIRTY True if the row is changed but not synced",
          "type": "boolean"
        },
        "sourceIdExist": {
          "description": "Whether the source ID exists for non-Google contacts. Won't set for Google contacts.",
          "type": "boolean"
        },
        "syncInfo": {
          "$ref": "SocialGraphApiProtoSyncInfo",
          "description": "The Sync Info of a raw contact."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo": {
      "description": "Raw device contact information.",
      "id": "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo",
      "properties": {
        "accountName": {
          "description": "Account name of raw contact, e.g. \"google@gmail.com\".",
          "type": "string"
        },
        "accountType": {
          "description": "Account type of raw contact, e.g. \"com.google\" or \"com.linkedin.android\".",
          "type": "string"
        },
        "appContactData": {
          "description": "The detailed app-specific endpoint data available for the given RawDeviceContactInfo instance. This proto should be used to obtain the list of actions and mimetypes supported by the third-party app. Design: go/3p-contact-upload",
          "items": {
            "$ref": "SocialGraphApiAppContactData"
          },
          "type": "array"
        },
        "appInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAppUniqueInfo",
          "description": "The app-specific endpoint data needed for app action fulfillment. Usage of this field should be avoided on the server-side, and should use the more detailed |full_app_info| field. "
        },
        "crossDeviceAllowed": {
          "description": "If true, this raw contact can be used on other devices than the one it originated from. Assigned by the server.",
          "type": "boolean"
        },
        "deviceContactMetadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata",
          "description": "Extra metadata for this raw contact."
        },
        "googleContactId": {
          "description": "The focus contact id for Google contacts.",
          "format": "int64",
          "type": "string"
        },
        "id": {
          "description": "The base64 serialized social.graph.peopleapi.proto.internal.RawDeviceContactId. This id should be used to correlate to field.metadata.encoded_container_id when the field.metadata.container_type is RAW_DEVICE_CONTACT The id also correlates to person.metadata.identity_info.source_id.id.",
          "type": "string"
        },
        "photoType": {
          "description": "The type of photo from the device (if any).",
          "enum": [
            "PHOTO_TYPE_UNKNOWN",
            "NO_PHOTO",
            "THUMBNAIL",
            "FULL_SIZE_PHOTO"
          ],
          "enumDescriptions": [
            "",
            "This raw contact doesn't have a photo.",
            "This raw contact only has a thumbnail.",
            "This raw contact has a full size photo."
          ],
          "type": "string"
        },
        "rawContactId": {
          "description": "The id of the raw contact on the device.",
          "format": "int64",
          "type": "string"
        },
        "rawDeviceContactAnalyticalInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiRawDeviceContactAnalyticalInfo",
          "description": "Only to be used by Romanesco team specifically for analytics."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiReadOnlyProfileInfo": {
      "description": "Metadata information about a profile. This message replaces legacy profile-specific singleton fields from the PersonMetadata proto (singleton top level Person fields are not compatible with non-profile-centric person results, which may include multiple profile containers).",
      "id": "AppsPeopleOzExternalMergedpeopleapiReadOnlyProfileInfo",
      "properties": {
        "accountEmail": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiAccountEmail",
          "description": "The account email linked to the profile, if any exists and is visible to the requester."
        },
        "blockType": {
          "description": "Indicates whether the profile owner has blocked this person.",
          "items": {
            "enum": [
              "BLOCK_TYPE_UNKNOWN",
              "CIRCLE",
              "LEGACY"
            ],
            "enumDescriptions": [
              "",
              "Profile-blocked users",
              "Chat-blocked users"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "customerInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiCustomerInfo",
          "description": "CustomerInfo for dasher user. The reader has to explicitly request this in the field_mask as 'read_only_profile_info.customer_info'"
        },
        "domainInfo": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiReadOnlyProfileInfoDomainInfo",
          "description": "DEPRECATED. Use the `ReadOnlyProfileInfo.customer_info` field instead (b/138120418). Only populated if in_viewer_domain is true."
        },
        "inViewerDomain": {
          "description": "DEPRECATED. Proxying trust between users in a domain should use go/flex-orgs-platform. For more info see: http://doc/18i0-C7vWcz2UuXYBsmulnriVCK3_EuMPpRlPa2OmMHw#heading=h.dobotdwx25kg Indicates whether the profile owner is in the same domain as the viewer.",
          "type": "boolean"
        },
        "incomingBlockType": {
          "description": "Indicates whether this person is blocking the profile owner.",
          "items": {
            "enum": [
              "BLOCK_TYPE_UNKNOWN",
              "CIRCLE",
              "LEGACY"
            ],
            "enumDescriptions": [
              "",
              "Profile-blocked users",
              "Chat-blocked users"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "objectType": {
          "description": "DEPRECATED.",
          "enum": [
            "OBJECT_TYPE_UNKNOWN",
            "PERSON",
            "PAGE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ownerId": {
          "description": "The Focus-obfuscated Gaia ID of the profile owner (go/obfuscated-ids).",
          "type": "string"
        },
        "ownerUserType": {
          "items": {
            "enum": [
              "OWNER_USER_TYPE_UNKNOWN",
              "GOOGLE_USER",
              "GPLUS_USER",
              "GPLUS_DISABLED_BY_ADMIN",
              "GOOGLE_APPS_USER",
              "GOOGLE_APPS_SELF_MANAGED_USER",
              "GOOGLE_FAMILY_USER",
              "GOOGLE_FAMILY_CHILD_USER",
              "GOOGLE_APPS_ADMIN_DISABLED",
              "GOOGLE_ONE_USER",
              "GOOGLE_FAMILY_CONVERTED_CHILD_USER"
            ],
            "enumDescriptions": [
              "",
              "The owner is a Google user.",
              "The owner is a Currents user.",
              "Google+, i.e. INSServiceID::GOOGLE_ME service, is disabled by dasher admin. Only returned for requester's own profile.",
              "The owner is a Google Apps for Work user.",
              "The owner is a self-managed Google Apps for Work user. Only returned for requester's own profile.",
              "The owner is a Google for Families user. Only returned for requester's own profile.",
              "The owner is a Google for Families child user. Only returned for requester's own profile.",
              "The owner has been disabled (archived, suspended) by the G Suite admin.",
              "The owner is a Google One user (go/googleone). Only returned for requester's own profile.",
              "The owner is a Google for Families child user that was converted from an existing user. Only returned for requester's own profile. (go/griffin-account)"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "plusPageType": {
          "description": "DEPRECATED. Please use `person.plus_page_info` instead.",
          "enum": [
            "PLUS_PAGE_TYPE_UNKNOWN",
            "LOCAL",
            "COMPANY",
            "BRAND",
            "CELEBRITY",
            "CAUSE",
            "ENTERTAINMENT",
            "OTHER",
            "OBSOLETE_PRIVATE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Formerly a private madison account(go/private-madison-account). Don't use it anymore."
          ],
          "type": "string"
        },
        "profileOwnerStats": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiProfileOwnerStats",
          "description": "Stats/counters pertaining to followers and incoming edges."
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiReadOnlyProfileInfoDomainInfo": {
      "description": "DEPRECATED.",
      "id": "AppsPeopleOzExternalMergedpeopleapiReadOnlyProfileInfoDomainInfo",
      "properties": {
        "domainBadge": {
          "description": "DEPRECATED. Organization badge for the domain this person is a member of. The badge is the primary hosted domain.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "domainName": {
          "description": "DEPRECATED. Hosted domain this person is a member of. Formerly only available via PersonExtendedData.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRelation": {
      "description": "Relation stores the related person between the contact or profile and a third person. See go/relation-vs-relationship for relation vs relationship explanation. This field currently includes RelationshipToMe data in fields value and canonical_value for ContainerType CONTACT_ANNOTATION. This will be moved to RelationshipToMe in b/221081499.",
      "id": "AppsPeopleOzExternalMergedpeopleapiRelation",
      "properties": {
        "canonicalValue": {
          "description": "Canonicalized `value` of the relation from this person to the user. This is currently used for data from contact annotations. Possible canonical values are based from http://google3/googledata/quality/aliases/relationship_en.config.",
          "type": "string"
        },
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "relationDetails": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiRelationRelationDetails",
          "description": "The person whose email matches the Relation.value field, if it is a valid email address. This field is read-only and ignored on update."
        },
        "type": {
          "description": "The relation type. The type can be free form or one of these predefined values: * `spouse` * `child` * `mother` * `father` * `parent` * `brother` * `sister` * `friend` * `relative` * `domesticPartner` * `manager` * `assistant` * `referredBy` * `partner`",
          "type": "string"
        },
        "value": {
          "description": "The person this relation applies to. Custom value provided by the user.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRelationRelationDetails": {
      "id": "AppsPeopleOzExternalMergedpeopleapiRelationRelationDetails",
      "properties": {
        "displayName": {
          "description": "Equivalent to Name.display_name for the person_id profile.",
          "type": "string"
        },
        "jobTitle": {
          "description": "Equivalent to Organization.title for the primary organization of the person_id profile.",
          "type": "string"
        },
        "personId": {
          "type": "string"
        },
        "photoUrl": {
          "description": "Equivalent to Photo.url for the person_id profile.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRelationshipInterest": {
      "description": "Deprecated in b/122464133. No data returned for this field.",
      "id": "AppsPeopleOzExternalMergedpeopleapiRelationshipInterest",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "description": "These fields may give away the sexual orientation of the user.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRelationshipStatus": {
      "description": "Deprecated in b/122464133. No data returned for this field.",
      "id": "AppsPeopleOzExternalMergedpeopleapiRelationshipStatus",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRightOfPublicityState": {
      "description": "User preference for shared endorsements. See go/se-devguide and go/sharedendorsements for details, including guidance on which contexts are which.",
      "id": "AppsPeopleOzExternalMergedpeopleapiRightOfPublicityState",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "state": {
          "enum": [
            "STATE_UNSPECIFIED",
            "NOT_OK_TO_DISPLAY",
            "OK_TO_DISPLAY",
            "OK_TO_DISPLAY_IN_NON_ADS_COMMERCIAL_CONTEXT"
          ],
          "enumDescriptions": [
            "",
            "OK to display in non-commercial contexts, but not in commercial ones.",
            "Okay to display in commercial or advertising contexts.",
            "Okay to display in commercial contexts other than advertising."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRosterDetails": {
      "description": "Information specific to rosters like Google Groups and Chatrooms.",
      "id": "AppsPeopleOzExternalMergedpeopleapiRosterDetails",
      "properties": {
        "abridgedRosterMemberships": {
          "description": "Abridged / sample subset of member details of the roster. NOTE: This field is only returned if the request's field mask includes \"person.roster_details.abridged_roster_memberships\". http://cs/symbol:google.apps.cloudidentity.groups.internal.GroupSummary.abridged_memberships",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiRosterMember"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "rosterMemberCount": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiRosterMemberCount",
          "description": "Indicates the number of members and sub-rosters of the roster. Corresponds to http://cs/symbol:google.apps.cloudidentity.groups.internal.Group.direct_member_count_per_type"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRosterMember": {
      "description": "Represents details of a member of a roster. Used in RosterDetails. Corresponds to http://cs/symbol:google.apps.cloudidentity.groups.internal.Membership",
      "id": "AppsPeopleOzExternalMergedpeopleapiRosterMember",
      "properties": {
        "memberType": {
          "description": "Type of the member.",
          "enum": [
            "ROSTER_MEMBER_TYPE_UNSPECIFIED",
            "PERSON",
            "ROSTER"
          ],
          "enumDescriptions": [
            "",
            "CIG's Membership.Type.USER",
            "CIG's Membership.Type.GROUP"
          ],
          "type": "string"
        },
        "personId": {
          "description": "Focus-Obfuscated Gaia Id of the member.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiRosterMemberCount": {
      "description": "Represents the summary of member counts of a roster. Used in RosterDetails. Corresponds to http://cs/symbol:google.apps.cloudidentity.groups.internal.Group.DirectMemberCountPerType",
      "id": "AppsPeopleOzExternalMergedpeopleapiRosterMemberCount",
      "properties": {
        "directGroupCount": {
          "description": "Indicates the number of direct sub-rosters of the roster. This comes from http://cs/symbol:google.apps.cloudidentity.groups.internal.Group.DirectMemberCountPerType.group_count",
          "format": "int64",
          "type": "string"
        },
        "directUserCount": {
          "description": "Indicates the number of direct, non-roster members of the roster. This comes from http://cs/symbol:google.apps.cloudidentity.groups.internal.Group.DirectMemberCountPerType.user_count",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSearchProfile": {
      "description": "Profile for Janata and Search. go/janata-profile-in-sgbe",
      "id": "AppsPeopleOzExternalMergedpeopleapiSearchProfile",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "searchProfileData": {
          "$ref": "SocialGraphApiProtoSearchProfileData"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSipAddress": {
      "description": "As of 03/2018 is not supported for user Profile.",
      "id": "AppsPeopleOzExternalMergedpeopleapiSipAddress",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "description": "The type of the SIP address. The type can be free form or or one of these predefined values: * `home` * `work` * `mobile` * `other`",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSkills": {
      "id": "AppsPeopleOzExternalMergedpeopleapiSkills",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSocialConnection": {
      "description": "The social connection of this person to the viewer. NOTE: this is used by go/starlight, but not actually used or returned in PeopleAPI. See b/27281119 for context.",
      "id": "AppsPeopleOzExternalMergedpeopleapiSocialConnection",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "type": {
          "items": {
            "enum": [
              "SOCIAL_CONNECTION_UNKNOWN",
              "NO_CONNECTION",
              "GPLUS_SECOND_HOP",
              "DIRECT_CONNECTION",
              "SELF"
            ],
            "enumDescriptions": [
              "",
              "This person is not connected to the viewer.",
              "Google+ user is a second hop relative to viewer.",
              "User is a contact or in circles of the viewer.",
              "This person is the viewer."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSortKeys": {
      "id": "AppsPeopleOzExternalMergedpeopleapiSortKeys",
      "properties": {
        "affinity": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiAffinity"
          },
          "type": "array"
        },
        "interactionRank": {
          "description": "Deprecated. This field is only populated with 0.000 for legacy reasons. Clients should not use this field.",
          "type": "string"
        },
        "lastName": {
          "type": "string"
        },
        "lastNameRaw": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "nameRaw": {
          "description": "Raw name strings that were used to generate the name and last_name sort keys fields above. Contacts+ need them to generate section headers for list view (b/30642866).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSourceIdentity": {
      "description": "Id of a single source from the merged person.",
      "id": "AppsPeopleOzExternalMergedpeopleapiSourceIdentity",
      "properties": {
        "container": {
          "description": "The type of source. To be deprecated infavor of container_type",
          "enum": [
            "UNKNOWN",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Data from the user's frequent interactions.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "containerType": {
          "description": "The type of the source.",
          "enum": [
            "UNKNOWN_CONTAINER",
            "PROFILE",
            "CONTACT",
            "CIRCLE",
            "PLACE",
            "ACCOUNT",
            "EXTERNAL_ACCOUNT",
            "DOMAIN_PROFILE",
            "DOMAIN_CONTACT",
            "DEVICE_CONTACT",
            "GOOGLE_GROUP",
            "NAMED_CHAT_ROOM",
            "UNNAMED_CHAT_ROOM",
            "AFFINITY",
            "RAW_DEVICE_CONTACT",
            "CONTACT_ANNOTATION",
            "DELEGATED_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "Google Profile. PROFILE fields are editable by the profile owner, unless the field metadata includes writeable=false.",
            "Google Contact",
            "Deprecated. E-mail only circle membership should be dead. E-mail only circle membership of non-g+ user.",
            "A maps place",
            "The requester's own Gaia account. ACCOUNT fields are not editable by anyone. They only occur when the requester is \"me\". In the event an ACCOUNT field is ACLed non-private, it will be returned as a PROFILE field when viewed by a requester who is not \"me\".",
            "LinkedExternalSites (go/PeopleApiConnectedSites)",
            "Google-For-Work Profile. DOMAIN_PROFILE fields are editable by the Dasher administrator of the domain. They are not editable by the profile owner.",
            "Domain shared contact. An entity that is owned by a domain and represents a person, but is not a user in the domain. For more details see https://support.google.com/a/answer/9281635.",
            "To be deprecated in favor of RAW_DEVICE_CONTACT See go/mergedperson-for-device-contacts Aggregation is represented using person.metadata.device_contact_info",
            "Google group. Examples: sales@zara.es.",
            "Dynamite \"Named Flat Room\" (NFR). This is a Baggins Roster with label DYNAMITE_SPACE *and* label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Dynamite \"Unnamed Flat Room\" (UFR). This is a Baggins Roster with label DYNAMITE_SPACE but does *not* have label DYNAMITE_NAMED_SPACE. See go/people-api-concepts#chat-rooms",
            "Device contacts that are used in interaction ranking, but have not been uploaded to Google. These are synthesized people from interaction data. This container type is only used in ListRankedPeople and ListRankedTargets actions. See go/TopNWithClusteringPart1.",
            "Data from a raw (non-aggregated) device contact. See go/mergedperson-for-device-contacts",
            "Data from contact annotation. Contact annotations are currently generated and used by Google Assistant.",
            "Data from delegated contacts. Delegated contacts are the contacts delegated to the current requester. The requester can then access those contacts. See go/ph-delegation."
          ],
          "type": "string"
        },
        "deleted": {
          "description": "In sync responses, indicates whether the identity source has been deleted. Not applicable to GOOGLE_GROUP.",
          "type": "boolean"
        },
        "id": {
          "description": "The encoded id of the data source. This field correlates to PersonFieldMetadata.encoded_container_id. The possible values of this `id` field are as follows based on the value of the `container_type` field: CONTACT: Hex-encoded contact id. PROFILE: DOMAIN_PROFILE: GOOGLE_GROUP: NAMED_CHAT_ROOM: Focus-obfuscated Gaia ID. DOMAIN_CONTACT: Synthetic-contact id representing the domain shared contact. PLACE: Encoded PlaceId (go/javagoog/maps/api/places/util/PlaceIdEncoder.java) RAW_DEVICE_CONTACT: Pair of device_id and raw_contact_id, encoded as base64 serialized social.graph.peopleapi.proto.internal.RawDeviceContactId proto. CONTACT_ANNOTATION: Pair of annotation_id and event_timestamp, encoded as base64 serialized social.graph.peopleapi.proto.internal.ContactAnnotationId proto. -- DEPRECATED container types -- If the container is CIRCLE, then the id is going to be the synthetic- contact id representing the email-only circle member or gaia circle member for which the requester does not have a contact for.",
          "type": "string"
        },
        "lastUpdated": {
          "description": "Last update timestamp of this source. NOTE: Only populated for CONTACT container type in Java PeopleAPI. Populated for CONTACT, PROFILE, DOMAIN_PROFILE in Sharpen implementation. NOTE: Not populated for GOOGLE_GROUP.",
          "format": "google-datetime",
          "type": "string"
        },
        "lastUpdatedMicros": {
          "description": "**DEPRECATED** Please use `last_updated` field instead. Last update timestamp of this source in microseconds. NOTE: Only populated for CONTACT container type.",
          "format": "int64",
          "type": "string"
        },
        "sourceEtag": {
          "description": "NOTE: Not populated for GOOGLE_GROUP.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiSshPublicKey": {
      "description": "Custom field that represents SSH public keys associated with the user. We can treat the field as a map from a string fingerprint to the SSH public key information.",
      "id": "AppsPeopleOzExternalMergedpeopleapiSshPublicKey",
      "properties": {
        "expirationTime": {
          "format": "google-datetime",
          "type": "string"
        },
        "fingerprint": {
          "description": "The value is automatically set to a SHA-256 fingerprint of an SSH public key. A fingerprint should uniquely identify an SSH public key.",
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiStructuredPhone": {
      "description": "This message mirrors the ContactPhoneNumber message in ccc/grand_central/common/types.proto. For various reasons, we cannot take on a direct dependency. See other proto file for most recent documentation.",
      "id": "AppsPeopleOzExternalMergedpeopleapiStructuredPhone",
      "properties": {
        "formattedType": {
          "description": "The phone formatted type. See docs from mirrored proto: http://google3/ccc/grand_central/common/types.proto?l=128&rcl=241000760",
          "type": "string"
        },
        "phoneNumber": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiStructuredPhonePhoneNumber"
        },
        "shortCode": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiStructuredPhoneShortCode"
        },
        "type": {
          "description": "The type of phone. See docs from mirrored proto: http://google3/ccc/grand_central/common/types.proto?l=125&rcl=241000760",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiStructuredPhonePhoneNumber": {
      "id": "AppsPeopleOzExternalMergedpeopleapiStructuredPhonePhoneNumber",
      "properties": {
        "e164": {
          "type": "string"
        },
        "i18nData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiStructuredPhonePhoneNumberI18nData"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiStructuredPhonePhoneNumberI18nData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiStructuredPhonePhoneNumberI18nData",
      "properties": {
        "countryCode": {
          "format": "int32",
          "type": "integer"
        },
        "internationalNumber": {
          "type": "string"
        },
        "isValid": {
          "type": "boolean"
        },
        "nationalNumber": {
          "type": "string"
        },
        "regionCode": {
          "type": "string"
        },
        "validationResult": {
          "enum": [
            "UNKNOWN",
            "IS_POSSIBLE",
            "INVALID_COUNTRY_CODE",
            "TOO_SHORT",
            "TOO_LONG",
            "IS_POSSIBLE_LOCAL_ONLY",
            "INVALID_LENGTH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiStructuredPhoneShortCode": {
      "id": "AppsPeopleOzExternalMergedpeopleapiStructuredPhoneShortCode",
      "properties": {
        "code": {
          "description": "The phone code. See docs from mirrored proto: http://google3/ccc/grand_central/common/types.proto?l=70&rcl=241000760",
          "type": "string"
        },
        "countryCode": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiTagline": {
      "id": "AppsPeopleOzExternalMergedpeopleapiTagline",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiTeamsExtendedData": {
      "description": "*UNSUPPORTED*. This message is never populated and is no longer used.",
      "id": "AppsPeopleOzExternalMergedpeopleapiTeamsExtendedData",
      "properties": {
        "adminTo": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "admins": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "dottedLineManagers": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "dottedLineReports": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonListWithTotalNumber"
        },
        "failures": {
          "items": {
            "enum": [
              "UNKNOWN_FAILURE",
              "MANAGEMENT_CHAIN",
              "REPORTS",
              "DOTTED_LINE_REPORTS",
              "DOTTED_LINE_MANAGERS",
              "ADMINS",
              "ADMIN_TO"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "managementChain": {
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson"
          },
          "type": "array"
        },
        "reports": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonListWithTotalNumber"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiUserDefined": {
      "id": "AppsPeopleOzExternalMergedpeopleapiUserDefined",
      "properties": {
        "key": {
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiUserVisibleStats": {
      "description": "DEPRECATED in favor of ProfileStats. Stats pertaining to incoming edges and views, visible to the requester (with acls applied). Related to, but not equal to, com.google.focus.proto.Storage.UserVisibleStats.",
      "id": "AppsPeopleOzExternalMergedpeopleapiUserVisibleStats",
      "properties": {
        "incomingAnyCircleCount": {
          "description": "Replacement for deprecated follower_count. Comes from the EdgeSummary.",
          "format": "int64",
          "type": "string"
        },
        "viewCount": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiVisibleToGuests": {
      "description": "Store metadata information like annotation-id and product source for visible to guests contacts go/visible-to-guests.",
      "id": "AppsPeopleOzExternalMergedpeopleapiVisibleToGuests",
      "properties": {
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiWebContactsExtendedData": {
      "id": "AppsPeopleOzExternalMergedpeopleapiWebContactsExtendedData",
      "properties": {
        "isIncomplete": {
          "description": "Used by Contacts client-side to indicate whether a person is not completed.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiWebsite": {
      "id": "AppsPeopleOzExternalMergedpeopleapiWebsite",
      "properties": {
        "formattedType": {
          "description": "The `type` translated and formatted in the request locale. See go/people-api-howto/localization for details on how to usage.",
          "type": "string"
        },
        "metadata": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPersonFieldMetadata"
        },
        "rel": {
          "description": "Currently in Oz: \"Links\": Links with no rel. \"Other profiles\": Links with rel=ME. \"Contributor to\": Links with rel=CONTRIBUTOR_TO or PAST_CONTRIBUTOR_TO.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiWebsiteRelationshipInfo"
          },
          "type": "array"
        },
        "type": {
          "description": "The type of the website. The type can be free form or one of these predefined values: * `home` * `work` * `blog` * `profile` * `homePage` * `ftp` * `reservations` * `appInstallPage`: website for a Currents application. * `other`",
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiWebsiteRelationshipInfo": {
      "id": "AppsPeopleOzExternalMergedpeopleapiWebsiteRelationshipInfo",
      "properties": {
        "type": {
          "enum": [
            "UNKNOWN",
            "ME",
            "NOT_ME",
            "CONTRIBUTOR_TO",
            "PAST_CONTRIBUTOR_TO"
          ],
          "enumDescriptions": [
            "",
            "rel=\"me\"",
            "rel=\"\"",
            "rel=\"contributor-to\"",
            "rel=\"past-contributor-to\""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AppsPeopleOzExternalMergedpeopleapiYoutubeExtendedData": {
      "description": "Extension data for use in Youtube Product Profile.",
      "id": "AppsPeopleOzExternalMergedpeopleapiYoutubeExtendedData",
      "properties": {
        "channelData": {
          "description": "Information about a channel created by the user. A user can create multiple Youtube channels.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiChannelData"
          },
          "type": "array"
        },
        "failure": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiProductProfileFailure",
          "description": "Failure type if there is an error when fetching product profile data."
        }
      },
      "type": "object"
    },
    "AssistantApiAccessControlOutput": {
      "description": "Access settings for providers.",
      "id": "AssistantApiAccessControlOutput",
      "properties": {
        "allowNonUnicornUserAccessYoutubeKids": {
          "description": "If true, the user consented to use YouTube Kids as a video provider for non-unicorn users(voice recognized adults or guest). Unicorn accounts shouldn\u2019t use this setting.",
          "type": "boolean"
        },
        "guestAccessOnYoutube": {
          "enum": [
            "UNKNOWN_GUEST_ACCESS",
            "USE_DEFAULT_ACCOUNT_FOR_GUEST",
            "DISABLED_FOR_GUEST"
          ],
          "enumDescriptions": [
            "",
            "Guests can access content using linked users' account.",
            "No access for guests."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiActionV2SupportedFeatures": {
      "description": "The features supported by the ActionV2 protocol. Note that after we move on to ConversationProto for all surfaces we can remove this message.",
      "id": "AssistantApiActionV2SupportedFeatures",
      "properties": {
        "expressUrlInSettingsResponseSupported": {
          "description": "This flag is used to work around a bug in AGSA 6.8 that got away. The bug prevents users from accessing their shopping list if the URL of the shopping list is not a keep.google.com URL. This will happen when switch the backend that stores the shopping list from Keep to a backend maintained by the Google Shopping Express team.",
          "type": "boolean"
        },
        "reconnectClientInputSupported": {
          "description": "Whether client supports reconnect client input in action v2 payload. This capability is needed to determine if client supports parsing client input payload from actionv2 proto for workflow purposes. See go/personal-workflow. OWNER:nyzstar,vvvemuri.",
          "type": "boolean"
        },
        "simpleActionV2PuntSupported": {
          "description": "Whether or not the surface supports a simple UnsupportedAction instead of a ModalState punt card for rendering. For ActionV2 punt cards, the ModalState extension on the ResourceSet is the canonical way of building punt cards. However, while most all devices support the ActionV2 protocol, not all devices handle the ModalState rendering as part of the ActionV2. For these devices, we want to build a modified ActionV2 for punt cards which omits this ModalState. At present, this is only Android Wear and should not be used for other devices if they support ModalState or Conversation protocol.",
          "type": "boolean"
        },
        "supportedActionType": {
          "description": "A list of all the action types supported by the client. These should be the string representation of majel.ActionTypes within \"quality/majel/api/proto/action_v2.proto\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "takeScreenshotSupported": {
          "description": "Checks if screenshots can be taken on the client. This field is set on the client from AGSA 7.2 onwards.",
          "type": "boolean"
        },
        "voiceDelightImmersiveUiSupported": {
          "description": "If IMMERSIVE_ACTIONS UiType is supported by the client.",
          "type": "boolean"
        },
        "voiceDelightStickersSupported": {
          "description": "If Voice Delight Stickers are supported by the client. In order to support Voice Delight stickers, the client should know how to extract sticker_url from VoiceDelightSystemInteractionSegment.",
          "type": "boolean"
        },
        "voiceDelightSuggestionsSupported": {
          "description": "If Voice Delight Suggestion Chips are supported by the client. In order to support Voice Delight Suggestion Chips, the client should know how to extract suggestions form VoiceDelightSystemInteraction.ResourceSet.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiAndroidIntentCapabilities": {
      "description": "Capabilities related to Android intent support. These capabilities can apply to any device on the Android platform. Provides the list of Android package names that support a given Android intent.",
      "id": "AssistantApiAndroidIntentCapabilities",
      "properties": {
        "androidIntentCapability": {
          "items": {
            "$ref": "AssistantApiAndroidIntentCapabilitiesAndroidIntentCapability"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiAndroidIntentCapabilitiesAndroidIntentCapability": {
      "id": "AssistantApiAndroidIntentCapabilitiesAndroidIntentCapability",
      "properties": {
        "intentActionName": {
          "description": "The Action name of the Android Intent in standard notation (https://developer.android.com/reference/android/content/Intent#getAction()).",
          "type": "string"
        },
        "packageNames": {
          "description": "The Android provider packages that support the intent, e.g. \"com.google.android.deskclock\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiAppCapabilities": {
      "description": "Used to describe app capabilities of the device installed apps reported to the server.",
      "id": "AssistantApiAppCapabilities",
      "properties": {
        "allowlistedForMediaFulfillment": {
          "description": "Indicates whether the provider is compatible for media fulfillment on this surface. For example, Amazon Music isn't compatible with the driving mode.",
          "type": "boolean"
        },
        "appIntegrationsSettings": {
          "$ref": "AssistantApiAppIntegrationsSettings",
          "description": "Currently unused. Will be used in the future when integrating with incremental app capabilities."
        },
        "disabledSystemApp": {
          "description": "This system app is disabled in settings.",
          "type": "boolean"
        },
        "provider": {
          "$ref": "AssistantApiCoreTypesProvider",
          "description": "The installed app of the provider."
        },
        "routableToProviderCloud": {
          "description": "This provider has integrated its cloud backend with Google, and Google can route the user queries to the provider's cloud.",
          "type": "boolean"
        },
        "searchableOnDevice": {
          "description": "This provider has an app that supports on-device search through the provider's own inventory.",
          "type": "boolean"
        },
        "searchableOnServer": {
          "description": "This provider has integrated its content with Google, and Google has enabled to serve its content as a server-side solution.",
          "type": "boolean"
        },
        "supportsScreenlessInitiation": {
          "description": "This provider has an app that supports starting new media playback when there is no screen (e.g. by integrating with the Bisto SDK).",
          "type": "boolean"
        },
        "whitelistedForAnnotation": {
          "description": "This provider is an app which should be used for query annotations. This is useful for apps which may not be already indexed by Google or are client specific.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiAppCapabilitiesDelta": {
      "description": "Used to describe the incremental change of app capabilities of the device installed apps reported to the server.",
      "id": "AssistantApiAppCapabilitiesDelta",
      "properties": {
        "appIntegrationsSettings": {
          "$ref": "AssistantApiAppIntegrationsSettings",
          "description": "Currently unused. Will be used in the future when integrating with incremental app capabilities."
        },
        "providerDelta": {
          "$ref": "AssistantApiCoreTypesProviderDelta",
          "description": "The installed app of the provider."
        }
      },
      "type": "object"
    },
    "AssistantApiAppControlSupport": {
      "id": "AssistantApiAppControlSupport",
      "properties": {
        "enabled": {
          "enum": [
            "DEFAULT_DISABLED",
            "ENABLED_WITH_SMART_DICTATION"
          ],
          "enumDescriptions": [
            "Disable all app control capabilities.",
            "Enable app control SD-dependent capabilities."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiAppIntegrationsSettings": {
      "description": "Contains the app privacy bits used for App Integrations implicit request. (go/app-privacy-settings-for-implicit-requests)",
      "id": "AssistantApiAppIntegrationsSettings",
      "properties": {
        "handleRequestsWithPredictedApps": {
          "description": "Whether to enable Assistant to handle request with predicted apps.",
          "enum": [
            "UNSET",
            "FALSE",
            "TRUE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiAssistantContinuedPresenceSupport": {
      "id": "AssistantApiAssistantContinuedPresenceSupport",
      "properties": {
        "plateSupport": {
          "description": "Indicates in what cases assistant continued presence can be shown as a plate. This field is white-listed as being PII-free. Please do not add PII here.",
          "enum": [
            "DEFAULT_NO_PLATE",
            "SEARCH_ONLY"
          ],
          "enumDescriptions": [
            "Assistant continued presence cannot be shown.",
            "Assistant continued presence can be shown only in SearchNowActivity. See go/lockhart-acp."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiAudioInput": {
      "description": "These capabilities represent the audio input features associated with the device. This includes what kind of audio input the device can handle, and what the privacy circumstances of that input are.",
      "id": "AssistantApiAudioInput",
      "properties": {
        "environment": {
          "enum": [
            "SURROUNDING_USERS",
            "AUTHENTICATED_USER_ONLY"
          ],
          "enumDescriptions": [
            "Audio may be produced by or visible to any users in the vicinity of the authenticated user -- e.g., a speaker. NOTE that this is the default value since it's better to assume that the user is in public when they're not than vice versa.",
            "Audio can be assumed to come from or go to the authenticated user -- e.g., the mic or headphone on a phone or headset."
          ],
          "type": "string"
        },
        "quality": {
          "enum": [
            "VOICE_QUALITY",
            "MUSIC_QUALITY"
          ],
          "enumDescriptions": [
            "An audio device capable of handling audio at fidelity high enough for voice use (TTS, speech recognition, telephone) but insufficient for media playback.",
            "An audio device capable of handling high-fidelity audio, suitable for use as a media device."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiAudioOutput": {
      "description": "These capabilities represent the audio output features associated with the device. This includes what kind of audio output the device can handle, and what the privacy circumstances of that output are.",
      "id": "AssistantApiAudioOutput",
      "properties": {
        "alwaysOnSpeaker": {
          "enum": [
            "UNKNOWN",
            "NOT_SUPPORTED",
            "SUPPORTED"
          ],
          "enumDescriptions": [
            "The setting for always on speaker is unknown.",
            "Always on speaker is not supported.",
            "Always on speaker is supported."
          ],
          "type": "string"
        },
        "environment": {
          "enum": [
            "SURROUNDING_USERS",
            "AUTHENTICATED_USER_ONLY"
          ],
          "enumDescriptions": [
            "Audio may be produced by or visible to any users in the vicinity of the authenticated user -- e.g., a speaker. NOTE that this is the default value since it's better to assume that the user is in public when they're not than vice versa.",
            "Audio can be assumed to come from or go to the authenticated user -- e.g., the mic or headphone on a phone or headset."
          ],
          "type": "string"
        },
        "mediaTtsMixable": {
          "enum": [
            "MEDIA_TTS_MIXABLE_UNKNOWN",
            "MEDIA_TTS_MIXABLE_NOT_SUPPORTED",
            "MEDIA_TTS_MIXABLE_SUPPORTED"
          ],
          "enumDescriptions": [
            "Unknown whether device supports mixing TTS and device media.",
            "Device cannot mix TTS and device media.",
            "Device can mix TTS and device media."
          ],
          "type": "string"
        },
        "quality": {
          "enum": [
            "VOICE_QUALITY",
            "MUSIC_QUALITY"
          ],
          "enumDescriptions": [
            "An audio device capable of handling audio at fidelity high enough for voice use (TTS, speech recognition, telephone) but insufficient for media playback.",
            "An audio device capable of handling high-fidelity audio, suitable for use as a media device."
          ],
          "type": "string"
        },
        "volumeProperties": {
          "$ref": "AssistantApiVolumeProperties"
        }
      },
      "type": "object"
    },
    "AssistantApiBluetoothCapabilities": {
      "description": "Bluetooth capabilities related to usage of a feature.",
      "id": "AssistantApiBluetoothCapabilities",
      "properties": {
        "isBluetoothConnectedProfileRequired": {
          "description": "If this surface needs to bluetooth pair a phone before using a feature.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCallCapabilities": {
      "description": "CallCapabilities supported by a surface. See go/call-capabilities. Next ID: 7",
      "id": "AssistantApiCallCapabilities",
      "properties": {
        "callFormats": {
          "description": "The supported call formats on the surface.",
          "items": {
            "enum": [
              "UNSPECIFIED_FORMAT",
              "AUDIO",
              "VIDEO",
              "TEXT"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "callMediums": {
          "description": "The supported call mediums on the surface.",
          "items": {
            "enum": [
              "UNSPECIFIED_MEDIUM",
              "PSTN",
              "VOIP",
              "EMAIL",
              "ONLINE_CHAT",
              "TEXT_MESSAGING",
              "MESSAGE"
            ],
            "enumDescriptions": [
              "",
              "Public Switched Telephone Network.",
              "Voice Over IP.",
              "",
              "",
              "Super set of SMS and MMS",
              "Super set of EMAIL, ONLINE_CHAT, TEXT_MESSAGING"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "callOptions": {
          "description": "The call options this surface can provide. For example, SPEAKERPHONE is available on Android OPA while iOPA doesn't support it yet.",
          "items": {
            "enum": [
              "UNSPECIFIED_CALL_OPTION",
              "SPEAKERPHONE",
              "BLUETOOTH",
              "HEADSET",
              "MIC",
              "CAMERA"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "Optional to set since call.CONTROL_MIC client_op infers this option.",
              "Optional to set since video_call.CONTROL_CAMERA client_op"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "fallbackToTetheredDeviceAppCapabilities": {
          "description": "If true, APP_ID queries initiated by this device should fall back to execution on the tethered device if it's available and if the primary device cannot perform the action (e.g. due to the app not being installed).",
          "type": "boolean"
        },
        "supportedRecipientTypes": {
          "description": "Should only be checked if nonempty.",
          "items": {
            "enum": [
              "UNSPECIFIED_ENDPOINT",
              "PHONE_NUMBER",
              "EMAIL_ADDRESS",
              "APP_UNIQUE_ID",
              "EMERGENCY_PHONE_NUMBER",
              "VOICEMAIL"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "supportsDuoEmailEndpoint": {
          "description": "Whether the surface supports Duo calling email endpoints.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCameraCapabilities": {
      "description": "These capabilities represent the camera features associated with the device.",
      "id": "AssistantApiCameraCapabilities",
      "properties": {
        "faceMatchCapable": {
          "description": "Whether the device supports Face Match.",
          "type": "boolean"
        },
        "hasCamera": {
          "description": "Whether the device has a camera.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCameraReceiverCapabilities": {
      "description": "These capabilities present the capability of the device running camera receiver apps.",
      "id": "AssistantApiCameraReceiverCapabilities",
      "properties": {
        "hasLimitedCameraStreamCapability": {
          "description": "Whether the device has limited camera stream capability. If true, check supported_camera_receivers for detailed supported cameras.",
          "type": "boolean"
        },
        "supportedCameraReceivers": {
          "description": "The camera receiver cast apps the device supports. Only used if has_limited_camera_stream_capability is true.",
          "items": {
            "$ref": "AssistantApiCoreTypesCastAppInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiCapabilitiesHomeAppCapabilities": {
      "description": "Information about the readiness of Home app features on the device. As of January 2023, this is only populated by Assistant on Android.",
      "id": "AssistantApiCapabilitiesHomeAppCapabilities",
      "properties": {
        "setupState": {
          "description": "The app's installation and setup state. This is most pertinent for Tangor, where lock screen Smart Home queries are fulfilled by a Home app activity that may be blocked if this value is not `SETUP_STATE_COMPLETE`.",
          "enum": [
            "SETUP_STATE_UNKNOWN",
            "SETUP_STATE_INCOMPLETE",
            "SETUP_STATE_COMPLETE"
          ],
          "enumDescriptions": [
            "Setup state is not known, potentially because the installed version of the app does not have the app state service.",
            "First-time setup has not been completed.",
            "First-time setup is known to be complete."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCarAssistantCapabilities": {
      "description": "Capabilities that are associated with Assistants on auto surfaces. This is different from other capabilities such as CarSettingsCapabilities, CloudCarCapabilities since they are specific to settings and 3P cloud information. All the auto/car Assistant specific capabilities should live here.",
      "id": "AssistantApiCarAssistantCapabilities",
      "properties": {
        "shouldPuntMultiAssistantMode": {
          "description": "Indicates whether the current Assistant should provide a multi Assistant specific punt when there are multiple Auto specific Google Assistants (Android Auto Projected (AAP) and Android Auto Embedded (AAE)) in the same GAS enabled car. This will be used by both AAP and AAE. Design doc: go/doubledash++",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCarSettingsCapabilities": {
      "description": "Capabilities that are associated with Assistant Settings on auto surfaces.",
      "id": "AssistantApiCarSettingsCapabilities",
      "properties": {
        "playWarmerWelcome": {
          "description": "If true, it indicates that the auto surface client should receive a warmer welcome TTS for signed-out users. For signed-in user, we will rely on server side metadata. go/aaae:preview-lang",
          "type": "boolean"
        },
        "supportsAddingCars": {
          "description": "If true, it indicates that the client can be used to add cars after account linking with the OEM.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCastAssistantSettingLinkingResult": {
      "id": "AssistantApiCastAssistantSettingLinkingResult",
      "properties": {
        "castLinkingStatus": {
          "description": "Cast linking status for ATV surfaces. This is derived from error messages returned from Cast Orchestration Server and will be used for data profiling only(go/katniss-settings-dashboard).",
          "enum": [
            "NOT_SET",
            "SUCCEED",
            "DEVICE_CONFLICT",
            "DEVICE_NAME_EMPTY",
            "CLIENT_ID_MISSING_TAG",
            "INVALID_DEVICE_ID",
            "DATA_SYNC_THROTTLED",
            "CREATE_ROBOT_ACCOUNT_FAILED",
            "UNAUTHORIZED_CLIENT",
            "OTHER_ERROR"
          ],
          "enumDescriptions": [
            "LINT.IfChange",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "LINT.ThenChange(//depot/google3/logs/proto/assistant/capabilities_log.proto)"
          ],
          "type": "string"
        },
        "truncatedErrorMsg": {
          "description": "The error msg returned from COS, truncated in case it's too large.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCastCapabilities": {
      "description": "These capabilities represent capabilities that have to do with casting that pertain to this device. Next ID: 9",
      "id": "AssistantApiCastCapabilities",
      "properties": {
        "cameraReceiverCapabilities": {
          "$ref": "AssistantApiCameraReceiverCapabilities",
          "description": "Whether the device has limited camera stream capability and if yes, which receivers are supported."
        },
        "cameraStreamSupportedProtocols": {
          "description": "The supported protocols for camera streaming. The value is used as string in go/smarthome-internal-api#camera-stream, so using a string for this field instead of an enum. Supported protocols: (align the definition in go/smarthome-camerastream-trait) - \"hls\": HTTP Live Streaming - \"dash\": Dynamic Adaptive Streaming over HTTP - \"smooth_stream\": Smooth Streaming - \"progressive_mp4\": Progressive MP4 (will likely only be used for Clips) - \"webrtc\": WebRTC (currently, only H.264 is supported) - \"nexustalk\": Internal-only protocol used for Nest",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "canReceiveCast": {
          "description": "True if we can cast things to this device.",
          "type": "boolean"
        },
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "Optional for primarily cast devices (e.g., Chirp, Chromecast). For devices that are NOT primarily cast devices, but having a cast receiver as secondary functionality, this field SHOULD store the cast-device-id to be used to send remote casting commands to the device. Example: Android TV, which supports both Android-native actions as well as remote casting using its built-in cast receiver. Android TV device id contains a DUSI id, which is not a cast-device-id. When executing a cast command on the Android TV, this field is used to route the cast command (through CloudCastService) to the cast receiver on the device."
        },
        "dynamicGroupsSupported": {
          "description": "Whether this device supports dynamic groups or not. It implies if a Stream Control operation (transfer, expansion, and contraction) could be applied on this device since Stream Control is implemented as part of dynamic groups (ie, adding/removing devices from playback)",
          "type": "boolean"
        },
        "groupType": {
          "enum": [
            "NONE",
            "STATIC_GROUP",
            "DYNAMIC_GROUP",
            "STEREO_PAIR"
          ],
          "enumDescriptions": [
            "",
            "Static group is created by the user through UI. It contains two or more devices.",
            "Dynamic group is a temporary group created when devices are added to / removed from a playback. It should be torn down after the playback is done.",
            "Stereo pair is created by the user through UI. It contains exact two devices, a left device and a right device."
          ],
          "type": "string"
        },
        "overlayApplicationsSupported": {
          "description": "Whether UI overlay applications are supported on this device. It's used by Chromecast only.",
          "type": "boolean"
        },
        "yetiGamingSupported": {
          "description": "Whether the device supports playing games through Yeti. This is set by the cast device when the device is updated: Chromecast updates -> Chromecast registers its capabilities with CCS -> CCS passes the capabilities to the AssistantSettingsService -> AssistantSettingsService stores the device's capabilities. go/yeti-gaming-supported-cast-capability",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiClientOpPropertiesDeviceModifySettingClientOpProperty": {
      "description": "The properties of the client op device.MODIFY_SETTING. This proto is stored in the SupportedClientOp proto.",
      "id": "AssistantApiClientOpPropertiesDeviceModifySettingClientOpProperty",
      "properties": {
        "skipAndroidAndGsaVersionCheck": {
          "description": "Additional specific setting capabilities. This boolean is used to indicate whether we want to skip the Android and GSA version check in CheckSettingSchemaAndMaybeGetUris() from assistant/vertical/device/fulfillment/utils/setting_utils.h. Consider setting this field to true if your device is neither Android or GSA (especially when the UserAgent string of your device's TaskRequest will not contain a valid/up-to-date Android/GSA version).",
          "type": "boolean"
        },
        "supportedSettings": {
          "description": "Uses DeviceSetting enum which corresponds to setting_id. This indicates which specific settings are supported by client. An empty list implies all settings are supported.",
          "items": {
            "enum": [
              "UNSPECIFIED",
              "ABOUT_ME",
              "ACCESSIBILITY",
              "ACTIVE_EDGE",
              "ACTIVE_EDGE_SENSITIVITY",
              "ADAPTIVE_BATTERY",
              "ADAPTIVE_BRIGHTNESS",
              "ADAPTIVE_CHARGING",
              "ADAPTIVE_CONNECTIVITY",
              "ADAPTIVE_SOUND",
              "ADD_ACCOUNT",
              "ADD_BLUETOOTH_DEVICE",
              "ADD_DEVICE",
              "ADD_FINGERPRINT",
              "ADS_TRACKING",
              "AIRPLANE_MODE",
              "ALARM_VOLUME",
              "ALARM_SOUND",
              "ALLOW_MULTIPLE_USERS",
              "AMBIENT_DISPLAY_ALWAYS_ON",
              "AMBIENT_DISPLAY_NEW_NOTIFICATION",
              "ANDROID_AUTO",
              "ANDROID_VERSION",
              "APP_BATTERY_USAGE",
              "APP_DATA_USAGE",
              "APP_DETAILS",
              "APP_SHORTCUT",
              "APPS_NOTIFICATIONS",
              "APPS_STORAGE",
              "ASSISTANT_ACCOUNT",
              "ASSISTANT_FACE_MATCH",
              "ASSISTANT_LANGUAGE",
              "ASSISTANT_VOICE_MATCH",
              "AUTO_ROTATE",
              "AUTO_ROTATE_FACE_DETECTION",
              "BACKUP",
              "BATTERY_LEVEL",
              "BATTERY_LOW",
              "BATTERY_PERCENTAGE",
              "BATTERY_PRESENT",
              "BATTERY_SAVER",
              "BATTERY_SAVER_SCHEDULE",
              "BATTERY_SHARE",
              "BATTERY_USAGE",
              "BIOMETRIC",
              "BLUETOOTH",
              "BLUETOOTH_NAME",
              "BLUETOOTH_ADDRESS",
              "BLUETOOTH_SETTINGS",
              "BRIGHTNESS_LEVEL",
              "BUBBLES",
              "CALL_VOLUME",
              "CAMERA_DOUBLE_TWIST",
              "CAST",
              "CAR_CRASH_DETECTION",
              "COLOR_INVERSION",
              "COLOR_CORRECTION",
              "CONVERSATIONS",
              "CHARGING_SOUNDS_AND_VIBRATION",
              "CHARGING_STATE",
              "CONNECTED_DEVICES",
              "CONTACTLESS_PAYMENTS",
              "DATA_ROAMING",
              "DATA_SAVER",
              "DATA_USAGE",
              "DATA_LIMIT",
              "DATA_LIMIT_LEVEL",
              "DATA_WARNING",
              "DATA_WARNING_LEVEL",
              "DEFAULT_ALARM_SOUND",
              "DEFAULT_NOTIFICATION_SOUND",
              "DEFAULT_APPS",
              "DEVELOPER_OPTIONS",
              "DEVICE_ASSISTANT_APP",
              "DEVICE_NAME",
              "DISPLAY_OVER_OTHER_APPS",
              "DISPLAY_SIZE",
              "DO_NOT_DISTURB",
              "DO_NOT_DISTURB_MESSAGES",
              "DO_NOT_DISTURB_CALLS",
              "DO_NOT_DISTURB_ALARMS",
              "DO_NOT_DISTURB_SCHEDULES",
              "DOUBLE_TAP_CHECK_PHONE",
              "DRIVING_MODE",
              "EARTHQUAKE_ALERTS",
              "EMERGENCY",
              "EMERGENCY_ALERTS",
              "EMERGENCY_CONTACTS",
              "EMERGENCY_INFORMATION",
              "ETHERNET_TETHERING",
              "EXTRA_DIM",
              "EXTREME_BATTERY_SAVER",
              "FACTORY_RESET",
              "FIND_MY_DEVICE",
              "FLASHLIGHT",
              "FOCUS_MODE",
              "FONT_SIZE",
              "FREE_UP_SPACE",
              "FINGERPRINT_MANAGER",
              "GESTURES",
              "HAPTIC_FEEDBACK_VIBRATION",
              "HARD_KEYBOARD",
              "HEADS_UP",
              "HIGH_REFRESH_RATE",
              "HOT_SPOT",
              "HOTSPOT_TETHERING",
              "HOT_WORD",
              "IP_ADDRESS",
              "IMPROVE_LOCATION_ACCURACY",
              "JUMP_TO_CAMERA",
              "KEYBOARD_SHORTCUTS",
              "LIFT_CHECK_PHONE",
              "LIVE_TRANSLATE",
              "LOCATION",
              "LOCATION_HISTORY",
              "LOCATION_BLUETOOTH_SCANNING",
              "LOCATION_WIFI_SCANNING",
              "LOCK_SCREEN",
              "LOCK_SCREEN_DEVICE_CONTROLS",
              "LOCK_SCREEN_WALLET",
              "MAC_ADDRESS",
              "MAGNIFICATION",
              "MAGNIFY_BUTTON",
              "MAGNIFY_TRIPLE_TAP",
              "MANIFY_BUTTON",
              "MANIFY_TRIPLE_TAP",
              "MEDIA",
              "MEDIA_VOLUME",
              "MICROPHONE_ACCESS",
              "MOBILE",
              "MOBILE_DATA",
              "MUSIC",
              "MUTE_MODE",
              "NETWORK",
              "NETWORK_RESET",
              "NFC",
              "NIGHT_LIGHT_INTENSITY",
              "NIGHT_LIGHT_SWITCH",
              "NIGHT_MODE",
              "NOTIFICATION_BADGE",
              "NOTIFICATION_SOUND",
              "NOTIFICATION_ON_SCREEN",
              "NOTIFICATION_HISTORY",
              "NOTIFY_FOR_PUBLIC_NETWORKS",
              "ONEHANDED_MODE",
              "OS_VERSION",
              "PASSWORD",
              "PERMISSION_MANAGER",
              "PERMISSION_USAGE",
              "PERSONALIZATION",
              "PRINTING",
              "PHONE_NUMBER",
              "PICTURE_IN_PICTURE",
              "POINTER_SPEED",
              "POWER_MENU",
              "REMINDERS",
              "REQUIRE_DEVICE_UNLOCK_FOR_NFC",
              "RINGTONE",
              "RING_VOLUME",
              "NEARBY_DEVICES_SCANNING",
              "NEARBY_SHARE",
              "SCREEN_LOCKING_SOUND",
              "SCREEN_MAGNIFICATION",
              "SCREEN_TIMEOUT",
              "SCREEN_LOCK",
              "SCREEN_SAVER",
              "SELECT_TO_SPEAK",
              "SET_TIME_AUTOMATICALLY",
              "SET_TIME_ZONE_AUTOMATICALLY",
              "SETTINGS",
              "SIM",
              "SIM_MANAGER",
              "SPEECH_RATE",
              "STORAGE_USAGE",
              "SWIPE_FOR_NOTIFICATION",
              "SWITCH_ACCESS",
              "SYSTEM_UPDATE",
              "SYSTEM_UPDATES",
              "SYSTEM_NAVIGATION",
              "SYSTEM_NAVIGATION_GESTURES",
              "SYSTEM_NAVIGATION_BUTTONS",
              "TALKBACK_PASSWORDS",
              "TEXT_TO_SPEECH",
              "TIME_ZONE",
              "UNUSED_APPS",
              "USB",
              "USB_TETHERING",
              "VERBOSE_TTS",
              "VIBRATE",
              "VIBRATION",
              "VIBRATION_MODE",
              "VOICE",
              "VOLUME_LEVEL",
              "WAKE_SCREEN_FOR_NOTIFICATIONS",
              "WALLPAPERS",
              "WEBVIEW",
              "WIFI",
              "WIFI_ADD_NETWORK",
              "WIFI_ADD_NETWORK_QR_CODE",
              "WIFI_CALLING",
              "WIFI_HOTSPOT",
              "ABOUT_PHONE",
              "ACCOUNTS",
              "APPLICATION",
              "ASSISTANT",
              "AUDIO",
              "BATTERY",
              "BELL_SCHEDULE",
              "CONTINUED_CONVERSATION",
              "DATE_TIME",
              "DARK_THEME",
              "DEVICE_INFO",
              "DICTIONARY",
              "DIGITAL_WELLBEING",
              "DISPLAY",
              "LANGUAGE",
              "NIGHT_LIGHT",
              "NOTIFICATION",
              "NOTIFICATION_VOLUME",
              "PHONE_RINGTONE",
              "PRIVACY",
              "ROAMING",
              "ROUTINES",
              "SEARCH",
              "SECURITY",
              "SOUND",
              "SPELL_CHECKER",
              "SYSTEM",
              "STORAGE",
              "VPN",
              "AUTOCLICK",
              "CARET_HIGHLIGHT",
              "CHROMEVOX",
              "CURSOR_HIGHLIGHT",
              "DOCKED_MAGNIFIER",
              "FOCUS_HIGHLIGHT",
              "FULLSCREEN_MAGNIFIER",
              "HIGH_CONTRAST_MODE",
              "LARGE_CURSOR",
              "MONO_AUDIO",
              "STICKY_KEYS",
              "TAP_DRAGGING",
              "VIRTUAL_KEYBOARD",
              "WEARABLE_AMBIENT",
              "WEARABLE_NOISE_CANCELLATION",
              "WEARABLE_TOUCH_CONTROLS",
              "RAISE_TO_TALK",
              "BEDTIME_MODE",
              "THEATER_MODE",
              "TOUCH_LOCK"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Pair a bluetooth device.",
              "Link a device to Assistant/Google Home.",
              "",
              "",
              "",
              "",
              "Deprecated, use DEFAULT_ALARM_SOUND instead.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Bluetooth on/off toggle",
              "",
              "",
              "Bluetooth preferences page",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Cellular carrier (non-wifi) data usage statistics & settings for the device.",
              "Toggle to enable data use limit",
              "The mobile data use after which mobile data is automatically disabled.",
              "Toggle to enable data use warning",
              "The mobile data use after which a warning is shown to the user.",
              "",
              "",
              "",
              "",
              "Device's voice assistant app selection.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Special mode for using device hands-free while driving.",
              "",
              "Main emergency settings",
              "",
              "",
              "",
              "",
              "Makes screen extra dark.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "A page for device gestures",
              "Deprecated, use VIBRATION instead.",
              "",
              "",
              "",
              "Toggle for internet sharing via WiFi.",
              "Common settings page for internet sharing via various means.",
              "",
              "Show my IP address",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Settings page for what is visible on the lock screen.",
              "",
              "",
              "Show my MAC address",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Microphone Access is a toggleable setting that controls if Microphone usage is allowed at the system level or not. It is not the per-App Microphone permission page. https://screenshot.googleplex.com/4hrskftPSur7hHh",
              "Wireless internet settings, including WiFi, Cellular, etc.",
              "Setting to enable/disable cellular data connection being used on the device. https://screenshot.googleplex.com/jMSRtW3Aq4o",
              "",
              "",
              "",
              "Restarts the device network stack, no settings are deleted.",
              "",
              "",
              "",
              "",
              "",
              "Deprecated, use DEFAULT_NOTIFICATION_SOUND instead.",
              "",
              "",
              "",
              "",
              "",
              "Password manager",
              "Shows permissions and allows add/remove allowed apps.",
              "Shows usage of each permission by app.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Settings page for screen locking security methods.",
              "",
              "",
              "",
              "",
              "",
              "Currently active/primary SIM.",
              "",
              "",
              "",
              "",
              "",
              "Deprecated, use SYSTEM_UPDATES instead.",
              "",
              "Settings page for configuring how navigation between apps is done. Specifically android has choice between Buttons of Gestures mode.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Deprecated, use VIBRATION instead.",
              "Vibration master toggle - controls all vibration functions. Corresponds to \"Vibration & haptics\" toggle in the Android settings app.",
              "Controls whether the ringer mode will be silent or will vibrate. Details in https://developer.android.com/reference/android/media/AudioManager#RINGER_MODE_VIBRATE Different from VIBRATION from above.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Duplicate, use HOT_SPOT instead",
              "Begin of NGA proto consistence",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Duplicate, use NIGHT_MODE instead",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "End of NGA proto consistence",
              "Chrome OS specific accessibility settings",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "End of Chrome OS specific accessibility settings",
              "Wearable device settings",
              "",
              "",
              "",
              "",
              "",
              "End of Wearable device settings"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "supportsDoNotDisturbWithDuration": {
          "description": "Additional specific setting capabilities. This boolean is used to indicate if do not disturb with duration is supported through device.MODIFY_SETTING clientop on a client or not.",
          "type": "boolean"
        },
        "supportsMuteUnmute": {
          "description": "Additional specific setting capabilities. This boolean is used to indicate if new unmute logic is enabled on a client or not.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiClientOpPropertiesProviderOpenClientOpProperty": {
      "description": "The properties of the provider.OPEN ClientOp. This proto is stored in the SupportedClientOp proto with the key provider.OPEN.",
      "id": "AssistantApiClientOpPropertiesProviderOpenClientOpProperty",
      "properties": {
        "keepsConversationAliveAfterOpeningApp": {
          "description": "Whether conversation is kept alive after opening the app. See go/keep-opa-conversation-alive for details.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiClockCapabilities": {
      "description": "Used to describe clock capabilities of the device (for example, capabilities related to maximum number of supported alarms and timers that can be created on the device). Fields may be populated by clients or be backfilled by SAL (in case of Timon, for example).",
      "id": "AssistantApiClockCapabilities",
      "properties": {
        "maxSupportedAlarms": {
          "description": "Maximum number of alarms that can be created on the client.",
          "format": "int32",
          "type": "integer"
        },
        "maxSupportedExtendedTimerDuration": {
          "$ref": "AssistantApiDuration",
          "description": "Maximum extended timer duration supported by the client. The extended timer duration is the total start-to-finish duration after an AddTimeToTimer operation. E.g. if a user sets a timer for 30 minutes, and later adds 10 minutes, the extended duration is 40 minutes."
        },
        "maxSupportedTimerDuration": {
          "$ref": "AssistantApiDuration",
          "description": "Maximum duration of timers that can be created on the client."
        },
        "maxSupportedTimers": {
          "description": "Maximum number of timers that can be created on the client.",
          "format": "int32",
          "type": "integer"
        },
        "preferredStopwatchProvider": {
          "$ref": "AssistantApiCoreTypesProvider",
          "description": "The preferred provider to use for stopwatch related functionality."
        },
        "restrictAlarmsToNext24h": {
          "description": "Whether the client restricts alarms to ring within the next 24 hours.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCommunicationUiCapabilities": {
      "description": "UI capabilities for the surfaces rendering Comms features. See go/rohan-comms-fluid-actions-customization.",
      "id": "AssistantApiCommunicationUiCapabilities",
      "properties": {
        "fluidActionsUiType": {
          "enum": [
            "DEFAULT",
            "SIMPLIFIED"
          ],
          "enumDescriptions": [
            "",
            "Fluid actions output optimized for small devices, with no on-device management of conversation state available."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiContactLookupCapabilities": {
      "id": "AssistantApiContactLookupCapabilities",
      "properties": {
        "fallbackToTetheredDevice": {
          "description": "If true, contact.LOOKUP should be routed to the tethered device (if present) if the tethered device supports contact.LOOKUP and the primary device does not.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesAndroidAppInfo": {
      "description": "The android app information of the provider. Like, Spotify. Next ID: 16 LINT.IfChange",
      "id": "AssistantApiCoreTypesAndroidAppInfo",
      "properties": {
        "accountType": {
          "type": "string"
        },
        "androidIntent": {
          "description": "Intent associated with the app. We include intents here as different versions of the same app may support different intents. In those cases, the package_name is not enough to identify the app and we should use the combination of package_name and android_intent. This field might contain sensitive data, if represents ClientOp with encapsulated PII such as user query.",
          "type": "string"
        },
        "appUniqueId": {
          "description": "Store the app unique id endpoint. This will be passed over to app to fulfill the action.",
          "type": "string"
        },
        "appVersion": {
          "description": "The android app version. Deprecated because https://developer.android.com/reference/android/content/pm/PackageInfo.html#getLongVersionCode",
          "format": "int32",
          "type": "integer"
        },
        "dataMimetype": {
          "description": "data_mimetype and account_type are the what AGSA uses to filter which contacts support this Android app in ContactProvider.",
          "type": "string"
        },
        "isBroadcastIntent": {
          "description": "If true, client should broadcast the intent instead of open the intent.",
          "type": "boolean"
        },
        "isDefault": {
          "description": "App is the default app for it's core functionality. For example, it will be true for Android messages if it is the default app to send and receive SMS on the phone.",
          "type": "boolean"
        },
        "localizedAppName": {
          "description": "The localized app name.",
          "type": "string"
        },
        "longVersionCode": {
          "description": "The long android app version.",
          "format": "int64",
          "type": "string"
        },
        "mimetype": {
          "description": "Store mimetype of this endpoint. We will use this as the differentiator for Assistant to know whether to use the RawContact for messaging, call or video call. For example, send message mimetype for whatsapp: \"vnd.android.cursor.item/vnd.com.whatsapp.profile\" voice call mimetype for whatsapp: \"vnd.android.cursor.item/vnd.com.whatsapp.voip.call\"",
          "type": "string"
        },
        "packageName": {
          "description": "The android app package of the provider, like \"com.spotify.music\".",
          "type": "string"
        },
        "providerType": {
          "description": "The OemProviderType is specific for OEM system Android apps. For example, in Auto Embedded, the OEM will have a system Radio/Media app. The system app\u2019s capabilities/core functionalities are captured here. For physical media sources, the OEM may decide to implement one media app (thus, one package name) that handles multiple physical media sources. For these cases, each physical media source will be sent as different providers even though the package name is the same.",
          "enum": [
            "UNKNOWN_OEM_PROVIDER_TYPE",
            "RADIO_PROVIDER_TYPE",
            "SXM_RADIO_PROVIDER_TYPE"
          ],
          "enumDescriptions": [
            "",
            "Refers to an app that handles AM/FM Radio via a physical radio tuner in the device. See go/radio-assistant-for-auto.",
            "Refers to an app that handles Satellite (SiriusXM) Radio via a physical Satellite tuner in the device. See go/sxm-on-gas."
          ],
          "type": "string"
        },
        "shortcutId": {
          "description": "Id of the app's Android shortcut to be launched by Assistant. The client is expected to use the Android LauncherApps API to execute this shortcut which in turn will open the app. For example, Whatsapp may create an Android shortcut for a frequently messaged contact with an id \"contact_123\". This field will contain that id and the client can execute it to open up the chat with that particular contact. If this field is set, the package_name field must also be set since both will be used by the LauncherApps API for execution. If this field is set, the intent related fields will be ignored and not used as a fallback. Design: go/shortcut-id-in-provider-open-clientop This field should only be set for devices with Android API level >= 25 (since that is the version from which the LauncherApps startShortcut API is available)",
          "type": "string"
        },
        "targetClass": {
          "description": "The fully qualified target class name of the provider, like \"com.example.myapp.GetOrderService\".",
          "type": "string"
        },
        "versionName": {
          "description": "The android app version name, like \"4.1.091.05.40d\", \"11.2.7.21.alpha\". Android Docs: https://developer.android.com/reference/android/content/pm/PackageInfo#versionName",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesAndroidAppInfoDelta": {
      "description": "The change of AndroidAppInfo, e.g. app installation or deletion for incremental delta app info upload.",
      "id": "AssistantApiCoreTypesAndroidAppInfoDelta",
      "properties": {
        "androidAppInfo": {
          "$ref": "AssistantApiCoreTypesAndroidAppInfo",
          "description": "The android app information of the provider. Like, Spotify."
        },
        "lastUpdateTimestamp": {
          "description": "The client-side timestamp in millis when the app is last updated, installed or deleted.",
          "format": "google-datetime",
          "type": "string"
        },
        "updateType": {
          "description": "App is installed or deleted.",
          "enum": [
            "UNKNOWN_TYPE",
            "IS_INSTALLED",
            "IS_DELETED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCalendarEvent": {
      "description": "This proto contains the information of a calendar event, including title, start time, end time, etc. IMPORTANT: The definition of CalendarEvent proto is being moved to //assistant/api/core_types/governed/calendar_event_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead. LINT.IfChange(CalendarEvent) NEXT_ID: 26",
      "id": "AssistantApiCoreTypesCalendarEvent",
      "properties": {
        "attendees": {
          "description": "Attendees invited to the event, usually includes also the organizer.",
          "items": {
            "$ref": "AssistantApiCoreTypesCalendarEventAttendee"
          },
          "type": "array"
        },
        "backgroundColor": {
          "description": "The background color of the event, in RGB format.",
          "format": "int32",
          "type": "integer"
        },
        "calendarId": {
          "description": "Optional calendar containing the event.",
          "type": "string"
        },
        "creator": {
          "$ref": "AssistantApiCoreTypesCalendarEventAttendee",
          "description": "The person who created this event."
        },
        "description": {
          "description": "Optional description of the event (plain text).",
          "type": "string"
        },
        "end": {
          "$ref": "AssistantApiDateTime",
          "description": "The end time of the event. Start and end time must either both be date or both be datetime. End is exclusive, ie. the first day / first second when the event is over."
        },
        "eventId": {
          "description": "Optional event id provided by assistant server. Needs to be unique, at least on a per-user and calendar level, ideally globally unique. If none is given, the server will assign an id.",
          "type": "string"
        },
        "flairName": {
          "description": "The flair name, calculated according to the event title (go/as-cal-flair). With the flair name, background images can be got from gstatic (go/scs): https://ssl.gstatic.com/tmly/f8944938hffheth4ew890ht4i8/flairs/",
          "type": "string"
        },
        "foregroundColor": {
          "description": "The foreground color of the event, in RGB format.",
          "format": "int32",
          "type": "integer"
        },
        "guestsCanInviteOthers": {
          "description": "Whether the guests can invite other guests.",
          "type": "boolean"
        },
        "guestsCanModify": {
          "description": "Whether the guests can modify the event.",
          "type": "boolean"
        },
        "guestsCanSeeGuests": {
          "description": "Whether the guests of the event can be seen. If false, the user is reported as the only attendee to the event, even though there may be more attendees.",
          "type": "boolean"
        },
        "habitId": {
          "description": "Optional id of the Habit (Calendar Goal) this event is linked to",
          "type": "string"
        },
        "habitStatus": {
          "description": "Optional status for this habit event instance.",
          "enum": [
            "UNKNOWN_STATUS",
            "ACTIVE",
            "DEFERRAL_REQUESTED",
            "COMPLETE",
            "UNDEFERRABLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "htmlLink": {
          "description": "Absolute link to this event in the Calendar web UI.",
          "type": "string"
        },
        "location": {
          "description": "Optional location of the event (plain text).",
          "type": "string"
        },
        "meetingContacts": {
          "items": {
            "$ref": "AssistantApiCoreTypesCalendarEventMeetingContact"
          },
          "type": "array"
        },
        "organizer": {
          "$ref": "AssistantApiCoreTypesCalendarEventAttendee",
          "description": "The organizer of this event."
        },
        "otherAttendeesExcluded": {
          "description": "Whether not all attendees are included in the attendee list. This is set when the attendees list has been truncated (e.g., when the number of attendees is beyond the maxAttendees limitation).",
          "type": "boolean"
        },
        "participationResponse": {
          "description": "The user's response (the owner of this copy of the event) to this event.",
          "enum": [
            "RESPONSE_STATUS_UNSPECIFIED",
            "NEEDS_ACTION",
            "DECLINED",
            "TENTATIVE",
            "ACCEPTED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "recurringEventId": {
          "description": "If this is an instance of a recurring event, recurring_event_id identifies the recurring series as a whole.",
          "type": "string"
        },
        "rooms": {
          "description": "Meeting rooms associated to this event.",
          "items": {
            "$ref": "AssistantApiCoreTypesCalendarEventRoom"
          },
          "type": "array"
        },
        "start": {
          "$ref": "AssistantApiDateTime",
          "description": "The start time of the event. This event is an all-day event if start has no time_of_day."
        },
        "summary": {
          "description": "The title of the event.",
          "type": "string"
        },
        "visibility": {
          "description": "Optional visibility of the event.",
          "enum": [
            "DEFAULT",
            "PUBLIC",
            "PRIVATE",
            "CONFIDENTIAL",
            "SECRET",
            "SHADOW",
            "UNKNOWN"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "When we receive a value outside of this enum it will be replaced with this UNKNOWN field. When trying to send UNKNOWN it will be silently converted to DEFAULT."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCalendarEventAttendee": {
      "description": "Next id: 8",
      "id": "AssistantApiCoreTypesCalendarEventAttendee",
      "properties": {
        "displayName": {
          "description": "Display name, present only if available.",
          "type": "string"
        },
        "email": {
          "description": "Email address of the attendee (calendar), for regular events. For +Events, this field is not populated, instead \"id\" is used.",
          "type": "string"
        },
        "givenName": {
          "description": "Given (first) name, present only if available. This is used for generating meeting titles as given name is preferred over display (full) name (ie: \"Jeff : Sundar\" is better than \"Jeff Dean : Sundar Pichai\").",
          "type": "string"
        },
        "id": {
          "description": "Profile ID of the principal, for +Events. For regular events, this field is not populated, instead \"email\" is used.",
          "type": "string"
        },
        "organizer": {
          "description": "Is this the organizer?",
          "type": "boolean"
        },
        "responseStatus": {
          "description": "Attendees response status.",
          "enum": [
            "RESPONSE_STATUS_UNSPECIFIED",
            "NEEDS_ACTION",
            "DECLINED",
            "TENTATIVE",
            "ACCEPTED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "self": {
          "description": "Is this the owner of this copy of the event?",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCalendarEventMeetingContact": {
      "description": "Next id: 10",
      "id": "AssistantApiCoreTypesCalendarEventMeetingContact",
      "properties": {
        "conferenceId": {
          "description": "ID that corresponds to in ConferenceData.conference_id in calendar.common.ConferenceData proto. For Meet, this is the identifier used to join a meeting via URL.",
          "type": "string"
        },
        "dialInNumberClasses": {
          "items": {
            "enum": [
              "NUMBER_CLASS_UNSPECIFIED",
              "LOW_COST",
              "HIGH_COST",
              "LEGACY"
            ],
            "enumDescriptions": [
              "No number class has been specified.",
              "The number has a low cost to receive calls on.",
              "The number has a high cost to receive calls on.",
              "Class for legacy numbers."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "phoneNumberUri": {
          "description": "Default meeting phone number, for example: \"tel:+1-475-777-1840\"",
          "type": "string"
        },
        "pinNumber": {
          "description": "A PIN that the participant will need to input after dialing in the conference.",
          "type": "string"
        },
        "provider": {
          "$ref": "AssistantApiCoreTypesProvider",
          "description": "Provider info for the meeting."
        },
        "regionCode": {
          "description": "The region code for the default meeting phone number",
          "type": "string"
        },
        "source": {
          "enum": [
            "SOURCE_UNSPECIFIED",
            "STRUCTURED_DATA",
            "UNSTRUCTURED_DATA"
          ],
          "enumDescriptions": [
            "The source is unknown.",
            "The conference information was retrieved from structured fields.",
            "The conference information was parsed and extracted from unstructured fields (e.g. event description)."
          ],
          "type": "string"
        },
        "universalPinNumber": {
          "description": "The universal meeting PIN number for phone numbers in all available countries",
          "type": "string"
        },
        "url": {
          "description": "URL that can be used to join the meeting.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCalendarEventRoom": {
      "description": "A room that is available for a potential meeting or has been booked for a scheduled meeting. Next id: 4",
      "id": "AssistantApiCoreTypesCalendarEventRoom",
      "properties": {
        "email": {
          "description": "Room email that identifies the room and is used to book it.",
          "type": "string"
        },
        "locationDetails": {
          "$ref": "AssistantApiCoreTypesCalendarEventRoomRoomLocationDetails",
          "description": "Additional room details. Read-only, populated on request."
        },
        "name": {
          "description": "Room name (ex: \"MTV-PR55-5-A-Shadow 5K0 (13) GVC (No external guests)\").",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCalendarEventRoomRoomLocationDetails": {
      "description": "Room location details. Read-only, populated on request. Next id: 8",
      "id": "AssistantApiCoreTypesCalendarEventRoomRoomLocationDetails",
      "properties": {
        "building": {
          "description": "Building where the room is (ex: \"PR55\").",
          "type": "string"
        },
        "city": {
          "description": "City where the room is (ex: \"MTV\").",
          "type": "string"
        },
        "floor": {
          "description": "Floor where the room is (ex: \"5\").",
          "type": "string"
        },
        "latitude": {
          "description": "The latitude in degrees.",
          "format": "double",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude in degrees.",
          "format": "double",
          "type": "number"
        },
        "section": {
          "description": "Section in the floor (ex: \"A\").",
          "type": "string"
        },
        "simpleName": {
          "description": "Room name (ex: \"Shadow 5K0\").",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCalendarEventWrapper": {
      "description": "This empty type allows us to publish sensitive calendar events to go/attentional-entities, while maintaining BUILD visibility protection for their contents. The BUILD-visibility-protected extension to this message is defined at http://google3/assistant/verticals/calendar/proto/multi_account_calendar_event.proto IMPORTANT: The definition of CalendarEventWrapper proto is being moved to //assistant/api/core_types/governed/calendar_event_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead.",
      "id": "AssistantApiCoreTypesCalendarEventWrapper",
      "properties": {},
      "type": "object"
    },
    "AssistantApiCoreTypesCastAppInfo": {
      "description": "The cast app information of the provider.",
      "id": "AssistantApiCoreTypesCastAppInfo",
      "properties": {
        "castAppId": {
          "description": "The cast app id. |cast_app_id| is the ID of the cast app used on the current device and |content_app_id| is the ID of the app that provides the actual content. For example, in a group playback, on a follower device, the |cast_app_id| is the follower cast app ID and the |content_app_id| is the leader cast app ID.",
          "type": "string"
        },
        "contentAppId": {
          "description": "The id of the cast app that provides the content in a group. The field will always be filled. In the case of a group playback and the current device is a follower, the |cast_app_id| has the ID of the follower app, and |content_app_id| has ID of the actual content app. In all other cases, |content_app_id| and |cast_app_id| will be the same.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesChromeOsAppInfo": {
      "description": "The ChromeOS app information of the provider. Next ID: 3",
      "id": "AssistantApiCoreTypesChromeOsAppInfo",
      "properties": {
        "localizedAppName": {
          "description": "The localized app name.",
          "type": "string"
        },
        "packageName": {
          "description": "Unique package name that identifies a ChromeOS app of the provider.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCloudProviderInfo": {
      "description": "The third party provider information.",
      "id": "AssistantApiCoreTypesCloudProviderInfo",
      "properties": {
        "agentStyle": {
          "$ref": "AssistantApiCoreTypesCloudProviderInfoAgentStyle"
        },
        "directoryUrl": {
          "description": "URL to a directory page about the third party agent in Assistant HQ. This is a universal (https) URL that may be handled natively by clients to show HQ or launch to the HQ directory web page.",
          "type": "string"
        },
        "logoUrl": {
          "description": "The logo url for the third party provider.",
          "type": "string"
        },
        "name": {
          "description": "The user visible name of the cloud provider, which may be used for example in the chat header during a conversation with the third party.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesCloudProviderInfoAgentStyle": {
      "description": "The style customizations for the 3p agent.",
      "id": "AssistantApiCoreTypesCloudProviderInfoAgentStyle",
      "properties": {
        "backgroundColor": {
          "$ref": "AssistantApiCoreTypesGovernedColor",
          "description": "The background color of the agent. Used if no background image is specified for the given display orientation, or if the provided background image does not fit."
        },
        "headerTheme": {
          "enum": [
            "DEFAULT",
            "DARK",
            "LIGHT"
          ],
          "enumDescriptions": [
            "The client's default theme.",
            "The theme used when the card has a background image. See go/aog-cards-header-theme-dark for details on applying this theme.",
            "The theme used when the card has a background color (and no background image). See go/aog-cards-header-theme-light for details on applying this theme."
          ],
          "type": "string"
        },
        "landscapeBackgroundImageUrl": {
          "description": "URL for the background image of the agent on landscape display.",
          "type": "string"
        },
        "logoUrl": {
          "description": "URL for the image containing the 3p logo. This can include logomark and logotype, or logotype only. If present, this can be used in place of the square logo contained in the top level logo_url field in CloudProviderInfo. See go/cards-logo-customization for details on applying this logo.",
          "type": "string"
        },
        "maskColor": {
          "$ref": "AssistantApiCoreTypesGovernedColor",
          "description": "The color of the mask to apply to the background. See go/aog-cards-background-mask for details on applying this mask."
        },
        "portraitBackgroundImageUrl": {
          "description": "URL for the background image of the agent on portrait display.",
          "type": "string"
        },
        "primaryColor": {
          "$ref": "AssistantApiCoreTypesGovernedColor",
          "description": "The primary color of the agent. Used by the client to style the header and suggestion chips."
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesDeviceConfig": {
      "description": "The identification information for third party devices that integrates with the assistant. All of these fields will be populated by the third party when the query is sent from the third party device. Next Id: 5",
      "id": "AssistantApiCoreTypesDeviceConfig",
      "properties": {
        "agentId": {
          "description": "Pantheon Project ID that uniquely identifies the consumer project ID. Required",
          "type": "string"
        },
        "deviceId": {
          "description": "Unique identifier for the device. Example: DBCDW098234. Required",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesDeviceId": {
      "description": "LINT.IfChange(DeviceId) Specifies identifier of a device AKA surface. Note there may be multiple device ids for the same physical device E.g. Allo app and Assistant app on Nexus. Note: DeviceId usage is complicated. Please do not depend on it for surface specific logic. Please use google3/assistant/api/capabilities.proto instead. IMPORTANT: When checking for equality between two `DeviceId`s, you should always use an `isSameDevice{As}` function to check for equality, as deep equality between `DeviceId`'s is not guaranteed. * C++: http://google3/assistant/assistant_server/util/device_id_util.cc;l=23;rcl=421295740 * Dart: http://google3/assistant/context/util/lib/device_id.dart;l=26;rcl=442126145 * Java: http://google3/java/com/google/assistant/assistantserver/utils/DeviceIdHelper.java;l=9;rcl=390378522 See http://go/deviceid-equality for more details. Next ID: 14",
      "id": "AssistantApiCoreTypesDeviceId",
      "properties": {
        "agsaClientInstanceId": {
          "description": "The client_instance_id on devices with GSA. See 'client_instance_field' in go/androidids.",
          "type": "string"
        },
        "alloDeviceId": {
          "description": "Allo Id. Corresponds to the GBotRequest.Sender.sender. NOTE(dychen): This may change to standard android/ios physical device ids in order to enable shared data (e.g. installed app on physical device shared between Allo and Opa apps on Nexus).",
          "type": "string"
        },
        "canonicalDeviceId": {
          "description": "A unique device ID for Assistant devices as proposed by go/ocelot-team to solve the device id fragmentation problem. The value of this id is the HomeGraph id of the device. See go/ocelot-track-0-registry-design. New surfaces should use the canonical_device_id instead of using other ids, and the registration should utilize the DeviceDataLayer (go/ddl-v0). Please contact the assistant-state-management@ team for guidance. Note: We didn't reuse |home_graph_device_id| because in Assistant code base |home_graph_device_id| is common to associate it with 3P devices. See go/project-yellowstone for more context.",
          "type": "string"
        },
        "castDeviceId": {
          "description": "If set, indicates that the device is a cast device, and contains the UUID of the cast device. Corresponds to the device_id field of the CastDevice proto.",
          "type": "string"
        },
        "clientInstanceId": {
          "description": "DUSI (go/dusi) is used as the identifier here. This identifier is unique to the user and device. This will help identify which device or application the user's request originated from. This is not to be confused with the client_instance_id that android devices provide. This is currently used by surfaces that use the assistant-legacy-nexus and assistant-legacy-clockwork pipelines. DUSI is created and set in S3. This field is only filled for GAIA requests.",
          "type": "string"
        },
        "connectedDockId": {
          "description": "A device ID produced by a connected dock, which is registered in HomeGraph.",
          "type": "string"
        },
        "deviceConfig": {
          "$ref": "AssistantApiCoreTypesDeviceConfig",
          "description": "The unique DeviceConfig to the specific third party device. It is also used by Android Auto Embedded first party device. See go/opa-ids."
        },
        "deviceType": {
          "description": "The device's surface type. This is the string version of surface_type. The server should use the SurfaceType value derived from this string. If the device_type isn't supported within the SurfaceType enum, it will be set as UNKNOWN. Developers should use the enum in ServerParams instead of this string.",
          "type": "string"
        },
        "homeGraphDeviceId": {
          "description": "The unique device ID for HomeGraph devices. This is the HomeGraph ID, created when the device is registered into HomeGraph. It is immutable for the same device unless it is completely deleted and recreated. See go/home-graph for details.",
          "type": "string"
        },
        "libassistantDeviceId": {
          "description": "The unique ID for libassistant based devices. See go/libassistant-id for details.",
          "type": "string"
        },
        "multiHotwordArbitrationDeviceId": {
          "description": "If set, indicates that the device is participating the multi-hotword arbitration and the id is an UUID to distinguish it from other devices. It should also be consistent between requests from a single device within a session (or short duration).",
          "type": "string"
        },
        "opaIosDeviceId": {
          "description": "The unique device ID for the Assistant App on iOS. See go/opa-ios-design for details.",
          "type": "string"
        },
        "quartzDeviceId": {
          "description": "The unique ID of a Quartz device. See go/quartz-design-doc for more details. Quartz ID is a hash of (android_id + gaia).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesDeviceUserIdentity": {
      "description": "IMPORTANT: The definition of DeviceUserIdentity is being moved to //assistant/api/core_types/governed/device_user_identity.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new DeviceUserIdentity instead of this one. // LINT.IfChange",
      "id": "AssistantApiCoreTypesDeviceUserIdentity",
      "properties": {
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The identifier of the device."
        },
        "gaiaId": {
          "description": "The identifier of the user.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedColor": {
      "description": "Represents a color in the RGBA color space. This message mirrors google.type.Color.",
      "id": "AssistantApiCoreTypesGovernedColor",
      "properties": {
        "alpha": {
          "description": "The fraction of this color that should be applied to the pixel. That is, the final pixel color is defined by the equation: pixel color = alpha * (this color) + (1.0 - alpha) * (background color) This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a completely transparent color. If omitted, this color object is to be rendered as a solid color (as if the alpha value had been explicitly given with a value of 1.0).",
          "format": "float",
          "type": "number"
        },
        "blue": {
          "description": "The amount of blue in the color as a value in the interval [0, 1].",
          "format": "float",
          "type": "number"
        },
        "green": {
          "description": "The amount of green in the color as a value in the interval [0, 1].",
          "format": "float",
          "type": "number"
        },
        "red": {
          "description": "The amount of red in the color as a value in the interval [0, 1].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadata": {
      "description": "Task metadata information describing the ringtone. Next id: 11",
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadata",
      "properties": {
        "category": {
          "description": "The category related with the ringtone. It's used to generate ringtone related with the category if the entity_mid is not be populated. E.g. for instrument, the ringtone may be piano sound.",
          "enum": [
            "UNKNOWN_CATEGORY",
            "ANIMAL",
            "CHARACTER",
            "EMOTION",
            "INSTRUMENT",
            "MEDIA",
            "SPORTS_EQUIPMENT",
            "VEHICLE",
            "ON_DEVICE",
            "FUNTIME"
          ],
          "enumDescriptions": [
            "",
            "",
            "Character alarm is a kind of media alarm. CHARACTER category should be removed. Use MEDIA for character alarms",
            "",
            "",
            "",
            "",
            "",
            "An alarm sound that the user can select to play when an alarm is firing, the alarm sound resource is located on device in libassistant.",
            "An alarm sound that is based upon the label that the timer or alarm is invoked with (ie pizza timer invokes an Italian accordian theme). The assets are streamed from web storage."
          ],
          "type": "string"
        },
        "characterAlarmMetadata": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataCharacterAlarmMetadata"
        },
        "characterTag": {
          "type": "string"
        },
        "entityMid": {
          "description": "The freebase mid of the entity related to the ringtone. It will be used to generate the ringtone for the alarm or timer (with support for i18n). For instance, for the \"cat\" mid, the related ringtone will be a cat sound in some language, and for the \"Beyonce\" mid, the ringtone will be, e.g., a playlist of Beyonce's best hits.",
          "type": "string"
        },
        "funtimeMetadata": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataFuntimeMetadata"
        },
        "genMlAlarmMetadata": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataGenMlAlarmMetadata"
        },
        "gentleWakeInfo": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataGentleWakeInfo",
          "description": "Gentle wake information for this alarm."
        },
        "onDeviceAlarmMetadata": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataOnDeviceAlarmMetadata"
        },
        "onDeviceAlarmSound": {
          "description": "Will be deprecated. Use OnDeviceAlarmMetadata.",
          "enum": [
            "DEFAULT",
            "MELLOW",
            "MODERN_TIMES",
            "BEAUTIFUL_MIND",
            "LITTLE_SUNSHINE",
            "TOUCH_OF_ZEN",
            "ABOUT_TIME",
            "RANDOM",
            "BOROBUDUR",
            "PEBBLES",
            "BRIGHT_MORNING",
            "ACROSS_THE_VALLEY",
            "MORNING_SONG",
            "KYOTO",
            "AWAKEN",
            "CUCKOO",
            "DIGITAL_BLAST",
            "ACOUSTIC_SUNLIGHT",
            "SUNRISE_BOSSA",
            "CALM_GLOW",
            "ANTIQUE_CLOCK",
            "JUST_BIRDS",
            "JUNGLE_AMBIENCE",
            "QUAINT_VILLAGE",
            "BUBBLY_BOSSA",
            "ACOUSTIC_JAM",
            "EUPHORIC"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "routineAlarmMetadata": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataRoutineAlarmMetadata"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadataCharacterAlarmMetadata": {
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataCharacterAlarmMetadata",
      "properties": {
        "agentIds": {
          "description": "For character alarm, the media resources are provided through AOG apps. During alarm trigger phase, aog apps with the specified agent_ids are used to get the media resources. Multiple \"AoG agents\" can satisfy a character_tag. So the user will select the agents they want at alarm creation time. The chosen agents will be recorded so that the resources only from those agents will be used at trigger time. The number of selected agent_ids will not exceed 3. See go/character-alarm-aog.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "characterTags": {
          "description": "The Character Alarm tag. Tags are needed to identify the theme of the alarm. For example, if the tag is 'astronaut', astronaut based audio is played during alarm ring. Note : We have made it repeated so that the user can choose multiple character alarm themes at one go. At present, the user is allowed to choose only one theme during alarm creation.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "iconUrls": {
          "description": "Icons urls corresponding to a character. Note : We have made it repeated so that we can show different images when the alarm rings. At present, we only support only one image.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadataFuntimeMetadata": {
      "description": "Used to make timers and alarms more delightful. See go/funtime-engdesign for more details.",
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataFuntimeMetadata",
      "properties": {
        "agentIds": {
          "description": "For FunTime alarms and timers, the media resources are provided through AOG apps during their ringtone. Multiple AoG agents can satisfy a label. So a random agent will be chosen from those that are supplied. See go/funtime-engdesign.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "animationBlob": {
          "description": "These bytes may represent the blob of the Rive animation that we pass to the Opal App. We will deprecate this field if we figure out a solution to load the animation from the web.",
          "format": "byte",
          "type": "string"
        },
        "animationUrl": {
          "description": "Url for Rive animation that is brought up on ring. Rive is a lightweight animation library that is compatible with Flutter on Opal. See https://rive.app/.",
          "type": "string"
        },
        "timerHeroUrl": {
          "description": "The url used to load the image that is at the center of the timer during timer countdown visuals.",
          "type": "string"
        },
        "ttsServiceRequestBytes": {
          "description": "This is used to call S3 to realize the TTS. Is in the form of bytes because of a circular dependency issue in libassistant protos. It is a serialized proto of type speech.s3.TtsServiceRequest.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadataGenMlAlarmMetadata": {
      "description": "Metadata for machine learning generated audio samples. This will be similar to character alarms, Category will be set MEDIA but this metadata field will be used to identify the ringtone type on surface. (go/magenta-alarm-ringtones).",
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataGenMlAlarmMetadata",
      "properties": {
        "isEnabled": {
          "type": "boolean"
        },
        "ringtoneLabel": {
          "description": "Label for the generated ringtone.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadataGentleWakeInfo": {
      "description": "Gentle wake actions like slowly brightening the room/device screen leading up to the alarm firing (go/cube-gentle-wake-up).",
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataGentleWakeInfo",
      "properties": {
        "effectDurationMs": {
          "description": "Specifies how long the effect lasts. Allowed for effect to last after the alarm has started ringing. If unset or negative or 0, effect is assumed to last until alarm trigger time.",
          "format": "int64",
          "type": "string"
        },
        "isEnabled": {
          "description": "Indicates if gentle wake action is to be performed before this alarm fires. This is enabled only if the device supports sunrise alarm capability. http://cs/symbol:assistant.api.SunriseFeaturesSupport",
          "type": "boolean"
        },
        "startTimedeltaMs": {
          "description": "Specifies how long before the alarm fire time, the wakeup effect will start. ALWAYS POSITIVE.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadataOnDeviceAlarmMetadata": {
      "description": "This describes the alarm sound resource enum and the alarm sound label for the on device alarm sound. On-device ringtones are product specific, hence Opal/UI layer will be responsible for populating this metadata at creation/edit. The enum map will be used to convert to an internal resource id used by libassistant for accessing the asset which are not exposed to UI.",
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataOnDeviceAlarmMetadata",
      "properties": {
        "onDeviceAlarmSound": {
          "description": "Opal/UI layer will set this bit based on the user selection.",
          "enum": [
            "DEFAULT",
            "MELLOW",
            "MODERN_TIMES",
            "BEAUTIFUL_MIND",
            "LITTLE_SUNSHINE",
            "TOUCH_OF_ZEN",
            "ABOUT_TIME",
            "RANDOM",
            "BOROBUDUR",
            "PEBBLES",
            "BRIGHT_MORNING",
            "ACROSS_THE_VALLEY",
            "MORNING_SONG",
            "KYOTO",
            "AWAKEN",
            "CUCKOO",
            "DIGITAL_BLAST",
            "ACOUSTIC_SUNLIGHT",
            "SUNRISE_BOSSA",
            "CALM_GLOW",
            "ANTIQUE_CLOCK",
            "JUST_BIRDS",
            "JUNGLE_AMBIENCE",
            "QUAINT_VILLAGE",
            "BUBBLY_BOSSA",
            "ACOUSTIC_JAM",
            "EUPHORIC"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "onDeviceAlarmSoundLabel": {
          "description": "A string label to identify the alarm sound name. Opal/UI layer will set this as per product definition. This will be used to display the name of the selected ringtone.",
          "type": "string"
        },
        "ttsServiceRequestBytes": {
          "description": "This is used to call S3 to realize the TTS. Is in the form of bytes because of a circular dependency issue in libassistant protos. It is a serialized proto of type speech.s3.TtsServiceRequest. This request will contain an ssml with the url to the ringtone files hosted on gstatic.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesGovernedRingtoneTaskMetadataRoutineAlarmMetadata": {
      "id": "AssistantApiCoreTypesGovernedRingtoneTaskMetadataRoutineAlarmMetadata",
      "properties": {
        "routineId": {
          "description": "The unique id for each routine. When the alrm is dismissed, it will trigger the routine of the routine alarm's creator if feasible.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesHomeAppInfo": {
      "description": "The Home app information of the provider. Next ID: 3",
      "id": "AssistantApiCoreTypesHomeAppInfo",
      "properties": {
        "localizedAppName": {
          "description": "The localized app name.",
          "type": "string"
        },
        "packageName": {
          "description": "Unique package name that identifies a Home app of the provider.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesImage": {
      "description": "An image represents the data about an image or a photo. IMPORTANT: The definition of the Image message is being moved to //assistant/api/core_types/governed/image_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new Image message instead of this one. LINT.IfChange NextId: 13",
      "id": "AssistantApiCoreTypesImage",
      "properties": {
        "accessibilityText": {
          "description": "A text description of the image to be used for accessibility, e.g. screen readers.",
          "type": "string"
        },
        "appIconIdentifier": {
          "description": "App identifier. This field is specific to mobile surfaces and stands for app package name for Android surface, and app bundle identifier for iOS. In case identifier is specified but invalid, some default icon will be used, e.g. PackageManager.getDefaultActivityIcon() for Android. If you want to show image for AGSA versions which don't support this field, you can specify source_url as backup.",
          "type": "string"
        },
        "badgeImage": {
          "$ref": "AssistantApiCoreTypesImage",
          "description": "This is the image that is displayed as the badge on the main image."
        },
        "content": {
          "description": "Content of the image in bytes.",
          "format": "byte",
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "imageSource": {
          "description": "Indicate the data source where the image is fetched.",
          "enum": [
            "UNKNOWN",
            "PLACEHOLDER",
            "VISUAL_DICT",
            "LAVD",
            "VISUAL_DICT_DEFAULT_LOCALE"
          ],
          "enumDescriptions": [
            "Unknown image source.",
            "Indicates this image is a default placeholder because no valid image is found.",
            "Indicates the image is fetched from Visual Dictionary.",
            "Indicates the image is fetched from LAVD (visual-dictionary-license-aware-requirements).",
            "Indicates the image is fetched from Visual Dictionary of default locale \"en\"."
          ],
          "type": "string"
        },
        "jsonContent": {
          "description": "Content of image in form of JSON representation.",
          "type": "string"
        },
        "letterDrawableText": {
          "description": "Text used to generate a letter drawable (a letter icon with color). It will be the default icon if the source_url is empty or cannot be rendered.",
          "type": "string"
        },
        "providerUrl": {
          "description": "Url of the image provider, which is the website containing the image. For example, https://www.agentx.com.",
          "type": "string"
        },
        "sourceUrl": {
          "description": "The source url of the image. For example, https://www.agentx.com/logo.png",
          "type": "string"
        },
        "sourceUrlType": {
          "description": "Type of the source url.",
          "enum": [
            "DEFAULT_URL_TYPE",
            "LOTTIE",
            "DUO_CLIENT",
            "CONTACT_ID"
          ],
          "enumDescriptions": [
            "",
            "Json url used to drive animation on surfaces using Airbnb lottie library.",
            "Duo url specifying the Duo resource id to be used ('duo://'). WARNING: This may not be supported on all clients. At the moment, only Dragonglass surfaces are supporting this.",
            "Contact ID specifying contact resource to be used."
          ],
          "type": "string"
        },
        "width": {
          "description": "The width and height of the image in pixels.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesInternalProviderInfo": {
      "description": "Info for targeting a feature provided directly by the Assistant surface itself. i.e Could be pointing to AGSA audio player for AUDIO_PLAYER on AGSA.",
      "id": "AssistantApiCoreTypesInternalProviderInfo",
      "properties": {
        "type": {
          "description": "Specifying which type of internal provider.",
          "enum": [
            "UNKNOWN_INTERNAL_PROVIDER_TYPE",
            "AUDIO_PLAYER",
            "AUDIO_PLAYER_V2",
            "MEDIA_PLAYER",
            "MEDIA_PLAYER_IOS",
            "AUDIO_ONLY_PLAYER",
            "NARRATED_WEB_MEDIA_PLAYER",
            "LIBASSISTANT_MEDIA_PLAYER",
            "LENS_PLAYER",
            "NEWS_PLAYER"
          ],
          "enumDescriptions": [
            "",
            "Deprecated, because supported AGSA implementation had a bug (b/72229328). Use AUDIO_PLAYER_V2 instead.",
            "Internal provider for playing audio.",
            "Internal provider for playing audio and video for AGSA.",
            "iOS MEDIA_PLAYER.",
            "Internal provider for playing audio only, different from MEDIA_PLAYER. It is used by KaiOS, for news vertical. It is different from AUDIO_PLAYER_V2 which is for AGSA, and not supported by news vertical.",
            "Internal provider for playing audio narration of web pages.",
            "Internal provider for playing audio for libassistant. Historically each enum represents a different media player implementation. This one is meant for the playing media on the libassistant enabled surfaces.",
            "Internal provider for playing audio using lens audio player, for screenshot based readout.",
            "Internal provider for news vertical on AssistantMediaPlayer in AGSA."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesIosAppInfo": {
      "description": "The iOS app information of the provider. Next ID: 4",
      "id": "AssistantApiCoreTypesIosAppInfo",
      "properties": {
        "bundleIdentifier": {
          "description": "Bundle identifier that identifies an iOS app of the provider.",
          "type": "string"
        },
        "localizedAppName": {
          "description": "The localized app name.",
          "type": "string"
        },
        "openAppUrl": {
          "description": "A URL to open the provider's app.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesKaiOsAppInfo": {
      "description": "The KaiOS app information of the provider. Next ID: 4",
      "id": "AssistantApiCoreTypesKaiOsAppInfo",
      "properties": {
        "localizedAppName": {
          "description": "The localized app name.",
          "type": "string"
        },
        "openAppUrl": {
          "description": "A URL to open the provider's app.",
          "type": "string"
        },
        "packageName": {
          "description": "Unique package name that identifies a KaiOS app of the provider.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesLocationCoordinates": {
      "description": "Geographic coordinate information for location.",
      "id": "AssistantApiCoreTypesLocationCoordinates",
      "properties": {
        "accuracyMeters": {
          "description": "The accuracy of the coordinates in meters.",
          "format": "double",
          "type": "number"
        },
        "latDegrees": {
          "description": "Latitude degrees.",
          "format": "double",
          "type": "number"
        },
        "lngDegrees": {
          "description": "Longitude degrees.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesMessageNotification": {
      "description": "This proto captures the contents of a messaging app notification that is typically part of a conversation thread. Next Id: 20",
      "id": "AssistantApiCoreTypesMessageNotification",
      "properties": {
        "appName": {
          "description": "App name of the message notification, e.g. Hangouts.",
          "type": "string"
        },
        "bundleId": {
          "description": "The key used to group this notification into a cluster.",
          "type": "string"
        },
        "dataUri": {
          "description": "Uri for the attachment (image, audio, video etc.).",
          "type": "string"
        },
        "groupName": {
          "description": "Name of the group associated with the message notification. This field is set iff this is a group message.",
          "type": "string"
        },
        "groupingKey": {
          "description": "The group key of a proactive notification. Details in assistant.api.client_op.NotificationArgs.grouping_key.",
          "type": "string"
        },
        "index": {
          "description": "Index of the message notification.",
          "format": "int32",
          "type": "integer"
        },
        "markAsReadActionAvailable": {
          "description": "Boolean indicating if the mark_as_read action is available for this message.",
          "type": "boolean"
        },
        "messageLength": {
          "description": "Length of the message/notification content in characters. Note: We can't send the full content because of privacy restriction, preventing sending client content to our backends. Concatenated message_length of all notification_entries.",
          "format": "int32",
          "type": "integer"
        },
        "messageRecipientType": {
          "enum": [
            "UNKNOWN",
            "INDIVIDUAL",
            "GROUP"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "mimeType": {
          "description": "Mime type of the data_uri. e.g. 'audio/wav', 'video/mp4', 'image/png'.",
          "type": "string"
        },
        "notificationEntries": {
          "items": {
            "$ref": "AssistantApiCoreTypesMessageNotificationNotificationEntry"
          },
          "type": "array"
        },
        "notificationIconKey": {
          "description": "On-device cache key for notification icon.",
          "type": "string"
        },
        "notificationKey": {
          "description": "String key of the notification. It is the key from original StatusBarNotification received from Android OS. It is used to identify the original notification to send a reply.",
          "type": "string"
        },
        "opaqueToken": {
          "description": "The opaque_token of a proactive notification. Details in assistant.api.client_op.NotificationArgs.opaque_token.",
          "format": "byte",
          "type": "string"
        },
        "packageName": {
          "description": "App pkg of the message notification, e.g. \"com.google.android.talk\".",
          "type": "string"
        },
        "postTime": {
          "description": "Timestamp of the last notification's post time.",
          "format": "int64",
          "type": "string"
        },
        "replyActionAvailable": {
          "description": "Boolean indicating if the reply action is available for this message.",
          "type": "boolean"
        },
        "sender": {
          "$ref": "AssistantApiCoreTypesMessageNotificationPerson"
        },
        "senderName": {
          "description": "Sender's name of the message notification, e.g. Elsa. Last sender name in case of a group conversation.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesMessageNotificationNotificationEntry": {
      "description": "Structure of each notification in the MessageNotification Bundle. Attribute sender_name could be different in case of group messages. Next Id: 6",
      "id": "AssistantApiCoreTypesMessageNotificationNotificationEntry",
      "properties": {
        "dataUri": {
          "description": "Uri for the attachment (image, audio, video etc.).",
          "type": "string"
        },
        "messageBody": {
          "description": "Content of the message body in the notification.",
          "type": "string"
        },
        "mimeType": {
          "description": "Mime type of the data_uri. e.g. 'audio/wav', 'video/mp4', 'image/png'.",
          "type": "string"
        },
        "postTime": {
          "description": "Timestamp of the notification's post time.",
          "format": "google-datetime",
          "type": "string"
        },
        "sender": {
          "$ref": "AssistantApiCoreTypesMessageNotificationPerson",
          "description": "Sender of the message notification."
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesMessageNotificationPerson": {
      "description": "Mirrors part of https://developer.android.com/reference/android/app/Person Next Id: 4",
      "id": "AssistantApiCoreTypesMessageNotificationPerson",
      "properties": {
        "isImportant": {
          "type": "boolean"
        },
        "key": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesProvider": {
      "description": "Provider. Like, Spotify or iHeartRadio. Next ID: 13",
      "id": "AssistantApiCoreTypesProvider",
      "properties": {
        "androidAppInfo": {
          "$ref": "AssistantApiCoreTypesAndroidAppInfo",
          "description": "The android app information of the provider."
        },
        "castAppInfo": {
          "$ref": "AssistantApiCoreTypesCastAppInfo",
          "description": "The cast app information of the provider."
        },
        "chromeosAppInfo": {
          "$ref": "AssistantApiCoreTypesChromeOsAppInfo",
          "description": "The ChromeOS app information of the provider."
        },
        "cloudProviderInfo": {
          "$ref": "AssistantApiCoreTypesCloudProviderInfo",
          "description": "The third party provider information."
        },
        "fallbackUrl": {
          "description": "A URL to fallback to if app can not be opened.",
          "type": "string"
        },
        "homeAppInfo": {
          "$ref": "AssistantApiCoreTypesHomeAppInfo"
        },
        "iconImageUrl": {
          "description": "Public URL pointing to an icon image for the provider. e.g. https://lh3.googleusercontent.com/UrY7BAZ-XfXGpfkeWg0zCCeo-7ras4DCoRalC_WXXWTK9q5b0Iw7B0YQMsVxZaNB7DM",
          "type": "string"
        },
        "internalProviderInfo": {
          "$ref": "AssistantApiCoreTypesInternalProviderInfo",
          "description": "The internal assistant provider information."
        },
        "iosAppInfo": {
          "$ref": "AssistantApiCoreTypesIosAppInfo",
          "description": "The iOS app information of the provider."
        },
        "kaiosAppInfo": {
          "$ref": "AssistantApiCoreTypesKaiOsAppInfo",
          "description": "The KaiOS app information of the provider."
        },
        "sipProviderInfo": {
          "$ref": "AssistantApiCoreTypesSipProviderInfo",
          "description": "The sip information of the provider."
        },
        "webProviderInfo": {
          "$ref": "AssistantApiCoreTypesWebProviderInfo",
          "description": "The web provider information."
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesProviderDelta": {
      "description": "ProviderDelta. The incremental change, e.g. installation or deletion for Spotify or iHeartRadio. Currently it is for Android only. A few considerations for edge cases: - If the app being deleted is not found from Footprints, it is ignored. - For Footprint upload through Geller, the gPRC response is available for client to retry in the next upload if the upload fails. - For Assistant Request, there is no upload status similar to the current AppCapabilities. Next ID: 4",
      "id": "AssistantApiCoreTypesProviderDelta",
      "properties": {
        "androidAppInfoDelta": {
          "$ref": "AssistantApiCoreTypesAndroidAppInfoDelta",
          "description": "The android app information of the provider."
        },
        "fallbackUrl": {
          "description": "A URL to fallback to if app can not be opened.",
          "type": "string"
        },
        "iconImageUrl": {
          "description": "Public URL pointing to an icon image for the provider. e.g. https://lh3.googleusercontent.com/UrY7BAZ-XfXGpfkeWg0zCCeo-7ras4DCoRalC_WXXWTK9q5b0Iw7B0YQMsVxZaNB7DM",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesSipProviderInfo": {
      "description": "Session Initiation Protocol (SIP) information for providers that use SIP to initiate multimedia communication sessions, like Google Voice and Fi. https://en.wikipedia.org/wiki/Session_Initiation_Protocol",
      "id": "AssistantApiCoreTypesSipProviderInfo",
      "properties": {
        "providerId": {
          "description": "The providers id (MID) which is the primary identifier for a call provider within the Assistant. A MID, or machine identifier, is a unique identifier issued by Knowledge Graph for all entities contained in it's graph.",
          "type": "string"
        },
        "realm": {
          "description": "Calling realm to be use for each call. i.e. For anonymous, this would be set to anonymous.chirp.google.com",
          "type": "string"
        },
        "useBirdsongTacl": {
          "description": "If true, client should use the Birdsong TaCL API for this call. Uses the VoiceCallManager API by default. For more details: go/birdsong-migration-google-home",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesSurfaceIdentity": {
      "description": "The set of information that helps the server identify the surface. This replaces the User-Agent string within the Assistant Server. Note: The SurfaceIdentity proto should only be used to derive the capabilities of a surface. It should not be accessed outside of the CapabilityBuilder or CapabilityChecker. NEXT ID: 5 IMPORTANT: The definitions of the SurfaceIdentity and SurfaceVersion protos are being moved to //assistant/api/core_types/governed/surface_identity.proto All existing references will be updated to point to the new location. If you are adding a reference, use the new SurfaceIdentity and SurfaceVersion protos instead of the protos defined here. LINT.IfChange",
      "id": "AssistantApiCoreTypesSurfaceIdentity",
      "properties": {
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The identifier of the device."
        },
        "surfaceType": {
          "description": "The device's surface type. The types are defined at google3/assistant/api/core_types/surfaces.gcl. NOTE: This is the new field that is going to replace the `surface_type_string` field above. For more details please refer to go/ontologicalize-surface-type.",
          "enum": [
            "UNKNOWN_TYPE",
            "ACCL",
            "AGSA",
            "ANDROID",
            "ANDROID_AUTO",
            "ANDROID_LITE",
            "ANDROID_PHONE",
            "ANDROID_SCREENLESS",
            "ANDROID_SMART_DISPLAY",
            "ANDROID_TABLET",
            "ANDROID_THINGS",
            "ANDROID_THINGS_CUBE",
            "ANDROID_THINGS_JASPER",
            "ANDROID_TV",
            "ANDROID_WEAR",
            "ASSISTANT_KIT",
            "ASSISTANT_SDK",
            "AUTO",
            "CAST_OS",
            "CHROME_OS",
            "CHROMECAST_MANHATTAN",
            "CLOUD_DEVICE",
            "CROS",
            "FITBIT_OS_WATCH",
            "FITBIT_OS_WATCH_ANDROID",
            "FITBIT_OS_WATCH_IOS",
            "GOOGLE_HOME",
            "HEADPHONE",
            "HEADPHONE_ANDROID",
            "HEADPHONE_IOS",
            "IOPA",
            "IOS",
            "IOS_SCREENLESS",
            "IPAD",
            "IPHONE",
            "KAI_OS",
            "KAI_OS_AMA",
            "LIBASSISTANT",
            "PHONE",
            "PIXEL",
            "PIXEL5",
            "PIXEL6",
            "PIXEL7",
            "PIXEL_BUDS",
            "PIXEL_TABLET",
            "PIXEL_TABLET_HUB_MODE",
            "PIXEL_TABLET_PERSONAL_MODE",
            "PIXEL_WATCH",
            "SCREENLESS",
            "SMART_DISPLAY",
            "SPEAKER",
            "TABLET",
            "TELEPHONE",
            "THING",
            "WATCH",
            "WEAR_OS",
            "WEAR_OS_WATCH"
          ],
          "enumDescriptions": [
            "Unknown surface type.",
            "Android conversation client library (go/accl) is an Android library which implements the Conversation Protocol that allows a surface to have conversations with the Assistant server. OWNERS: surfaces-infra-core@",
            "Android Google Search App (go/agsa). OWNERS: surfaces-infra-core@",
            "Android. OWNERS: surfaces-infra-core@",
            "Assistant on Android Auto (go/ast-auto). OWNERS: opa-android-leads@",
            "Assistant on Android Go (not part of AGSA). OWNERS: assistantgo-eng@",
            "Assistant on Android phones accessed through the Google App (velvet). This surface is formerly known as OPA_AGSA. OWNERS: opa-android-leads@",
            "Assistant on Nexus with screen off/locked. Use go/bisto device to trigger. OWNERS: opa-android-leads@",
            "Assistant on Titan hub mode (go/titan-hubmode-surface). This is OPA Android first party Smart Display devices. The UI experience is built on Opal (Gallium and Flutter) and native Android. OWNERS: opa-android-leads@",
            "Assistant on Android tablet. OWNERS: opa-android-leads@",
            "Android Things (go/things). OWNERS: surfaces-infra-core@",
            "Lenovo Smart Clock v1, a stationary smart display device with a 4-inch screen, targeted for bedroom/bedside use cases like alarm, sleep tracking. Based on Android Things. See go/cube-home. OWNERS: cube-eng@",
            "Former codename for 3P 8-inch and 10-inch Smart Displays from Lenovo, JBL and LG, targeted for use in the kitchen. Based on Android Things. See go/jasper-home. OWNERS: jasper-eng@",
            "The Android platform that powers smart televisions, set-top-boxes, and over-the-top devices. See go/atv-eng and go/opa-tv. OWNERS: opa-tv-eng@",
            "Legacy Wear OS Assistant. OWNERS: wear-assistant-eng@",
            "AssistantKit (go/assistantkit) is a collection of iOS libraries allowing first party apps to integrate Google Assistant features. OWNERS: assistantkit-eng@",
            "Standalone gRPC based client. See go/easi. OWNERS: assistant-sdk-service-eng@",
            "Automobile. OWNERS: surfaces-infra-core@",
            "Cast OS (go/opal-castos-docs#what-is-castos). OWNERS: surfaces-infra-core@",
            "Chrome OS (go/chromsos) OWNERS: surfaces-infra-core@",
            "For chromecast with assistant + screen, e.g. Newman. OWNERS: cast-eng-platform@",
            "Virtual device for event-based triggering, e.g. executing time scheduled routines: go/scheduled-routines. OWNERS: surfaces-infra-core@",
            "Assistant on native Chrome OS (go/croissant). OWNERS: croissant@",
            "Assistant on Fitbit OS Watch. OWNERS: assistant-wearable-team@",
            "Assistant on Fitbit Watch paired with AGSA. OWNERS: assistant-wearable-team@",
            "Assistant on Fitbit Watch paired with iOPA. OWNERS: assistant-wearable-team@",
            "Google home speaker, i.e., Chirp devices. See go/assistant-speakers. OWNERS: assistant-speaker-leads@",
            "Headphone. OWNERS: surfaces-infra-core@",
            "Assistant on headphones paired with AGSA. OWNERS: assistant-wearable-team@",
            "Assistant on headphones paired with iOPA. OWNERS: assistant-wearable-team@",
            "Assistant on iOS devices (go/opa-ios). OWNERS: opa-ios-eng@",
            "iOS. OWNERS: surfaces-infra-core@",
            "Assistant on iOS with screen off/locked. Use go/bisto device to trigger. OWNERS: bisto-team@",
            "iPad devices. OWNERS: surfaces-infra-core@",
            "iPhone devices. OWNERS: surfaces-infra-core@",
            "Kai OS (go/kaios). OWNERS: surfaces-infra-core@",
            "Assistant on KaiOS (go/kaiosama). OWNERS: assistant-kaios-eng@",
            "LibAssistant (go/libassistant) C++ SDK that powers Assistant experience on both 1P devices like Google Home and 3P devices like Sonos. OWNERS: libassistant-core@",
            "A phone. OWNERS: surfaces-infra-core@",
            "Pixel devices. OWNERS: surfaces-infra-core@",
            "Pixel 5. OWNERS: surfaces-infra-core@",
            "Pixel 6. OWNERS: surfaces-infra-core@",
            "Pixel 7. OWNERS: surfaces-infra-core@",
            "Assistant on Pixel Buds. OWNERS: assistant-wearable-team@",
            "Assistant on Pixel Tablet/Tangor (a.k.a, TK). OWNERS: assistant-display-eng@",
            "Assistant on Tangor running in Hub mode. OWNERS: assistant-display-eng@",
            "Assistant on Tangor running in Personal mode. OWNERS: assistant-display-eng@",
            "Assistant on Pixel Watch (a.k.a., Rohan). OWNERS: assistant-wearable-team@",
            "Devices with screen off or locked (go/bisto). OWNERS: surfaces-infra-core@",
            "Smart surface, such as Titan. OWNERS: surfaces-infra-core@",
            "A speaker. OWNERS: surfaces-infra-core@",
            "A tablet. OWNERS: surfaces-infra-core@",
            "Assistant on a phone call (go/telephone). OWNERS: telephone-assistant-eng@",
            "IoT device. OWNERS: surfaces-infra-core@",
            "Watch. OWNERS: surfaces-infra-core@",
            "Wear OS. OWNERS: surfaces-infra-core@",
            "Assistant on Wear OS Watch (a.k.a., Edoras). OWNERS: assistant-wearable-team@"
          ],
          "type": "string"
        },
        "surfaceTypeString": {
          "description": "The device's surface type. This is the string version of the assistant.api.core_types.SurfaceType enum. The server should not use this field, rather it should use the SurfaceType value derived from this string.",
          "type": "string"
        },
        "surfaceVersion": {
          "$ref": "AssistantApiCoreTypesSurfaceVersion",
          "description": "The version of the surface/client. This is different from the Conversation protocol version."
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesSurfaceType": {
      "description": "Specifies the types of device surfaces. LINT.IfChange When adding new surface types make sure that My Activity (https://myactivity.google.com/product/assistant) will correctly render by adding your enum to http://cs/symbol:GetAssistSurfaceName%20f:%5C.cc$ If your type doesn't fit in to any of the existing surfaces messages, add a new message in http://google3/personalization/footprints/boq/uservisible/events/intl/smh_frontend_messages.h.",
      "id": "AssistantApiCoreTypesSurfaceType",
      "properties": {
        "type": {
          "enum": [
            "UNKNOWN",
            "ANDROID_ALLO",
            "ANDROID_AUTO",
            "ANDROID_THINGS_CUBE",
            "ANDROID_THINGS_JASPER",
            "ANDROID_TV",
            "ANDROID_TV_KIDS",
            "ANDROID_WEAR",
            "AR_GLASSES",
            "ASSISTANT_SDK",
            "AUDIOWEAR",
            "BUBBLE_CHARACTERS_IOS",
            "CAPABILITY_BASED_SURFACE",
            "CHROMECAST_ASSISTANT",
            "CHROMECAST_MANHATTAN",
            "CHROMECAST_SEARCH",
            "CLOUD_DEVICE",
            "COMPANION_SCREEN",
            "DYNAMITE_WEB",
            "ENSEMBLE",
            "EYESFREE_AGSA",
            "EYESFREE_GMM",
            "GBOARD",
            "GLASS",
            "GOOGLE_HOME",
            "HANGOUTS_CHATBOT",
            "IOS_ALLO",
            "IOS_GSA",
            "IOS_WEAR",
            "LIBASSISTANT",
            "LINE_CHATBOT",
            "MULTIMODAL_AGSA",
            "NON_ASSISTANT_SURFACE",
            "OPA_AGSA",
            "OPA_AGSA_CHROME_OS",
            "OPA_ANDROID_AUTO",
            "OPA_ANDROID_LITE",
            "OPA_ANDROID_SCREENLESS",
            "OPA_ANDROID_SMART_DISPLAY",
            "OPA_ANDROID_TABLET",
            "OPA_CROS",
            "OPA_GACS",
            "OPA_IOS",
            "OPA_IOS_SCREENLESS",
            "OPA_KAIOS",
            "OPA_MOBILE_WEB",
            "RTOS_PHONE",
            "SMS_CHATBOT",
            "TELEGRAM_CHATBOT",
            "TELEPHONE_ASSISTANT",
            "VERILY_ONDUO",
            "YOUTUBE_APP",
            "AGSA_BISTO_FOR_EVAL",
            "COGSWORTH_FOR_EVAL",
            "LOCKHART_MIC_FOR_EVAL",
            "OPA_ANDROID_AUTO_EMBEDDED_FAKE",
            "SPARK",
            "WALLE",
            "UNIT_TESTING"
          ],
          "enumDescriptions": [
            "",
            "",
            "Deprecated (never used). Use OPA_ANDROID_AUTO instead.",
            "Assistant on small screen stationary device.",
            "",
            "",
            "",
            "",
            "Assistant on AR Glasses with both visual and audio experiences. Ask ar-assistant@ for details.",
            "For Assistant SDK gRPC client.",
            "",
            "go/assistant-lamda-overview-characters",
            "Surface for capability based testing.",
            "For chrome cast assistant web app.",
            "For chrome cast with assistant + screen (e.g., Google Nest Hub).",
            "",
            "Virtual device for event-based triggering, e.g. executing time",
            "scheduled routines: go/routine-cloud-ex For Quartz.",
            "",
            "",
            "Deprecated. Please use OPA_ANDROID_SCREENLESS.",
            "",
            "For Gboard app",
            "",
            "",
            "",
            "",
            "",
            "",
            "For standalone libassistant devices.",
            "LINE 3P messaging app",
            "Deprecated.",
            "Surfaces that do not speak to the Assistant, i.e. web HQ",
            "Assistant on Android phones accessed through the Google App (velvet). This represents neither all of the assistant on android phones (ANDROID_ALLO, VERILY_ONDUO, etc.) nor all of the assistant built on top of AGSA (ANDROID_WEAR, OPA_ANDROID_SCREENLESS, OPA_AGSA_CHROME_OS, etc.).",
            "Deprecated. Please use OPA_CROS.",
            "",
            "This is OPA on Android Go (not part of AGSA)",
            "Assistant on Nexus with screen off/locked. Use go/bisto device to trigger.",
            "Assistant on Titan hub mode (go/titan-hubmode-surface). This is OPA Android first party Smart Display devices. The UI experience is built on Opal (Gallium and Flutter) and native Android.",
            "Assistant on Android tablet",
            "Assistant on native Chrome OS (go/croissant).",
            "For assistant on GACS devices (go/gacs-dd). Google Assistant Conversation Service (GACS) defines intents the device accepts. This surface serves the intents in the assistant response.",
            "",
            "Assistant on iOS with screen off/locked. Use go/bisto device to trigger.",
            "Assistant on KaiOS. go/kaiosama",
            "Assistant on Mobile Web. go/opa-spidey",
            "Assistant on low-cost RTOS phones (go/conceRTOS).",
            "",
            "Telegram 3P messaging app",
            "Assistant on a phone call (go/telephone).",
            "",
            "A Youtube app.",
            "Eval-only surfaces. These surfaces are not real surfaces. They are only used in intermediate steps of eval query and request generation: 1. Eval samplers (OPA query sampler and Cannery sampler) checks logs and temporarily assigns these surface types to the logs, to put Bisto, Lockhart Mic, ... queries in the correct query pools. 2. Request builders uses these surface types to determine how TaskRequest for Bisto, Lockhart Mic, ... should be built, like whether some user user agent should be used, whether some entry source should be set. The surface types in the generated TaskRequest is still the production surface types, like OPA_ANDROID_SCREENLESS or OPA_AGSA. Temp surface for Bisto Android eval. Will be merged with OPA_ANDROID_SCREENLESS in the future.",
            "",
            "",
            "OPA_ANDROID_AUTO has another sub-surface (embedded) that differs in the reported capabilities, client-ops, flags but uses the same surface_type string of OPA_ANDROID_AUTO. This fake surface would allow running turing2 tests and evals for this embedded surface. Deprecated as of Feb 2019. Please use \"OPA_ANDROID_AUTO_EMBEDDED\" client type for tests and eval. See go/client-onboarding for more details. https://cs.corp.google.com/piper///depot/google3/assistant/assistant_server/tools/util/consts.h?l=32&rcl=247481455",
            "Unlaunched new surface prototype, ask spark-eng@.",
            "Wall-E is an Area120 Project building assistant powered robots. The surface is an extended joplin which have same capabilities as a google home adding custom robot features. Currently in active development. Please reach out walle-software@ or bingxin@ for questions. For details see go/walle-as-pipeline-1-pager.",
            "Surface used for unit-testing purposes. Unit-tests might still require the existence of a \"valid\" SurfaceType to succeed (eg. initialization of the CapabilityBuilder, proto matching, etc.). With the move away from SurfaceType checks, a generic \"TESTING\" SurfaceType can be used for such tests without affecting the test behavior. Unlike the CAPABILITY_BASED_SURFACE, this proto does not have any capabilities or ResponseType tied to it. It should only be used for unit-tests and should not be exposed in the ASDebugger."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesSurfaceVersion": {
      "description": "The version of the surface/client. New surfaces are encouraged to only use the \u201cmajor\u201d field to keep track of version number. The \u201cminor\u201d field may be used for surfaces that rely on both the \u201cmajor\u201d and \u201cminor\u201d fields to define their version.",
      "id": "AssistantApiCoreTypesSurfaceVersion",
      "properties": {
        "major": {
          "format": "int32",
          "type": "integer"
        },
        "minor": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesWebProviderInfo": {
      "description": "The web information of the provider. Next ID: 5",
      "id": "AssistantApiCoreTypesWebProviderInfo",
      "properties": {
        "homeStorage": {
          "description": "Serialized storage (context) persisted and retrieved for the app and home.",
          "type": "string"
        },
        "localizedAppName": {
          "description": "The localized app name.",
          "type": "string"
        },
        "openAppUrl": {
          "description": "A URL to open the provider's app.",
          "type": "string"
        },
        "thirdPartyCustomNluInfo": {
          "$ref": "AssistantApiCoreTypesWebProviderInfoThirdPartyCustomNluInfo",
          "description": "Info about 3P Custom NLU used in this web provider. TODO(b/321644453) remove when QRewrite is able to call SERoot."
        }
      },
      "type": "object"
    },
    "AssistantApiCoreTypesWebProviderInfoThirdPartyCustomNluInfo": {
      "id": "AssistantApiCoreTypesWebProviderInfoThirdPartyCustomNluInfo",
      "properties": {
        "locale": {
          "description": "The locale of this agent version, represented by BCP-47 language strings, such as \"en\", \"en-US\", \"fr\", \"fr-CA\", \"sr-Latn\", \"zh-Hans-CN\", etc.",
          "type": "string"
        },
        "nluAgentId": {
          "description": "Unique internal identifier of 3P Custom NLU agent. UUID.",
          "type": "string"
        },
        "nluAgentVersion": {
          "description": "Identifies the 3P Custom NLU agent version.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiCrossDeviceExecutionCapability": {
      "id": "AssistantApiCrossDeviceExecutionCapability",
      "properties": {
        "localConnectivityEnabled": {
          "description": "Whether the device has torus/usonia capabililities enabled or not.",
          "type": "boolean"
        },
        "remoteCastMediaEnabled": {
          "description": "Whether the device supports cast media originated from a remote device to be executed through local execution and can upload results asynchronously. Needs to be checked before sending remote media initiation through local channel since it needs an async result upload path.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiDate": {
      "description": "A Gregorian calendar date. IMPORTANT: The definition of Date proto is being moved to //assistant/api/core_types/governed/datetime_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead.",
      "id": "AssistantApiDate",
      "properties": {
        "day": {
          "description": "The day, in 1...31.",
          "format": "int32",
          "type": "integer"
        },
        "month": {
          "description": "The month, in 1...12.",
          "format": "int32",
          "type": "integer"
        },
        "year": {
          "description": "The year, e.g. 2016.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiDateTime": {
      "description": "A date-time specification, combining a date and civil time (relative to a given timezone). IMPORTANT: The definition of DateTime proto is being moved to //assistant/api/core_types/governed/datetime_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead.",
      "id": "AssistantApiDateTime",
      "properties": {
        "date": {
          "$ref": "AssistantApiDate",
          "description": "A Gregorian calendar date."
        },
        "timeOfDay": {
          "$ref": "AssistantApiTimeOfDay",
          "description": "A civil time relative to a timezone."
        },
        "timeZone": {
          "$ref": "AssistantApiTimeZone",
          "description": "A time zone in IANA format."
        }
      },
      "type": "object"
    },
    "AssistantApiDeviceCapabilities": {
      "description": "This message describes roughly what a surface is capable of doing and metadata around those capabilities. These capabilities are determined based on: - device hardware - software - status (e.g. volume level, battery percentage) These capabilities refer to the surface and not the physical device. The list of supported surfaces can be found in the assistant.api.core_types.SurfaceType enum. A surface's capabilities can differ from the device's. An example would be ANDROID_ALLO running on Pixel. Allo does not support AudioInput while the Pixel does. In this case, audio_input will be set to false for Assistant Allo requests while it might be set to true for OPA_NEXUS requests. Next ID: 35",
      "id": "AssistantApiDeviceCapabilities",
      "properties": {
        "androidIntentCapabilities": {
          "$ref": "AssistantApiAndroidIntentCapabilities",
          "description": "Capabilites related to Android intent support."
        },
        "audioInput": {
          "$ref": "AssistantApiAudioInput",
          "description": "These capabilities are scoped to the ability to gather audio. It includes information like the type of audio that can be gathered (e.g. public, private)."
        },
        "audioOutput": {
          "$ref": "AssistantApiAudioOutput",
          "description": "These capabilities are scoped to the ability to play audio. It includes information like the type of audio that can be played (e.g. public, private)."
        },
        "bluetoothCapabilities": {
          "$ref": "AssistantApiBluetoothCapabilities",
          "description": "Bluetooth capabilities related to usage of a feature."
        },
        "callCapabilities": {
          "$ref": "AssistantApiCallCapabilities",
          "description": "The call capabilities of this device. go/call-capabilities"
        },
        "camera": {
          "$ref": "AssistantApiCameraCapabilities",
          "description": "These capabilities are scoped to the camera abilities of this device."
        },
        "carUxRestrictions": {
          "description": "UX restrictions for Auto.",
          "items": {
            "enum": [
              "UX_RESTRICTIONS_UNSPECIFIED",
              "UX_RESTRICTIONS_BASELINE",
              "UX_RESTRICTIONS_FULLY_RESTRICTED",
              "UX_RESTRICTIONS_NO_KEYBOARD",
              "UX_RESTRICTIONS_NO_VIDEO"
            ],
            "enumDescriptions": [
              "This value should not be used.",
              "No specific restrictions in place, but baseline distraction optimization guidelines need to be adhered to when CarUxRestrictions.isRequiresDistractionOptimization() returns true.",
              "All restrictions are in effect.",
              "No text entry for the purpose of searching or other manual text string entry activities.",
              "No video - no animated frames > 1fps."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "cast": {
          "$ref": "AssistantApiCastCapabilities",
          "description": "These capabilities are scoped to the cast abilities of this device."
        },
        "communicationUiCapabilities": {
          "$ref": "AssistantApiCommunicationUiCapabilities"
        },
        "contactLookupCapabilities": {
          "$ref": "AssistantApiContactLookupCapabilities"
        },
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "This is the same device id that is specified in the conversation protocol and should be unique to each device/user/model combination. For example, if a request is coming from a watch through AGSA the watch and AGSA should have different device_ids. Note: this field should only be used to determine which device the capabilities belong to and not to access the id of the device. Instead DeviceProperties should be used and accessed through ParamsAccessor."
        },
        "deviceUxMode": {
          "description": "Capabilities related to Android tablet UX experience.",
          "enum": [
            "DEVICE_UX_MODE_DEFAULT",
            "DEVICE_UX_MODE_SUPPORT_LIMITED_SHARED_LOCKSCREEN"
          ],
          "enumDescriptions": [
            "",
            "Device supports the Shared Lock Screen: a glanceable space that lets anyone in the house use shared apps and the Assistant, without unlocking the device. This is for devices which only support limited SLS, e.g. TKY."
          ],
          "type": "string"
        },
        "hasVoiceTelephony": {
          "description": "Indicates that the device has connection to cellular network that allows it to make voice calls. This is distinct from device just being capable of voice telephony, because the device can be capable yet miss the suitable SIM card (for example, it could miss SIM card altogether, or have data-only SIM card).",
          "type": "boolean"
        },
        "jwnCapabilities": {
          "$ref": "AssistantApiJwnCapabilities",
          "description": "Indicates if the client supports Javascript Whatsnext (go/jwn). Also contains the Jwn libraries present on the client along with their versions."
        },
        "lensPerceptionCapabilities": {
          "$ref": "AssistantApiLensPerceptionCapabilities",
          "description": "Capabilities related to Lens Perception, i.e. image understanding. See go/lens-perception-sdk."
        },
        "location": {
          "$ref": "AssistantApiLocationCapabilities",
          "description": "These capabilities are scoped to the location abilities of this device."
        },
        "loggingOnlyData": {
          "$ref": "AssistantApiLoggingOnlyData",
          "description": "Data which is produced for logging and debugging. Servers MUST NOT use this for any other purposes, such as branching on it."
        },
        "messageCapabilities": {
          "$ref": "AssistantApiMessageCapabilities"
        },
        "movement": {
          "$ref": "AssistantApiMovementCapabilities",
          "description": "These capabilities are scoped to abilities of the device to move around."
        },
        "notificationCapabilities": {
          "description": "DEPRECATED: Use SystemNotificationRestrictions instead. Specifies whether the surface is able to display notifications. This field is superficially similar to ProactiveNotificationOutput, but unlike that field which tracks a per-user preference on the OPA side, this field captures whether the surface is capable of displaying notifications.",
          "enum": [
            "NO_NOTIFICATION_CAPABILITY",
            "NOTIFICATIONS_DISABLED",
            "NOTIFICATIONS_ENABLED"
          ],
          "enumDescriptions": [
            "The surface is not able to display notifications.",
            "The notifications are disabled on the surface.",
            "The notifications are enabled."
          ],
          "type": "string"
        },
        "notificationOutputRestrictions": {
          "$ref": "AssistantApiNotificationOutputRestrictions",
          "description": "Settings, that reflect whether a specific notification type is allowed for current device, e.g. if the user opted out from notification category or category group. This settings are server-side stored and evaluated unlike SystemNotificationRestrictions field."
        },
        "outputRestrictions": {
          "$ref": "AssistantApiOutputRestrictions",
          "description": "These are user configured restrictions indicating what the device is allowed to output from the privacy point of view."
        },
        "popOnLockscreenCapability": {
          "description": "Capability to support Pop on lockscreen.",
          "enum": [
            "POP_ON_LOCKSCREEN_DEFAULT",
            "POP_ON_LOCKSCREEN_ENABLED",
            "POP_ON_LOCKSCREEN_DISABLED"
          ],
          "enumDescriptions": [
            "Pop will default to enabled on lockscreen.",
            "Pop is enabled on lockscreen.",
            "Pop is disabled on lockscreen."
          ],
          "type": "string"
        },
        "safetyRestrictions": {
          "description": "Indicates if the client has safety related restriction.",
          "enum": [
            "DEFAULT_NO_SAFETY_RESTRICTION",
            "DISTRACTION_SAFETY_RESTRICTION"
          ],
          "enumDescriptions": [
            "The surface has no safety restriction.",
            "The surface has safety restriction due to any distraction."
          ],
          "type": "string"
        },
        "screen": {
          "$ref": "AssistantApiScreenCapabilities",
          "description": "These capabilities are scoped to the ability to see and interact with the Assistant through a screen. If the device has no screen it should send an empty ScreenCapabilities. Sending no ScreenCapabilities will cause this to be overridden with the surface default."
        },
        "sodaCapabilities": {
          "$ref": "AssistantApiSodaCapabilities",
          "description": "Capabilities related to SODA (Speech On-Device API)."
        },
        "software": {
          "$ref": "AssistantApiSoftwareCapabilities",
          "description": "These capabilities are scoped to the software available on the device as well as the set of supported Assistant features."
        },
        "speechCapabilities": {
          "$ref": "AssistantApiSpeechCapabilities",
          "description": "DEPRECATED Capabilities related to speech detection on devices."
        },
        "supportedLocale": {
          "description": "Locales supported by assistant settings for speaking and display. This is independent from device language that is defined in device setting. New locales are added based on rollout, whitelist and app version releases because older versions does not have model support. Currently supported locale list differs by surface type.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "surfaceIdentity": {
          "$ref": "AssistantApiCoreTypesSurfaceIdentity",
          "description": "The set of information that helps the server identify the surface."
        },
        "surfaceTypeString": {
          "description": "The device's surface type. This is the string version of the assistant.api.core_types.SurfaceType enum. The server should not use this field, rather it should use the SurfaceType value derived from this string.",
          "type": "string"
        },
        "systemNotificationRestrictions": {
          "$ref": "AssistantApiSystemNotificationRestrictions",
          "description": "Restrictions related to system-level notifications. This field is superficially similar to ProactiveNotificationOutput, but unlike that field which tracks a per-user preference on the OPA side, this field captures system level notifications restrictions. This field is not stored and is merged to capablities from conversation params. It exists mostly for logging purposes of android channel state and global app-level notification opt out."
        },
        "thirdPartyCapabilities": {
          "$ref": "AssistantApiThirdPartyCapabilities",
          "description": "Capabilities related to third party integration."
        }
      },
      "type": "object"
    },
    "AssistantApiDuration": {
      "description": "A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years.",
      "id": "AssistantApiDuration",
      "properties": {
        "nanos": {
          "description": "Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.",
          "format": "int32",
          "type": "integer"
        },
        "seconds": {
          "description": "Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiFeatureSpecificActionSupport": {
      "id": "AssistantApiFeatureSpecificActionSupport",
      "properties": {
        "clarificationDataSupported": {
          "description": "Whether client supports clarification suggestion chip to be displayed see |assistant.suggestions.ClarificationData|",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiFitnessFeatureSupport": {
      "id": "AssistantApiFitnessFeatureSupport",
      "properties": {
        "supportedActivities": {
          "description": "A list of fitness activity types supported by this client.",
          "items": {
            "enum": [
              "TYPE_UNSPECIFIED",
              "WALK",
              "RUN",
              "ELLIPTICAL",
              "SWIM",
              "WEIGHTS",
              "TREADMILL",
              "BIKE",
              "YOGA",
              "WORKOUT",
              "BOOT_CAMP",
              "CIRCUIT_TRAINING",
              "GOLF",
              "HIKING",
              "INTERVAL_TRAINING",
              "KICKBOXING",
              "MARTIAL_ARTS",
              "PILATES",
              "SPINNING",
              "STAIR_CLIMBING",
              "TENNIS",
              "AEROBICS",
              "CORE_TRAINING",
              "DANCING",
              "HIGH_INTENSITY_INTERVAL_TRAINING",
              "KAYAKING",
              "ROWING",
              "SKIING",
              "STANDUP_PADDLEBOARDING",
              "STRENGTH_TRAINING",
              "SNOWBOARDING"
            ],
            "enumDescriptions": [
              "The type is unknown.",
              "Represents a walking activity type.",
              "Represents a running activity type.",
              "Represents an elliptical activity type.",
              "Represents a swimming activity type.",
              "Represents a weightlifting activity type.",
              "Represents a treadmill activity type (e.g. walking/running on a treadmill).",
              "Represents a cycling activity type.",
              "Represents a yoga activity type.",
              "Represents a generic workout activity.",
              "Represents a bootcamp activity type.",
              "Represents a circuit training activity type.",
              "Represents a golf activity type.",
              "Represents a hiking activity type.",
              "Represents an interval training activity type.",
              "Represents a kickboxing activity type.",
              "Represents a martial arts activity type.",
              "Represents a pilates activity type.",
              "Represents a spinning(indoor cycling, stationary biking) activity type.",
              "Represents a stair climbing activity type.",
              "Represents a tennis activity type.",
              "Represents an aerobics activity type.",
              "Represents a core training activity type.",
              "Represents a dancing activity type.",
              "Represents a HIIT activity type.",
              "Represents a kayaking activity type.",
              "Represents a rowing activity type.",
              "Represents a skiing activity type.",
              "Represents a standup paddleboading(SUP) activity type.",
              "Represents a strength training activity type.",
              "Represents a snowboarding activity type."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiFluidActionsSupport": {
      "id": "AssistantApiFluidActionsSupport",
      "properties": {
        "stateSyncMethod": {
          "description": "Specifies the params proto that Fluid Actions uses to sync state with server.",
          "enum": [
            "STATE_SYNC_METHOD_UNSPECIFIED",
            "DIALOG_STATE_PARAMS"
          ],
          "enumDescriptions": [
            "Unspecified state sync method.",
            "New params proto used to sync state between client and server. New clients must use this value. For proto details, see: http://google3/assistant/api/params/dialog_state_params.proto"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiGacsCapabilities": {
      "description": "Capabilities of Google assistant conversation service(GACS) devices. These capabilites including supported GACS actions and response size limitations.",
      "id": "AssistantApiGacsCapabilities",
      "properties": {
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "DeviceId of the accessory device (eg. watch) Commonly the go/dusi (eg. client_instance_id) is provided."
        },
        "responseConfig": {
          "$ref": "GoogleAssistantAccessoryV1ResponseConfig",
          "description": "Configuration sent by device."
        },
        "ttsEncoding": {
          "description": "DEPRECATED: Format of TTS audio requested by the device.",
          "enum": [
            "LINEAR_16BIT",
            "MULAW",
            "ALAW",
            "MP3",
            "MP3_64KBPS",
            "SPEEX",
            "SPEEX_WITH_HEADER_BYTE",
            "SPEEX_IN_OGG",
            "OPUS_IN_OGG",
            "OPUS_24KBPS_IN_OGG",
            "OPUS_16KBPS_IN_OGG",
            "OPUS_12KBPS_IN_OGG",
            "OPUS_16KBPS_CONTAINERLESS",
            "OPUS_24KBPS_CONTAINERLESS",
            "OPUS_32KBPS_CONTAINERLESS"
          ],
          "enumDescriptions": [
            "Signed 16-bit little-endian (a.k.a s16le) linear PCM.",
            "G.711 audio companding. https://en.wikipedia.org/wiki/G.711 8-bit \u03bc-law encoding according to G.711",
            "8-bit A-law encoding according to G.711.",
            "The default MP3 encoding is 32kbps. Text-to-speech audio at this bit rate has audible compression artifacts and is not recommended. Please use OPUS_IN_OGG instead.",
            "MP3 at 64kbps sounds nearly identical to uncompressed for 24kHz TTS audio, and sounds similar to OPUS_IN_OGG.",
            "Raw speex stream with each frame concatenated together. The size of each frame will need to be communciated separately. Variable bitrate encoding is unsupported using this output type.",
            "Similar to SPEEX, this mode will concatenate together the speex frames. However, each frame will have prepended a single byte that describes the length of the following frame.",
            "In this case, we'll wrap the speex contents in an ogg container, resulting in a more generally decode-able format but one with more storage overhead.",
            "Opus encoded audio wrapped in an ogg container. The result will be a file which can be played natively on Android, and in browsers (at least Chrome and Firefox). The quality of the encoding is considerably higher than MP3 when using the same bitrate. At the moment, this defaults to 32kbps but the TTS team reserves the right to adjust the bitrate to provide the best experience.",
            "Opus encoded audio in 24kbps wrapped in an ogg container. The result will be a file which can be played natively on Android, and in browsers while reducing data consumption slightly.",
            "The following bitrates for Opus below 24kbps are here only for special usecases; they result in a significant reduction in quality. Please get in touch with the TTS team if you think you might have a valid usecase. NOTE(staz): These bitrates are not officially supported. TTS is to be served at a minimum of 24kbps everywhere, including in NBU countries. See b/137234032#comment13 on why lower bitrates don't help in tangible ways even in NBU markets.",
            "",
            "Opus encoded audio using the specified bitrate without a container such as Ogg, RTP or WebM. The response is a stream which can be played natively on low powered wearable devices. Delivered as multiple frames per S3 response. These frames need to be carefully byte-delimited (constant bitrate) by the client. They use a statically defined frame duration of 20ms. Frame size per bit-rate: 16kbps: each frame is of size 40 bytes 24kbps: each frame is of size 60 bytes 32kbps: each frame is of size 80 bytes",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiGcmCapabilities": {
      "description": "Capabilities related to GCM.",
      "id": "AssistantApiGcmCapabilities",
      "properties": {
        "gcmRegistrationId": {
          "description": "GCM registration id for the device. Used to pass messages to the device.",
          "type": "string"
        },
        "supportsAssistantGcm": {
          "description": "Assistant supports GCM on the device. ClientOps can be sent to it over GCM and will be executed.",
          "type": "boolean"
        },
        "supportsClientInputOverGcm": {
          "description": "If it is set to true, then it indicates to server that device is capable of receiving a GCM payload with serialized client input. The client input will be sent back to Assistant Server over conversation protocol.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiGestureCapabilities": {
      "description": "The gesture capabilities related to Selina. Next ID: 4",
      "id": "AssistantApiGestureCapabilities",
      "properties": {
        "gestureSensing": {
          "description": "Whether Gesture is supported. When false, override the value for tap and omniswipe.",
          "type": "boolean"
        },
        "omniswipeGestureCapable": {
          "description": "Whether omniswipe is supported",
          "type": "boolean"
        },
        "tapGestureCapable": {
          "description": "Whether tap is supported",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiGuestAccessOutput": {
      "description": "DEPRECATED: Use AccessControlOutput instead. Access settings for guests.",
      "id": "AssistantApiGuestAccessOutput",
      "properties": {
        "guestAccessOnYoutube": {
          "enum": [
            "UNKNOWN_GUEST_ACCESS",
            "USE_DEFAULT_ACCOUNT_FOR_GUEST",
            "DISABLED_FOR_GUEST"
          ],
          "enumDescriptions": [
            "",
            "Guests can access content using linked users' account.",
            "No access for guests."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiImmersiveCanvasSupport": {
      "id": "AssistantApiImmersiveCanvasSupport",
      "properties": {
        "confirmationMessageSupported": {
          "description": "Whether the client supports confirmation messages in Immersive Canvas actions.",
          "type": "boolean"
        },
        "pauseSignalSupported": {
          "description": "Whether the client support canvas pause signal. If true, the Assistant Server will send a signal when canvas transitioning to pause mode.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiJwnCapabilities": {
      "description": "These capabilities are used to determine the jwn libraries and their versions that are present on the client.",
      "id": "AssistantApiJwnCapabilities",
      "properties": {
        "librariesVersionMap": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The name and version of the jwn libraries currently stored on the client. These are the same that the server communicated when the library was first sent down.",
          "type": "object"
        },
        "supportedCompressionMode": {
          "description": "Compression algorithms supported on the client. Server can choose one of these to compress WhatsNext Javascript programs and libraries.",
          "items": {
            "enum": [
              "NONE",
              "BROTLI",
              "FLATE"
            ],
            "enumDescriptions": [
              "jwn_program is not in compressed state.",
              "Brotli (google3/third_party/brotli) compression used. Recommended compressor for Javascript.",
              "Flate (google3/util/compression/flate) compression used."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "supportsJwn": {
          "description": "Whether the client supports running jwn code.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilities": {
      "description": "Capabilities related to Lens Perception, i.e. image understanding. See go/loa-lens-device-capabilities. Next ID: 6",
      "id": "AssistantApiLensPerceptionCapabilities",
      "properties": {
        "hasLensPerception": {
          "description": "Whether the device supports Lens Perception.",
          "type": "boolean"
        },
        "isLensDirectIntentAvailable": {
          "description": "Indicates whether Lens supports Lens Direct Intent (go/lensdirectintent).",
          "type": "boolean"
        },
        "isLensLiveViewfinderAvailable": {
          "description": "Indicates whether Lens supports Live view-finder experience.",
          "type": "boolean"
        },
        "isLensPostCaptureAvailable": {
          "description": "Indicates whether Lens supports Post-capture experience with an image payload.",
          "type": "boolean"
        },
        "lensCapabilities": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilities",
          "description": "Contains the capabilities that Lens can support."
        }
      },
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilities": {
      "description": "The set of capabilities that Lens can support. This is the Assistant proto representation of Lens capabilities defined at j/c/g/android/apps/gsa/search/shared/service/proto/lens_service_event.proto Next ID: 7",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilities",
      "properties": {
        "dining": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesDining",
          "description": "The presence of this message means that Dining is supported."
        },
        "education": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesEducation",
          "description": "The presence of this message means that Education is supported."
        },
        "outdoor": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesOutdoor",
          "description": "The presence of this message means that Outdoor is supported."
        },
        "shopping": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesShopping",
          "description": "The presence of this message means that Shopping is supported."
        },
        "text": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesText",
          "description": "The presence of this message means that intenting directly into the text filter is supported."
        },
        "translate": {
          "$ref": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesTranslate",
          "description": "The presence of this message means that Translation is supported."
        }
      },
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesDining": {
      "description": "Dining recognition capability. For example popular dishes on a given restaurant menu image.",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesDining",
      "properties": {},
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesEducation": {
      "description": "Education recognition capability.",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesEducation",
      "properties": {},
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesOutdoor": {
      "description": "Outdoor place recognition capability. For example recognizing storefronts.",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesOutdoor",
      "properties": {},
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesShopping": {
      "description": "Shopping recognition capability.",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesShopping",
      "properties": {},
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesText": {
      "description": "Text recognition capability.",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesText",
      "properties": {
        "isTextToSpeechSupported": {
          "description": "Indicates whether text-to-speech is supported.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesTranslate": {
      "description": "Translation capability.",
      "id": "AssistantApiLensPerceptionCapabilitiesLensCapabilitiesTranslate",
      "properties": {
        "supportedLanguageTags": {
          "description": "The list of language IETF BCP 47 tags that are supported. See the full details in the comment on the equivalent field in: http://google3/java/com/google/android/apps/gsa/search/shared/service/proto/lens_service_event.proto;l=55;rcl=355512559",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiLiveTvChannelCapabilities": {
      "id": "AssistantApiLiveTvChannelCapabilities",
      "properties": {
        "channelsByProvider": {
          "description": "A list of channel providers each of which provides a list of its channels.",
          "items": {
            "$ref": "AssistantApiLiveTvChannelCapabilitiesChannelsByProvider"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiLiveTvChannelCapabilitiesChannelsByProvider": {
      "id": "AssistantApiLiveTvChannelCapabilitiesChannelsByProvider",
      "properties": {
        "channels": {
          "description": "A list of channels provided by this input. Keep the performance impact in mind when the number/size of the channels is large. When there are too many channels, consider stripping out some data.",
          "items": {
            "$ref": "AssistantApiLiveTvChannelCapabilitiesLiveTvChannel"
          },
          "type": "array"
        },
        "inputId": {
          "description": "An identifier to identify the input source. For example for TIF based channels, this will be the TIF input ID to differentiate different tuner apps. See https://source.android.com/devices/tv",
          "type": "string"
        },
        "providerType": {
          "description": "Type of provider who provides this channel input.",
          "enum": [
            "UNKNOWN_PROVIDER_TYPE",
            "OTT_PROVIDER",
            "TUNER"
          ],
          "enumDescriptions": [
            "",
            "OTT providers providing live tv contents like Sling, Youtube TV.",
            "TV Tuner apps providing live tv contents."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiLiveTvChannelCapabilitiesLiveTvChannel": {
      "id": "AssistantApiLiveTvChannelCapabilitiesLiveTvChannel",
      "properties": {
        "channelId": {
          "description": "Unique channel identifier.",
          "type": "string"
        },
        "channelName": {
          "description": "A list of channel names and synonyms.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "channelNumber": {
          "description": "Channel number displayed to user. Optional.",
          "type": "string"
        },
        "deeplink": {
          "description": "A deep link into the Live player app that tunes to this channel.",
          "type": "string"
        },
        "mid": {
          "description": "KG mid of the channel if it exists in KG.",
          "type": "string"
        },
        "networkMid": {
          "description": "Network KG mid of the channel if it exists in KG",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiLiveTvProvider": {
      "id": "AssistantApiLiveTvProvider",
      "properties": {
        "providerInfo": {
          "$ref": "AssistantApiCoreTypesProvider",
          "description": "Contains detailed provider information such as android app package name."
        },
        "providerKey": {
          "description": "An provider enum string for OTT providers. The available key can be found in go/ump-provider-enum For Tuner provider, the provider key would be an ID the tuner app uploaded from TIF. See https://source.android.com/devices/tv",
          "type": "string"
        },
        "providerType": {
          "enum": [
            "UNKNOWN_PROVIDER_TYPE",
            "OTT_PROVIDER",
            "TUNER"
          ],
          "enumDescriptions": [
            "",
            "OTT providers providing live tv contents like Sling, Youtube TV.",
            "TV Tuner apps providing live tv contents."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiLocationCapabilities": {
      "id": "AssistantApiLocationCapabilities",
      "properties": {
        "gpsAvailable": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiLoggingOnlyData": {
      "description": "Data which is produced for logging and debugging. Servers MUST NOT use this for any other purposes, such as branching on it. Next ID: 15",
      "id": "AssistantApiLoggingOnlyData",
      "properties": {
        "accountIndex": {
          "description": "The index of the account on the device. Useful when there are multiple accounts on a device such as distinguishing primary user data from secondary users. There is no guarantee that this is a stable number but is relatively stable in practice.",
          "format": "int32",
          "type": "integer"
        },
        "acpVersion": {
          "description": "A user-readable string describing the ACP version (go/acp-version) of the client app used by the user to originate the conversation.",
          "type": "string"
        },
        "androidId": {
          "description": "Random identifier assigned to Android mobile devices. Older logs may have previously stored other kinds of android IDs in this field, but all current logs should use the GServices Id. See go/androidids.",
          "format": "int64",
          "type": "string"
        },
        "appVersion": {
          "description": "A user-readable string describing the version of the client app used by the user to originate the conversation.",
          "type": "string"
        },
        "assistantSettingsSource": {
          "description": "An enum specifying when was this ATV AssistantSettings entry initially created.",
          "enum": [
            "NOT_SET",
            "FIRST_SCREEN_DEVICE_OOBE",
            "FIRST_SCREEN_KATNISS_OOBE",
            "FIRST_SCREEN_DELEGATION_OOBE",
            "FIRST_SCREEN_FIXER_JOB",
            "FIRST_SCREEN_FCM_JOB",
            "FIRST_SCREEN_HOME_GRAPH_JOB",
            "FIRST_SCREEN_PERSONAL_BIT",
            "FIRST_SCREEN_VOICE_INPUT_BIT",
            "FIRST_SCREEN_OTHER",
            "SECOND_SCREEN_AGSA",
            "SECOND_SCREEN_GHA_IOS",
            "SECOND_SCREEN_GHA_ANDROID"
          ],
          "enumDescriptions": [
            "LINT.IfChange",
            "Created during ATV Device OOBE(setupwraith)",
            "Created within Katniss(Assistant client on TV)",
            "Created within Katniss delegation path",
            "Created by fix settings job in katniss.",
            "Created by FCM jobs in katnisss.",
            "Created by home graph jobs in katniss.",
            "Created by enable personal bit button in Settings UI",
            "Created by enable voice input bit button in Settings UI",
            "Created by other parts in katniss",
            "Created by AGSA",
            "Created by Google Home App IOS",
            "Created by Google Home App Android LINT.ThenChange(//depot/google3/logs/proto/assistant/capabilities_log.proto)"
          ],
          "type": "string"
        },
        "boardName": {
          "description": "The type of board used by manufacturer for this device",
          "type": "string"
        },
        "boardRevision": {
          "description": "The revision of board used",
          "type": "string"
        },
        "castAssistantSettingLinkingResult": {
          "$ref": "AssistantApiCastAssistantSettingLinkingResult",
          "description": "This field records the linking status between Assistant setting entry and Cast setting entry. Currently only ATV surface populates this field for profiling purpose."
        },
        "deviceModel": {
          "description": "A user-readable string describing the device's hardware platform.",
          "type": "string"
        },
        "embedderBuildInfo": {
          "description": "Any relevant info concerning the build options of the embedder (that is the software which runs as the 'driver' of an Assistant library, such as libassistant. the embedder is typically built by a third party)",
          "type": "string"
        },
        "initialAppVersion": {
          "description": "A string recording the app version that is initially used to created this settings entry.",
          "type": "string"
        },
        "mdnsDisplayName": {
          "description": "default display name of device over mdns. This is specified at the factory, not specified by the user.",
          "type": "string"
        },
        "platformBuild": {
          "description": "A user-readable string describing the device's software platform.",
          "type": "string"
        },
        "virtualReleaseChannel": {
          "description": "A string describing device's release channel. For cast devices, the string will look like \"qa-beta-channel\", \"eng-no-update\", etc.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiMediaControlSupport": {
      "id": "AssistantApiMediaControlSupport",
      "properties": {
        "skipConfirmationsWhilePlaying": {
          "description": "Whether to prevent confirmations (text, tts) for media control actions while media is playing so that the media session is not interrupted.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiMessageCapabilities": {
      "id": "AssistantApiMessageCapabilities",
      "properties": {
        "fallbackToTetheredDeviceAppCapabilities": {
          "description": "If true, APP_ID queries initiated by this device should fall back to execution on the tethered device if it's available and if the primary device cannot perform the action (e.g. due to the app not being installed).",
          "type": "boolean"
        },
        "supportedRecipientTypes": {
          "description": "Should only be checked if nonempty.",
          "items": {
            "enum": [
              "UNSPECIFIED_ENDPOINT",
              "PHONE_NUMBER",
              "EMAIL_ADDRESS",
              "APP_UNIQUE_ID",
              "EMERGENCY_PHONE_NUMBER",
              "VOICEMAIL"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiMovementCapabilities": {
      "id": "AssistantApiMovementCapabilities",
      "properties": {
        "mobility": {
          "description": "Indicates how much the device moves around. E.g., TV has a low mobility level, while Auto has a very high level.",
          "enum": [
            "UNSPECIFIED",
            "LOW",
            "MEDIUM",
            "HIGH",
            "VERY_HIGH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiNotificationOutputRestrictions": {
      "id": "AssistantApiNotificationOutputRestrictions",
      "properties": {
        "optOutState": {
          "$ref": "AssistantApiNotificationOutputRestrictionsOptOutState"
        }
      },
      "type": "object"
    },
    "AssistantApiNotificationOutputRestrictionsOptOutState": {
      "description": "Per category/category group notification opt out settings.",
      "id": "AssistantApiNotificationOutputRestrictionsOptOutState",
      "properties": {
        "categoryGroupState": {
          "items": {
            "$ref": "AssistantApiNotificationOutputRestrictionsOptOutStateCategoryGroupState"
          },
          "type": "array"
        },
        "categoryState": {
          "items": {
            "$ref": "AssistantApiNotificationOutputRestrictionsOptOutStateCategoryState"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiNotificationOutputRestrictionsOptOutStateCategoryGroupState": {
      "id": "AssistantApiNotificationOutputRestrictionsOptOutStateCategoryGroupState",
      "properties": {
        "categoryGroup": {
          "enum": [
            "UNSPECIFIED",
            "SYSTEM",
            "PROMOTIONAL",
            "SUBSCRIPTIONS",
            "PROACTIVE",
            "REMINDERS",
            "EXTENDED_ANSWERS",
            "FEEDBACK",
            "ACTIONS_ON_GOOGLE",
            "DUO_MISSED_CALLS",
            "HOME_AUTOMATION",
            "GETTING_AROUND",
            "UNIT_TESTING"
          ],
          "enumDescriptions": [
            "",
            "This is required, do not remove. Group for notification categories that should not be displayed at all.",
            "Promotional notifications.",
            "Notifications for Subscriptions.",
            "Proactive notifications",
            "Reminders (including assigned reminders).",
            "Cross surface answers.",
            "Assistant asking for feedback from users.",
            "AoG 3P notifications.",
            "Missed call notifications from DUO.",
            "Home Automation notifications.",
            "Getting around notifications.",
            "Always keep at the end."
          ],
          "type": "string"
        },
        "state": {
          "enum": [
            "OPTED_IN",
            "OPTED_OUT"
          ],
          "enumDescriptions": [
            "Default value is intentionally set to opted in as all categories/category groups are enabled by default.",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiNotificationOutputRestrictionsOptOutStateCategoryState": {
      "id": "AssistantApiNotificationOutputRestrictionsOptOutStateCategoryState",
      "properties": {
        "category": {
          "enum": [
            "UNSPECIFIED",
            "SYSTEM_REQUIRED_LOW_PRIORITY",
            "SYSTEM_REQUIRED_HIGH_PRIORITY",
            "DISCOVERY",
            "REALTIME_PROMOTIONAL",
            "SUBSCRIPTIONS",
            "FLIGHT_UPDATES",
            "TRANSPORT_UPDATES",
            "BILL_UPDATES",
            "PACKAGE_DELIVERY_UPDATES",
            "EVENT_UPDATES",
            "DUE_DATE_UPDATES",
            "CELEBRATION_UPDATES",
            "ROUTINE_UPDATES",
            "TASK_SUGGESTIONS",
            "AT_A_PLACE",
            "APP_RECOMMENDATIONS",
            "TRAVEL_UPDATES",
            "REMINDER_DUE",
            "NEW_REMINDER_ASSIGNMENT",
            "ASSIGNED_REMINDER_DUE",
            "ROUTINE_SETTINGS_UPDATES",
            "MAPS_OR_DIRECTIONS",
            "MOVIE_SHOWTIMES",
            "SPORTS_UPDATES",
            "NEWS_UPDATES",
            "SONGS_AND_ARTISTS",
            "TRANSLATIONS",
            "ANSWERS_TO_QUESTIONS",
            "SETTINGS_LINKS",
            "RESERVATION_UPDATES",
            "DEPRECATED_FEEDBACK_REQUESTS",
            "FEEDBACK_REQUESTS",
            "ACTIONS_ON_GOOGLE",
            "DUO_MISSED_CALLS",
            "HOME_AUTOMATION",
            "TIME_TO_LEAVE",
            "COMMUTE",
            "OCCASIONALLY_REPEATED_ACTIONS",
            "FREQUENTLY_REPEATED_ACTIONS",
            "ASPIRE",
            "ASSISTANT_DRIVING_MODE",
            "DISCOVERY_DEFAULT_PRIORITY",
            "HOLIDAY_REMINDERS",
            "CROSS_DEVICE_TIMER",
            "LIVE_CARD",
            "ASYNC_ACTION",
            "UNIT_TESTING"
          ],
          "enumDescriptions": [
            "",
            "Categories required by Assistant & won't be shown on settings page.",
            "",
            "Promotional discovery notifications.",
            "",
            "Subscriptions (both event and time based).",
            "Proactive notification categories.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Reminder notification categories.",
            "",
            "We're probably going to deprecate ASSIGNED_REMINDER_DUE.",
            "Routine related notification categories.",
            "Extended answer (cross device) notification categories.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Feedback requests from Assistant.",
            "",
            "Actions on Google (Third party) notifications.",
            "Missed call notifications from DUO.",
            "Home Automation related notifications.",
            "Getting around notifications.",
            "",
            "Repeated actions. Having two categories for occasionally and frequently repeated ones since the FREQUENTLY_REPEATED_ACTIONS are buzzing.",
            "",
            "Assistant Aspire notifications.",
            "",
            "Discovery notifications that shows in status bar but doesn't make noise.",
            "",
            "",
            "Live cards, these are not real notifications but live cards shown on Home App.",
            "These are not really notifications, rather push messages to initiate an asynchronous action.",
            "Always keep at the end."
          ],
          "type": "string"
        },
        "state": {
          "enum": [
            "OPTED_IN",
            "OPTED_OUT"
          ],
          "enumDescriptions": [
            "Default value is intentionally set to opted in as all categories/category groups are enabled by default.",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiOemCapabilities": {
      "description": "Encapsulates the action capabilities of the OEM device. This data is merged from Device Model lookup, per-device registration, and per-request context. This data is sent to NLU layer for query understanding.",
      "id": "AssistantApiOemCapabilities",
      "properties": {
        "cloudCapability": {
          "$ref": "AssistantDevicesPlatformProtoCloudCapability",
          "description": "The OEM Cloud execution capability of this device, containing routing details for cloud fulfillment."
        },
        "cloudDeviceCapabilities": {
          "additionalProperties": {
            "description": "Properties of the object.",
            "type": "any"
          },
          "description": "If fulfillment is done via 3P cloud and 3P supports device capabilities, this field will be set.",
          "type": "object"
        },
        "deviceModelId": {
          "description": "Device Model Id from DeviceModelPackage.",
          "type": "string"
        },
        "deviceModelRevisionId": {
          "description": "Device Model Revision Id from DeviceModelPackage.",
          "format": "int64",
          "type": "string"
        },
        "deviceSpecificData": {
          "description": "Opaque supported action data related to a specific domain of devices, for example for car. go/car-talk-registration-model",
          "type": "string"
        },
        "internalCapability": {
          "$ref": "AssistantDevicesPlatformProtoInternalCapability",
          "description": "Internal-only config containing metadata about the Device Model, for example to control the ranking behavior."
        },
        "thirdPartyActionConfig": {
          "$ref": "AssistantApiThirdPartyActionConfig",
          "description": "3P Action Metadata, populated from the Device Model lookup and the client request parameters. For example, an Assistant SDK request would have the billed project id of the Assistant request added here in order to enable any Device Actions developed using the same Google Cloud project. This data is sent to Service Engine to mask triggering for Device Actions."
        }
      },
      "type": "object"
    },
    "AssistantApiOnDeviceAssistantCapabilities": {
      "description": "Definitions of on-device assistant capabilities.",
      "id": "AssistantApiOnDeviceAssistantCapabilities",
      "properties": {
        "isLocalNetworkArbitrationSupported": {
          "description": "Capabilities related to local network arbitration (go/local-network-arbitration). Indicates if the device is capable of being a host device in the LAN whiling doing local network arbitration.",
          "type": "boolean"
        },
        "isOnDeviceArbitrationSupported": {
          "description": "Capabilities related to on-device arbitration(go/arbitration-on-device).",
          "type": "boolean"
        },
        "isOnDeviceAssistantSupported": {
          "description": "Indicates if on-device assistant is enabled on this device. Example usecases: NGA (go/nga) or Marble (go/marble).",
          "type": "boolean"
        },
        "isOnDeviceUnderstandingSupported": {
          "description": "This may be used by NGA. E.g. if understanding happens on device, we can have more aggressive logic when fulfilling some features on the server side, like teleport.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiOnDeviceSmartHomeCapabilities": {
      "description": "Definitions of on-device Smart Home capabilities. Next ID: 2",
      "id": "AssistantApiOnDeviceSmartHomeCapabilities",
      "properties": {
        "isOnDeviceSmartHomeSupported": {
          "description": "Master bit for on-device Smart Home features.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiOnDeviceStorageCapabilities": {
      "description": "The on-device storage capabilities found on the device.",
      "id": "AssistantApiOnDeviceStorageCapabilities",
      "properties": {
        "isSupported": {
          "description": "Determines if an on-device storage is supported.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiOutputRestrictions": {
      "description": "These are user configurable permissions representing what the device is allowed to output. Next ID: 11",
      "id": "AssistantApiOutputRestrictions",
      "properties": {
        "accessControlOutput": {
          "$ref": "AssistantApiAccessControlOutput",
          "description": "Access settings for all providers."
        },
        "googlePhotoContent": {
          "description": "The type of Google Photo content which the device can output.",
          "enum": [
            "ALL_PHOTO_CONTENT",
            "NO_RESTRICTED_PHOTO_CONTENT"
          ],
          "enumDescriptions": [
            "All content can be output, including contents from restriced categories (e.g. violent, racy).",
            "Only content from non-restricted categories can be output."
          ],
          "type": "string"
        },
        "guestAccessOutput": {
          "$ref": "AssistantApiGuestAccessOutput",
          "description": "DEPRECATED: Use access_control_output instead. Access settings for guests."
        },
        "personalData": {
          "description": "The level of personal data which the device can output. See go/personal-readout for detail.",
          "enum": [
            "PERSONAL_DATA_OUTPUT_UNKNOWN",
            "ALL_PERSONAL_DATA_WITH_PROACTIVE",
            "ALL_PERSONAL_DATA",
            "NO_PERSONAL_DATA"
          ],
          "enumDescriptions": [
            "UNKNOWN.",
            "DO NOT USE. This field has been deprecated.",
            "All personal data can be output.",
            "No personal data can be output."
          ],
          "type": "string"
        },
        "proactiveNotificationOutput": {
          "description": "This controls if the server can proactively send notification to users, and it does not affect scenarios that users ask for information. The notification may include TTS and lights. It could be only lights for chirp.",
          "enum": [
            "UNKNOWN_PROACTIVE_NOTIFICATION",
            "NO_PROACTIVE_NOTIFICATION",
            "ALL_PROACTIVE_NOTIFICATIONS"
          ],
          "enumDescriptions": [
            "The setting for proactive notification is unknown",
            "No proactive notification can be output",
            "All proactive notifications can be output"
          ],
          "type": "string"
        },
        "proactiveOutput": {
          "$ref": "AssistantApiProactiveOutput",
          "description": "Restrictions on displaying and interacting with content on proactive surfaces (e.g. Dragonglass home screen). Note: NEVER access this field of OutputRestrictions directly, use the code in assistant/assistant_server/settings/device/device_settings_util.h instead."
        },
        "youtubeAutoplayRestriction": {
          "description": "Whether YouTube autoplay is allowed for queries from the user to this device. See go/assistant-youtube-settings for details.",
          "enum": [
            "AUTOPLAY_RESTRICTION_UNSPECIFIED",
            "AUTOPLAY_ALLOWED",
            "AUTOPLAY_DISABLED"
          ],
          "enumDescriptions": [
            "",
            "Autoplay can be applied to youtube queries to the device from this user",
            "Autoplay must not be enabled for youtube queries to the device from this user"
          ],
          "type": "string"
        },
        "youtubeContent": {
          "description": "The type of YouTube content which the device can output.",
          "enum": [
            "ALL_YOUTUBE_CONTENT",
            "NO_RESTRICTED_CONTENT"
          ],
          "enumDescriptions": [
            "All content can be output.",
            "No restricted content can be output."
          ],
          "type": "string"
        },
        "youtubeTvContent": {
          "description": "The type of YouTube TV content which the device can output.",
          "enum": [
            "ALL_YOUTUBE_TV_CONTENT",
            "NO_RESTRICTED_YOUTUBE_TV_CONTENT"
          ],
          "enumDescriptions": [
            "All YouTube TV content can be output.",
            "No restricted YouTube TV content can be output."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiProactiveOutput": {
      "description": "Next ID: 7",
      "id": "AssistantApiProactiveOutput",
      "properties": {
        "allowAllPersonalData": {
          "description": "Allows displaying all personal data on proactive surfaces with no face match capability.",
          "type": "boolean"
        },
        "androidTvAssistantSettingsSource": {
          "description": "For ANDROID_TV devices, the location that this setting was last changed from. Note: this structure allows to extend to more per-vertical bits in the future.",
          "enum": [
            "NOT_SET",
            "FIRST_SCREEN_DEVICE_OOBE",
            "FIRST_SCREEN_KATNISS_OOBE",
            "FIRST_SCREEN_DELEGATION_OOBE",
            "FIRST_SCREEN_FIXER_JOB",
            "FIRST_SCREEN_FCM_JOB",
            "FIRST_SCREEN_HOME_GRAPH_JOB",
            "FIRST_SCREEN_PERSONAL_BIT",
            "FIRST_SCREEN_VOICE_INPUT_BIT",
            "FIRST_SCREEN_OTHER",
            "SECOND_SCREEN_AGSA",
            "SECOND_SCREEN_GHA_IOS",
            "SECOND_SCREEN_GHA_ANDROID"
          ],
          "enumDescriptions": [
            "LINT.IfChange",
            "Created during ATV Device OOBE(setupwraith)",
            "Created within Katniss(Assistant client on TV)",
            "Created within Katniss delegation path",
            "Created by fix settings job in katniss.",
            "Created by FCM jobs in katnisss.",
            "Created by home graph jobs in katniss.",
            "Created by enable personal bit button in Settings UI",
            "Created by enable voice input bit button in Settings UI",
            "Created by other parts in katniss",
            "Created by AGSA",
            "Created by Google Home App IOS",
            "Created by Google Home App Android LINT.ThenChange(//depot/google3/logs/proto/assistant/capabilities_log.proto)"
          ],
          "type": "string"
        },
        "healthAndFitnessProactive": {
          "description": "Allows displaying Health and Fitness content on proactive surfaces. This is a sub bit of the device-wide PR bit - the device-wide PR bit must be enabled AND this vertical sub bit must be enabled for H&F content to be shown. This bit will be available on all surfaces that have the proactive-bit enabled. If the proactive-bit is not enabled, then we do not show health and fitness content at all (or even allow access to this setting).",
          "enum": [
            "NO_HEALTH_AND_FITNESS_PROACTIVE_OUTPUT",
            "ALL_HEALTH_AND_FITNESS_PROACTIVE_OUTPUT"
          ],
          "enumDescriptions": [
            "No health and fitness proactive content can be output",
            "All health and fitness proactive content can be output"
          ],
          "type": "string"
        },
        "photosProactive": {
          "description": "Allows displaying photos content on Dragonglass proactive surfaces. This is a sub bit of the device-wide PR bit - the device-wide PR bit must be enabled AND this vertical sub bit must be enabled for photos content to be shown on Dragonglass surfaces. This bit will be available on all Dragonglass surfaces that have the proactive-bit enabled. If the proactive-bit is not enabled or it's not a Dragonglass surface, then we do not show proactive photos content at all, nor allow access to this setting. See go/opa-photos-sg-settings for more details.",
          "enum": [
            "UNKNOWN_PHOTOS_PROACTIVE_OUTPUT",
            "NO_PHOTOS_PROACTIVE_OUTPUT",
            "ALL_PHOTOS_PROACTIVE_OUTPUT"
          ],
          "enumDescriptions": [
            "",
            "No photos proactive content can be output. This indicates that user has explicitly disabled photos proactive settings.",
            "All photos proactive content can be output. This indicates that user has explicitly enabled photos proactive settings."
          ],
          "type": "string"
        },
        "supportsProactiveOutput": {
          "description": "Whether a device supports proactive output. Note that this is assumed to be true for all Smart Display devices, but surfaces that newly start supporting proactive_output should set this bit.",
          "type": "boolean"
        },
        "userMatchProactive": {
          "description": "Settings for displaying personal data on proactive surfaces with face match capability.",
          "enum": [
            "UNKNOWN_USER_MATCH_PROACTIVE",
            "NEVER_SHOW",
            "ONLY_SHOW_ON_USER_MATCH",
            "ALWAYS_SHOW"
          ],
          "enumDescriptions": [
            "",
            "Never show proactive content.",
            "Only show proactive content on Face Match.",
            "Always show proactive content."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiProtobuf": {
      "description": "Also known as \"Extensions Without Extensions\" or \"The Poor Man's Any\", this simple proto is used to transmit arbitrary protocol buffers over the wire. Unlike extensions: - It does not require the proto type to be compiled into the binary. (Useful so that the proto declaration can be inside the conversation package) - It is compatible with all versions of proto, including proto3 and the wack-tastic version used on ChromecastOS. Server libraries for dealing with it live in google3/assistant/protocol/protobuf_lib.h.",
      "id": "AssistantApiProtobuf",
      "properties": {
        "protobufData": {
          "description": "The serialized protocol buffer.",
          "format": "byte",
          "type": "string"
        },
        "protobufType": {
          "description": "The type of the protocol buffer to use. This must be a resolvable name (Namespace.ProtoName) and refer to a proto which is either compiled in to both client and server (e.g. a base proto type) or to one which is part of the conversation package.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiRecurrence": {
      "description": "Date-based recurrences specify repeating events. Conceptually, a recurrence is a (possibly unbounded) sequence of dates on which an event falls, described by a list of constraints. A date is in a recurrence if and only if it satisfies all of the constraints. Note that devices may support some constraints, but not all. IMPORTANT: The definition of Recurrence proto is being moved to //assistant/api/core_types/governed/datetime_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead.",
      "id": "AssistantApiRecurrence",
      "properties": {
        "begin": {
          "$ref": "AssistantApiDate",
          "description": "The first day of the recurrence. If begin is not set, then the reminder will start infinitely in the past."
        },
        "blacklistedRanges": {
          "description": "A list of blacklisted dates to skip the alarm on.",
          "items": {
            "$ref": "AssistantApiRecurrenceDatetimeRange"
          },
          "type": "array"
        },
        "dayOfMonth": {
          "description": "Specifies the date in a month. For example, if day_of_month is 15, then it represent the 15th day of the specified month.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "dayOfWeek": {
          "description": "Specifies a weekly or daily recurrence. Constraint: The date falls on one of these days of the week, in 0...6 (Sunday...Saturday).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "end": {
          "$ref": "AssistantApiDate",
          "description": "The last day of the recurrence."
        },
        "every": {
          "description": "Multiplier on the frequency of the recurrence. Use this to specify patterns that recur every X days, months, years, etc. Example: [remind me to call mom every 2nd week]. Default is 1 (every day, every month, every year).",
          "format": "int32",
          "type": "integer"
        },
        "monthOfYear": {
          "description": "Specifies the month in a year. Constrain: the month falls on one of these months, in 1, 2, ... 12 (January...December).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "numOccurrences": {
          "description": "The number of occurrences after which the recurrence should end.",
          "format": "int32",
          "type": "integer"
        },
        "weekOfMonth": {
          "description": "Specifies the index of week in a month. For example, the second Tuesday every month, in this case, week_of_month should be 2.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiRecurrenceDatetimeRange": {
      "description": "A representation of a range of time with start and end datetime specified.",
      "id": "AssistantApiRecurrenceDatetimeRange",
      "properties": {
        "endDate": {
          "$ref": "AssistantApiDateTime",
          "description": "End date of the range."
        },
        "startDate": {
          "$ref": "AssistantApiDateTime",
          "description": "Start date of the range."
        }
      },
      "type": "object"
    },
    "AssistantApiScreenCapabilities": {
      "description": "These capabilities represent the tactile features associated with the device. This includes, for example, whether the device has a screen, how big the screen is, and privacy of the screen. Next ID: 11",
      "id": "AssistantApiScreenCapabilities",
      "properties": {
        "fontScaleFactor": {
          "description": "The scale factor used to convert Scalable Pixel (SP) units to Density-independent Pixel (DP) units (DP = SP * scale factor). Fonts are measured in units of SP, and on some platforms such as Android the SP to DP scale factor can be affected by the font size a user selects in accessibility settings.",
          "format": "float",
          "type": "number"
        },
        "inputType": {
          "description": "The types of input that this screen supports. Note that this can be empty in which case the screen's input type is unknown.",
          "items": {
            "enum": [
              "TOUCHSCREEN"
            ],
            "enumDescriptions": [
              "The device has a screen that support touch input."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "mask": {
          "$ref": "AssistantApiScreenCapabilitiesMask",
          "description": "Mask defined for this device, if any."
        },
        "protoLayoutTargetedSchema": {
          "$ref": "AssistantApiScreenCapabilitiesProtoLayoutVersion",
          "description": "The targeted schema version for ProtoLayout requests."
        },
        "resolution": {
          "$ref": "AssistantApiScreenCapabilitiesResolution",
          "description": "If this field is absent, the resolution of the screen is unknown."
        },
        "screenOff": {
          "description": "If screen is turned off.",
          "type": "boolean"
        },
        "screenStateDetection": {
          "description": "The ability of the client to correctly report screen state.",
          "enum": [
            "UNKNOWN_SCREEN_STATE_DETECTION",
            "UNRELIABLE_SCREEN_STATE_DETECTION",
            "RELIABLE_SCREEN_STATE_DETECTION"
          ],
          "enumDescriptions": [
            "",
            "The client reports screen state but may be unreliable based on different remotes/inputs used to turn the screen off. Example: Android TVs with soundbars.",
            ""
          ],
          "type": "string"
        },
        "supportedRenderingFormat": {
          "description": "The primary supported rendering format for display on the device's screen. This may be used to determine what format of card to be returned when rendering cards.",
          "enum": [
            "UNKNOWN_RENDERING_FORMAT",
            "CONCISE_TEXT",
            "PROTO_LAYOUT",
            "ELEMENTS"
          ],
          "enumDescriptions": [
            "",
            "Concise Text go/concise-text-responses",
            "Proto Layout, the layout for Proto Tiles go/prototiles",
            "Elements, the layout for xUIKit go/xuikit"
          ],
          "type": "string"
        },
        "supportedScreenStates": {
          "description": "The screen states that the client supports. The current screen state is specified in DeviceProperties.screen.",
          "items": {
            "enum": [
              "UNKNOWN_SCREEN_STATE",
              "ON",
              "OFF"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "visionHelpEnabled": {
          "description": "Whether the device enabled vision help features in accessiblity settings. The settings is config in Assistant App and on-device settings, and stored in footprints. When enabled, font, color and TTS will be adjusted.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiScreenCapabilitiesMask": {
      "description": "A mask applied to the screen's pixel space to determine regions not visible on the physical device.",
      "id": "AssistantApiScreenCapabilitiesMask",
      "properties": {
        "type": {
          "enum": [
            "UNKNOWN_MASK",
            "NO_MASK",
            "ROUND_MASK"
          ],
          "enumDescriptions": [
            "Default value.",
            "Used for devices with no mask. In this case, every point in the region defined by width_px and height_px corresponds to a physical, visible pixel. This is distinct from rectangular screens that DO have regions with no pixels, e.g. an inset or cutout that occludes one or more sides of the screen.",
            "Used for devices with oval or circular screens. The vertical and horizontal resolution of the screen determines the vertical and horizontal diameters of the oval. Pixels outside this oval region are non-existent or physically occluded."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiScreenCapabilitiesProtoLayoutVersion": {
      "description": "Version info for ProtoLayout requests.",
      "id": "AssistantApiScreenCapabilitiesProtoLayoutVersion",
      "properties": {
        "major": {
          "format": "uint32",
          "type": "integer"
        },
        "minor": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiScreenCapabilitiesResolution": {
      "description": "A Resolution proto indicates the size of the application window. All fields are required.",
      "id": "AssistantApiScreenCapabilitiesResolution",
      "properties": {
        "dpi": {
          "description": "Dots (pixels) per inch of the screen.",
          "format": "int32",
          "type": "integer"
        },
        "heightPx": {
          "format": "int32",
          "type": "integer"
        },
        "mSize": {
          "description": "m_size is the smallest square box size to display a capital letter M so that the user can still easily understand it.",
          "format": "int32",
          "type": "integer"
        },
        "nengSize": {
          "description": "neng_size is the smallest square box size to display a letter \u879a (Neng, U+879A) so that the user can easily understand it. (Neng is a visually dense Chinese letter, and so may require a larger box than an M.)",
          "format": "int32",
          "type": "integer"
        },
        "widthPx": {
          "description": "The dimensions of the application window, in pixels.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiSelinaCapabilites": {
      "description": "The Soli capabilities on Elaine, including gestures and sleep sensing. go/dingo-dc-software Next ID: 4",
      "id": "AssistantApiSelinaCapabilites",
      "properties": {
        "gestureCapabilities": {
          "$ref": "AssistantApiGestureCapabilities",
          "description": "A list of gestures that selina supports"
        },
        "selinaSupported": {
          "description": "Whether the client supports selina.",
          "type": "boolean"
        },
        "sleepSensingSupported": {
          "description": "Whether the client can monitor sleep. This allows us to show sleep CUJ related information: go/TwilightDesign",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsAmbientSettings": {
      "id": "AssistantApiSettingsAmbientSettings",
      "properties": {
        "anyUserHasSetPersonalPhotos": {
          "description": "Whether any user sets personal photos on this device. See go/ambient-setting-in-assistant-design.",
          "type": "boolean"
        },
        "recentHighlightsEnabled": {
          "description": "Whether or not the user's current selection for their ambient photo frame includes the auto-generated \"Recent Highlights\" album. This is used to determine which users to display the go/opa-photos-memories-tile. See go/opa-photo-memories-imax-optin for more discussion on why this bit was created.",
          "type": "boolean"
        },
        "showPersonalPhotoData": {
          "description": "Whether to enable the personal photo data in the ambient settings: https://screenshot.googleplex.com/Wd4OFkQfOyF See go/opa-photos-ambient-location-date-dd#heading=h.5x4iaouuiett for explanation.",
          "type": "boolean"
        },
        "showPersonalPhotos": {
          "description": "Whether current user sets personal photos on this device. See go/ambient-setting-in-assistant-design.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsAppCapabilities": {
      "description": "These capabilties are associated with Assistant Settings on devices.",
      "id": "AssistantApiSettingsAppCapabilities",
      "properties": {
        "carSettingsCapabilities": {
          "$ref": "AssistantApiCarSettingsCapabilities",
          "description": "Capabilities that are associated with Assistant Settings on auto surfaces."
        },
        "reissueQueryAfterMusicSetup": {
          "description": "Whether the client supports reissuing query after setting up in Music Settings.",
          "type": "boolean"
        },
        "supportsPaymentsSettingsUpdate": {
          "description": "Whether the client supports updating payments setting.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsAutoFramingSettings": {
      "description": "Settings pertaining to auto framing. See go/auto-framing-presentation.",
      "id": "AssistantApiSettingsAutoFramingSettings",
      "properties": {
        "isAutoFramingEnabled": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsCarrierCallDeviceSettings": {
      "description": "Carrier related call settings on the device.",
      "id": "AssistantApiSettingsCarrierCallDeviceSettings",
      "properties": {
        "allowIncomingCalls": {
          "description": "Whether this device is allowed to receive incoming PSTN calls.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsCommunicationsFilter": {
      "description": "Specification of which communication features can be used.",
      "id": "AssistantApiSettingsCommunicationsFilter",
      "properties": {
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL",
            "BLOCK_CALLS_AND_MESSAGES"
          ],
          "enumDescriptions": [
            "",
            "Allow all communication features.",
            "Allow all communication features, with the exception of calls and messages."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDeviceDowntimeSettings": {
      "description": "Specification of times when most features on a device are disabled for certain users. During these periods, the device will respond to most interactions with something like \"sorry, I'm sleeping right now\". Design: go/home-ft-settings-storage PRD: go/home-family-tools-prd",
      "id": "AssistantApiSettingsDeviceDowntimeSettings",
      "properties": {
        "schedules": {
          "items": {
            "$ref": "AssistantApiSettingsLabeledDowntimeSchedule"
          },
          "type": "array"
        },
        "targets": {
          "description": "The set of users of this device that will have these downtime settings applied. Must have at least one element.",
          "items": {
            "enum": [
              "UNKNOWN_DEVICE_SUPERVISION_TARGET",
              "EVERYONE",
              "KID_ACCOUNTS",
              "GUESTS"
            ],
            "enumDescriptions": [
              "",
              "All people that use the device.",
              "Users with a Unicorn account that are voice-matched to the device.",
              "Users interacting with the device without being voice matched. We cannot identify these users and don't know their ages."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDeviceFeatureFilters": {
      "description": "Defines a set of restrictions on particular device features for a certain set of users. Design: go/home-ft-settings-storage PRD: go/home-family-tools-prd",
      "id": "AssistantApiSettingsDeviceFeatureFilters",
      "properties": {
        "enabled": {
          "description": "Enables/disables all the filters at the same time. For new devices or non-Cast devices this is always false.",
          "type": "boolean"
        },
        "featureFilters": {
          "$ref": "AssistantApiSettingsFeatureFilters",
          "description": "The filters (feature restrictions) to apply when `enabled` is true."
        },
        "targets": {
          "description": "The set of users of this device that will have these settings applied. Must have at least one element.",
          "items": {
            "enum": [
              "UNKNOWN_DEVICE_SUPERVISION_TARGET",
              "EVERYONE",
              "KID_ACCOUNTS",
              "GUESTS"
            ],
            "enumDescriptions": [
              "",
              "All people that use the device.",
              "Users with a Unicorn account that are voice-matched to the device.",
              "Users interacting with the device without being voice matched. We cannot identify these users and don't know their ages."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDeviceLogsOptIn": {
      "id": "AssistantApiSettingsDeviceLogsOptIn",
      "properties": {
        "optInEnabled": {
          "description": "Indicates whether the crash logs can be uploaded and the device logs can be enabled",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDeviceSettings": {
      "description": "Next ID: 73",
      "id": "AssistantApiSettingsDeviceSettings",
      "properties": {
        "ackStatus": {
          "description": "LINT.ThenChange(//depot/google3/assistant/ui/assistant_device_settings_ui.proto)",
          "enum": [
            "ACK_COMPLETED",
            "ACK_PENDING"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "address": {
          "description": "A human-readable address string for the location; generally a one-line address such as \"34 Masonic Ave, San Francisco CA 94117, United States\". Set this field to empty string for deletion, in which case the rest of the location related fields below will be cleared as well.",
          "type": "string"
        },
        "aliasName": {
          "description": "The alias names of the device, e.g. my living room tv, tv, living room and etc., which user will usually use to refer to the device in addition to human_friendly_name. It can help speech biasing and query understanding. This field is set by the user and already localized.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "allowIncomingCalls": {
          "description": "Whether this device is allowed to receive incoming calls.",
          "type": "boolean"
        },
        "ambientSettings": {
          "$ref": "AssistantApiSettingsAmbientSettings",
          "description": "Ambient settings contains the configuration of Photo Frame on DG device. This field relies on IMAX service to do the update, sync happenes after user updates IMAX device settings or a device registers in CloudCastDevice. So it's more like a cached version instead of definitive source-of-truth. More details at go/ambient-setting-in-assistant-design."
        },
        "ancillaryDeviceId": {
          "$ref": "AssistantApiSettingsInternalAncillaryDeviceId",
          "description": "The additional device ids. Currently used only for ATV. go/project-yellowstone Note: This field is for internal (Within settings) use only."
        },
        "autoFramingSettings": {
          "$ref": "AssistantApiSettingsAutoFramingSettings",
          "description": "Auto framing settings associated with a device. See go/auto-framing-presentation."
        },
        "blueSteelEnabled": {
          "description": "Indicates whether the user has enabled Blue Steel. See go/blue-steel for more info on this project.",
          "type": "boolean"
        },
        "capabilities": {
          "$ref": "AssistantApiDeviceCapabilities",
          "description": "Describes roughly what a device is capable of doing and metadata around those capabilities. Note: this includes device limitations as well as user configurable settings."
        },
        "city": {
          "description": "city and postal_code are sent to third party AoG Apps as location when permission is granted for precise or coarse location. https://developers.google.com/actions/reference/rest/Shared.Types/Permission city and postal_code have the same description as in Proto Postal Address: https://cs.corp.google.com/piper///depot/google3/location/country/postaladdress.proto city corresponds to locality_name, postal_code corresponds to postal_code_number. These two fields are set in assistant_settings_service by AddressConverter. https://cs.corp.google.com/piper///depot/google3/location/addressformatter/public/addressconverter.h See go/aog-i18n-address-parse for more information",
          "type": "string"
        },
        "colocationStatus": {
          "description": "Status of colocation. go/co-location-work-v2 Note: this is a cache at the Assistant level. The source of truth is inside CastAuthenticationServer, which is only used for Home devices.",
          "enum": [
            "COLOCATION_UNKNOWN",
            "COLOCATION_ESTABLISHED",
            "COLOCATION_NOT_ESTABLISHED",
            "COLOCATION_NOT_SUPPORTED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "creationTimestampMs": {
          "description": "The timestamp that the device is linked with the user in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "crossSurfaceAvailability": {
          "$ref": "AssistantApiSettingsDeviceSettingsCrossSurfaceAvailability",
          "description": "Availability of this device for Assistant Cross-surface handoffs. (go/assistant-cross-surface)"
        },
        "defaultAudioDeviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The identification of the default device which user want to output audio. See go/default-media-output-design for more info."
        },
        "defaultVideoDeviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The identification of the default device which user want to output video. Note that, we don't fallback to this for audio playback when default_audio_device_id is not set. See go/default-media-output-design for more info."
        },
        "deviceBrand": {
          "description": "The brand of the device, populated from DeviceOemParams. Examples: \"google\", \"samsung\".",
          "type": "string"
        },
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The identification of the device."
        },
        "deviceModelId": {
          "description": "The model ID of the device. This should be globally unique across manufactures/OEMs. Examples: \"nest_cam_iq_2017\", \"comcast_voice_box_2017\".",
          "type": "string"
        },
        "deviceModelRevision": {
          "description": "The Device Platform Service lookup revision. (go/device-model-revision) For 1p devices, and most 3p devices with no custom feature, this should be always 0, which means no lookup needed. For 3p devices with custom assistant feature, this is provided directly by OEM as incremental (e.g. 1, 2, 3, ...)",
          "format": "int32",
          "type": "integer"
        },
        "dusi": {
          "description": "Only valid for ATV. Stores the android DUSI for the corresponding user. More details: go/auto-logout-on-unlink.",
          "type": "string"
        },
        "faceEnrollmentErrors": {
          "description": "List of errors that happened during the face enrollment process if it failed. See go/face-match-enrollment-error for more info.",
          "items": {
            "enum": [
              "UNKNOWN_FACE_ENROLLMENT_ERROR",
              "MISSING_FRONTAL_POSE",
              "FACE_NOT_DETECTED",
              "MULTIPLE_FACE_DETECTED",
              "FACE_WITHOUT_SIGNATURE",
              "FACE_DETECTION_LOW_CONFIDENCE",
              "FACE_LANDMARK_LOW_CONFIDENCE",
              "FACE_WITHOUT_CONFIDENCE",
              "FACE_TOO_SMALL",
              "FAILED_TO_READ_IMAGE",
              "FAILED_TO_DECODE_IMAGE",
              "FACE_DETECTION_ERROR",
              "FACE_WITHOUT_EMBEDDING_CONFIDENCE"
            ],
            "enumDescriptions": [
              "",
              "The gallery images don't have the required frontal pose properties.",
              "Face was NOT detected in an image.",
              "Multiple faces detected in an image.",
              "Cannot create signature for a detected face.",
              "Face detection confidence score is too low.",
              "Face detection landmark confidence score is too low.",
              "Face detection contains no confidence score, which is invalid.",
              "Face detection was too small for enrollment.",
              "Unable to read the image file from the gallery.",
              "Unable to decode the jpeg image.",
              "Unable to run face detector on the decoded image.",
              "Face detection contains no confidence score for embedding."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "faceEnrollmentStatus": {
          "description": "Indicates whether the user's face has been successfully enrolled on this device. See go/face-match-server-design for more info.",
          "enum": [
            "UNKNOWN_STATUS",
            "SUCCESS",
            "FAILURE",
            "PENDING"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "faceMatchEnabled": {
          "description": "Indicates whether the user has enabled Face Match for this device. See go/face-match-server-design for more info on this project.",
          "type": "boolean"
        },
        "flAudioCacheEnabled": {
          "description": "When true, allow data collection of audio on this device for Federated Learning.",
          "type": "boolean"
        },
        "flVisualFramesCacheEnabled": {
          "description": "When true, allow data collection of frames on this device.",
          "type": "boolean"
        },
        "gcmSettings": {
          "$ref": "AssistantApiSettingsGcmSettings",
          "description": "Stores GCM info associated with a device. See go/quartz-design-doc for more info."
        },
        "homeGraphData": {
          "$ref": "AssistantApiSettingsHomeGraphData",
          "description": "Holds the data that should be written to HomeGraph. Note: this field is not persisted in Assistant Settings storage. It is simply used for transporting data when client calls UpdateSettings."
        },
        "homeGraphId": {
          "description": "The home graph ID that can be used to lookup the corresponding entry in HomeGraph. go/home-graph. Note: when this field is empty, it doesn't necessarily mean that the device is not in home graph. It just means that Assistant doesn't know about the mapping.",
          "type": "string"
        },
        "hospitalityModeStatus": {
          "$ref": "AssistantApiSettingsHospitalityMode",
          "description": "Indicates whether the device is currently in Hospitality mode. go/hospitality-mode-design. This is moved to a per user setting in assistant settings. ref. go/hospitality-settings-v2"
        },
        "hotwordSensitivity": {
          "description": "The level of hotword sensitivity. go/hotword-sensitivity-prd",
          "enum": [
            "UNKNOWN_HOTWORD_SENSITIVITY",
            "HOTWORD_SENSITIVITY_LOW",
            "HOTWORD_SENSITIVITY_NORMAL",
            "HOTWORD_SENSITIVITY_HIGH",
            "HOTWORD_SENSITIVITY_LOW_2",
            "HOTWORD_SENSITIVITY_HIGH_2"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "hotwordThresholdAdjustmentFactor": {
          "$ref": "AssistantApiSettingsHotwordThresholdAdjustmentFactor",
          "description": "HotwordThresholdAdjustmentFactor contains threshold_adjustment_factor, and it's validity. TAF is a measure of adjustment applied to the hotword threshold as a result of go/autotune. Currently, this is updated from query_settings_frame, but if we move to updating it from the client, this could also contain TAFs as a result of Hotword Sensitivity, in addition to Autotune."
        },
        "humanFriendlyName": {
          "description": "The human-friendly name of the cast device, e.g., my living room tv. This field is set by the user and already localized.",
          "type": "string"
        },
        "internalVersion": {
          "$ref": "AssistantApiSettingsInternalVersion",
          "description": "Internal version of the DeviceSettings for measurement of the DeviceSettings mutation race conditions. See go/consistent-assistant-settings-update."
        },
        "isCloudSyncDevice": {
          "description": "Indicates whether the device is also managed through HA cloud sync. go/ha-dev-guide",
          "type": "boolean"
        },
        "isDeviceActivationCacheEnabled": {
          "description": "When true, the user has explicitly allowed audio and visual data collection on this device",
          "type": "boolean"
        },
        "kidsMode": {
          "$ref": "AssistantApiSettingsKidsMode",
          "description": "Specifies if kids-mode is enabled for the device. See go/aff-parentalsupervision-dd."
        },
        "lastCastRegistrationTimestamp": {
          "description": "Device's latest registration timestamp provided by Cast side. This field is not necessarily up to date. The update frequency is defined in last_registration_update_frequency_in_days field of AssistantConfig in java/com/google/chrome/dongle/common/proto/home_assistant_config.proto. go/cast-last-registration-time",
          "format": "google-datetime",
          "type": "string"
        },
        "lastUsedCoarseTimestamp": {
          "description": "Coarsened hourly timestamp of when the device was last used.",
          "format": "google-datetime",
          "type": "string"
        },
        "linkedDeviceId": {
          "description": "Stores pairing between different devices. See go/quartz-design-doc for more info.",
          "items": {
            "$ref": "AssistantApiCoreTypesDeviceId"
          },
          "type": "array"
        },
        "linkedUsers": {
          "description": "Please do NOT use this field without prior approval from PWG. Users who have signed in onto this device, go/linked-users-in-pkg.",
          "items": {
            "$ref": "AssistantApiSettingsLinkedUser"
          },
          "type": "array"
        },
        "locale": {
          "description": "The locale for the device: language + region, i.e., en-US, ja-JP.",
          "type": "string"
        },
        "locationCoordinates": {
          "$ref": "AssistantApiCoreTypesLocationCoordinates",
          "description": "Coordinate information of the device location."
        },
        "locationFeature": {
          "$ref": "GeostoreFeatureProto",
          "description": "The feature proto of the location of the device. Note: client does not need to populate this. It will be auto-populated based on \"address\" field on server side. Currently, only \"bound\" and \"type\" are persisted, since the entire FeatureProto is too big."
        },
        "marketplaceDisclosure": {
          "$ref": "AssistantApiSettingsMarketplaceDisclosure",
          "description": "See go/marketplace-disclosure for more info."
        },
        "masqueradeMode": {
          "$ref": "AssistantApiSettingsMasqueradeMode"
        },
        "notificationProfile": {
          "$ref": "AssistantApiSettingsNotificationProfile",
          "description": "Information about how to send the user a notification. This won't be populated for fb-conv users (allo group chat users)."
        },
        "oauthClientId": {
          "description": "OAuth client id for the device. This field is available for Assistant SDK devices. It is written when the device is registered to the user (AssistantSettingsUiService.LinkAssistantDeviceUi). When user revokes grant on the Assistant device, Assistant Devices Platform Service will receive Pubsub notification with OAuth client id for the revoked device, and we will compare that with this stored id to identity device to remove.",
          "type": "string"
        },
        "onDeviceAppSettings": {
          "$ref": "AssistantApiSettingsOnDeviceAppSettings",
          "description": "Device specific app related settings."
        },
        "optInStatus": {
          "$ref": "AssistantApiSettingsDeviceLogsOptIn",
          "description": "Specifies if device logs and crashes can be captured during SendFeedback"
        },
        "paymentsEnabled": {
          "description": "DEPRECATED: Use DeviceCapabilities.OutputRestrictions.personal_data instead. Whether the user has enabled payments for this device.",
          "type": "boolean"
        },
        "personalizationMetadata": {
          "$ref": "AssistantApiSettingsPersonalizationMetadata",
          "description": "Metadata about how personalization settings were configured."
        },
        "politeMode": {
          "$ref": "AssistantApiSettingsPoliteMode",
          "description": "Specify whether polite mode is enabled for this device. See go/pretty-please-dd."
        },
        "postalCode": {
          "type": "string"
        },
        "reauthTrustedDeviceSettings": {
          "$ref": "AssistantApiSettingsReauthTrustedDeviceSettings",
          "description": "Trusted device preferences Assistant reauth. go/assistant-reauth-verify-skip."
        },
        "shortenedAddress": {
          "description": "A human-readable shortened address. This is usually the street address. Note: client does not need to populate this. It will be auto-populated based on \"address\" field on server side. Developers can use this field to avoid reading out the full address everytime.",
          "type": "string"
        },
        "speakerIdEnabled": {
          "description": "Indicates whether the user has enabled speaker-id for this device. See go/google-assistant-multi-user for more info on this project.",
          "type": "boolean"
        },
        "speechOutputSettings": {
          "$ref": "AssistantApiSettingsSpeechOutputSettings",
          "description": "Settings related to TTS output."
        },
        "speechSettings": {
          "$ref": "AssistantApiSettingsSpeechSettings",
          "description": "Speech/hotword detection related settings."
        },
        "supervisionSettings": {
          "$ref": "AssistantApiSettingsDeviceSupervisionSettings",
          "description": "Restrictions on how and when certain users can use a device. See go/home-ft-prd."
        },
        "surfaceType": {
          "$ref": "AssistantApiCoreTypesSurfaceType",
          "description": "The type of assistant surface. Only use this field when device type is ASSISTANT."
        },
        "tetheredInfo": {
          "$ref": "AssistantApiSettingsTetheredInfo",
          "description": "Presence indicates a tethered wearable. go/wearable-device-ids."
        },
        "timeZone": {
          "$ref": "AssistantApiTimeZone",
          "description": "Device time zone. It's mainly used for a one-time notification for new users when they just bought and activated their devices. They may not have used Search or Assistant before, so their timezone info may not available elsewhere when we want to send a notification. This should be used as a fallback only when other timezone sources such as assistant_settings:user_attribute#inferred_user_timezone are not available. Also, when both |time_zone| and |location| are set, the |location| should be preferred to derive the most up to date timezone. This info directly comes from the device through early device setting recording mechanism. See more details at go/early-device-setting-recording."
        },
        "truncatedLocalNetworkId": {
          "description": "Local network ID of the device (truncated to obfuscate devices and households globally). This is a temporary signal to determine proximity of Assistant devices in a house (HGS place).",
          "type": "string"
        },
        "trustedVoiceEnabled": {
          "description": "DEPRECATED: Use speech_settings instead. Indicates whether the user has enabled trusted voice for this device. See go/hotword-settings-on-cloud for more info on this project.",
          "type": "boolean"
        },
        "type": {
          "description": "The type of the device. Note: this should only be used for grouping devices for UI presentation purpose. Use |capabilities| to decide what the device can do.",
          "enum": [
            "UNKNOWN_DEVICE_TYPE",
            "ASSISTANT",
            "HOME_AUTOMATION",
            "CAST",
            "CAST_GROUP",
            "QUARTZ",
            "QUARTZ_IOS",
            "CLOUD_AUTO"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Quartz in AGSA",
            "Quartz in iOPA",
            "Non-assistant Auto devices from Cloud."
          ],
          "type": "string"
        },
        "verboseTtsForChromecastEnabled": {
          "description": "Indicates whether to play verbose tts for Elementary on chirp. See: go/opa-cast-a11y-impl-design fore more info on this project. Note: this should probably be in SpeechOutputSetting below.",
          "type": "boolean"
        },
        "vmLastUsedCoarseTimestamp": {
          "description": "Coarsened hourly timestamp of when the user was last verified by VoiceMatch on this device. This is used for enforcing VoiceMatch model TTL. go/voicematch-pdd-ttl",
          "format": "google-datetime",
          "type": "string"
        },
        "voiceEnrollmentStatus": {
          "description": "Indicates whether the user's voice has been successfully enrolled on this device.",
          "enum": [
            "VOICE_ENROLLMENT_UNKNOWN_STATUS",
            "VOICE_ENROLLMENT_SUCCESS",
            "VOICE_ENROLLMENT_FAILURE",
            "VOICE_ENROLLMENT_PENDING"
          ],
          "enumDescriptions": [
            "User has no utterances and no speaker id model.",
            "User has speaker id model.",
            "User has utterances but no speaker id model (for ex. hotword was not detected in utterances).",
            "Speaker id model generation is in-progress."
          ],
          "type": "string"
        },
        "voiceInputEnabled": {
          "description": "A boolean indicates whether voice input (mic-button, hotword, etc) is enabled.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDeviceSettingsCrossSurfaceAvailability": {
      "id": "AssistantApiSettingsDeviceSettingsCrossSurfaceAvailability",
      "properties": {
        "lastKnownClientLocale": {
          "description": "Last known locale of the client.",
          "type": "string"
        },
        "lastParamsWriteTimestamp": {
          "description": "This is the timestamp when the AssistantRequestParams (in ASSISTANT_SNAPSHOT corpus) were last written for this device.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDeviceSupervisionSettings": {
      "id": "AssistantApiSettingsDeviceSupervisionSettings",
      "properties": {
        "downtimeSettings": {
          "$ref": "AssistantApiSettingsDeviceDowntimeSettings",
          "description": "Specification of times that a device shouldn't respond to certain users. See go/home-ft-prd."
        },
        "featureFilters": {
          "$ref": "AssistantApiSettingsDeviceFeatureFilters",
          "description": "Restrictions on features that certain users can access on a device. See go/home-ft-prd."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDowntimePeriod": {
      "description": "Specifies a period of up to 24 hours when downtime should be enabled, starting at certain time on a certain day of the week, and ending at a later time on either that day or the following day.",
      "id": "AssistantApiSettingsDowntimePeriod",
      "properties": {
        "enabled": {
          "description": "True if downtime should be enabled during this period.",
          "type": "boolean"
        },
        "endTime": {
          "$ref": "GoogleTypeTimeOfDay",
          "description": "Time of day that this downtime period should end. Required. If end_time > start_time, end_time is relative to start_day. Otherwise, end_time is relative to the day after start_day. For example, start_day: MONDAY, start_time: 9 p.m., end_time: 6 a.m. means that the downtime period starts at 9 p.m. on Monday and ends at 6 a.m. on Tuesday."
        },
        "startDay": {
          "description": "The day of the week when this downtime period starts. Required.",
          "enum": [
            "DAY_OF_WEEK_UNSPECIFIED",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ],
          "enumDescriptions": [
            "The day of the week is unspecified.",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday"
          ],
          "type": "string"
        },
        "startTime": {
          "$ref": "GoogleTypeTimeOfDay",
          "description": "Time of day that this downtime period should start. Required."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDowntimeSchedule": {
      "description": "Specification of when downtime is enabled on different days of the week. Contains up to 7 DowntimePeriod messages, up to one per day of the week.",
      "id": "AssistantApiSettingsDowntimeSchedule",
      "properties": {
        "enabled": {
          "description": "True if this downtime schedule should be enabled.",
          "type": "boolean"
        },
        "periods": {
          "description": "Downtime entries for the days of the week, in no particular order. There can be at most one period defined for each day of the week. Days of the week with no explicit period defined are treated as disabled, so the device is available all day (modulo an end time that may spill over from the previous day).",
          "items": {
            "$ref": "AssistantApiSettingsDowntimePeriod"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsDuoCallDeviceSettings": {
      "description": "Duo related call settings on the device. Next ID: 5",
      "id": "AssistantApiSettingsDuoCallDeviceSettings",
      "properties": {
        "allowKnockKnock": {
          "description": "True if Duo Knock Kncok feature is enabled on the device.",
          "type": "boolean"
        },
        "shouldBeLinked": {
          "description": "Boolean indicating if user has explicitly marked this device to be linked or not. This bit is used in case where unexpected errors occur and we have to check for account/device status and mark the device linked after verification.",
          "type": "boolean"
        },
        "state": {
          "description": "The call state of the device (i.e. whether an Duo call account has been setup on the device).",
          "enum": [
            "UNKNOWN_LINK_STATE",
            "NOT_LINKED",
            "LINKED",
            "LINKED_WAITING",
            "LINK_ERROR"
          ],
          "enumDescriptions": [
            "",
            "The user chose not to link the app.",
            "The user completed linking the app.",
            "The user chose to link the app, but the linking has not completed yet.",
            "There was some error in link state and link state should be refreshed by querying tachyon backend. But this does not guarantee that state will be linked after this request."
          ],
          "type": "string"
        },
        "talkbackEnabled": {
          "description": "Client device settings: settings which are populated by client to give to duocore. TalkBack is an accessibility service that helps blind and vision-impaired users interact with their devices. Indicates whether talkback is enabled for the device. Note: this is per device settings currently filled by client for all users.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsFeatureFilters": {
      "description": "Specification of which assistant features are allowed for a particular device or user account.",
      "id": "AssistantApiSettingsFeatureFilters",
      "properties": {
        "communicationsFilter": {
          "$ref": "AssistantApiSettingsCommunicationsFilter"
        },
        "musicFilter": {
          "$ref": "AssistantApiSettingsMusicFilter"
        },
        "newsFilter": {
          "$ref": "AssistantApiSettingsNewsFilter"
        },
        "podcastFilter": {
          "$ref": "AssistantApiSettingsPodcastFilter"
        },
        "searchFilter": {
          "$ref": "AssistantApiSettingsSearchFilter"
        },
        "thirdPartyAppsFilter": {
          "$ref": "AssistantApiSettingsThirdPartyAppsFilter"
        },
        "videoFilter": {
          "$ref": "AssistantApiSettingsVideoFilter"
        },
        "webviewFilter": {
          "$ref": "AssistantApiSettingsWebviewFilter"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsGcmSettings": {
      "id": "AssistantApiSettingsGcmSettings",
      "properties": {
        "gcmId": {
          "type": "string"
        },
        "gcmPackage": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHomeGraphData": {
      "description": "Next ID: 8",
      "id": "AssistantApiSettingsHomeGraphData",
      "properties": {
        "agentId": {
          "description": "Agent ID, aka project ID. Used as the AgentDeviceId.agent_id of device when calling Home Graph Service.",
          "type": "string"
        },
        "attributes": {
          "additionalProperties": {
            "description": "Properties of the object.",
            "type": "any"
          },
          "description": "See go/ha-dev-guide and HomeGraphItem.attribute in //assistant/verticals/homeautomation/proto/home_graph.proto",
          "type": "object"
        },
        "deviceId": {
          "description": "Device ID, used as AgentDeviceId.device_id of device when calling Home Graph Service.",
          "type": "string"
        },
        "deviceType": {
          "description": "HGS device type. See java/com/google/home/graph/service/config/protoconf.pi for the exhaustive list of type strings.",
          "type": "string"
        },
        "shouldWriteToHomeGraph": {
          "description": "Whether device data should be written to Home Graph via Assistant device_settings. Assistant SDK and Google Home write their devices into Home Graph through AssistantSettingsService, while Home Automation Partner devices (e.g. SmartThings, Philips Hue, Nest, TP-Link, etc.) don't need to be written to Home Graph through AssistantSettingsService. This field decides whether AssistantSettingsService writes devices to Home Graph or not.",
          "type": "boolean"
        },
        "supportedTraits": {
          "description": "Supported traits of the device. See java/com/google/home/graph/service/config/protoconf.pi for the exhaustive list of trait-strings.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "supportsDirectResponse": {
          "description": "Whether the device supports direct response. See HomeGraphItem.supports_direct_response in //assistant/verticals/homeautomation/proto/home_graph.proto",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHospitalityCardSettings": {
      "id": "AssistantApiSettingsHospitalityCardSettings",
      "properties": {
        "cardConfig": {
          "description": "Config for Hospitality UI modules.",
          "items": {
            "$ref": "AssistantApiSettingsHospitalityCardSettingsCardConfig"
          },
          "type": "array"
        },
        "showMediaTapGestureTutorial": {
          "description": "Toggle media tap gesture tutorial card.",
          "type": "boolean"
        },
        "showPhotoSwipeGestureTutorial": {
          "description": "Toggle photo swipe gesture tutorial card.",
          "type": "boolean"
        },
        "youtubeCardConfig": {
          "description": "Config for YouTube video cards.",
          "items": {
            "$ref": "AssistantApiSettingsHospitalityCardSettingsYouTubeCardConfig"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHospitalityCardSettingsCardConfig": {
      "description": "Configuration for hospitality card.",
      "id": "AssistantApiSettingsHospitalityCardSettingsCardConfig",
      "properties": {
        "activeActionRequired": {
          "description": "Whether the UI module requires user action. If true, the UI module can peek on to the top of Ambient. See SmartDisplayModuleState::ACTIVE_ACTION_REQUIRED.",
          "type": "boolean"
        },
        "dismissable": {
          "description": "Whether the UI module is dismissable.",
          "type": "boolean"
        },
        "effectiveTime": {
          "$ref": "AssistantApiTimestamp",
          "description": "The time that the module is effective and visible to the user. If not set, the module is effective immediately."
        },
        "expiryTime": {
          "$ref": "AssistantApiTimestamp",
          "description": "The time that the module is expired and invisible to the user. If not set, the module never expires."
        },
        "imageUrl": {
          "description": "The image URL for the UI module.",
          "type": "string"
        },
        "moduleId": {
          "description": "Module ID.",
          "enum": [
            "UNKNOWN",
            "MID_STAY_SURVEY",
            "CHECK_OUT",
            "CHECK_IN",
            "RESET"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "payloadQuery": {
          "description": "Payload query to the partner AoG action when user responds to UI Module, e.g. \u201cTell the hotel how my stay is going\u201d.",
          "type": "string"
        },
        "title": {
          "description": "Title of the message to be shown to user at the top of the UI Module.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHospitalityCardSettingsYouTubeCardConfig": {
      "description": "Configuration for YouTube video card (Stargazer tile).",
      "id": "AssistantApiSettingsHospitalityCardSettingsYouTubeCardConfig",
      "properties": {
        "imageUrl": {
          "description": "URL of image to go on card. The URL must be a public link accessible from ZeroState.",
          "type": "string"
        },
        "playlistId": {
          "description": "ID of YouTube playlist to play on card tap. A playlist is used instead of a single video id to avoid autoplaying related videos. The playlist and the videos it contains must be public or unlisted to be accessible from ZeroState.",
          "type": "string"
        },
        "text": {
          "description": "Text on card (i.e., video title).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHospitalityMode": {
      "description": "Hospitality mode config for the current device. go/hospitality-mode-design. Next ID: 17",
      "id": "AssistantApiSettingsHospitalityMode",
      "properties": {
        "aogContextId": {
          "description": "List of AOG app context ids that are linked to this device. These apps will have access to the structure information for the device.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "aogInvocationPhrase": {
          "description": "Invocation phrase for hotel's AoG action. Used for ZS promotion card and \"talk to my hotel\" rewrites. Setting this to an empty value will mark it unset.",
          "type": "string"
        },
        "branding": {
          "$ref": "AssistantApiSettingsHospitalityModeBranding"
        },
        "cardSettings": {
          "$ref": "AssistantApiSettingsHospitalityCardSettings"
        },
        "deviceClearRequest": {
          "$ref": "AssistantApiTimestamp",
          "description": "The time when we received a request to reset the device."
        },
        "dialogTtlOverrideMicros": {
          "description": "Should the dialog have a shorter ttl. See go/ipp-consumer-prd#heading=h.ibu9b1ysdl4t and go/interpreter-device-clear#bookmark=id.hw8ey1bzjadn for context.",
          "format": "int64",
          "type": "string"
        },
        "enterpriseId": {
          "description": "Identifier for the enterprise which owns the device. Setting this to an empty value will mark it unset.",
          "type": "string"
        },
        "hospitalityModeEnabled": {
          "description": "Indicates whether this device is in the hospitality mode.",
          "type": "boolean"
        },
        "lastDeviceClear": {
          "$ref": "AssistantApiTimestamp",
          "description": "Last time the device was cleared and placed in hospitality mode. Will be set when the switch is toggled on and reset when a guest checks out. On the device this triggers removing alarms, timers, etc."
        },
        "lastModifiedTimestamp": {
          "$ref": "AssistantApiTimestamp",
          "description": "Indicates when hospitality settings were last updated."
        },
        "lastWelcomed": {
          "$ref": "AssistantApiTimestamp",
          "description": "Last time the welcome message was played for the guest. If last_welcomed < welcome_request, the message should be replayed and this time set."
        },
        "manualResetRequired": {
          "description": "Indicates whether or not the device must be reset manually (by voice or touch), as opposed to being automatically reset. go/hospitality-manual-reset",
          "type": "boolean"
        },
        "promotedLanguages": {
          "description": "In order promoted languages for interpreter devices. This represents languages by BCP-47 language strings, such as \"en\", \"en-US\", \"fr\", \"fr-CA\", \"sr-Latn\", \"zh-Hans-CN\", \"zh-Hant-HK\",etc.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "UNKNOWN_TYPE",
            "HOTEL_ROOM",
            "INTERPRETER",
            "SENIOR_LIVING_ROOM",
            "RETAIL_DEMO"
          ],
          "enumDescriptions": [
            "",
            "",
            "go/hospitality-interpreter-mode",
            "go/merrill-prd",
            "go/assistant-retail-demo"
          ],
          "type": "string"
        },
        "verbalResetSupported": {
          "description": "Whether we allow users to initiate clearing the device verbally. We generally allow this for private devices and not for public ones.",
          "type": "boolean"
        },
        "welcomeRequest": {
          "$ref": "AssistantApiTimestamp",
          "description": "The time when we received a request to welcome the user."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHospitalityModeBranding": {
      "description": "TODO(b/169423976) Consider moving Branding out of user level settings into enterprise level settings. Partner branding fields used to customize the ui. Next ID: 7",
      "id": "AssistantApiSettingsHospitalityModeBranding",
      "properties": {
        "displayName": {
          "description": "Brand display in the UI",
          "type": "string"
        },
        "displayNameForLanguage": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Brand display in the UI for languages that the enterprise has a localized name that is different from its global branding name. For example, Hilton is '\u30d2\u30eb\u30c8\u30f3' in Japanese and '\u5e0c\u723e\u9813' in Chinese. The keys are hospitality supported display locales, e.g. en, ja-JP, etc, defined in experiment parameter Hospitality__hospitality_display_supported_locales.",
          "type": "object"
        },
        "largeLogoUrl": {
          "type": "string"
        },
        "smallLogoUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsHotwordThresholdAdjustmentFactor": {
      "description": "HotwordThresholdAdjustmentFactor contains threshold_adjustment_factor, and it's validity. value should only be considered when is_valid = true.",
      "id": "AssistantApiSettingsHotwordThresholdAdjustmentFactor",
      "properties": {
        "isValid": {
          "description": "Currently, is_valid is set to false whenever the TAF is not an Autotune aware value. This includes hotword sensitivity users, or devices not eligible for autotune.",
          "type": "boolean"
        },
        "value": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsInternalAncillaryDeviceId": {
      "description": "Represents supporting device ids.",
      "id": "AssistantApiSettingsInternalAncillaryDeviceId",
      "properties": {
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "Contains device ids known to devices. eg. For ATV, it contains client_instance_id and cast_id."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsInternalVersion": {
      "description": "Represents a version of a specifit setting, e.g. DeviceSettings.",
      "id": "AssistantApiSettingsInternalVersion",
      "properties": {
        "generationTime": {
          "description": "Contains the timestamp when this version was generated.",
          "format": "google-datetime",
          "type": "string"
        },
        "id": {
          "description": "Integer value of the version, it is a monotonically increasing number and starts at 0. On every update it is incremented by 1.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsKidsMode": {
      "description": "Kids mode config for the current device. go/aff-parentalsupervision-dd",
      "id": "AssistantApiSettingsKidsMode",
      "properties": {
        "kidsModeEnabled": {
          "type": "boolean"
        },
        "obfuscatedGaiaId": {
          "description": "Identifier of the account currently specified to be used with kids mode.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsLabeledDowntimeSchedule": {
      "id": "AssistantApiSettingsLabeledDowntimeSchedule",
      "properties": {
        "displayName": {
          "description": "User-provided name for this schedule.",
          "type": "string"
        },
        "schedule": {
          "$ref": "AssistantApiSettingsDowntimeSchedule"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsLinkedUser": {
      "description": "Represents the profile of the user who has signed in onto this device. Next id: 5",
      "id": "AssistantApiSettingsLinkedUser",
      "properties": {
        "castLinkingTime": {
          "description": "Time of linking of the device with the user provided by Cast.",
          "format": "google-datetime",
          "type": "string"
        },
        "email": {
          "description": "Primary email address of the user.",
          "type": "string"
        },
        "gaiaId": {
          "format": "int64",
          "type": "string"
        },
        "names": {
          "description": "Supports features which depend on profile name, when no matching contact is found.",
          "items": {
            "$ref": "AppsPeopleOzExternalMergedpeopleapiName"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsMarketplaceDisclosure": {
      "id": "AssistantApiSettingsMarketplaceDisclosure",
      "properties": {
        "confirmed": {
          "description": "True if the user has confirmed the marketplace disclosure.",
          "type": "boolean"
        },
        "timestampMs": {
          "description": "The time user confirmed the marketplace disclosure.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsMasqueradeMode": {
      "description": "Guest mode for the current device. go/assistant-guest-mode-summary",
      "id": "AssistantApiSettingsMasqueradeMode",
      "properties": {
        "lastEnterGuestModeTimestamp": {
          "$ref": "AssistantApiTimestamp"
        },
        "lastExitGuestModeTimestamp": {
          "$ref": "AssistantApiTimestamp"
        },
        "masqueradeModeEnabled": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsMusicFilter": {
      "description": "Specification of which music features can be used.",
      "id": "AssistantApiSettingsMusicFilter",
      "properties": {
        "availableProviders": {
          "description": "Providers available at the time user updated settings.",
          "items": {
            "enum": [
              "UNKNOWN_MUSIC_PROVIDER",
              "YOUTUBE_MUSIC",
              "GOOGLE_PLAY_MUSIC",
              "SPOTIFY",
              "APPLE_MUSIC",
              "PANDORA"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "providerFilterState": {
          "description": "Represents the state for the music provider filter.",
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL_PROVIDERS",
            "ALLOW_WHITELISTED_PROVIDERS"
          ],
          "enumDescriptions": [
            "",
            "With this state, all music providers are allowed.",
            "This limits the allowed providers to the whitelisted ones. This means that we can block all providers if the whitelist is empty."
          ],
          "type": "string"
        },
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL",
            "BLOCK_EXPLICIT",
            "BLOCK_ALL"
          ],
          "enumDescriptions": [
            "",
            "Allow all music.",
            "Block music with explicit lyrics.",
            "Block all music."
          ],
          "type": "string"
        },
        "whitelistedProviders": {
          "description": "Contains the list of whitelisted music providers.",
          "items": {
            "enum": [
              "UNKNOWN_MUSIC_PROVIDER",
              "YOUTUBE_MUSIC",
              "GOOGLE_PLAY_MUSIC",
              "SPOTIFY",
              "APPLE_MUSIC",
              "PANDORA"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsNewsFilter": {
      "description": "Specification of which news features can be used.",
      "id": "AssistantApiSettingsNewsFilter",
      "properties": {
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL_NEWS",
            "BLOCK_ALL_NEWS"
          ],
          "enumDescriptions": [
            "",
            "Allow all news.",
            "Block all news."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsNotificationProfile": {
      "id": "AssistantApiSettingsNotificationProfile",
      "properties": {
        "alloNotificationProfile": {
          "$ref": "AssistantApiSettingsNotificationProfileAlloNotificationProfile",
          "description": "Each device can have only one type of notification profile."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsNotificationProfileAlloNotificationProfile": {
      "id": "AssistantApiSettingsNotificationProfileAlloNotificationProfile",
      "properties": {
        "botSendToken": {
          "$ref": "ChatBotPlatformBotSendToken",
          "description": "The send token of the conversation with the user."
        },
        "id": {
          "$ref": "ChatBotPlatformFireballId",
          "description": "The fireball id of this user."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsOnDeviceAppSettings": {
      "id": "AssistantApiSettingsOnDeviceAppSettings",
      "properties": {
        "carrierCallDeviceSettings": {
          "$ref": "AssistantApiSettingsCarrierCallDeviceSettings",
          "description": "On device carrier call related settings."
        },
        "duoCallDeviceSettings": {
          "$ref": "AssistantApiSettingsDuoCallDeviceSettings",
          "description": "On device duo call related settings."
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsPersonalizationMetadata": {
      "id": "AssistantApiSettingsPersonalizationMetadata",
      "properties": {
        "faceMatch": {
          "enum": [
            "PERSONALIZATION_FLOW_UNKNOWN",
            "PERSONALIZATION_FLOW_DEVICE",
            "PERSONALIZATION_FLOW_TWOOBE",
            "PERSONALIZATION_FLOW_SLA",
            "PERSONALIZATION_FLOW_DEVICE_DELEGATED_CUSTODIO"
          ],
          "enumDescriptions": [
            "",
            "",
            "TWOOBE: go/twoobe-prd",
            "SLA: go/sla-prd",
            "Custodio: go/assistant-pc-prd"
          ],
          "type": "string"
        },
        "personalResults": {
          "enum": [
            "PERSONALIZATION_FLOW_UNKNOWN",
            "PERSONALIZATION_FLOW_DEVICE",
            "PERSONALIZATION_FLOW_TWOOBE",
            "PERSONALIZATION_FLOW_SLA",
            "PERSONALIZATION_FLOW_DEVICE_DELEGATED_CUSTODIO"
          ],
          "enumDescriptions": [
            "",
            "",
            "TWOOBE: go/twoobe-prd",
            "SLA: go/sla-prd",
            "Custodio: go/assistant-pc-prd"
          ],
          "type": "string"
        },
        "voiceMatch": {
          "enum": [
            "PERSONALIZATION_FLOW_UNKNOWN",
            "PERSONALIZATION_FLOW_DEVICE",
            "PERSONALIZATION_FLOW_TWOOBE",
            "PERSONALIZATION_FLOW_SLA",
            "PERSONALIZATION_FLOW_DEVICE_DELEGATED_CUSTODIO"
          ],
          "enumDescriptions": [
            "",
            "",
            "TWOOBE: go/twoobe-prd",
            "SLA: go/sla-prd",
            "Custodio: go/assistant-pc-prd"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsPodcastFilter": {
      "description": "Specification of which podcast features can be used.",
      "id": "AssistantApiSettingsPodcastFilter",
      "properties": {
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL_PODCASTS",
            "BLOCK_ALL_PODCASTS"
          ],
          "enumDescriptions": [
            "",
            "Allow all podcasts.",
            "Block all podcasts."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsPoliteMode": {
      "description": "Polite mode config for the current device. go/polite-mode-dd",
      "id": "AssistantApiSettingsPoliteMode",
      "properties": {
        "politeModeEnabled": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsReauthTrustedDeviceSettings": {
      "description": "Settings related to Assistant reauth. go/assistant-reauth-verify-skip Next id: 2",
      "id": "AssistantApiSettingsReauthTrustedDeviceSettings",
      "properties": {
        "trustSettingsForClient": {
          "additionalProperties": {
            "$ref": "AssistantApiSettingsReauthTrustedDeviceSettingsTrustSettings"
          },
          "description": "Mapping from integrator client id to device's trust settings. Id from assistant/agent_platform/transactions/reauth/reauth_client.proto.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsReauthTrustedDeviceSettingsTrustSettings": {
      "description": "Next id: 6",
      "id": "AssistantApiSettingsReauthTrustedDeviceSettingsTrustSettings",
      "properties": {
        "neverAskAgain": {
          "description": "If true, don't ask user to trust this device again.",
          "type": "boolean"
        },
        "neverAskExpirationTimestamp": {
          "description": "DEPRECATED: Use never_ask_again instead. Expiration timestamp of \"never ask again\" status. If this field is set and is later than current timestamp, we should NOT ask the user whether they'd like to trust this device.",
          "format": "google-datetime",
          "type": "string"
        },
        "trustDeviceExpirationTimestamp": {
          "description": "Expiration timestamp of \"trusted\" status. If this field is set and is later than current timestamp, we can consider this device to be trusted.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsSearchFilter": {
      "description": "Specification of which search features can be used.",
      "id": "AssistantApiSettingsSearchFilter",
      "properties": {
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_SAFE_SEARCH",
            "BLOCK_SEARCH"
          ],
          "enumDescriptions": [
            "",
            "Allow only safe search for the Assistant.",
            "Block (almost) all search features. Some \"safe\" features that users wouldn't consider search (like calculator) are still allowed in this mode."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsSpeechOutputSettings": {
      "description": "Settings related to TTS output.",
      "id": "AssistantApiSettingsSpeechOutputSettings",
      "properties": {
        "speechOutput": {
          "enum": [
            "UNSPECIFIED",
            "VERBOSE",
            "MIN_VERBOSITY",
            "HANDS_FREE_ONLY"
          ],
          "enumDescriptions": [
            "",
            "Provide speech output most of the time.",
            "Optimize where to provide speech output.",
            "Provide speech output only in hands-free mode. No TTS will be provided otherwise."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsSpeechSettings": {
      "description": "Settings related to speech detection. See go/hotword-settings-on-cloud for more info. Next ID: 16",
      "id": "AssistantApiSettingsSpeechSettings",
      "properties": {
        "continuedConversationEnabled": {
          "description": "Indicates whether Continued Conversation is enabled for this device.",
          "type": "boolean"
        },
        "deviceModelType": {
          "description": "Stores the device model type e.g Pixel.",
          "type": "string"
        },
        "dspAvailable": {
          "description": "Whether the device has DSP chip to enable always on hotword detection.",
          "type": "boolean"
        },
        "hotwordInNavigationEnabled": {
          "description": "Whether hotword has been enabled by the user during navigation.",
          "enum": [
            "UNAVAILABLE",
            "ENABLED",
            "DISABLED",
            "UNDECIDED",
            "OPA_DISABLED",
            "UNSUPPORTED_LOCALE",
            "INCOMPLETE",
            "ENABLED_WITHOUT_OPA_AVAILABILITY"
          ],
          "enumDescriptions": [
            "Setting is unavailable to the user.",
            "Setting is available and enabled by the user.",
            "Setting is available but disabled by the user.",
            "Setting is available, but user never touched this setting.",
            "Setting is disabled because Opa is disabled by user.",
            "Setting is unavailable because the locale is unsupported. Deprecated, use voice_match_available",
            "Setting is incomplete, see go/hotword-incomplete-state",
            "Setting is enabled by user without opa availability. go/no-opa-yes-vm"
          ],
          "type": "string"
        },
        "hotwordSetting": {
          "description": "Stores hotword setting status for the locales which don't support voice match.",
          "enum": [
            "UNAVAILABLE",
            "ENABLED",
            "DISABLED",
            "UNDECIDED",
            "OPA_DISABLED",
            "UNSUPPORTED_LOCALE",
            "INCOMPLETE",
            "ENABLED_WITHOUT_OPA_AVAILABILITY"
          ],
          "enumDescriptions": [
            "Setting is unavailable to the user.",
            "Setting is available and enabled by the user.",
            "Setting is available but disabled by the user.",
            "Setting is available, but user never touched this setting.",
            "Setting is disabled because Opa is disabled by user.",
            "Setting is unavailable because the locale is unsupported. Deprecated, use voice_match_available",
            "Setting is incomplete, see go/hotword-incomplete-state",
            "Setting is enabled by user without opa availability. go/no-opa-yes-vm"
          ],
          "type": "string"
        },
        "lockscreenEnabled": {
          "description": "Whether pin/pattern lockscreen has been enabled by the user.",
          "type": "boolean"
        },
        "opaEligibilityState": {
          "description": "Stores if Assistant is available for the user's device/locale, where Enabled means it is available and disabled means it is not.",
          "enum": [
            "UNAVAILABLE",
            "ENABLED",
            "DISABLED",
            "UNDECIDED",
            "OPA_DISABLED",
            "UNSUPPORTED_LOCALE",
            "INCOMPLETE",
            "ENABLED_WITHOUT_OPA_AVAILABILITY"
          ],
          "enumDescriptions": [
            "Setting is unavailable to the user.",
            "Setting is available and enabled by the user.",
            "Setting is available but disabled by the user.",
            "Setting is available, but user never touched this setting.",
            "Setting is disabled because Opa is disabled by user.",
            "Setting is unavailable because the locale is unsupported. Deprecated, use voice_match_available",
            "Setting is incomplete, see go/hotword-incomplete-state",
            "Setting is enabled by user without opa availability. go/no-opa-yes-vm"
          ],
          "type": "string"
        },
        "opaEligible": {
          "description": "Stores if Assistant is available for the user's device/locale. Deprecated as bools do not give accurate true/false ratios due to old clients reporting the default value.",
          "type": "boolean"
        },
        "sdkVersion": {
          "description": "Stores the Android SDK version. This comes from android.os.Build.VERSION.SDK_INT.",
          "format": "int32",
          "type": "integer"
        },
        "speakerIdModelPresent": {
          "description": "Whether speaker ID model is present for the user.",
          "type": "boolean"
        },
        "speakerIdRecognitionEnabled": {
          "description": "Indicates whether the user has enabled speaker-id (fromAnyScreen/alwaysOn) for this device. Deprecated - use voice_match_setting instead",
          "type": "boolean"
        },
        "trustedVoiceEnabled": {
          "description": "Indicates whether the user has enabled trusted voice for this device.",
          "type": "boolean"
        },
        "unlockWithHotwordAvailable": {
          "description": "A bool indicating whether device supports unlocking device with hotword.",
          "type": "boolean"
        },
        "userMigratedToDeclined": {
          "description": "Stores if user was migrated from undecided to declined as apart of Mariko project. Used for potential growth targeting.",
          "type": "boolean"
        },
        "voiceMatchSetting": {
          "description": "Stores the hotword/voice match setting status for the locales which support voice match.",
          "enum": [
            "UNAVAILABLE",
            "ENABLED",
            "DISABLED",
            "UNDECIDED",
            "OPA_DISABLED",
            "UNSUPPORTED_LOCALE",
            "INCOMPLETE",
            "ENABLED_WITHOUT_OPA_AVAILABILITY"
          ],
          "enumDescriptions": [
            "Setting is unavailable to the user.",
            "Setting is available and enabled by the user.",
            "Setting is available but disabled by the user.",
            "Setting is available, but user never touched this setting.",
            "Setting is disabled because Opa is disabled by user.",
            "Setting is unavailable because the locale is unsupported. Deprecated, use voice_match_available",
            "Setting is incomplete, see go/hotword-incomplete-state",
            "Setting is enabled by user without opa availability. go/no-opa-yes-vm"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsTetheredInfo": {
      "id": "AssistantApiSettingsTetheredInfo",
      "properties": {
        "primaryHostDeviceId": {
          "description": "The host this wearable is tethered to (e.g. phone). When host is AGSA then this is agsa_client_instance_id. When host is IOPA then this is opa_ios_device_id.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsThirdPartyAppsFilter": {
      "description": "Specification of which third party apps can be used.",
      "id": "AssistantApiSettingsThirdPartyAppsFilter",
      "properties": {
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL",
            "ALLOW_CERTIFIED_FOR_FAMILIES",
            "BLOCK_ALL"
          ],
          "enumDescriptions": [
            "",
            "Allow all third party apps.",
            "Only allow certified Apps for Families. See https://developers.google.com/actions/apps-for-families/.",
            "Block all third party apps."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsVideoFilter": {
      "description": "Specification of which video features can be used.",
      "id": "AssistantApiSettingsVideoFilter",
      "properties": {
        "autoplayToggleState": {
          "description": "State that indicates whether autoplay is enabled for youtube videos.",
          "enum": [
            "UNKNOWN_STATE",
            "ENABLED",
            "DISABLED"
          ],
          "enumDescriptions": [
            "Default uninitialized state.",
            "Allow autoplay for youtube videos.",
            "Disable autoplay for youtube videos."
          ],
          "type": "string"
        },
        "availableProviders": {
          "description": "Providers available at the time user updated settings.",
          "items": {
            "enum": [
              "UNKNOWN_VIDEO_PROVIDER",
              "YOUTUBE",
              "YOUTUBE_TV",
              "YOUTUBE_KIDS"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "providerFilterState": {
          "description": "Represents the state for the video provider filter.",
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL_PROVIDERS",
            "ALLOW_WHITELISTED_PROVIDERS"
          ],
          "enumDescriptions": [
            "",
            "With this state, all video providers are allowed.",
            "This limits the allowed providers to the whitelisted ones. This means that we can block all providers if the whitelist is empty."
          ],
          "type": "string"
        },
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL",
            "BLOCK_MATURE_CONTENT",
            "BLOCK_ALL"
          ],
          "enumDescriptions": [
            "",
            "Allow all videos.",
            "Block videos with mature content.",
            "Block all videos."
          ],
          "type": "string"
        },
        "whitelistedProviders": {
          "description": "Contains the list of whitelisted video providers.",
          "items": {
            "enum": [
              "UNKNOWN_VIDEO_PROVIDER",
              "YOUTUBE",
              "YOUTUBE_TV",
              "YOUTUBE_KIDS"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSettingsWebviewFilter": {
      "description": "Specification of which webview features can be used.",
      "id": "AssistantApiSettingsWebviewFilter",
      "properties": {
        "jasperWebviewConsent": {
          "description": "Indicates if user has consented Jasper warning message.",
          "type": "boolean"
        },
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "ALLOW_ALL_WEBSITES",
            "BLOCK_ALL_WEBSITES"
          ],
          "enumDescriptions": [
            "",
            "Allow all websites.",
            "Block all websites."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSignInMethod": {
      "description": "The method of sign in which the client supports.",
      "id": "AssistantApiSignInMethod",
      "properties": {
        "method": {
          "enum": [
            "UNSPECIFIED",
            "NOT_ALLOWED",
            "PHONE_APP",
            "ON_DEVICE_MENU",
            "WEB_APP"
          ],
          "enumDescriptions": [
            "Unspecified value. Defaults to the same sign-in behavior as PHONE_APP.",
            "Sign in is not allowed, e.g., go/telephone.",
            "Sign in with Home app, e.g. Google Home.",
            "Sign in with on device menu, e.g., LGTV, go/web-assistant",
            "Sign in with the Assistant sign in website. See go/baird-web-based-sign-in."
          ],
          "type": "string"
        },
        "signInRequired": {
          "description": "Make Google sign-in mandatory for using Google Assistant on the device.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSodaCapabilities": {
      "description": "Capabilities related to SODA (Speech On-Device API). Next ID: 5",
      "id": "AssistantApiSodaCapabilities",
      "properties": {
        "supportsHotwordSensitivity": {
          "description": "Whether the device supports different levels of hotword sensitivity. go/hotword-sensitivity-prd",
          "type": "boolean"
        },
        "supportsSimpleStop": {
          "description": "Whether Simple Stop (go/simple-stop) is enabled on the device. Simple stop allows users to stop firing alarms and timers by just saying \"stop\" without first saying the hotword.",
          "type": "boolean"
        },
        "supportsSpeakerId": {
          "description": "Whether the device supports speaker-id (speaker identification based on hotword and/or spoken query - go/speaker-id). Note: there are existing devices that support speaker-id but does not have this capability set. Not having this field populated doesn't necessarily mean the device doesn't support speaker-id.",
          "type": "boolean"
        },
        "supportsWarmWords": {
          "description": "Whether the device supports WarmWords (go/warm-words-framework).",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSoftwareCapabilities": {
      "description": "These capabilities represent what software features the client supports. This should be determined based on the client's various software versions (OS, GSA version, etc). Next ID: 27",
      "id": "AssistantApiSoftwareCapabilities",
      "properties": {
        "appCapabilities": {
          "description": "IMPORTANT: Only one of AppCapabilities and AppCapabilitiesDelta should be in the SoftwareCapabilities. In the edge case if the client sends up both AppCapabilities and AppCapabilitiesDelta, AppCapabilitiesDelta is ignored. Complete list of app capabilities.",
          "items": {
            "$ref": "AssistantApiAppCapabilities"
          },
          "type": "array"
        },
        "appCapabilitiesDelta": {
          "description": "Incremental update for app capabilities.",
          "items": {
            "$ref": "AssistantApiAppCapabilitiesDelta"
          },
          "type": "array"
        },
        "appIntegrationsSettings": {
          "additionalProperties": {
            "$ref": "AssistantApiAppIntegrationsSettings"
          },
          "description": "App integrations settings for each packge name.",
          "type": "object"
        },
        "carAssistantCapabilities": {
          "$ref": "AssistantApiCarAssistantCapabilities",
          "description": "Capabilities related to Assistant on Auto surfaces."
        },
        "clockCapabilities": {
          "$ref": "AssistantApiClockCapabilities",
          "description": "Capabilities related to clock functionality, like alarms, timers, etc."
        },
        "conversationVersion": {
          "$ref": "AssistantApiSupportedConversationVersion",
          "description": "A top-level version of Conversation protocol where the versions are explicitly defined at go/conversation-versions."
        },
        "crossDeviceExecutionCapabilities": {
          "$ref": "AssistantApiCrossDeviceExecutionCapability",
          "description": "For torus x-device execution support"
        },
        "gacsCapabilities": {
          "$ref": "AssistantApiGacsCapabilities"
        },
        "gcmCapabilities": {
          "$ref": "AssistantApiGcmCapabilities"
        },
        "homeAppCapabilities": {
          "$ref": "AssistantApiCapabilitiesHomeAppCapabilities",
          "description": "Google Home app features."
        },
        "liveTvChannelCapabilities": {
          "$ref": "AssistantApiLiveTvChannelCapabilities",
          "description": "Capabilities related to live TV channels."
        },
        "oemCapabilities": {
          "$ref": "AssistantApiOemCapabilities",
          "description": "List of actions OEM supports. This includes built-in actions and custom actions."
        },
        "onDeviceAssistantCapabilities": {
          "$ref": "AssistantApiOnDeviceAssistantCapabilities",
          "description": "on-device Assistant capabilities"
        },
        "onDeviceSmartHomeCapabilities": {
          "$ref": "AssistantApiOnDeviceSmartHomeCapabilities",
          "description": "Capability bits for on-device Smart Home. go/framework-for-local-semex"
        },
        "onDeviceStorageCapabilities": {
          "$ref": "AssistantApiOnDeviceStorageCapabilities",
          "description": "Reflects the storage capabilities on the device."
        },
        "operatingSystem": {
          "description": "The operating system of the device.",
          "enum": [
            "OS_TYPE_UNKNOWN",
            "OS_TYPE_ANDROID",
            "OS_TYPE_CAST",
            "OS_TYPE_FUCHSIA",
            "OS_TYPE_LINUX"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "orderedLiveTvProviders": {
          "description": "An ordered list containing the live tv providers available in the client. The order of the providers reflects the ranking in the client and will be respected by server as well.",
          "items": {
            "$ref": "AssistantApiLiveTvProvider"
          },
          "type": "array"
        },
        "selinaCapabilities": {
          "$ref": "AssistantApiSelinaCapabilites",
          "description": "The Soli capabilities on Elaine. go/dingo-dc-software"
        },
        "settingsAppCapabilities": {
          "$ref": "AssistantApiSettingsAppCapabilities"
        },
        "supportedClientOp": {
          "items": {
            "$ref": "AssistantApiSupportedClientOp"
          },
          "type": "array"
        },
        "supportedFeatures": {
          "$ref": "AssistantApiSupportedFeatures"
        },
        "supportedMsgVersion": {
          "$ref": "AssistantApiSupportedProtocolVersion"
        },
        "supportedProviderTypes": {
          "$ref": "AssistantApiSupportedProviderTypes"
        },
        "surfaceProperties": {
          "$ref": "AssistantApiSurfaceProperties"
        }
      },
      "type": "object"
    },
    "AssistantApiSpeechCapabilities": {
      "description": "DEPRECATED These capabilties are associated with speech detection on devices.",
      "id": "AssistantApiSpeechCapabilities",
      "properties": {
        "dspAvailable": {
          "description": "A bool indicating whether device supports dsp based hotword detection.",
          "type": "boolean"
        },
        "unlockWithHotwordAvailable": {
          "description": "A bool indicating whether device supports unlocking device with hotword.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSuggestionsSupport": {
      "description": "Next ID: 18",
      "id": "AssistantApiSuggestionsSupport",
      "properties": {
        "clickImpersonationSupported": {
          "description": "Whether client supports user impersonation on suggestion chip click. go/suggestion-click-impersonation",
          "type": "boolean"
        },
        "debugDataSupported": {
          "description": "Whether client supports suggestions debug data to be displayed.",
          "type": "boolean"
        },
        "drlHistoryChipSupported": {
          "description": "Whether DRL history chip is supported. Related bug: http://b/241837879, http://b/171854732 Design doc: http://go/panthera-history-chip-dd DRL history chip was originally rolled out to Panthera in http://google3/googledata/experiments/mobile/agsa/studies/agsa_nga/opa_panthera_one_input_ui_launch.gcl?l=55&rcl=384682900. We plan to roll it out to NGA and TNG. drl_history_chip_supported bit specifies whether the client support (and should have) DRL history chip.",
          "type": "boolean"
        },
        "escapeHatchSupported": {
          "description": "Whether client supports escape hatches aka post execution suggestions go/nga-escape-hatch-prd",
          "enum": [
            "UNSUPPORTED",
            "NGA_ESCAPE_HATCH"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "executedTextSupported": {
          "description": "Whether the client can rewrite suggestion query text into executed text, if the latter is present. If this feature is disabled, the rewrite happens in Assistant Server.",
          "type": "boolean"
        },
        "executionContextSupported": {
          "description": "Whether the client supports passing back `execution_context` from |assistant.api.client_op.SuggestionProcessingParams| when the suggestion is clicked or spoken.",
          "type": "boolean"
        },
        "featureSpecificActionSupport": {
          "$ref": "AssistantApiFeatureSpecificActionSupport",
          "description": "Whether the client supports features in |SuggestionFeatureSpecificAction|."
        },
        "featureSpecificAppActionsNotificationSupported": {
          "description": "Whether the client supports handling App Actions' notification when the suggestion is clicked. This will allow the server to populate the `app_actions_notification_data` extension field from |SuggestionFeatureSpecificAction| proto message.",
          "type": "boolean"
        },
        "multiStepTrySayingSupported": {
          "description": "Whether the multi-step try saying suggestion feature is supported. dd: go/tng-multi-step-simplified",
          "type": "boolean"
        },
        "ruleIdInExecutionContextSupported": {
          "description": "Whether the rule_id field in the execution_context is supported. This is a temporary workaround to be able to identify clicks on Person entity suggestions on Sabrina and is expected to be eventually deprecated. TODO(b/185517153) : Deprecate (but do not delete) once click tracking is correctly sent up from the Katniss client.",
          "type": "boolean"
        },
        "showExecutedTextSupported": {
          "description": "Whether the client can show executed_text after the click on the suggestion chip. Must be set to false on TNG. TNG disregards |SuggestionProcessingParams.show_executed_text| field and always treats it as if |show_executed_text=true|.",
          "type": "boolean"
        },
        "showTranslationSupported": {
          "description": "Whether the client can show chip as (text | translation). go/lang-partner-doc",
          "type": "boolean"
        },
        "supportedDisplayTargets": {
          "description": "A list of suggestions display targets supported by this client. If unset only DEFAULT SuggestionDisplayTarget is supported.",
          "items": {
            "$ref": "AssistantApiSuggestionsSupportDisplayTargetSupport"
          },
          "type": "array"
        },
        "widgetDataSupported": {
          "description": "Whether client supports widget suggestion chip to be displayed.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSuggestionsSupportDisplayTargetSupport": {
      "id": "AssistantApiSuggestionsSupportDisplayTargetSupport",
      "properties": {
        "executedTextSupported": {
          "description": "Whether the client can rewrite suggestion query text into executed text, if the latter is present for the display target.",
          "type": "boolean"
        },
        "headerTextSupported": {
          "description": "Whether PresentationParams.header_text is supported for the display target.",
          "type": "boolean"
        },
        "repressImpressionSupported": {
          "description": "Whether Suggestion.repress_impression is supported. If not repressed suggestions are not returned.",
          "type": "boolean"
        },
        "target": {
          "description": "Display target that is supported.",
          "enum": [
            "DEFAULT",
            "NGA_INPUT_PLATE",
            "CONVERSATION_STARTERS",
            "QUICK_ACTIONS",
            "TACTILE_ASSISTANT_SUGGESTS",
            "TACTILE_MY_ACTIONS",
            "TRY_SAYING",
            "RICH_SUGGESTIONS"
          ],
          "enumDescriptions": [
            "Use the default display target.",
            "Show Escape Hatch chips. The chips are displayed outside of response layer for example over app that query was fulfilled in.",
            "Show chips as Conversation Starters in Opa and Panthera.",
            "Show chips as Panthera quick actions (go/quick-actions-dd).",
            "Show chips in Tactile \"Assistant Suggests\" section.",
            "Show chips in Tactile \"My Actions\" section.",
            "Show chips as \"Try Saying\" suggestions.",
            "Show suggestions as rich suggestions and chips; go/prs-redesign-dd"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSunriseFeaturesSupport": {
      "id": "AssistantApiSunriseFeaturesSupport",
      "properties": {
        "sunriseSimulationSupported": {
          "description": "If true, the device can slowly brighten the screen and simulate sunrise experience. Alarms with sunrise field enabled can be set on this device.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedClientOp": {
      "description": "These are the set of ClientOps that are supported by the device.",
      "id": "AssistantApiSupportedClientOp",
      "properties": {
        "clientOpName": {
          "description": "This should be the same as the name of the SemanticClientOp that is supported.",
          "type": "string"
        },
        "clientOpProperties": {
          "$ref": "AssistantApiProtobuf",
          "description": "The properties associated with the ClientOp. This proto should be associated with the client_op_name."
        },
        "supportedExecution": {
          "$ref": "AssistantApiSupportedClientOpSupportedExecution"
        },
        "version": {
          "description": "A version of 0 is the equivalent to not having support for that client_op type. Note that a client_op is also unsupported if it is not included at all in the list of supported client_ops.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedClientOpSupportedExecution": {
      "description": "Additional properties that client can support for executing the client op. They are surface-specific execution properties and are unrelated to the execution model.",
      "id": "AssistantApiSupportedClientOpSupportedExecution",
      "properties": {
        "supportsPartialFulfillment": {
          "description": "ClientOp execution supports special rendering behavior while the user is in the middle of expressing their query. This behavior includes: 1) New partial output always over-writes prior partial output. 2) Canceling the interaction removes partial fulfilment from any user visible interaction history. If this is true, whether to apply the special rendering behavior will be determined by PartialFulfillmentRenderingParams. More details can be found at go/ma-natcon-pf-api.",
          "type": "boolean"
        },
        "supportsSynchronousExecution": {
          "description": "Client can support synchronous execution of the client op. For tts.OUTPUT client op it means that client would honor |synchronous_playback_args| argument. Please see more at go/synchronous-sounds-design.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedConversationVersion": {
      "description": "The overall Conversation Protocol version. As we make fundamental changes to Conversation protocol that are non-backwards compatible, we will increment the protocol version. By default, all clients will support version 0. All versions are documented at go/conversation-versions.",
      "id": "AssistantApiSupportedConversationVersion",
      "properties": {
        "supportsConversationProtocol": {
          "description": "Whether conversation protocol is supported explicitly. If true, SingleDeviceCapabilityChecker::SupportsConversationProtocol will always return true.",
          "type": "boolean"
        },
        "version": {
          "description": "The supported version number.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedFeatures": {
      "description": "These are the set of features that are supported by the device. It's a part of the SoftwareCapabilities of the device. Next ID: 63",
      "id": "AssistantApiSupportedFeatures",
      "properties": {
        "aaeNotificationSourceSupported": {
          "description": "Whether the client supports the alternative message notification sources on AAE, in which case notification-related operations can access it.",
          "type": "boolean"
        },
        "acpSupport": {
          "$ref": "AssistantApiAssistantContinuedPresenceSupport",
          "description": "In what way is assistant continued presence supported. (go/opa-acp-prd)"
        },
        "actionV2SupportedFeatures": {
          "$ref": "AssistantApiActionV2SupportedFeatures"
        },
        "alarmTimerManagerApiSupported": {
          "description": "Whether the client supports AlarmTimerManager API (go/alarm-timer-manager-api).",
          "type": "boolean"
        },
        "appControlSupport": {
          "$ref": "AssistantApiAppControlSupport",
          "description": "The client information for app control support. More details in: go/acaia."
        },
        "assistantExploreSupported": {
          "description": "Whether the client supports the assistant explore section. This field will be active only when the Explore section is available to the user. This means that the user is (a) signed-in, (b) a IOPA / AGSA user, and (c) in a locale where explore is available.",
          "type": "boolean"
        },
        "assistantForKidsSupported": {
          "description": "Whether Assistant for Kids (a.k.a. Designed for Family) features are supported.",
          "type": "boolean"
        },
        "bypassDiDcCheckForComms": {
          "description": "Whether communications flows for the client can bypass the DI/DC check. The client will enforce some other equivalent permission as necessary concerning access to device contacts and apps.",
          "type": "boolean"
        },
        "bypassMsgNotificationDismissal": {
          "description": "Whether or not Assistant should enforce the dismissal of communication notifications associated with messages.",
          "type": "boolean"
        },
        "client1mProvidersSupported": {
          "description": "Whether the client supports 1m providers (go/1m-partner-expansion).",
          "type": "boolean"
        },
        "clientOpResultBatchingSupported": {
          "description": "Whether the client can batch client op results before sending them to the server.",
          "type": "boolean"
        },
        "confirmationBeforeReadingMultipleMessagesSupported": {
          "description": "Whether the client supports confirmation flow before announcement of multiple messages. If set to true the user will be prompted once and confirmation will be taken before all the messages are announced.",
          "type": "boolean"
        },
        "crossDeviceBroadcastSupported": {
          "description": "Whether the client supports cross-device broadcast (i.e. on Torus).",
          "type": "boolean"
        },
        "crossDeviceBroadcastVersion": {
          "description": "The version of cross device broadcast (ie; broadcast on torus) which the client supports.",
          "enum": [
            "CROSS_DEVICE_BROADCAST_NOT_SUPPORTED",
            "CROSS_DEVICE_BROADCAST_V1"
          ],
          "enumDescriptions": [
            "Broadcast with torus is not supported on this device.",
            "This device supports the cross device broadcast V1 features."
          ],
          "type": "string"
        },
        "csatVisualOverlaySupported": {
          "description": "Whether the client supports csat visual overlay. (go/sd-od-csat)",
          "type": "boolean"
        },
        "duoClientApiFeatures": {
          "description": "The features set which duo client on the device supports. This should be serialized from proto {@code duo_client_api.DuoClientApiFeatures}.",
          "format": "byte",
          "type": "string"
        },
        "duoGroupCallingSupported": {
          "description": "Whether the client supports Duo group calling.",
          "type": "boolean"
        },
        "fitnessFeatureSupport": {
          "$ref": "AssistantApiFitnessFeatureSupport",
          "description": "Information about what support this device has for fitness."
        },
        "fluidActionsSupport": {
          "$ref": "AssistantApiFluidActionsSupport",
          "description": "Fluid Actions features supported by the client. If this field is not set in the incoming request, it could mean that the client does not support Fluid Actions. Alternatively, it could mean that the client supports Fluid Actions, but syncs state with server using the old protocol, namely ConversationStateParams. When b/140733618 is resolved, Surface Adaptation Layer will add this field for old clients that support Fluid Actions framework."
        },
        "funtimeSupported": {
          "description": "Whether the surface client op performer supports Funtime alarms and timers. go/funtime-engdesign",
          "type": "boolean"
        },
        "gdiSupported": {
          "description": "Whether account linking via Google Deep Integrations (GDI) is supported. go/opa-gdi-design",
          "type": "boolean"
        },
        "gearheadNotificationSourceSupported": {
          "description": "Whether the client supports the Gearhead message notification source, in which case notification-related operations can access it.",
          "type": "boolean"
        },
        "hasPhysicalRadio": {
          "description": "Whether the client has a physical radio installed.",
          "type": "boolean"
        },
        "immersiveCanvasConfirmationMessageSupported": {
          "description": "Whether the client supports confirmation messages in Immersive Canvas actions. Deprecated: use the filed in immersive_canvas_support.",
          "type": "boolean"
        },
        "immersiveCanvasSupport": {
          "$ref": "AssistantApiImmersiveCanvasSupport"
        },
        "inDialogAccountLinkingSupported": {
          "description": "Whether the client supports account linking in-dialog (askForSignIn). This is used before this feature is moved to conversation protocol. To support this, the client needs to: - Integrate with Google Deep Integrations. - Have logic to send the result of account linking back to AS.",
          "type": "boolean"
        },
        "isPairedPhoneContactUploadNeededForComms": {
          "description": "Whether paired-phone contact upload is needed for communications queries to work (e.g. on AAE).",
          "type": "boolean"
        },
        "isPairedPhoneNeededForComms": {
          "description": "Whether a Bluetooth-paired phone is a core component of communications flows on the client.",
          "type": "boolean"
        },
        "launchKeyboardSupported": {
          "description": "Which way of launching the keyboard the client supports.",
          "enum": [
            "LAUNCH_KEYBOARD_UNSUPPORTED",
            "OPA_ANDROID_LAUNCH_KEYBOARD_URI"
          ],
          "enumDescriptions": [
            "Launching the keyboard from a suggestion chip is not supported.",
            "The keyboard can be opened by using the opa-android://launch_keyboard uri. Takes the url-encoded parameters: - query: the string to prefill the keyboard with. - start: (optional) the start position of the span to highlight. - end: (optional) the end position of the span to highlight."
          ],
          "type": "string"
        },
        "lensSupported": {
          "description": "Whether the client has Google Lens (Assistant Eyes).",
          "type": "boolean"
        },
        "liveCardsSupported": {
          "description": "Whether the surface supports LiveCards. In cases where the user intent flow cannot be completed within the Assistant, LiveCards are used to take the user to an external app or website. These cards will be pushed to the Google Home app via the PushMessage ClientOp.",
          "type": "boolean"
        },
        "mapsDialogsSupported": {
          "description": "Whether the client supports Assistant dialogs within Maps. This field will be set only when the Maps on the surface supports Assistant dialogs embedded within Maps. go/gsa-gmm.",
          "type": "boolean"
        },
        "masqueradeModeSupported": {
          "description": "Whether the device supports masquerade mode (go/masquerade).",
          "type": "boolean"
        },
        "mediaControlSupport": {
          "$ref": "AssistantApiMediaControlSupport",
          "description": "Information about how client handles media controls (play, pause, skip ...)"
        },
        "mediaSessionDetection": {
          "description": "The ability of the client to detect media sessions on the device.",
          "enum": [
            "UNKNOWN_MEDIA_SESSION_DETECTION",
            "RELIABLE_MEDIA_SESSION_DETECTION",
            "UNRELIABLE_MEDIA_SESSION_DETECTION",
            "NO_MEDIA_SESSION_DETECTION",
            "MEDIA_SESSION_DETECTION_DISABLED_SCREEN_CONTEXT"
          ],
          "enumDescriptions": [
            "",
            "The client has perfect knowledge of what is playing on the device. For example, Chirp falls into this category. We can reliably choose to control or punt based on media params.",
            "The client has some knowledge about the media sessions on the device. For example, OPA TV falls into this category. For these cases, we should probably always try to return the media control client op to the client.",
            "The client has no idea about the media playback on the device. For these cases, we should either punt or attempt to control media and silently fail.",
            "Media session detection is supported by the client but disabled by the user (for example: OPA_CROS) by turning off screen context setting."
          ],
          "type": "string"
        },
        "meetSupported": {
          "description": "Whether the client supports joining a Google Meet meeting.",
          "type": "boolean"
        },
        "noInputResponseSupported": {
          "description": "Whether the client can render no input response or just ignore it. No input response is returned when client has a no speech input interaction, eg. user tapped mic but didn't say anything.",
          "type": "boolean"
        },
        "opaOnSearchSupported": {
          "description": "When the entry source is search, whether the client supports rendering a similar response as OPA one does. Entry source is defined at http://cs/symbol:assistant.api.params.DeviceProperties.EntrySource",
          "type": "boolean"
        },
        "parentalControlsSupported": {
          "description": "Whether or not the client supports enabling parental controls. When a device to supports parental controls, it has the software necessary to store the relevant information required for parental controls to work. This information includes a boolean \"enabled bit\" as well as the obfuscated gaia ID of the kid account selected for use with parental controls. Devices supportings kids mode send this information to S3 via S3ClientInfo in every request. See go/aff-kidsproduct for details.",
          "type": "boolean"
        },
        "persistentDisplaySupported": {
          "description": "Whether the client supports persistent display. The new feature allows Assistant devices with screen to display a continuously updating permanent display, such as ambient weather, without the need for a user to ask the Assistant. Design doc: go/assistant-persistent-display.",
          "type": "boolean"
        },
        "privacyAwareLockscreenSupported": {
          "description": "Whether the client supports the privacy-aware lockscreen protocol (go/assistant-lockscreen-spec).",
          "type": "boolean"
        },
        "remoteCloudCastingEnabled": {
          "description": "Whether the client has remote casting enabled. For ex: we want to disable this for clients like Auto.",
          "type": "boolean"
        },
        "serverGeneratedFeedbackChipsEnabled": {
          "description": "Whether the Assistant Server should generate feedback suggestion chips.",
          "type": "boolean"
        },
        "shLockScreenSupported": {
          "description": "Whether the client supports SmartHome lock screen logic (i.e. on Tangor).",
          "type": "boolean"
        },
        "signInMethod": {
          "$ref": "AssistantApiSignInMethod",
          "description": "Which kind of sign in the client supports."
        },
        "sleepSensingSupported": {
          "description": "Whether the client can monitor sleep. This allows us to show sleep CUJ related information: go/TwilightDesign Use for development only, see the same field in DeviceCapabilities.SoftwareCapabilities.SelinaCapabilities.",
          "type": "boolean"
        },
        "smartspaceCrossDeviceTimerSupported": {
          "description": "Whether the client supports smart space cross-device timers. (go/ss-x-device-timer)",
          "type": "boolean"
        },
        "soliGestureDetectionSupported": {
          "description": "Whether or not the client supports gesture detection via soli chips. The reason to prepend the name with soli is to distinguish it from computer vision based methods, e.g. Newman devices.",
          "type": "boolean"
        },
        "suggestionsSupport": {
          "$ref": "AssistantApiSuggestionsSupport",
          "description": "Suggestion chips features, supported by the client."
        },
        "sunriseFeaturesSupport": {
          "$ref": "AssistantApiSunriseFeaturesSupport",
          "description": "Whether the client supports the sunrise screen brightening feature before the alarm fires. This is used to indicate whether sunrise alarms can be set on the device. http://cs/symbol:assistant.api.core_types.governed.RingtoneTaskMetadata.GentleWakeInfo"
        },
        "tapToReadOptimizationSupported": {
          "description": "Whether the client supports faster optimization for tap_to_read feature.",
          "type": "boolean"
        },
        "thirdPartyGuiSupported": {
          "description": "Whether the device supports the 3p GUI framework, which allows third parties to enter the conversation with the user, showing their logo next to their chat bubbles, etc. go/3p-phone",
          "type": "boolean"
        },
        "transactionFeaturesSupport": {
          "$ref": "AssistantApiTransactionFeaturesSupport",
          "description": "Transactions features, supported by the client. Transactions feature may includes how Transactions team want to populate additional information from the device to the server."
        },
        "transactionsVersion": {
          "description": "The version of transactions which the client supports.",
          "enum": [
            "NO_TRANSACTIONS",
            "TRANSACTIONS_INITIAL_LAUNCH",
            "TRANSACTIONS_V2",
            "TRANSACTIONS_V3"
          ],
          "enumDescriptions": [
            "Transactions are not supported on this device.",
            "This device supports the client features present at the initial consumer launch of transactions.",
            "This device supports the transaction version v2 client features, includes transactions clientops. Deprecated given there're some iOS version populate this enum but don't support clientops.",
            "This device supports the transaction version v3 client features, includes transactions clientops."
          ],
          "type": "string"
        },
        "usesSeparateFullViewer": {
          "description": "If set, it indicates that the client can open a separate HTML browser/webviewer (full viewer) to display certain visual results. These visual results usually require more memory to render (e.g. high resolution photos). Compared to the regular viewer that display all other Assistant result, the full viewer does not have memory limit. The field is copied from the device model. See http://google3/assistant/devices_platform/proto/device_model_capabilities.proto?l=225&rcl=312576471 Also see go/webassistant-full-card-viewer.",
          "type": "boolean"
        },
        "viewReminderHubPageNotSupported": {
          "description": "Whether the client supports viewing of reminder hub page or not. Default is supported. Set to true to disable returning reminder hub page url in reminder responses.",
          "type": "boolean"
        },
        "warmWelcomeTutorialSupported": {
          "description": "Whether the client supports the programmatic warm welcome tutorial. Design doc: go/opal-pww-design.",
          "type": "boolean"
        },
        "webBrowserSupported": {
          "description": "Whether the supports opening a URL in a web browser. For example, we want to disable this for clients like Chirp.",
          "type": "boolean"
        },
        "whatsNextSupported": {
          "description": "Whether or not the client supports WhatsNext in the protocol.",
          "type": "boolean"
        },
        "zoomSupported": {
          "description": "Whether the client supports joining a Zoom meeting.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedProtocolVersion": {
      "description": "Contains versions of protocol buffer messages. This is the equivalence of a proto3 map, keyed by a protocol buffer message\u2019s name, and the value is the version of this message. e.g. {\"assistant.api.core_types.Timer\": 2, \"assistant.api.core_types.Alarm\": 1} See go/assistant-protocol-versioning for more details.",
      "id": "AssistantApiSupportedProtocolVersion",
      "properties": {
        "messageVersion": {
          "items": {
            "$ref": "AssistantApiSupportedProtocolVersionMessageVersionPair"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedProtocolVersionMessageVersionPair": {
      "id": "AssistantApiSupportedProtocolVersionMessageVersionPair",
      "properties": {
        "messageName": {
          "description": "The full path of a message which should start from the package name. e.g. \"assistant.api.core_types.Timer\".",
          "type": "string"
        },
        "version": {
          "description": "The supported version number.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiSupportedProviderTypes": {
      "description": "Types of providers that are supported by the client. For example, ChromeOS support both web app and Android app (for eligible devices).",
      "id": "AssistantApiSupportedProviderTypes",
      "properties": {
        "supportedTypes": {
          "items": {
            "enum": [
              "PROVIDER_TYPE_UNSPECIFIED",
              "ANDROID_APP",
              "CAST_APP",
              "CLOUD_PROVIDER",
              "SIP_PROVIDER",
              "IOS_APP",
              "INTERNAL_PROVIDER",
              "WEB_PROVIDER",
              "KAIOS_APP",
              "HOME_APP",
              "CHROMEOS_APP"
            ],
            "enumDescriptions": [
              "",
              "For AndroidAppInfo",
              "For CastAppInfo",
              "For CloudProviderInfo",
              "For SipProviderInfo",
              "For IosAppInfo",
              "For InternalProviderInfo",
              "For WebProviderInfo",
              "For KaiOsAppInfo",
              "For HomeAppInfo",
              "For ChromeOsAppInfo"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiSurfaceProperties": {
      "description": "Properties of the surface that are not hardware related or feature specific.",
      "id": "AssistantApiSurfaceProperties",
      "properties": {
        "executionCapabilities": {
          "$ref": "AssistantApiSurfacePropertiesExecutionCapabilities"
        },
        "responseDisplayFormat": {
          "description": "If this field is unset, the response format is unknown",
          "enum": [
            "SINGLE_ITEM",
            "MULTIPLE_ITEMS",
            "FULL_HISTORY"
          ],
          "enumDescriptions": [
            "The surface can only show a single item (card, display text, etc) of the response at a time. For example, if both a display text and a card are sent in a response, the surface may only show the card to the user.",
            "The surface can show a simple multi item response (e.g. both a display text and a card), but can't show response items from a previous response.",
            "The surface can show complex multi item responses (e.g. display text, card, display text) as well as a history of previous responses."
          ],
          "type": "string"
        },
        "supportsMultiResponse": {
          "description": "If true, the client supports receiving multiple responses. See go/multiple-response-in-media-use-cases for more details.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSurfacePropertiesExecutionCapabilities": {
      "description": "Describes the capabilities that are related to the execution of client ops on the device.",
      "id": "AssistantApiSurfacePropertiesExecutionCapabilities",
      "properties": {
        "supportsClientOpPreloading": {
          "description": "Completes the preloading ie., sets up the stage for the execution of client ops on the device while the previous conv delta is being executed. Refer to go/preload-convdelta for more information.",
          "type": "boolean"
        },
        "supportsNonFinalizedResponses": {
          "description": "A value of true indicates that the client supports streaming of non-finalized responses by use of ClientExecutionParams.response_stream_id. and ClientExecutionParams.to_be_finalized.",
          "type": "boolean"
        },
        "supportsNonMaterializedInteractions": {
          "description": "If true, the client supports receiving non-materialized interactions (go/as-streaming-protocol-nm).",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiSystemNotificationRestrictions": {
      "description": "Restrictions related to system-level notifications.",
      "id": "AssistantApiSystemNotificationRestrictions",
      "properties": {
        "categoryState": {
          "items": {
            "$ref": "AssistantApiSystemNotificationRestrictionsNotificationCategoryState"
          },
          "type": "array"
        },
        "channelState": {
          "items": {
            "$ref": "AssistantApiSystemNotificationRestrictionsNotificationChannelState"
          },
          "type": "array"
        },
        "notificationCapabilities": {
          "description": "Specifies whether the surface is able to display notifications.",
          "enum": [
            "NO_NOTIFICATION_CAPABILITY",
            "NOTIFICATIONS_DISABLED",
            "NOTIFICATIONS_ENABLED"
          ],
          "enumDescriptions": [
            "The surface is not able to display notifications.",
            "The notifications are disabled on the surface.",
            "The notifications are enabled."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSystemNotificationRestrictionsNotificationCategoryState": {
      "description": "Notification channels state for the new server driven channels.",
      "id": "AssistantApiSystemNotificationRestrictionsNotificationCategoryState",
      "properties": {
        "categoryId": {
          "description": "Notification channel type.",
          "format": "int32",
          "type": "integer"
        },
        "disabled": {
          "description": "Weather the notifications on this channel are disabled.",
          "type": "boolean"
        },
        "disabledReason": {
          "enum": [
            "NONE",
            "ASSISTANT_CATEGORY_SETTING",
            "ASSISTANT_OVERALL_SETTING",
            "OS_APP_DISABLED",
            "OS_CHANNEL_GROUP_DISABLED",
            "OS_CHANNEL_DISABLED"
          ],
          "enumDescriptions": [
            "",
            "The category was turned off in Assistant Notification Settings.",
            "All notifications for Assistant was turned off in settings.",
            "All notifications for the Assistant (GSA) app was turned off.",
            "Notifications for the channel group was turned off.",
            "Notifications for the channel was turned off."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiSystemNotificationRestrictionsNotificationChannelState": {
      "description": "Notification channels state.",
      "id": "AssistantApiSystemNotificationRestrictionsNotificationChannelState",
      "properties": {
        "channelType": {
          "description": "Notification channel type.",
          "enum": [
            "TYPE_UNKNOWN",
            "TYPE_OPA_PROACTIVE",
            "TYPE_OPA_HANDOFF",
            "TYPE_OPA_MISC",
            "TYPE_OPA_RECOMMENDATIONS",
            "TYPE_OPA_PRODUCT_UPDATES",
            "TYPE_OPA_THIRD_PARTY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "enabled": {
          "description": "Whether the notifications on this channel are enabled.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiThirdPartyActionConfig": {
      "description": "3P Action Metadata. Next ID: 3",
      "id": "AssistantApiThirdPartyActionConfig",
      "properties": {
        "deviceActionCapability": {
          "$ref": "AssistantDevicesPlatformProtoDeviceActionCapability",
          "description": "DeviceActionCapability from DeviceModelPackage."
        },
        "projectConfigs": {
          "description": "List of Action project capabilities.",
          "items": {
            "$ref": "AssistantApiThirdPartyActionConfigProjectConfig"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantApiThirdPartyActionConfigProjectConfig": {
      "description": "Metadata for ActionPackage. Device Actions are disabled by default unless explicitly enabled for the device here, see go/3p-device-actions-v2-design.",
      "id": "AssistantApiThirdPartyActionConfigProjectConfig",
      "properties": {
        "projectId": {
          "description": "Google cloud project id for which the Action Package or Device Model is registered.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiThirdPartyCapabilities": {
      "id": "AssistantApiThirdPartyCapabilities",
      "properties": {
        "dataSharingRestrictions": {
          "description": "Restrictions for the device to share any data with third party apps. See details in go/atv-dsc.",
          "enum": [
            "DEFAULT_NO_DATA_SHARING_RESTRICTION",
            "NO_SHARING_ALLOWED_WITH_THIRD_PARTY",
            "SHARING_STATUS_NOT_SET",
            "NO_SHARING_ALLOWED_WITH_THIRD_PARTY_FROM_OOBE"
          ],
          "enumDescriptions": [
            "User has accepted to share the data with third party apps. The device has no data sharing restrictions.",
            "User has declined to share the data with third party apps.",
            "User hasn't made a choice on whether to share data with third party apps.",
            "User has declined to share the data with third party apps during OOBE flow. With this state, the user should see the data sharing consent compact screen. See cetails in http://shortn/_JsLg0OeEJj."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiTimeOfDay": {
      "description": "A civil time relative to a timezone. IMPORTANT: The definition of TimeOfDay proto is being moved to //assistant/api/core_types/governed/datetime_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead.",
      "id": "AssistantApiTimeOfDay",
      "properties": {
        "hour": {
          "description": "The hour, in 0...23.",
          "format": "int32",
          "type": "integer"
        },
        "minute": {
          "description": "The minute, in 0...59.",
          "format": "int32",
          "type": "integer"
        },
        "nanosecond": {
          "description": "The fraction of seconds in nanoseconds, in 0..999999999.",
          "format": "int32",
          "type": "integer"
        },
        "second": {
          "description": "The second, in 0...59. Leap seconds are not supported.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantApiTimeZone": {
      "description": "A time zone. Conceptually, a time zone is a set of rules associated with a location that describes a UTC offset and how it changes over time (e.g. Daylight Saving Time). The offset is used to compute the local date and time. IMPORTANT: The definition of TimeZone enum is being moved to //assistant/api/core_types/governed/datetime_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead.",
      "id": "AssistantApiTimeZone",
      "properties": {
        "ianaId": {
          "description": "Time zone in IANA format, e.g. America/Los_Angeles for USA Pacific Time.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiTimestamp": {
      "description": "An absolute point in time independent of timezone or calendar, based on the proto3 Timestamp (//google/protobuf/timestamp.proto). IMPORTANT: The definition of Timestamp proto is being moved to //assistant/api/core_types/governed/datetime_type.proto. All existing references will be updated to point to the new location. If you are adding a reference, use the new one instead. NOTE: THIS IS NO LONGER RECOMMENDED TO BE USED. It was originally defined separately from google.protobuf.Timestamp due to incompatibility with proto2 syntax. The incompatibility issues have since been resolved and so the Google-wide standard representation of google.protobuf.Timestamp should be preferred. In fact, google.protobuf.* protos in general are now recommended to be used in new APIs.",
      "id": "AssistantApiTimestamp",
      "properties": {
        "nanos": {
          "description": "Non-negative fractions of a second at nanosecond resolution.",
          "format": "int32",
          "type": "integer"
        },
        "seconds": {
          "description": "Seconds of UTC time since the Unix epoch.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantApiTransactionFeaturesSupport": {
      "id": "AssistantApiTransactionFeaturesSupport",
      "properties": {
        "voicePinSuppressed": {
          "description": "If true, setting this boolean means the device should not support voice PIN. For example, although the phone supports both voice and PIN pad, but we don't want users using voice. https://docs.google.com/document/d/1M8iJQX3GuxGZGeidS8Gl4KJt3LuBWAIlolPlW10DkxU/edit#heading=h.8ovvdd3i2thv",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantApiVolumeProperties": {
      "id": "AssistantApiVolumeProperties",
      "properties": {
        "defaultVolumePercentage": {
          "description": "The volume percentages for spelled out values.",
          "format": "int32",
          "type": "integer"
        },
        "highVolumePercentage": {
          "format": "int32",
          "type": "integer"
        },
        "levelStepSize": {
          "description": "The number of levels to move for a step.",
          "format": "double",
          "type": "number"
        },
        "lowVolumePercentage": {
          "format": "int32",
          "type": "integer"
        },
        "maximumVolumeLevel": {
          "description": "The max number of volume levels the client supports.",
          "format": "int32",
          "type": "integer"
        },
        "mediumVolumePercentage": {
          "format": "int32",
          "type": "integer"
        },
        "veryHighVolumePercentage": {
          "format": "int32",
          "type": "integer"
        },
        "veryLowVolumePercentage": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantDeviceTargetingDeviceTargetingError": {
      "description": "The information associated with an error while selecting the target device. Next ID: 2",
      "id": "AssistantDeviceTargetingDeviceTargetingError",
      "properties": {
        "type": {
          "enum": [
            "UNKNOWN_ERROR",
            "NO_DEVICE_IN_SAME_STRUCTURE",
            "NO_DEVICE_IN_SAME_NETWORK_OR_LOCATION",
            "NO_DEVICE_IN_SAME_STRUCTURE_OR_NETWORK_OR_LOCATION",
            "NO_DEVICE_SATISFIES_SAME_STRUCTURE_OR_UNKNOWN_IF_OWNED",
            "NO_DEVICE_SATISFIES_CAPABILITIES_REQUIREMENT",
            "NO_DEVICE_MATCHED_DEVICE_ANNOTATION",
            "MULTI_TARGET_DEVICE_NOT_SUPPORTED",
            "NO_DEVICE_AFTER_LOCAL_DEVICE_EXCLUDED",
            "UNABLE_TO_TARGET_ONLY_LOCAL_DEVICE",
            "NO_DEVICE_MATCHED_REQUIRED_TRAITS",
            "NO_DEVICE_MATCHED_REQUIRED_ATTRIBUTES",
            "NO_DEVICE_MATCHED_REQUIRED_DEVICE_TYPE",
            "NO_DEVICE_IN_SAME_OR_MENTIONED_STRUCTURE",
            "NO_DEVICE_SATISFIES_PLAYBACK_REQUIREMENT",
            "STRUCT_DISAMBIG_NOT_SUPPORTED",
            "ROOM_DISAMBIG_NOT_SUPPORTED",
            "UNRECOGNIZED_DEVICE_NAME",
            "NO_LINKED_REMOTE_DEVICES",
            "NO_LINKED_REMOTE_VIDEO_DEVICES",
            "NO_SAFE_DEVICE_WITH_SCREEN",
            "ALL_QUALIFIED_DEVICES_OFFLINE",
            "CROSS_STRUCTURE_TARGETING_DISALLOWED",
            "NO_DEVICE_MEETS_PROVIDER_REQUIREMENT",
            "MISSING_LOCAL_DEVICE_SETTING",
            "NO_DEVICE_HAS_REQUIRED_APP",
            "HYBRID_DEVICE_NOT_QUALIFIED",
            "NO_NEARBY_DEVICES"
          ],
          "enumDescriptions": [
            "",
            "Error about when there's no qualified devices in the same home graph structure as the local device.",
            "Error about when there's no qualified devices in the same network or location as the local device.",
            "Error about when there's no qualified devices in the same home graph structure or network or location as the local device.",
            "Error about when no qualified device was found that matched the following conditions: 1) Both local device and target device are in the same home graph structure. 2) The distance to target device is unknown (i.e. either local device or target device is homeless) and target device is owned by the user. 3) If local device and target device are in different structures, only allowed when the query explicitly mentioned device name.",
            "Error about when no qualified device satisfies the device capability requirement.",
            "Error of no qualified devices matched requirements from device annotation.",
            "Error of not supporting targeting multiple devices.",
            "Error of no device left after local device is excluded within inclusiveness filter.",
            "Error of unable to target only local device within inclusiveness filter.",
            "Error of no qualified devices matched the required smart home traits.",
            "Error of no qualified devices matched the required Smart Home attributes.",
            "Error of no qualified devices matched the required smart home device types.",
            "Error of no qualified devices in the mentioned structure or in the same structure as the local device.",
            "Error of no device satisfying playback requirements.",
            "Error when structure disambiguation is not supported in the config. When config is supported (both structure_disambiguation_supported and multi_target_supported are set to true), the library would return structures for disambiguation.",
            "Error when room disambiguation is not supported in the config. When config is supported (both room_disambiguation_supported and multi_target_supported are set to true), the library would return rooms for disambiguation.",
            "Error when the device mentioned in the query is not recognized. In other words, we can't find a device which matched the device mentioned in the query.",
            "Used when user requests to target on a remote device and there are no remote devices linked.",
            "Used when user requests to target on a remote video device and there are no remote video devices linked.",
            "Error when there is no safe screen device. For example, requesting screen-requiring content from Auto surface.",
            "Error when all qualified devices are offline.",
            "When user tries to target a device which is in a different structure and is not allowed. For example, if user doesn't own the structure. See go/on-multi-user-access-transitivity for more details.",
            "Used when user requests a device with certain provider but no device can satisfies provider requirement.",
            "AvailableDevice device setting of local device is missing.",
            "Required app is not installed",
            "All remote hybrid devices fail the propertries requirement specific (lock/unlock, etc) for hybrid devices (such as Tangor).",
            "No nearby hearing devices"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoAlarmCapability": {
      "description": "Capability with regard to support of alarms by the client.",
      "id": "AssistantDevicesPlatformProtoAlarmCapability",
      "properties": {
        "maxSupportedAlarms": {
          "description": "Maximum number of alarms that can be created on the client. Zero or unset indicates no maximum limit.",
          "format": "int32",
          "type": "integer"
        },
        "restrictAlarmsToNextDay": {
          "description": "Whether the client restricts alarms to ring within the next 24 hours.",
          "type": "boolean"
        },
        "supportsStopAction": {
          "description": "Whether the client supports the STOP alarm action. If this is false, stop actions will be represented by the MUTATE action, and the device may need to check alarm state to determine if there's a firing alarm that needs to be dismissed.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoArgSpec": {
      "id": "AssistantDevicesPlatformProtoArgSpec",
      "properties": {
        "intValueSpec": {
          "$ref": "AssistantDevicesPlatformProtoIntValueSpec"
        },
        "optionValueSpec": {
          "$ref": "AssistantDevicesPlatformProtoOptionValueSpec"
        },
        "type": {
          "enum": [
            "TYPE_UNSPECIFIED",
            "BOOL",
            "INTEGER",
            "OPTION"
          ],
          "enumDescriptions": [
            "A type must be specified.",
            "",
            "The arg value type is integer. The value can be any integer unless int_value_spec is provided below.",
            "The arg value is from list of options. The valid options are specified from optional_value_spec below."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoCallCallCapability": {
      "id": "AssistantDevicesPlatformProtoCallCallCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoClientReconnectCapability": {
      "id": "AssistantDevicesPlatformProtoClientReconnectCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoCloudCapability": {
      "description": "States the cloud capabilities of the device, i.e. the endpoint(s) to use for cloud execution of Actions or Registration.",
      "id": "AssistantDevicesPlatformProtoCloudCapability",
      "properties": {
        "cloudEndpoints": {
          "description": "The list of CloudEndpoints supported by this Device Model. Note that each should have a unique |name|. If any cloud endpoints are provided here, then the first one in the list will be used by default for all Cloud Execution. An Intent may override the default by providing an |execution_config|.",
          "items": {
            "$ref": "AssistantDevicesPlatformProtoCloudEndpoint"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoCloudEndpoint": {
      "description": "A cloud endpoints associates with this device, it can be used for query parsing, or cloud execution.",
      "id": "AssistantDevicesPlatformProtoCloudEndpoint",
      "properties": {
        "name": {
          "description": "The name for this cloud endpoint. It's unique per Locale. This is not an API resource name. Ex: sample-nlu-endpoint",
          "type": "string"
        },
        "scopes": {
          "description": "The list of scopes to be provided in the OAuth2 token. They must be a subset of the scopes registered in the Account Linking flow, or the request will fail. If the client itself provides the token, then this field is ignored.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "url": {
          "description": "The URL for this endpoint, it must start with https.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoDeviceActionCapability": {
      "description": "This capability represents device action needed capability. Next ID: 10",
      "id": "AssistantDevicesPlatformProtoDeviceActionCapability",
      "properties": {
        "assistantDeviceInRoomOptOut": {
          "description": "Integrate your device with Google's Smart Home solution by putting your device into Google's Home Graph, a database that stores and provides contextual data about the home and its devices. For example, Home Graph can store the concept of a living room that contains multiple types of devices, when you say \"turn on the light\" to a device, if you have light in the living room, that light will be turned on.",
          "type": "boolean"
        },
        "builtInIntentMode": {
          "description": "Specifies behavior for built-in device actions for this device model. If not specified, defaults to ENABLE_CONFIGURED_INTENTS_ONLY.",
          "enum": [
            "INTENT_MODE_UNSPECIFIED",
            "ENABLE_ALL",
            "ENABLE_ALL_AUTO_ACTIONS",
            "ENABLE_CONFIGURED_INTENTS_ONLY",
            "PUNT_FOR_UNCONFIGURED_INTENTS"
          ],
          "enumDescriptions": [
            "",
            "All intents are enabled, regardless of whether the intent is registered in the `intents` field.",
            "All Auto device actions are enabled, regardless of whether the intent is registered in the `intents` field. Only use it for Auto device type.",
            "Only the intents registered in the `intents` field will be enabled.",
            "Only the intents registered in the `intents` field will be enabled. Additionally, read an error message when the unconfigured intents are invoked."
          ],
          "type": "string"
        },
        "customIntentMode": {
          "description": "Specifies which custom device actions should be enabled for this device model. This will only affect the behavior of intents corresponding to those from the Action Package of this project. If not specified, defaults to ENABLE_ALL.",
          "enum": [
            "INTENT_MODE_UNSPECIFIED",
            "ENABLE_ALL",
            "ENABLE_ALL_AUTO_ACTIONS",
            "ENABLE_CONFIGURED_INTENTS_ONLY",
            "PUNT_FOR_UNCONFIGURED_INTENTS"
          ],
          "enumDescriptions": [
            "",
            "All intents are enabled, regardless of whether the intent is registered in the `intents` field.",
            "All Auto device actions are enabled, regardless of whether the intent is registered in the `intents` field. Only use it for Auto device type.",
            "Only the intents registered in the `intents` field will be enabled.",
            "Only the intents registered in the `intents` field will be enabled. Additionally, read an error message when the unconfigured intents are invoked."
          ],
          "type": "string"
        },
        "defaultExecutionConfig": {
          "$ref": "AssistantDevicesPlatformProtoExecutionConfig",
          "description": "Default instructions for routing of any Intent. The data here could be overridden for specific Intents if provided directly in the 'intents' field."
        },
        "inlinedActionCapability": {
          "$ref": "AssistantDevicesPlatformProtoInlinedActionCapability",
          "description": "Specifies capabilities for device actions that are inlined in the google.assistant.embedded.v1.DeviceAction message."
        },
        "intents": {
          "description": "Intent configurations. Built-in and custom intents may be configured here. Note that built-in intents will always behave with IntentMode of ENABLE_CONFIGURED_INTENTS_ONLY. The IntentMode for custom intents can be changed using the custom_intent_mode. To configure an intent, list it here with its intent name, e.g. \"MY_CUSTOM_INTENT\", \"google.assistant.car.model.capabilities.AC_TEMPERATURE\".",
          "items": {
            "$ref": "AssistantDevicesPlatformProtoIntent"
          },
          "type": "array"
        },
        "providedData": {
          "description": "Provided data which augments the device action capabilities. Some built-in intents may require additional configuration to be provided. One example could be the list of channels available for the `action.intent.SelectChannel` intent.",
          "items": {
            "$ref": "AssistantDevicesPlatformProtoProvidedData"
          },
          "type": "array"
        },
        "traits": {
          "description": "List of built-in traits such as \"action.devices.traits.OnOff\" See java/com/google/home/graph/service/config/protoconf.pi As of Nov. 2017, we also support custom traits for EAP users. We'll eventually disable custom traits once custom actions are in place.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "understandingConfig": {
          "$ref": "AssistantDevicesPlatformProtoUnderstandingConfig",
          "description": "Specifies the format how Google routes queries to 3P cloud. By default, this field is unset, all partners should get shallow NLU. This is needed *ONLY* for specific partners for strong business reasons."
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoDeviceModifySettingCapability": {
      "id": "AssistantDevicesPlatformProtoDeviceModifySettingCapability",
      "properties": {
        "clientOpProperty": {
          "$ref": "AssistantApiClientOpPropertiesDeviceModifySettingClientOpProperty"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoDeviceTakePhotoCapability": {
      "id": "AssistantDevicesPlatformProtoDeviceTakePhotoCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoExecutionConfig": {
      "description": "Specifies the routing capabilities of the Intent. It will apply only when the Intent is triggered. Next ID: 8",
      "id": "AssistantDevicesPlatformProtoExecutionConfig",
      "properties": {
        "cloudEndpointName": {
          "description": "Instructions for performing a cloud execution request for the Intent when the execution_type is set to CLOUD. If non-empty, then the device execution would be routed to the CloudEndpoint specified by this name. The Account Linking exchange may be performed to fetch the OAuth access token, and the access token will be included in the HTTP header.",
          "type": "string"
        },
        "cloudIntentTranslationDisabled": {
          "description": "If this field is set, then the Syndication cloud call will be disabled for this intent. Note this only applies if any Syndication cloud endpoint is associated with the Device Model, otherwise setting this field does nothing. By default, all Intents that are enabled and supported by the Syndication API will be routed through the Syndication cloud endpoint if it's provided.",
          "type": "boolean"
        },
        "intentCommandFormat": {
          "description": "Specifies the intent command format for this Action. For example, in order to launch an Android intent instead of receiving the device action payload on the client, then this field can be set with \"intent:/#Intent;...;my_extra={$.params.channels[0].channelCode};end\" The parameter \"{$.params.channels[0].channelCode}\" is in JSON path format, and will be replaced with the content from the original device action payload. Thus, with # JSON \"execution\": [ { \"command\": \"action.devices.commands.SelectChannel\", \"params\": { \"channels\": [{ \"channelName\": \"exampleChannel\", \"channelCode\": \"1-1\" }] } } ] as the original action result, then the final result would look like \"intent:/#Intent;...;my_extra=\\\"1-1\\\";end\" ",
          "type": "string"
        },
        "localDisabled": {
          "description": "If this field is set, then local execution capability is disabled for all matching intents.",
          "type": "boolean"
        },
        "localExecutionType": {
          "description": "Specifies how to execute this Action when it is invoked locally (from the same device.)",
          "enum": [
            "DEFAULT",
            "CLOUD"
          ],
          "enumDescriptions": [
            "Use the default mechanism (route requests directly to the device via the regular channel.)",
            "Route all execution requests to cloud."
          ],
          "type": "string"
        },
        "remoteDisabled": {
          "description": "If this field is set, then remote execution capability is disabled for all matching intents.",
          "type": "boolean"
        },
        "remoteExecutionType": {
          "description": "Specifies how to execute this Action when it is invoked remotely (from a different device.)",
          "enum": [
            "DEFAULT",
            "CLOUD"
          ],
          "enumDescriptions": [
            "Use the default mechanism (route requests directly to the device via the regular channel.)",
            "Route all execution requests to cloud."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoInlinedActionCapability": {
      "id": "AssistantDevicesPlatformProtoInlinedActionCapability",
      "properties": {
        "alarm": {
          "$ref": "AssistantDevicesPlatformProtoAlarmCapability",
          "description": "Specifies capabilities for handling on-device alarms. The presence of this field, even if empty, implies that the device supports alarms."
        },
        "responseLimits": {
          "$ref": "AssistantDevicesPlatformProtoResponseLimits",
          "description": "Specifies the size limits on responses. If message is not defined then no limits exist."
        },
        "supportSdkExecute": {
          "description": "Whether this device model package support sdk.EXECUTE client_op (a.k.a action.devices.EXECUTE intent), which will be filled into google.assistant.embedded.v1.DeviceAction.device_request_json. It is default to true (and not public), since all 3P will depends on the device_request_json. Only internal projects like Edoras will set this to false.",
          "type": "boolean"
        },
        "supportedDeviceOps": {
          "$ref": "AssistantDevicesPlatformProtoSupportedDeviceOps",
          "description": "Specifies capabilities for handling assistant.embedded.v1.DeviceOp."
        },
        "supportsMultiResponse": {
          "description": "Specifies whether server can send a series of responses for a single query. Example: Routines where multiple actions to be executed one after another.",
          "type": "boolean"
        },
        "timer": {
          "$ref": "AssistantDevicesPlatformProtoTimerCapability",
          "description": "Specifies capabilities for handling on-device timers. The presence of this field, even if empty, implies that the device supports timers."
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoIntValueSpec": {
      "id": "AssistantDevicesPlatformProtoIntValueSpec",
      "properties": {
        "maxValue": {
          "format": "int64",
          "type": "string"
        },
        "minValue": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoIntent": {
      "description": "An intent configures the behavior of a device action for this device. Next ID: 7",
      "id": "AssistantDevicesPlatformProtoIntent",
      "properties": {
        "argSpecs": {
          "additionalProperties": {
            "$ref": "AssistantDevicesPlatformProtoArgSpec"
          },
          "description": "List of arguments associated this intent. Each of which depends a template for the expected argument.",
          "type": "object"
        },
        "executionConfig": {
          "$ref": "AssistantDevicesPlatformProtoExecutionConfig",
          "description": "Instructions for the routing of this Intent."
        },
        "name": {
          "description": "The name of the intent.",
          "type": "string"
        },
        "providedDataNames": {
          "description": "List of provided data names used by this intent. Note that some built-in intents will not function properly without provided data, such as `action.intent.SwitchChannel` or `action.intent.AppSelector`.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "securityConfig": {
          "$ref": "AssistantDevicesPlatformProtoSecurityConfig",
          "description": "Security configuration for this Intent."
        },
        "triggerConditions": {
          "description": "The conditions which must be met by the device before executing this Intent. More than one can be provided, in which case the conditions operate with the \"AND\" operator, i.e. the first condition which is failed will be used to restrict the execution of this Intent.",
          "items": {
            "$ref": "AssistantDevicesPlatformProtoTriggerCondition"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoInternalCapability": {
      "description": "Capabilities that may only be set internally. Only internal callers (i.e. Googlers or Google owned projects) will be able to set these, thanks to go/assistant-device-model-package-ownership.",
      "id": "AssistantDevicesPlatformProtoInternalCapability",
      "properties": {
        "allowedAssistantSdkAuthProjectIds": {
          "description": "When using the Assistant SDK (Embedded Assistant API), the project id used to authenticate the gRPC request is checked and must match against the project id of the Device Model. We will additionally allow the project ids listed in the device model here to be let through. See https://docs.google.com/document/d/1InAczpQJs6LCH1l--2yy67JM9hsBJbiL57fusnL3A8A",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "appCapabilitiesFromDeviceInstallApps": {
          "description": "Load the assistant.api.AppCapabilities from DEVICE_INSTALLED_APP footprint corpus. See go/edoras-geller.",
          "type": "boolean"
        },
        "cloudDeviceActionEndpoint": {
          "$ref": "AssistantDevicesPlatformProtoCloudEndpoint",
          "description": "Uses this endpoint for device action fulfillment when there's no endpoint in syndication_metadata. 1p surfaces/devices such as telephone can enable this for its cloud action fulfillment without enabling the whole syndication experience."
        },
        "deviceActionsEligibleForHighConfidence": {
          "description": "Signals that the model will have updated ranking behavior as described in https://docs.google.com/document/d/1SN_AgadRr_cdIrFe-qgRbIX2J1sOE7lcRXAvM1GUPoU.",
          "type": "boolean"
        },
        "forceSignIn": {
          "description": "Make Google sign-in mandatory for using Google Assistant on the device. (This bit is initially added for Samsung TV.)",
          "type": "boolean"
        },
        "forceThirdPartyDeviceIdForDeviceLookup": {
          "description": "When looking up device (for example for disclosure consent check), then always use the third party device id for lookup instead of any other device id which would normally have higher precedence, such as cast_device_id.",
          "type": "boolean"
        },
        "forceTransactionsAuthentication": {
          "description": "Adds \"transactions.AUTHENTICATION\" for car automation probers. Since the probers run as Assistant SDK requests, voice match always fails for car automation requests, so we add this client op as a hack to allow probers to appear as personal devices and bypass voice match. See b/137221645.",
          "type": "boolean"
        },
        "hasCustomSearchResultsRendering": {
          "description": "Signals that this device can \"render\" raw search results even with no screen (e.g., using a text reader). If this is true, fallback search results can be returned as a custom device action in a SearchResults message. http://google3/assistant/embedded/proto_translation/utils/proto/search_results.proto",
          "type": "boolean"
        },
        "overrideProjectIdForDeviceLookup": {
          "description": "When looking up device (for example for disclosure consent check), use this project id as part of the primary key for the device lookup (i.e. instead of the device_config.agent_id.) The precedence is as follows: 1) this field, if set for the device's device model 2) device_config.agent_id 3) device_model.project_id",
          "type": "string"
        },
        "stadiaAssistantConfig": {
          "$ref": "AssistantDevicesPlatformProtoInternalCapabilityStadiaAssistantConfig"
        },
        "telephoneAttribution": {
          "description": "Telephone server is able to send attribution to user feature phone. See go/telephone-attribution.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoInternalCapabilityStadiaAssistantConfig": {
      "description": "The StadiaAssistantConfig. This field should only be set if the device model is a Stadia.",
      "id": "AssistantDevicesPlatformProtoInternalCapabilityStadiaAssistantConfig",
      "properties": {
        "stadiaPlatform": {
          "enum": [
            "UNSPECIFIED",
            "CHROMECAST",
            "WEB_BROWSER"
          ],
          "enumDescriptions": [
            "Platform unspecified.",
            "Platform is Chromecast.",
            "Platform is web browser."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoMediaNextCapability": {
      "id": "AssistantDevicesPlatformProtoMediaNextCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoMediaPauseCapability": {
      "id": "AssistantDevicesPlatformProtoMediaPauseCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoMediaPlayMediaCapability": {
      "id": "AssistantDevicesPlatformProtoMediaPlayMediaCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoMediaPreviousCapability": {
      "id": "AssistantDevicesPlatformProtoMediaPreviousCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoMediaResumeCapability": {
      "id": "AssistantDevicesPlatformProtoMediaResumeCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoMediaStopCapability": {
      "id": "AssistantDevicesPlatformProtoMediaStopCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoOptionValueSpec": {
      "id": "AssistantDevicesPlatformProtoOptionValueSpec",
      "properties": {
        "values": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoProvidedData": {
      "description": "Provided data which augments the device action capabilities. Some built-in intents may require additional configuration to be provided. One example could be the list of channels available for the `action.intent.SelectChannel` intent.",
      "id": "AssistantDevicesPlatformProtoProvidedData",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoProviderOpenCapability": {
      "id": "AssistantDevicesPlatformProtoProviderOpenCapability",
      "properties": {
        "clientOpProperty": {
          "$ref": "AssistantApiClientOpPropertiesProviderOpenClientOpProperty"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoResponseLimits": {
      "description": "Specifies the size limits on responses receivable by the client.",
      "id": "AssistantDevicesPlatformProtoResponseLimits",
      "properties": {
        "maxAssistResponseSizeBytes": {
          "description": "Max size in bytes of the total serialized AssistResponse receivable by the client. If response exceeds this max, response may be modified by the server.",
          "format": "int32",
          "type": "integer"
        },
        "maxDisplayLinesBytes": {
          "description": "Maximum size in bytes (not characters) of text the display can handle (which may be different from how much the display can show at a time due to scrolling).",
          "format": "int32",
          "type": "integer"
        },
        "maxSuggestionChipBytes": {
          "description": "Maximum size in bytes (not characters) for each suggestion chip.",
          "format": "int32",
          "type": "integer"
        },
        "maxSuggestionChips": {
          "description": "Maximum number of suggestion chips the device can handle to display.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoSecurityConfig": {
      "description": "Encapsulates security configuration for a single intent of a device model.",
      "id": "AssistantDevicesPlatformProtoSecurityConfig",
      "properties": {
        "authMechanismForRemoteRequests": {
          "description": "Specifies auth mechanism to be used upon remote request for device action.",
          "enum": [
            "NONE",
            "ENABLED",
            "FINGERPRINT_OR_PASSWORD",
            "PIN"
          ],
          "enumDescriptions": [
            "Indicates that auth is not required.",
            "Indicates that auth is required. Auth mechanism used is determined automatically at query time, based on various factors such as device type, user settings, etc.",
            "Use fingerprint, with fallback to Google account password if fingerprint capabilities are not available on personal device. Note: explicit configuration of specific auth mechanism is being deprecated.",
            "Prompt for pin, sent to cloud for validation. Note: explicit configuration of specific auth mechanism is being deprecated."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoSendChatMessageCapability": {
      "id": "AssistantDevicesPlatformProtoSendChatMessageCapability",
      "properties": {},
      "type": "object"
    },
    "AssistantDevicesPlatformProtoSupportedDeviceOps": {
      "description": "This message will specify supports for fields in |assistant.embedded.v1.DeviceOp|, for a device model package. See go/easi-client-op2 for more info.",
      "id": "AssistantDevicesPlatformProtoSupportedDeviceOps",
      "properties": {
        "callCall": {
          "$ref": "AssistantDevicesPlatformProtoCallCallCapability",
          "description": "|call_call| specifies the support for the call.CALL clientop, and the corresponding call_call field in assistant.embedded.v1.DeviceOp."
        },
        "clientReconnect": {
          "$ref": "AssistantDevicesPlatformProtoClientReconnectCapability",
          "description": "|client_reconnect| indicates support for client.RECONNECT using assistant.embedded.v1.DeviceOp. There is an alternative API/capability for client.RECONNECT specified in RoutineCapability.supports_reconnect. Client should choose between this and RoutineCapability but not both."
        },
        "deviceModifySetting": {
          "$ref": "AssistantDevicesPlatformProtoDeviceModifySettingCapability",
          "description": "|device_modify_setting| specifies the support for device.MODIFY_SETTING client_op, and the corresponding device_modify_setting field in assistant.embedded.v1.DeviceOp."
        },
        "deviceTakePhoto": {
          "$ref": "AssistantDevicesPlatformProtoDeviceTakePhotoCapability",
          "description": "[device_take_photo] specifies the support for the device.TAKE_PHOTO clientop, and the corresponding device_take_photo field in assistant.embedded.v1.DeviceOp."
        },
        "mediaNext": {
          "$ref": "AssistantDevicesPlatformProtoMediaNextCapability"
        },
        "mediaPause": {
          "$ref": "AssistantDevicesPlatformProtoMediaPauseCapability"
        },
        "mediaPlayMedia": {
          "$ref": "AssistantDevicesPlatformProtoMediaPlayMediaCapability"
        },
        "mediaPrevious": {
          "$ref": "AssistantDevicesPlatformProtoMediaPreviousCapability"
        },
        "mediaResume": {
          "$ref": "AssistantDevicesPlatformProtoMediaResumeCapability"
        },
        "mediaStop": {
          "$ref": "AssistantDevicesPlatformProtoMediaStopCapability"
        },
        "providerOpen": {
          "$ref": "AssistantDevicesPlatformProtoProviderOpenCapability",
          "description": "|provider_open| specifies the support for provider.OPEN client_op, and the corresponding provider_open field in assistant.embedded.v1.DeviceOp."
        },
        "sendChatMessage": {
          "$ref": "AssistantDevicesPlatformProtoSendChatMessageCapability",
          "description": "|send_chat_message| specifies the support for the chat_message.SEND clientop, and the corresponding send_chat_message field in assistant.embedded.v1.DeviceOp."
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoTimerCapability": {
      "description": "Capability with regard to support of timers by the client.",
      "id": "AssistantDevicesPlatformProtoTimerCapability",
      "properties": {
        "maxSupportedExtendedTimerDuration": {
          "$ref": "AssistantApiDuration",
          "description": "Maximum extended timer duration supported by the client. The extended timer duration is the total start-to-finish duration after an AddTimeToTimer operation. E.g. if a user sets a timer for 30 minutes, and later adds 10 minutes, the extended duration is 40 minutes. Zero or unset indicates no maximum limit."
        },
        "maxSupportedTimerDuration": {
          "$ref": "AssistantApiDuration",
          "description": "Maximum timer duration supported by the client. Zero or unset indicates no maximum limit."
        },
        "maxSupportedTimers": {
          "description": "Maximum number of timers that can be created on the client. Zero or unset indicates no maximum limit.",
          "format": "int32",
          "type": "integer"
        },
        "supportsMutateAction": {
          "description": "Whether the client supports the MUTATE timer action. If this is false, mutate operations may be handled by sending a pair of REMOVE and CREATE timer actions to replace the existing timer instead of mutating it.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoTriggerCondition": {
      "description": "A TriggerCondition is described as a set of states which must be met by the device. It also includes instructions to the Assistant on what kind of response to execute when the condition is not met.",
      "id": "AssistantDevicesPlatformProtoTriggerCondition",
      "properties": {
        "requiredStateValues": {
          "additionalProperties": {
            "$ref": "AssistantDevicesPlatformProtoArgSpec"
          },
          "description": "The map of state keys along with their values which must be returned by the device, for example to start the dishwasher you may require states: {\"door\": \"CLOSED\", \"detergent_status\": \"READY\"}.",
          "type": "object"
        },
        "simpleTts": {
          "description": "A simple TTS to play.",
          "type": "string"
        },
        "status": {
          "description": "Refers to a defined ConditionalResult keyed by its status. It could be a built-in or custom ConditionalResult for this Intent. Note: the states provided by the device MUST contain all of the states required by the ConditionalResult.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantDevicesPlatformProtoUnderstandingConfig": {
      "description": "Specifies the NLU level that Google performs, which determines the request format sent to the 3P cloud.",
      "id": "AssistantDevicesPlatformProtoUnderstandingConfig",
      "properties": {
        "nluLevel": {
          "description": "Specifies the NLU level for the intent.",
          "enum": [
            "DEFAULT_SHALLOW_NLU",
            "NO_NLU",
            "DEEP_NLU"
          ],
          "enumDescriptions": [
            "Default value: Shallow NLU, the cloud request contains a structured intent including the command (e.g. \"action.devices.commands.SelectChannel\"), the unparsed description (e.g. \"Tom Cruise action movies\"), the target device and the target application.",
            "No NLU, the cloud request contains the transcribed query (raw query or rewritten query based on previous conversation).",
            "Deep NLU, the cloud request specifies a structured description of the media the user wants to act upon. E.g.: for query \"Play an action movie with Tom Cruise\", the structured description would be: \"parsedMediaDescription\": { \"mediaType\": \"MOVIE\", \"genre\": { \"name\": \"action\", \"externalId\": { \"tmsId\": \"tmsIdForActionGenre\" }, }, \"actor\": { \"name\": \"Tom Cruise\", \"externalId\": { \"tmsId\": \"tmsRootIdForTomCruise\", }, }, },"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerAssistantInteractionFeatures": {
      "id": "AssistantGroundingRankerAssistantInteractionFeatures",
      "properties": {
        "timeDecayed14dHalfLife": {
          "format": "float",
          "type": "number"
        },
        "timeDecayed1dHalfLife": {
          "description": "Frequency features.",
          "format": "float",
          "type": "number"
        },
        "timeDecayed7dHalfLife": {
          "format": "float",
          "type": "number"
        },
        "timeDecayedAccepted14dHalfLife": {
          "format": "float",
          "type": "number"
        },
        "timeDecayedAuis14dHalfLife": {
          "format": "float",
          "type": "number"
        },
        "timeDecayedCanceled14dHalfLife": {
          "format": "float",
          "type": "number"
        },
        "timeDecayedDeclined14dHalfLife": {
          "format": "float",
          "type": "number"
        },
        "timeSinceLastButOneCanceledActionSecs": {
          "format": "float",
          "type": "number"
        },
        "timeSinceLastButOneCompletedActionSecs": {
          "format": "float",
          "type": "number"
        },
        "timeSinceLastButTwoCanceledActionSecs": {
          "format": "float",
          "type": "number"
        },
        "timeSinceLastButTwoCompletedActionSecs": {
          "format": "float",
          "type": "number"
        },
        "timeSinceLastCanceledActionSecs": {
          "format": "float",
          "type": "number"
        },
        "timeSinceLastCompletedActionSecs": {
          "description": "Recency features.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerContactGroundingProviderFeatures": {
      "description": "Features to be passed from Contact GP to HGR. Next ID: 13",
      "id": "AssistantGroundingRankerContactGroundingProviderFeatures",
      "properties": {
        "conceptId": {
          "description": "Concept id for relationships in English, e.g. \"Mother\" for all non-English locales. It's only populated for source = RELATIONSHIP.",
          "type": "string"
        },
        "contactSource": {
          "enum": [
            "FOCUS_CONTACT",
            "DEVICE_CONTACT",
            "GMAIL_INFERENCE",
            "S3_DECORATOR",
            "RELATIONSHIP",
            "VANITY",
            "SIGNED_OUT_DEVICE",
            "SHARED_CONTACT",
            "FAMILY_MEMBER",
            "SHARED_DEVICE_USER",
            "ON_DEVICE_CONTACT_LOOKUP"
          ],
          "enumDescriptions": [
            "Contacts from Focus",
            "Contacts from device, see go/device-content",
            "Contacts inferred from Gmail",
            "Contacts from S3 decorator",
            "Whitelisted relationships no matter if user has such contact, see go/sls-personal_relationship_names_and_aliases.",
            "Vanity nicknames or user's own profile name.",
            "Signed out device contact names",
            "Contacts shared from other users. See go/multi-user-shared-contact.",
            "People in the user's family group in http://families.google.com who are not contacts.",
            "People who share a device with the user who are not contacts.",
            "Contacts from on device lookup during contact fulfillment."
          ],
          "type": "string"
        },
        "isRelationshipFromAnnotation": {
          "description": "Whether the query is a relationship query based on the annotation source.",
          "type": "boolean"
        },
        "isRelationshipFromSource": {
          "description": "Whether the contact has relationship in the contact metadata.",
          "type": "boolean"
        },
        "isSingleCandidate": {
          "description": "Whether only populates a single candidate.",
          "type": "boolean"
        },
        "isStarred": {
          "description": "Whether the contact is starred contact.",
          "type": "boolean"
        },
        "matchedNameType": {
          "enum": [
            "UNSPECIFIED",
            "GIVEN_NAME",
            "FAMILY_NAME",
            "FULL_NAME",
            "NICKNAME",
            "OTHER",
            "INITIAL_WITH_FAMILY_NAME",
            "EMAIL_USERNAME",
            "VANITY_NICKNAME",
            "GIVEN_NAME_ALIAS",
            "FULL_NAME_ALIAS",
            "HOMOPHONE_GIVEN_NAME",
            "HOMOPHONE_FAMILY_NAME",
            "HOMOPHONE_FULL_NAME",
            "HOMOPHONE_NICKNAME",
            "GIVEN_MIDDLE_NAME",
            "GIVEN_NAME_WITH_FAMILY_NAME_INITIAL",
            "EMAIL_OF_FAMILY_MEMBER"
          ],
          "enumDescriptions": [
            "",
            "Contact's given name, or first word in name, or last word if query is in CJK.",
            "Contact's family name, or last word in name, or first word if query is in CJK.",
            "Contact's display name, or given+family, or family+given if query is in CJK. Contact's middle name is optional.",
            "Query span matches contact's nickname.",
            "Not used yet.",
            "Either or both of first/middle initials along with family name.",
            "Email username, controlled by FocusNameParams.annotate_email_username.",
            "Vanity nicknames like \"myself\", data is at //quality/qrewrite/servlets/internal/focus_name/data/vanity_nickname.txt",
            "Contact's given name is a common name alias of query span, e.g. query [Bob] may match contact with given name \"Robert\".",
            "Contact's given name is a common name alias of first word in query span, while remaining parts fully matched.",
            "Homophone name match of given name, or last word. Only for CJK query.",
            "Homophone name match of family name, or first word. Only for CJK query.",
            "Homophone name match of full name, or family+given. Only for CJK query.",
            "Homophone name match of nickname. Only for CJK query.",
            "Contact's given name + middle name. Only for contacts with 3 words.",
            "Contact's given name along with last name initial. Only support non-CJKT contact name.",
            "This type indicates we find a match of the user's family member - as defined by families.google.com - by matching the email full address. Controlled by FocusNameParams.annotate_email_full_address."
          ],
          "type": "string"
        },
        "numAlternateNameFromFuzzyContactMatch": {
          "description": "Number of alternate contact names from fuzzy contact match. (Not suggest using it since it can change due to retrieval iteration)",
          "format": "float",
          "type": "number"
        },
        "numAlternateNamesFromS3": {
          "description": "Number of alternate contact names from S3_HYPOTHESES. (Not suggest using it since it can change due to retrieval iteration)",
          "format": "float",
          "type": "number"
        },
        "numAlternativeNamesFromInterpretation": {
          "description": "Number of alternate contact names from interpretation. (Not suggest using it since it can change due to retrieval iteration)",
          "format": "float",
          "type": "number"
        },
        "numCandidates": {
          "description": "Number of contacts populated by the contact Grounding Provider. (Not suggest using it since it can change due to retrieval iteration)",
          "format": "float",
          "type": "number"
        },
        "recognitionAlternateSource": {
          "enum": [
            "NONE",
            "S3_HYPOTHESES",
            "GENIE_QUERY_ALTERNATIVES",
            "NAME_CORRECTION_LOG",
            "FUZZY_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH_DARK_LAUNCH"
          ],
          "enumDescriptions": [
            "",
            "Alternate name from S3 recognition topN hypothesis.",
            "Alternate name from Genie query alternatives.",
            "Alternate name from contact correction history.",
            "Fuzzy match with user's contacts.",
            "Neural match. See go/phonetic-contact-match.",
            "The dark launch for a neural match. We found a match, but we ignore it for serving and just log it."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerDeviceContactAffinityFeatures": {
      "description": "Device contact affinity from android call logs.",
      "id": "AssistantGroundingRankerDeviceContactAffinityFeatures",
      "properties": {
        "aggregateAffinity": {
          "format": "float",
          "type": "number"
        },
        "callAffinity": {
          "format": "float",
          "type": "number"
        },
        "messageAffinity": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerGroundingProviderFeatures": {
      "description": "Next ID: 4",
      "id": "AssistantGroundingRankerGroundingProviderFeatures",
      "properties": {
        "contactGroundingProviderFeatures": {
          "$ref": "AssistantGroundingRankerContactGroundingProviderFeatures"
        },
        "mediaGroundingProviderFeatures": {
          "$ref": "AssistantGroundingRankerMediaGroundingProviderFeatures"
        },
        "providerGroundingProviderFeatures": {
          "$ref": "AssistantGroundingRankerProviderGroundingProviderFeatures"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerLaaFeatures": {
      "id": "AssistantGroundingRankerLaaFeatures",
      "properties": {
        "bindingSet": {
          "$ref": "AssistantGroundingRankerLaaFeaturesBindingSet"
        },
        "communicationEndpoint": {
          "$ref": "AssistantGroundingRankerLaaFeaturesCommunicationEndpoint"
        },
        "contact": {
          "$ref": "AssistantGroundingRankerLaaFeaturesContact"
        },
        "provider": {
          "$ref": "AssistantGroundingRankerLaaFeaturesProvider"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerLaaFeaturesBindingSet": {
      "id": "AssistantGroundingRankerLaaFeaturesBindingSet",
      "properties": {
        "assistantInteractionFeatures": {
          "$ref": "AssistantGroundingRankerAssistantInteractionFeatures"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerLaaFeaturesCommunicationEndpoint": {
      "id": "AssistantGroundingRankerLaaFeaturesCommunicationEndpoint",
      "properties": {
        "assistantInteractionFeatures": {
          "$ref": "AssistantGroundingRankerAssistantInteractionFeatures"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerLaaFeaturesContact": {
      "id": "AssistantGroundingRankerLaaFeaturesContact",
      "properties": {
        "assistantInteractionFeatures": {
          "$ref": "AssistantGroundingRankerAssistantInteractionFeatures"
        },
        "deviceContactAffinityFeatures": {
          "$ref": "AssistantGroundingRankerDeviceContactAffinityFeatures"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerLaaFeaturesProvider": {
      "id": "AssistantGroundingRankerLaaFeaturesProvider",
      "properties": {
        "assistantInteractionFeatures": {
          "$ref": "AssistantGroundingRankerAssistantInteractionFeatures"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerMediaGroundingProviderFeatures": {
      "description": "Features to be passed from Media GP to HGR. Next ID: 6",
      "id": "AssistantGroundingRankerMediaGroundingProviderFeatures",
      "properties": {
        "isCastVideo": {
          "description": "Whether the candidate is YouTube CAST_VIDEO candidate. CAST_VIDEO is a deeplink platform. This signal will be used to promote YouTube Music screenful candidates with CAST_VIDEO platform for free users because free users cannot get exact entities in screenless response and can get exact entities with ads in screenful response.",
          "type": "boolean"
        },
        "isSeedRadio": {
          "description": "True if the media deeplink has tag SEED_RADIO.",
          "type": "boolean"
        },
        "isSeedRadioRequest": {
          "description": "True if the user requests seed radio.",
          "type": "boolean"
        },
        "mscRate": {
          "description": "MSC(Media Short Click) rate. MSC rate = total number of MSC events / total number of MSC candidates The event is considered as MSC candidate if the event is a media seeking query(excluding follow-ons) and the media result is successfully fulfilled. The event is MSC event if any of the following is in the following queries within 30 secs: FOLLOWED_BY_DUPLICATE FOLLOWED_BY_ADD_OR_DELETE_MANUAL_REFINEMENT FOLLOWED_BY_SAME_VERTICAL (MEDIA) FOLLOWED_BY_STOP More details: go/media-ranking, go/billboard-navboost, go/magma-music-actions-efrac",
          "format": "float",
          "type": "number"
        },
        "scubedPSaiMusic": {
          "description": "Scubed predicted SAI value (pSAI) for music populated by a regression model that incorporates a BERT model signal as well as other Scubed signals.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantGroundingRankerProviderGroundingProviderFeatures": {
      "description": "Features to be extracted from Provider GP for ranking in HGR. Next ID: 2",
      "id": "AssistantGroundingRankerProviderGroundingProviderFeatures",
      "properties": {
        "pslScore": {
          "description": "Provider quality score in the range [0,1] that can be used for ranking providers. Incorporates both policy rules and quality considerations.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantLogsAllMediaStreamLog": {
      "id": "AssistantLogsAllMediaStreamLog",
      "properties": {
        "streams": {
          "description": "All active media streams while the user issues the query.",
          "items": {
            "$ref": "AssistantLogsMediaStreamLog"
          },
          "type": "array"
        },
        "targetStream": {
          "$ref": "AssistantLogsMediaStreamLog",
          "description": "The stream selected by stream transfer logic to be transferred to another device. It will be empty for other features. Target_stream is different from target_device since target_stream could have multiple devices."
        }
      },
      "type": "object"
    },
    "AssistantLogsAmbiguousTargetDeviceLog": {
      "description": "This message logs details on ambiguous device targeting logic. 1. It first takes a list of ambiguous devices 2. Then applies two filters: structure filter and playability filter. 3. If more than one device remains, it tiggers DeviceSelectionDialog to let the user pick one device.",
      "id": "AssistantLogsAmbiguousTargetDeviceLog",
      "properties": {
        "ambiguousDeviceIndex": {
          "description": "Device index of the initial ambiguous devices. The device index in this message is consistent with the device index in DeviceInfoLog. It would be used to track more detailed information of a device if needed.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "devicesAfterPromoters": {
          "description": "DeviceInfo for devices after the filters and promoters. - When device targeting is only configured for single target, these are ambiguous devices that would have been the output of Lumos. Downstream may perform extra check before disambiguation dialog. For example, Media Initiation checks playability for devices. The output here is before the check. - When configured for multi-target, these are just the target devices. For privacy consideration, we may only log device id field inside.",
          "items": {
            "$ref": "AssistantLogsDeviceInfoLog"
          },
          "type": "array"
        },
        "finalTargetDevice": {
          "$ref": "AssistantLogsDeviceInfoLog",
          "description": "the final targeted device selected by playability filter or DeviceSelectionDialog"
        },
        "playabilityFilteredDevicesIndex": {
          "description": "Device index of the devices after playability filter",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "puntInfoLog": {
          "description": "When there is no qualified devices after playability check, it would populate punt_info below. If all devices are filtered out for the same reason, there would only be one item. Otherwise, there will be multiple items.",
          "items": {
            "$ref": "AssistantLogsAmbiguousTargetDeviceLogPuntInfoLog"
          },
          "type": "array"
        },
        "structureFilteredDeviceIndex": {
          "description": "Device index of the devices after structure filter",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsAmbiguousTargetDeviceLogPuntInfoLog": {
      "description": "PuntInfoLog is used to log why devices get filtered out during media content playability check. It contains media excuse, provider mid and also index of devices filtered by them.",
      "id": "AssistantLogsAmbiguousTargetDeviceLogPuntInfoLog",
      "properties": {
        "deviceIndex": {
          "description": "Index of devices that have the same punt info during playability check, i.e. same media_excuse and provider_mid.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "mediaExcuse": {
          "description": "Excuse for media action triggering. See: assistant/verticals/media/proto/media_excuse.proto.",
          "format": "int32",
          "type": "integer"
        },
        "providerMid": {
          "description": "Provider id that the excuse belongs to. This is the KG MID of the provider, e.g., \"/m/09jcvs\" for Youtube.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationDeviceContactInfoLog": {
      "description": "This is the log version of apps.people.oz.external.mergedpeopleapi.DeviceContactInfo Next ID: 2",
      "id": "AssistantLogsCommunicationDeviceContactInfoLog",
      "properties": {
        "rawContactInfo": {
          "description": "This list provides account information from the raw contact which is the source of this field.",
          "items": {
            "$ref": "AssistantLogsCommunicationRawDeviceContactInfoLog"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationFuzzyNgramMatchLog": {
      "description": "This is the log version of fuzzy ngram match results that's used for generating the best fuzzy match. Next ID: 3",
      "id": "AssistantLogsCommunicationFuzzyNgramMatchLog",
      "properties": {
        "relativeCost": {
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "NONE",
            "EDIT_DISTANCE",
            "GENIE_PLEXICON_DISTANCE",
            "GENIE_ALTERNATIVE_RECOGNITION",
            "JAPANESE_NAME_TRANSLITERATOR"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationGoogleAccountProvenance": {
      "description": "From google3/quality/qrewrite/proto/account_provenance.proto;l=14 We need to copy this as the above proto has Enum field which is not compatible between proto2 and proto3. go/proto2-versus-proto3#enums",
      "id": "AssistantLogsCommunicationGoogleAccountProvenance",
      "properties": {
        "email": {
          "type": "string"
        },
        "gaiaId": {
          "format": "int64",
          "type": "string"
        },
        "isDasherAccount": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationPersonMetadataLog": {
      "description": "This is the log version of apps.people.oz.external.mergedpeopleapi.PersonMetadata Next ID: 2",
      "id": "AssistantLogsCommunicationPersonMetadataLog",
      "properties": {
        "deviceContactInfo": {
          "items": {
            "$ref": "AssistantLogsCommunicationDeviceContactInfoLog"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationPersonalContactDataLog": {
      "description": "Contact meta data. Next ID: 30",
      "id": "AssistantLogsCommunicationPersonalContactDataLog",
      "properties": {
        "accountProvenance": {
          "$ref": "AssistantLogsCommunicationGoogleAccountProvenance",
          "description": "Google AccountProvenance of the contact."
        },
        "commonNameAliasConfidence": {
          "description": "Populated if matched_name_type is GIVEN_NAME_ALIAS or FULL_NAME_ALIAS.",
          "format": "float",
          "type": "number"
        },
        "conceptId": {
          "description": "Concept id for relationships in English, e.g. \"Mother\" for all non-English locales. It's only populated for source = RELATIONSHIP.",
          "type": "string"
        },
        "deviceContactAttributes": {
          "description": "Integer value corresponding to DeviceContactExtraMetadata.Attribute enum. http://google3/social/graph/wire/proto/merged_person.proto?l=933&rcl=320308954",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "emailIdCount": {
          "description": "# emails stored for the contact.",
          "format": "int32",
          "type": "integer"
        },
        "fuzzyNgramMatch": {
          "description": "Populate only if ContactRecognitionAlternate.Source is 'FUZZY_CONTACT_MATCH'.",
          "items": {
            "$ref": "AssistantLogsCommunicationFuzzyNgramMatchLog"
          },
          "type": "array"
        },
        "gaiaId": {
          "description": "Contact owner's gaia id from cs/symbol::symbol:quality_qrewrite.PersonalContactData.shared_contact_owner_gaia_id. Only populated for is_shared = true and non sign-out mode and user is not the owner of the contact(shared contact from other user).",
          "format": "int64",
          "type": "string"
        },
        "isContactFromSecondaryAccount": {
          "description": "Boolean value indicating whether selected contact is from different account than the logged in account.",
          "type": "boolean"
        },
        "isShared": {
          "description": "If this is a shared contact. This is true in 2 cases: - User is calling their own contacts that have been marked as shared. - User is calling shared contacts from some other user's contact list.",
          "type": "boolean"
        },
        "isTransliteratedMatch": {
          "description": "Indicate the contact matches the transliterated query.",
          "type": "boolean"
        },
        "isVanityContact": {
          "description": "True if the contact is a vanity contact(has email = user's email address).",
          "type": "boolean"
        },
        "isVisibleToGuestsRelationship": {
          "description": "If the lookup was done using relationship which is visible to guests. This value will only be set if lookup was done using relationship. E.g. user has a guest relationship (doctor) -> (John) And user says \"call doctor\", then this value will be true.",
          "type": "boolean"
        },
        "matchedNameType": {
          "description": "The matched name type of a contact candidate.",
          "enum": [
            "UNSPECIFIED",
            "GIVEN_NAME",
            "FAMILY_NAME",
            "FULL_NAME",
            "NICKNAME",
            "OTHER",
            "INITIAL_WITH_FAMILY_NAME",
            "EMAIL_USERNAME",
            "VANITY_NICKNAME",
            "GIVEN_NAME_ALIAS",
            "FULL_NAME_ALIAS",
            "HOMOPHONE_GIVEN_NAME",
            "HOMOPHONE_FAMILY_NAME",
            "HOMOPHONE_FULL_NAME",
            "HOMOPHONE_NICKNAME",
            "GIVEN_MIDDLE_NAME",
            "GIVEN_NAME_WITH_FAMILY_NAME_INITIAL",
            "EMAIL_OF_FAMILY_MEMBER"
          ],
          "enumDescriptions": [
            "",
            "Contact's given name, or first word in name, or last word if query is in CJK.",
            "Contact's family name, or last word in name, or first word if query is in CJK.",
            "Contact's display name, or given+family, or family+given if query is in CJK. Contact's middle name is optional.",
            "Query span matches contact's nickname.",
            "Not used yet.",
            "Either or both of first/middle initials along with family name.",
            "Email username, controlled by FocusNameParams.annotate_email_username.",
            "Vanity nicknames like \"myself\", data is at //quality/qrewrite/servlets/internal/focus_name/data/vanity_nickname.txt",
            "Contact's given name is a common name alias of query span, e.g. query [Bob] may match contact with given name \"Robert\".",
            "Contact's given name is a common name alias of first word in query span, while remaining parts fully matched.",
            "Homophone name match of given name, or last word. Only for CJK query.",
            "Homophone name match of family name, or first word. Only for CJK query.",
            "Homophone name match of full name, or family+given. Only for CJK query.",
            "Homophone name match of nickname. Only for CJK query.",
            "Contact's given name + middle name. Only for contacts with 3 words.",
            "Contact's given name along with last name initial. Only support non-CJKT contact name.",
            "This type indicates we find a match of the user's family member - as defined by families.google.com - by matching the email full address. Controlled by FocusNameParams.annotate_email_full_address."
          ],
          "type": "string"
        },
        "matchedRecognitionAlternateName": {
          "description": "Alternate recognition term which was used to match this contact.",
          "type": "string"
        },
        "matchedStarlightLookupName": {
          "description": "Ngram matched by starlight lookup for fuzzy matching in fulfillment. We need this to analyze how many contacts are returned by starlight lookup that is not matched by fuzzy matching. For example, \"Komal Dear\" is matched to \"Komal Dr\" by fuzzy match. When doing starlight lookup, \"Komal\" and \"Dr\" will be looked up separately. So \"Dr xxx\" will also be returned. We want to see how often this happens.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "AssistantLogsCommunicationPersonMetadataLog",
          "description": "PersonMetadata of the selected contact."
        },
        "nameMatchedContactIndex": {
          "description": "The indices of the contact in |candidate_contact| whose name matches the |selected_contact_data|. |candidate_contact|: http://google3/logs/proto/assistant/contact.proto?l=111&rcl=306283376 |selected_contact_data|: http://google3/logs/proto/assistant/contact.proto?l=108&rcl=306283376",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "originalQueryName": {
          "description": "The original name in the query as transcribed by ASR.",
          "type": "string"
        },
        "phone": {
          "description": "Information regarding the phone endpoints of the selected contact. Currently it is only logged for selected candidate.",
          "items": {
            "$ref": "AssistantLogsCommunicationPhoneLog"
          },
          "type": "array"
        },
        "phoneNumberCount": {
          "description": "# phone_numbers stored for the contact.",
          "format": "int32",
          "type": "integer"
        },
        "pkgReferenceType": {
          "description": "Encodes if pkg_person was resolved via a name or relationship reference.",
          "enum": [
            "UNKNOWN_PKG_REFERENCE_TYPE",
            "PKG_NAME_REFERENCE",
            "PKG_RELATIONSHIP_REFERENCE"
          ],
          "enumDescriptions": [
            "",
            "Ann [Charlie]",
            "my family dad my sister's kids"
          ],
          "type": "string"
        },
        "recognitionAlternateScore": {
          "description": "Populate only if ContactRecognitionAlternate.Source is not NONE.",
          "format": "float",
          "type": "number"
        },
        "recognitionAlternateSource": {
          "description": "Recognition alternative source type. If not none, then it indicates the personal contact data is alternative and how the alternative is fulfilled.",
          "enum": [
            "NONE",
            "S3_HYPOTHESES",
            "GENIE_QUERY_ALTERNATIVES",
            "NAME_CORRECTION_LOG",
            "FUZZY_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH_DARK_LAUNCH"
          ],
          "enumDescriptions": [
            "",
            "Alternate name from S3 recognition topN hypothesis.",
            "Alternate name from Genie query alternatives.",
            "Alternate name from contact correction history.",
            "Fuzzy match with user's contacts.",
            "Neural match. See go/phonetic-contact-match.",
            "The dark launch for a neural match. We found a match, but we ignore it for serving and just log it."
          ],
          "type": "string"
        },
        "relationshipMemoryCount": {
          "description": "The number of resolved relationship names and contact pointers from Assistant Memory.",
          "format": "int32",
          "type": "integer"
        },
        "selectedPhone": {
          "$ref": "AssistantLogsCommunicationPhoneLog",
          "description": "Information regarding the selected phone endpoint. Currently it is only logged for selected candidate."
        },
        "shortcutContactInfo": {
          "$ref": "MajelContactInformationShortcutInformation",
          "description": "Shortcut information of the contact."
        },
        "source": {
          "description": "The contact source of a contact candidate.",
          "enum": [
            "UNKNOWN",
            "FOCUS_CONTACT",
            "DEVICE_CONTACT",
            "GMAIL_INFERENCE",
            "S3_DECORATOR",
            "RELATIONSHIP",
            "VANITY",
            "SIGNED_OUT_DEVICE",
            "SHARED_CONTACT",
            "FAMILY_MEMBER",
            "SHARED_DEVICE_USER",
            "ON_DEVICE_CONTACT_LOOKUP"
          ],
          "enumDescriptions": [
            "",
            "Contacts from Focus",
            "Contacts from device, see go/device-content",
            "Contacts inferred from Gmail",
            "Contacts from S3 decorator",
            "Whitelisted relationships no matter if user has such contact, see go/sls-personal_relationship_names_and_aliases.",
            "Vanity nicknames or user's own profile name.",
            "Signed out device contact names",
            "Contacts shared from other users. See go/multi-user-shared-contact.",
            "People in the user's family group in http://families.google.com who are not contacts.",
            "People who share a device with the user who are not contacts.",
            "Contacts from on device lookup during contact fulfillment."
          ],
          "type": "string"
        },
        "systemContactGroupId": {
          "description": "Integer value corresponding to SystemContactGroup enum. http://google3/social/graph/wire/proto/merged_person.proto?l=3151&rcl=320308954",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "whatsappPhoneNumberCount": {
          "description": "DEPRECATED. Use phone instead. Used before 2020-01-13. Number of phone numbers annotated with Whatsapp.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationPhoneLog": {
      "description": "This is the log version of apps.people.oz.external.mergedpeopleapi.Phone proto. Next ID: 3",
      "id": "AssistantLogsCommunicationPhoneLog",
      "properties": {
        "rawDeviceContactInfo": {
          "description": "This list provides account information from the raw contact which is the source of this field.",
          "items": {
            "$ref": "AssistantLogsCommunicationRawDeviceContactInfoLog"
          },
          "type": "array"
        },
        "type": {
          "description": "Label for phone number in the Contacts app. It can have standard values provided by the app e.g. MOBILE, HOME, WORK etc, but users are allowed to modify. So essentially it becomes user content.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsCommunicationRawDeviceContactInfoLog": {
      "description": "This is the log version of apps.people.oz.external.mergedpeopleapi.RawDeviceContactInfo proto. Next ID: 3",
      "id": "AssistantLogsCommunicationRawDeviceContactInfoLog",
      "properties": {
        "accountType": {
          "description": "Account type of raw contact, e.g. \"com.google\" or \"com.linkedin.android\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsDefaultDeviceLog": {
      "description": "Log device info of default speaker and tv",
      "id": "AssistantLogsDefaultDeviceLog",
      "properties": {
        "defaultSpeaker": {
          "$ref": "AssistantLogsDeviceInfoLog"
        },
        "defaultTv": {
          "$ref": "AssistantLogsDeviceInfoLog"
        },
        "sourceDeviceId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsDefaultDevicesLog": {
      "id": "AssistantLogsDefaultDevicesLog",
      "properties": {
        "localDefaultDevices": {
          "$ref": "AssistantLogsDefaultDeviceLog"
        },
        "nearbyDefaultDevices": {
          "description": "Default settings of nearby devices.",
          "items": {
            "$ref": "AssistantLogsDefaultDeviceLog"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsDeviceAnnotationLog": {
      "description": "Device annotation mention from query",
      "id": "AssistantLogsDeviceAnnotationLog",
      "properties": {
        "rawTextFromQuery": {
          "description": "The raw text mentioning a device from the query, such as \"any tv\".",
          "type": "string"
        },
        "type": {
          "description": "The annotation type mentioned in the query.",
          "enum": [
            "NO_DEVICE_ANNOTATION",
            "DEVICE_ID_ANNOTATION",
            "DEVICE_TYPE_ANNOTATION",
            "DEVICE_TEXT_ANNOTATION"
          ],
          "enumDescriptions": [
            "No device is mentioned in the query.",
            "Annotation specifying a device linked to user's account",
            "Annotation specifying a general device, such as speaker, TV, etc.",
            "Annotation with text. It could be random text, such as \"dummy thing\"."
          ],
          "type": "string"
        },
        "userDefinedName": {
          "description": "The matched device name set by the user, such as \"big screen tv\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsDeviceInfoLog": {
      "description": "The information related to the device.",
      "id": "AssistantLogsDeviceInfoLog",
      "properties": {
        "arbitrationDeviceId": {
          "description": "Device identifier string for the current device used in the arbitration service.",
          "type": "string"
        },
        "connectivity": {
          "enum": [
            "UNKNOWN_CONNECTIVITY",
            "ONLINE_STATE",
            "OFFLINE_STATE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "deviceId": {
          "description": "The identification of the device. DeviceId (go/as-device-id) has multiple fields. To consloidate it to a single to make dremel easier, we use the string obtained by calling go/get-device-id.",
          "type": "string"
        },
        "deviceIdLog": {
          "$ref": "AssistantLogsSettingsDeviceIdLog",
          "description": "The identification of the device. The logging version of the full DeviceId."
        },
        "deviceIndex": {
          "description": "We index linked devices and log these index to avoid logging device_id. device_index should always be a positive number or -1. -1 means this device is not in homegraph.",
          "format": "int32",
          "type": "integer"
        },
        "deviceModelId": {
          "description": "This is the device_model_id field in device_settings proto. It has the same value for the same type of devices. e.g. Sonos.Sonos One.S13",
          "type": "string"
        },
        "distance": {
          "description": "LINT.ThenChange(//depot/google3/assistant/context/proto/device_arbitration.proto:EstimatedRelativeDistance)",
          "enum": [
            "UNKNOWN_DISTANCE",
            "CLOSEST",
            "EQUALLY_CLOSE",
            "FURTHER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "eliminatingLumosProcessor": {
          "description": "The lumos processor which eliminated this device, if applicable",
          "enum": [
            "UNKNOWN_LUMOS_PROCESSOR",
            "CAPABILITIES_FILTER",
            "DEVICE_ANNOTATION_FILTER",
            "DEVICE_CONNECTIVITY_FILTER",
            "LOCAL_DEVICE_INCLUSIVENESS_FILTER",
            "LOCATION_FILTER",
            "MEDIA_PLAYBACK_FILTER",
            "SAFETY_FILTER",
            "TRAITS_FILTER",
            "DEVICE_TYPE_FILTER",
            "APP_FILTER",
            "HYBRID_DEVICE_PROPERTIES_FILTER",
            "NEARBY_DEVICE_FILTER",
            "DEVICE_ATTRIBUTES_FILTER",
            "DEFAULT_MEDIA_OUTPUT_PROMOTER",
            "DEVICE_GROUP_PROMOTER",
            "LOCAL_DEVICE_PROMOTER",
            "LOCATION_PROMOTER",
            "MEDIA_FOCUS_PROMOTER",
            "MEDIA_PLAYBACK_PROMOTER",
            "SAME_NAME_DEVICE_PROMOTER",
            "PHONE_TARGETING_PROMOTER",
            "TRAITS_PROMOTER",
            "DEVICE_TYPE_PROMOTER"
          ],
          "enumDescriptions": [
            "",
            "filters",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "promoters",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "isRemote": {
          "type": "boolean"
        },
        "isTethered": {
          "description": "This flag indicates this is a non-local device that is tethered to local/originating device. Tethered device is a special case of is_remote and typically used in wearable scenarios. This is always false for local device and when it is true, it implies is_remote is also true.",
          "type": "boolean"
        },
        "mediaCapabilities": {
          "$ref": "AssistantLogsMediaCapabilities"
        },
        "mediaDeviceType": {
          "enum": [
            "UNKNOWN_DEVICE_TYPE",
            "ASSISTANT",
            "HOME_AUTOMATION",
            "CAST",
            "CAST_GROUP",
            "QUARTZ",
            "QUARTZ_IOS",
            "CLOUD_AUTO"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Quartz in AGSA",
            "Quartz in iOPA",
            "Non-assistant Auto devices from Cloud. go/cloud-registration-api-changes"
          ],
          "type": "string"
        },
        "name": {
          "description": "User defined device name",
          "type": "string"
        },
        "sessions": {
          "description": "This field should be populated only when there is at least one session on this device.",
          "items": {
            "$ref": "AssistantLogsDeviceMediaSessionLog"
          },
          "type": "array"
        },
        "surfaceType": {
          "description": "This field should be populated only when the device is an Assistant device.",
          "enum": [
            "UNKNOWN",
            "ANDROID_ALLO",
            "ANDROID_AUTO",
            "ANDROID_THINGS_CUBE",
            "ANDROID_THINGS_JASPER",
            "ANDROID_TV",
            "ANDROID_TV_KIDS",
            "ANDROID_WEAR",
            "AR_GLASSES",
            "ASSISTANT_SDK",
            "AUDIOWEAR",
            "BUBBLE_CHARACTERS_IOS",
            "CAPABILITY_BASED_SURFACE",
            "CHROMECAST_ASSISTANT",
            "CHROMECAST_MANHATTAN",
            "CHROMECAST_SEARCH",
            "CLOUD_DEVICE",
            "COMPANION_SCREEN",
            "DYNAMITE_WEB",
            "ENSEMBLE",
            "EYESFREE_AGSA",
            "EYESFREE_GMM",
            "GBOARD",
            "GLASS",
            "GOOGLE_HOME",
            "HANGOUTS_CHATBOT",
            "IOS_ALLO",
            "IOS_GSA",
            "IOS_WEAR",
            "LIBASSISTANT",
            "LINE_CHATBOT",
            "MULTIMODAL_AGSA",
            "NON_ASSISTANT_SURFACE",
            "OPA_AGSA",
            "OPA_AGSA_CHROME_OS",
            "OPA_ANDROID_AUTO",
            "OPA_ANDROID_LITE",
            "OPA_ANDROID_SCREENLESS",
            "OPA_ANDROID_SMART_DISPLAY",
            "OPA_ANDROID_TABLET",
            "OPA_CROS",
            "OPA_GACS",
            "OPA_IOS",
            "OPA_IOS_SCREENLESS",
            "OPA_KAIOS",
            "OPA_MOBILE_WEB",
            "RTOS_PHONE",
            "SMS_CHATBOT",
            "TELEGRAM_CHATBOT",
            "TELEPHONE_ASSISTANT",
            "VERILY_ONDUO",
            "YOUTUBE_APP",
            "AGSA_BISTO_FOR_EVAL",
            "COGSWORTH_FOR_EVAL",
            "LOCKHART_MIC_FOR_EVAL",
            "OPA_ANDROID_AUTO_EMBEDDED_FAKE",
            "SPARK",
            "WALLE",
            "UNIT_TESTING"
          ],
          "enumDescriptions": [
            "",
            "",
            "Deprecated (never used). Use OPA_ANDROID_AUTO instead.",
            "Assistant on small screen stationary device.",
            "",
            "",
            "",
            "",
            "Assistant on AR Glasses with both visual and audio experiences. Ask ar-assistant@ for details.",
            "For Assistant SDK gRPC client.",
            "",
            "go/assistant-lamda-overview-characters",
            "Surface for capability based testing.",
            "For chrome cast assistant web app.",
            "For chrome cast with assistant + screen (e.g., Google Nest Hub).",
            "",
            "Virtual device for event-based triggering, e.g. executing time",
            "scheduled routines: go/routine-cloud-ex For Quartz.",
            "",
            "",
            "Deprecated. Please use OPA_ANDROID_SCREENLESS.",
            "",
            "For Gboard app",
            "",
            "",
            "",
            "",
            "",
            "",
            "For standalone libassistant devices.",
            "LINE 3P messaging app",
            "Deprecated.",
            "Surfaces that do not speak to the Assistant, i.e. web HQ",
            "Assistant on Android phones accessed through the Google App (velvet). This represents neither all of the assistant on android phones (ANDROID_ALLO, VERILY_ONDUO, etc.) nor all of the assistant built on top of AGSA (ANDROID_WEAR, OPA_ANDROID_SCREENLESS, OPA_AGSA_CHROME_OS, etc.).",
            "Deprecated. Please use OPA_CROS.",
            "",
            "This is OPA on Android Go (not part of AGSA)",
            "Assistant on Nexus with screen off/locked. Use go/bisto device to trigger.",
            "Assistant on Titan hub mode (go/titan-hubmode-surface). This is OPA Android first party Smart Display devices. The UI experience is built on Opal (Gallium and Flutter) and native Android.",
            "Assistant on Android tablet",
            "Assistant on native Chrome OS (go/croissant).",
            "For assistant on GACS devices (go/gacs-dd). Google Assistant Conversation Service (GACS) defines intents the device accepts. This surface serves the intents in the assistant response.",
            "",
            "Assistant on iOS with screen off/locked. Use go/bisto device to trigger.",
            "Assistant on KaiOS. go/kaiosama",
            "Assistant on Mobile Web. go/opa-spidey",
            "Assistant on low-cost RTOS phones (go/conceRTOS).",
            "",
            "Telegram 3P messaging app",
            "Assistant on a phone call (go/telephone).",
            "",
            "A Youtube app.",
            "Eval-only surfaces. These surfaces are not real surfaces. They are only used in intermediate steps of eval query and request generation: 1. Eval samplers (OPA query sampler and Cannery sampler) checks logs and temporarily assigns these surface types to the logs, to put Bisto, Lockhart Mic, ... queries in the correct query pools. 2. Request builders uses these surface types to determine how TaskRequest for Bisto, Lockhart Mic, ... should be built, like whether some user user agent should be used, whether some entry source should be set. The surface types in the generated TaskRequest is still the production surface types, like OPA_ANDROID_SCREENLESS or OPA_AGSA. Temp surface for Bisto Android eval. Will be merged with OPA_ANDROID_SCREENLESS in the future.",
            "",
            "",
            "OPA_ANDROID_AUTO has another sub-surface (embedded) that differs in the reported capabilities, client-ops, flags but uses the same surface_type string of OPA_ANDROID_AUTO. This fake surface would allow running turing2 tests and evals for this embedded surface. Deprecated as of Feb 2019. Please use \"OPA_ANDROID_AUTO_EMBEDDED\" client type for tests and eval. See go/client-onboarding for more details. https://cs.corp.google.com/piper///depot/google3/assistant/assistant_server/tools/util/consts.h?l=32&rcl=247481455",
            "Unlaunched new surface prototype, ask spark-eng@.",
            "Wall-E is an Area120 Project building assistant powered robots. The surface is an extended joplin which have same capabilities as a google home adding custom robot features. Currently in active development. Please reach out walle-software@ or bingxin@ for questions. For details see go/walle-as-pipeline-1-pager.",
            "Surface used for unit-testing purposes. Unit-tests might still require the existence of a \"valid\" SurfaceType to succeed (eg. initialization of the CapabilityBuilder, proto matching, etc.). With the move away from SurfaceType checks, a generic \"TESTING\" SurfaceType can be used for such tests without affecting the test behavior. Unlike the CAPABILITY_BASED_SURFACE, this proto does not have any capabilities or ResponseType tied to it. It should only be used for unit-tests and should not be exposed in the ASDebugger."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsDeviceMediaSessionLog": {
      "description": "Log about the media session on a device.",
      "id": "AssistantLogsDeviceMediaSessionLog",
      "properties": {
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId"
        },
        "mediaSessionType": {
          "enum": [
            "UNKNOWN",
            "SINGLE_DEVICE_SESSION",
            "STATIC_GROUP_SESSION",
            "DYNAMIC_GROUP_SESSION"
          ],
          "enumDescriptions": [
            "",
            "",
            "Media session is playing on a device group set by users.",
            "Media session is playing on a temporary device group requested in query."
          ],
          "type": "string"
        },
        "mediaType": {
          "description": "The type of the media session. If provider does not report this field, we ## compute it by mapping provider type to media type. Here is the mapping: |ProviderType |MediaItemMetadata.Type| |-------------------------------------- |MUSIC |TRACK | |VIDEO |VIDEO | |LIVE_TV |TV_CHANNEL | |AUDIOBOOK |AUDIO_BOOK | |PODCAST |PODCAST_EPISODE | ## |LIVE_STREAMING|VIDEO | ",
          "enum": [
            "UNKNOWN",
            "TRACK",
            "ALBUM",
            "ARTIST",
            "PLAYLIST",
            "EPISODE",
            "MOVIE",
            "PHOTO",
            "TV_SHOW_EPISODE",
            "MUSIC_GENRE",
            "MUSIC_STATION",
            "AUDIO_BOOK",
            "CHAPTER",
            "RADIO_STATION",
            "MUSIC_MIX",
            "SPORTS_EVENT",
            "TV_CHANNEL",
            "VIDEO",
            "YOUTUBE_CHANNEL",
            "YOUTUBE_VIDEO_PLAYLIST",
            "TV_SHOW",
            "NEWS",
            "NARRATED_WEB",
            "NEWS_CALL_TO_ACTION",
            "AUDIO_STORY",
            "PODCAST_SERIES",
            "PODCAST_EPISODE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Representing a TV show which contains multiple TV seasons.",
            "",
            "",
            "Repesents a Call To Action media item. See go/newsplayer-outro-gnews. Current use case is to ask users to continue their news journey in the Google News app / web app. Future cases could include asking users to adjust their news settings.",
            "Representing a short audio story. go/tmas-design",
            "Represent different kinds of podcast content",
            ""
          ],
          "type": "string"
        },
        "playbackState": {
          "description": "The playback states of the session.",
          "enum": [
            "UNKNOWN_STATE",
            "STOPPED",
            "PAUSED",
            "PLAYING",
            "FAST_FORWARDING",
            "REWINDING",
            "BUFFERING",
            "ERROR",
            "CONNECTING",
            "SKIPPING_TO_PREVIOUS",
            "SKIPPING_TO_NEXT",
            "SKIPPING_TO_QUEUE_ITEM"
          ],
          "enumDescriptions": [
            "",
            "State indicating this item is currently stopped.",
            "State indicating this item is currently paused.",
            "State indicating this item is currently playing.",
            "State indicating this item is currently fast forwarding.",
            "State indicating this item is currently rewinding.",
            "State indicating this item is currently buffering and will begin playing when enough data has buffered.",
            "State indicating this item is currently in an error state. The error message should also be set when entering this state.",
            "State indicating the class doing playback is currently connecting to a new destination. Depending on the implementation you may return to the previous state when the connection finishes or enter STATE_NONE. If the connection failed STATE_ERROR should be used.",
            "State indicating the player is currently skipping to the previous item.",
            "State indicating the player is currently skipping to the next item.",
            "State indicating the player is currently skipping to a specific item in the queue."
          ],
          "type": "string"
        },
        "providerMid": {
          "description": "The KG mid of the media provider.",
          "type": "string"
        },
        "supportedTransportControl": {
          "items": {
            "enum": [
              "UNKNOWN_COMMAND",
              "PLAY_FROM_SEARCH",
              "PLAY_FROM_URI",
              "SEND_CUSTOM_ACTION",
              "SKIP_TO_NEXT",
              "SKIP_TO_PREVIOUS",
              "PLAY",
              "PAUSE",
              "STOP",
              "SET_RATING",
              "SEEK_TO",
              "SHUFFLE",
              "REWIND",
              "FAST_FORWARD",
              "SKIP_TO_QUEUE_ITEM",
              "SET_REPEAT_MODE",
              "SET_CAPTIONING_ENABLED"
            ],
            "enumDescriptions": [
              "",
              "Requests that the app start playback for a specific search query.",
              "Requests that the app start playback for a specific uri.",
              "Send a custom string action to the provide (go/media-controller-gsa).",
              "Skip to the next item in the play queue.",
              "Skip to the previous item in the play queue.",
              "Requests that the player start its playback at its current position.",
              "Requests that the player pause its playback and stay at its current position.",
              "Requests that the player stop its playback.",
              "Rate the current content.",
              "Move to a new location in the media stream.",
              "Requests that the app shuffle the currently loaded content.",
              "Rewind the current content.",
              "Fast forward the current content.",
              "Play an item with a specific id in the play queue.",
              "Set repeat mode for current content.",
              "Enable or disable the closed caption for the current content."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsDeviceSelectionLog": {
      "description": "Contains information logged in target device selection. See go/improve-device-targeting-logging for details. Next Id: 22",
      "id": "AssistantLogsDeviceSelectionLog",
      "properties": {
        "allDefaultDevices": {
          "description": "Default settings of all nearby devices Deprecated, use default_devices_log instead.",
          "items": {
            "$ref": "AssistantLogsDefaultDeviceLog"
          },
          "type": "array"
        },
        "allMediaStreamLog": {
          "$ref": "AssistantLogsAllMediaStreamLog",
          "description": "Logs all active media sessions."
        },
        "counterfactualDeviceSelectionLog": {
          "$ref": "AssistantLogsDeviceSelectionLog",
          "description": "DeviceSelectionLog for counterfactual logging."
        },
        "defaultDevices": {
          "$ref": "AssistantLogsDefaultDeviceLog",
          "description": "Include default tv and default speaker Deprecated, use all_default_devices below."
        },
        "defaultDevicesLog": {
          "$ref": "AssistantLogsDefaultDevicesLog"
        },
        "devicesStr": {
          "description": "Temporaray field for debugging ANDROID_AUTO multi_target_devices punt. This will be removed once we identify the root cause.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "inputErrorLog": {
          "items": {
            "$ref": "AssistantLogsInputErrorLog"
          },
          "type": "array"
        },
        "localDevice": {
          "$ref": "AssistantLogsDeviceInfoLog",
          "description": "Now we just log the media sessions on local device Deprecated, use NearbyDevicesLog::LocalDevice instead."
        },
        "logDataSource": {
          "description": "Indicates which library populated the device_selection_log for this query.",
          "enum": [
            "UNKNOWN",
            "MEDIA_FOCUS_SELECTOR",
            "LUMOS_DEVICE_TARGETING_LIBRARY"
          ],
          "enumDescriptions": [
            "",
            "Indicates the logs is populated by Media Focus Selector.",
            "Indicates the logs is populated by Lumos Device Targeting Library."
          ],
          "type": "string"
        },
        "mediaFocus": {
          "$ref": "AssistantLogsMediaFocusInfoLog",
          "description": "The Media Focus information. This field should be populated only when there is a Media Focus. Deprecated, use media_focuses below instead."
        },
        "mediaFocusesLog": {
          "$ref": "AssistantLogsMediaFocusesLog",
          "description": "Media focuses on all devices."
        },
        "nearbyDevicesLog": {
          "$ref": "AssistantLogsNearbyDevicesLog",
          "description": "All nearby devices and local device."
        },
        "queryAnnotation": {
          "$ref": "AssistantLogsQueryAnnotationLog",
          "description": "This should log the query annotation features found in the device, such as the device annotation, the room annotation, and the structure annotation from the query."
        },
        "selectionResult": {
          "$ref": "AssistantLogsDeviceSelectionResultLog",
          "description": "The result of device selection."
        },
        "testCodes": {
          "items": {
            "$ref": "AssistantLogsDeviceTargetingTestCode"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsDeviceSelectionResultLog": {
      "description": "Log the selection result. Next ID: 11",
      "id": "AssistantLogsDeviceSelectionResultLog",
      "properties": {
        "ambiguousTargetDevices": {
          "$ref": "AssistantLogsAmbiguousTargetDeviceLog",
          "description": "Deprecated, please use qualified_devices."
        },
        "deviceSelectionDecisionSummary": {
          "$ref": "AssistantLogsMediaDeviceSelectionDecisionSummary"
        },
        "deviceTargetingErrorType": {
          "enum": [
            "UNKNOWN_ERROR",
            "NO_DEVICE_IN_SAME_STRUCTURE",
            "NO_DEVICE_IN_SAME_NETWORK_OR_LOCATION",
            "NO_DEVICE_IN_SAME_STRUCTURE_OR_NETWORK_OR_LOCATION",
            "NO_DEVICE_SATISFIES_SAME_STRUCTURE_OR_UNKNOWN_IF_OWNED",
            "NO_DEVICE_SATISFIES_CAPABILITIES_REQUIREMENT",
            "NO_DEVICE_MATCHED_DEVICE_ANNOTATION",
            "MULTI_TARGET_DEVICE_NOT_SUPPORTED",
            "NO_DEVICE_AFTER_LOCAL_DEVICE_EXCLUDED",
            "UNABLE_TO_TARGET_ONLY_LOCAL_DEVICE",
            "NO_DEVICE_MATCHED_REQUIRED_TRAITS",
            "NO_DEVICE_MATCHED_REQUIRED_ATTRIBUTES",
            "NO_DEVICE_MATCHED_REQUIRED_DEVICE_TYPE",
            "NO_DEVICE_IN_SAME_OR_MENTIONED_STRUCTURE",
            "NO_DEVICE_SATISFIES_PLAYBACK_REQUIREMENT",
            "STRUCT_DISAMBIG_NOT_SUPPORTED",
            "ROOM_DISAMBIG_NOT_SUPPORTED",
            "UNRECOGNIZED_DEVICE_NAME",
            "NO_LINKED_REMOTE_DEVICES",
            "NO_LINKED_REMOTE_VIDEO_DEVICES",
            "NO_SAFE_DEVICE_WITH_SCREEN",
            "ALL_QUALIFIED_DEVICES_OFFLINE",
            "CROSS_STRUCTURE_TARGETING_DISALLOWED",
            "NO_DEVICE_MEETS_PROVIDER_REQUIREMENT",
            "MISSING_LOCAL_DEVICE_SETTING",
            "NO_DEVICE_HAS_REQUIRED_APP",
            "HYBRID_DEVICE_NOT_QUALIFIED",
            "NO_NEARBY_DEVICES"
          ],
          "enumDescriptions": [
            "",
            "Error about when there's no qualified devices in the same home graph structure as the local device.",
            "Error about when there's no qualified devices in the same network or location as the local device.",
            "Error about when there's no qualified devices in the same home graph structure or network or location as the local device.",
            "Error about when no qualified device was found that matched the following conditions: 1) Both local device and target device are in the same home graph structure. 2) The distance to target device is unknown (i.e. either local device or target device is homeless) and target device is owned by the user. 3) If local device and target device are in different structures, only allowed when the query explicitly mentioned device name.",
            "Error about when no qualified device satisfies the device capability requirement.",
            "Error of no qualified devices matched requirements from device annotation.",
            "Error of not supporting targeting multiple devices.",
            "Error of no device left after local device is excluded within inclusiveness filter.",
            "Error of unable to target only local device within inclusiveness filter.",
            "Error of no qualified devices matched the required smart home traits.",
            "Error of no qualified devices matched the required Smart Home attributes.",
            "Error of no qualified devices matched the required smart home device types.",
            "Error of no qualified devices in the mentioned structure or in the same structure as the local device.",
            "Error of no device satisfying playback requirements.",
            "Error when structure disambiguation is not supported in the config. When config is supported (both structure_disambiguation_supported and multi_target_supported are set to true), the library would return structures for disambiguation.",
            "Error when room disambiguation is not supported in the config. When config is supported (both room_disambiguation_supported and multi_target_supported are set to true), the library would return rooms for disambiguation.",
            "Error when the device mentioned in the query is not recognized. In other words, we can't find a device which matched the device mentioned in the query.",
            "Used when user requests to target on a remote device and there are no remote devices linked.",
            "Used when user requests to target on a remote video device and there are no remote video devices linked.",
            "Error when there is no safe screen device. For example, requesting screen-requiring content from Auto surface.",
            "Error when all qualified devices are offline.",
            "When user tries to target a device which is in a different structure and is not allowed. For example, if user doesn't own the structure. See go/on-multi-user-access-transitivity for more details.",
            "Used when user requests a device with certain provider but no device can satisfies provider requirement.",
            "AvailableDevice device setting of local device is missing.",
            "Required app is not installed",
            "All remote hybrid devices fail the propertries requirement specific (lock/unlock, etc) for hybrid devices (such as Tangor).",
            "No nearby hearing devices"
          ],
          "type": "string"
        },
        "finalLumosStage": {
          "description": "The class name for the final filter/promoter used by Lumos for device targeting. This filter or promoter runs for all users, and contains no data specific to the individual user.",
          "type": "string"
        },
        "lowConfidenceTargetDevice": {
          "$ref": "AssistantLogsLowConfidenceTargetDeviceLog",
          "description": "////////////////////////////////////////////////////////////////////////// Ambiguous Results: the library failed to select the final target device(s) but it narrows down to a set of devices which are all valid target device candidates. The client needs to do further disambiguation, e.g., giving a dialog or having costomized logic. The low confidence target device means the library falied to select the target device but it picked two devices for the client to do disambiguation."
        },
        "mediaFocusSelectionErrorType": {
          "description": "////////////////////////////////////////////////////////////////////////// This field log the error while selecting target device in media_focus_selector.",
          "enum": [
            "UNKNOWN_ERROR",
            "FOUND_MULTIPLE_DEVICES",
            "REQUESTED_DEVICE_HAS_NO_SCREEN",
            "NO_LINKED_REMOTE_DEVICES",
            "NO_LINKED_REMOTE_VIDEO_DEVICES",
            "UNRECOGNIZED_DEVICE_NAME",
            "UNRECOGNIZED_VIDEO_DEVICE_NAME",
            "NO_DEVICE_MEETS_PROVIDER_REQUIREMENT",
            "MULTIPLE_DEVICES_MEET_PROVIDER_REQUIREMENT",
            "REMOTE_CLOUD_CASTING_NOT_ALLOWED",
            "NO_SAFE_DEVICE_WITH_SCREEN",
            "NO_DEVICE_MEETS_PLAYBACK_REQUIREMENT",
            "MULTIPLE_DEVICES_MEET_PLAYBACK_REQUIREMENT",
            "NO_VALID_DEVICE_IN_REQUESTED_ROOM",
            "NO_DEVICE_FOUND_IN_REQUESTED_ROOM",
            "MULTIPLE_DEVICES_FOUND_IN_REQUESTED_ROOM",
            "ALL_QUALIFIED_DEVICES_IN_DIFFERENT_STRUCTURE",
            "QUALIFIED_DEVICE_OFFLINE",
            "ALL_QUALIFIED_DEVICES_OFFLINE",
            "CROSS_STRUCTURE_TARGETING_DISALLOWED",
            "NO_DEVICE_MEETS_STADIA_GAMING_CAPABILITY",
            "MEDIA_STATES_MISSING",
            "NO_DEVICE_SATISFIES_CAPABILITIES_REQUIREMENT",
            "HYBRID_DEVICE_NOT_QUALIFIED"
          ],
          "enumDescriptions": [
            "Used when the type of error is not known explicitly.",
            "Used when there are multiple devices satisfying the constraints.",
            "Used when the user requested to play a content on device without screen and focus selection has the (unsatisfied) REQUIRES_SCREEN restriction. Note that this is error is used if device is recognized, and otherwise UNRECOGNIZED_DEVICE or UNRECOGNIZED_VIDEO_DEVICE will be used.",
            "Used when user requests to play on a remote device and there are no linked devices.",
            "Used when user requests to play on a remote video device and there are no linked video devices.",
            "Used when requested device with the given name in the annotation can not be recognized, that is user requested to play on a device that is not found in linked devices. If device is unrecognized and focus selection has the (unsatisfied) REQUIRES_SCREEN or type of unrecognized device is video then more specific UNRECOGNIZED_VIDEO_DEVICE_NAME is used.",
            "Used when requested device with the given name in the annotation can not be recognized and focus selection has the (unsatisfied) REQUIRES_SCREEN or type of unrecognized device is video.",
            "Used when user requests a device with certain provider but no device can satisfies provider requirement.",
            "Used when user requests a device with certain provider but more than one device can satisfies the provider requirement.",
            "Used when requested device does not allow remote cloud casting.",
            "Used when there is no safe screen device. For ex: requesting screen-requiring content from Auto surface.",
            "Used when user requests a device with certain playback but no device can satisfies playback requirement.",
            "Used when user requests a device with certain playback but more than one device can satisfies playback requirement.",
            "Used when user requests a device to be in a particular room but none of the devices in that room satisfies all requirements.",
            "Used when user requests a room but no device is found in that room.",
            "Used when user requests a room and there are multiple devices in that room are eligible to selected.",
            "Used when all qualified devices are not in the same structure as the primary device.",
            "",
            "When all qualified devices are offline.",
            "When user tries to target a device which is in a different structure and is not allowed. For example, if user doesn't own the structure. See go/on-multi-user-access-transitivity for more details.",
            "When all devices do not qualify for stadia support.",
            "Used when any critical media state is missing so the selection decision cannot be made. See go/partial-states-in-targeting-library for more details.",
            "Error about when no qualified device satisfies the device capability requirement.",
            "All remote hybrid devices fail the propertries requirement specific (lock/unlock, etc) for hybrid devices (such as Tangor)."
          ],
          "type": "string"
        },
        "processorInfo": {
          "description": "The log for each stage of Lumos, showing the number of eliminated devices from each processor.",
          "items": {
            "$ref": "AssistantLogsLumosProcessorInfo"
          },
          "type": "array"
        },
        "qualifiedDevices": {
          "$ref": "AssistantLogsAmbiguousTargetDeviceLog",
          "description": "We will apply several filters and dialogs to select a target device if media_focus_selector fail to select one. This field should log the devices left after each filter or dialog. It also log the detailed info of the final target device."
        },
        "singleTargetDevice": {
          "$ref": "AssistantLogsDeviceInfoLog",
          "description": "////////////////////////////////////////////////////////////////////////// Unambiguous Results: the library successfully selected the final target device(s) and no further disambiguation is needed. Deprecated, please use target_device."
        },
        "targetDevice": {
          "$ref": "AssistantLogsTargetDeviceLog"
        }
      },
      "type": "object"
    },
    "AssistantLogsDeviceTargetingTestCode": {
      "description": "Test code is used to track special events happening in Device Targeting Library. Next Id: 2",
      "id": "AssistantLogsDeviceTargetingTestCode",
      "properties": {
        "type": {
          "enum": [
            "UNKNOWN",
            "IGNORE_NESTED_DEVICE_MENTION_WITH_ID",
            "INCOMPLETE_LOCAL_AUTO_SETTINGS_FOUND",
            "FINAL_RESULT_RESOLVED_BY_NEARBY_DEVICE"
          ],
          "enumDescriptions": [
            "",
            "Used to track the case when the nested DeviceMention with id is ignored inside a RoomMention. See: b/184750168 and go/mixed-room-and-device-mention",
            "Used to track if there is incomplete or bad local android auto settings passed to Lumos.",
            "Used to track if the final result is resolved by using nearby device."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsInputErrorLog": {
      "id": "AssistantLogsInputErrorLog",
      "properties": {
        "errorCode": {
          "format": "int32",
          "type": "integer"
        },
        "errorType": {
          "enum": [
            "ERROR_UNKNOWN",
            "ERROR_DEVICE_PROPERTIES",
            "ERROR_HOME_GRAPH",
            "ERROR_CAPABILITIES_ACROSS_DEVICES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsLowConfidenceTargetDeviceLog": {
      "description": "Represents the case where there is a target device with low confidence so that the library didn't directly target it. Instead, the library returns the low confidence target device and the fallback device for the client to decide to either trigger a dialog to disambiguate or select one of them based on extra business logic. Next ID: 3",
      "id": "AssistantLogsLowConfidenceTargetDeviceLog",
      "properties": {
        "fallbackDeviceLog": {
          "$ref": "AssistantLogsDeviceInfoLog",
          "description": "The fallback device."
        },
        "lowConfTargetDeviceLog": {
          "$ref": "AssistantLogsDeviceInfoLog",
          "description": "The selected low confidence focus device."
        }
      },
      "type": "object"
    },
    "AssistantLogsLumosProcessorInfo": {
      "id": "AssistantLogsLumosProcessorInfo",
      "properties": {
        "devicesAfterRun": {
          "description": "Number of candidate devices after this stage is run.",
          "format": "int32",
          "type": "integer"
        },
        "devicesBeforeRun": {
          "description": "Number of candidate devices before this stage is run.",
          "format": "int32",
          "type": "integer"
        },
        "processorName": {
          "description": "Name of the processor for this stage.",
          "enum": [
            "UNKNOWN_LUMOS_PROCESSOR",
            "CAPABILITIES_FILTER",
            "DEVICE_ANNOTATION_FILTER",
            "DEVICE_CONNECTIVITY_FILTER",
            "LOCAL_DEVICE_INCLUSIVENESS_FILTER",
            "LOCATION_FILTER",
            "MEDIA_PLAYBACK_FILTER",
            "SAFETY_FILTER",
            "TRAITS_FILTER",
            "DEVICE_TYPE_FILTER",
            "APP_FILTER",
            "HYBRID_DEVICE_PROPERTIES_FILTER",
            "NEARBY_DEVICE_FILTER",
            "DEVICE_ATTRIBUTES_FILTER",
            "DEFAULT_MEDIA_OUTPUT_PROMOTER",
            "DEVICE_GROUP_PROMOTER",
            "LOCAL_DEVICE_PROMOTER",
            "LOCATION_PROMOTER",
            "MEDIA_FOCUS_PROMOTER",
            "MEDIA_PLAYBACK_PROMOTER",
            "SAME_NAME_DEVICE_PROMOTER",
            "PHONE_TARGETING_PROMOTER",
            "TRAITS_PROMOTER",
            "DEVICE_TYPE_PROMOTER"
          ],
          "enumDescriptions": [
            "",
            "filters",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "promoters",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsMediaCapabilities": {
      "id": "AssistantLogsMediaCapabilities",
      "properties": {
        "canReceiveRemoteAction": {
          "type": "boolean"
        },
        "hasScreen": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantLogsMediaDeviceSelectionDecisionSummary": {
      "description": "A summary of the reasons that we chose a certain target device.",
      "id": "AssistantLogsMediaDeviceSelectionDecisionSummary",
      "properties": {
        "deviceSelectionPreferenceUsed": {
          "enum": [
            "UNKNOWN_PRIORITY",
            "SINGLE_QUALIFIED_SESSION_PREFERRED",
            "FOCUS_SESSION_PREFERRED",
            "FOCUS_DEVICE_SESSION_PREFERRED",
            "LOCAL_DEVICE_SESSION_PREFERRED",
            "PLAYING_DEVICE_STATE_PREFERRED",
            "BUFFERING_DEVICE_STATE_PREFERRED",
            "PAUSED_DEVICE_STATE_PREFERRED",
            "STOPPED_DEVICE_STATE_PREFERRED"
          ],
          "enumDescriptions": [
            "",
            "If there is only one media session, it is selected by default.",
            "A media session with focus was preferred over other media sessions.",
            "A media session on a device with focus was preferred over other media sessions.",
            "A media session on a local device was chosen.",
            "",
            "A device in the BUFFERING state was preferred over other devices.",
            "A device in the PAUSED state was preferred over other devices.",
            "A device in the STOPPED state was preferred over other devices."
          ],
          "type": "string"
        },
        "deviceSelectionReason": {
          "enum": [
            "UNKNOWN_REASON",
            "SYNDICATION_DEVICE_TARGETED",
            "AUTO_DEVICE_TARGETED",
            "QUERY_DEVICE_ANNOTATION_TARGETED",
            "SINGLE_QUALIFIED_DEVICE_TARGETED",
            "CAST_GROUP_TARGETED",
            "MEDIA_SESSION_TARGETED",
            "FOCUS_DEVICE_TARGETED",
            "DEFAULT_DEVICE_TARGETED",
            "LOCAL_DEVICE_TARGETED",
            "DEVICE_IN_SAME_ROOM_TARGETED",
            "AMBIGUOUS_DEVICES_TARGETED",
            "LOCAL_GROUP_RETARGETED",
            "FOCUS_OF_CLOSE_DEVICE_TARGETED",
            "DEFAULT_OF_CLOSE_DEVICE_TARGETED",
            "SINGLE_QUALIFIED_CLOSE_DEVICE_TARGETED",
            "DEVICE_IN_CLOSE_ROOM_TARGETED",
            "TETHERED_DEVICE_TARGETED"
          ],
          "enumDescriptions": [
            "",
            "For syndication devices (3P TV), we sometimes prefer syndication devices over any other remote device, since the query comes from a linked remote.",
            "Auto surfaces can never cast to remote devices for safety reasons, so we force the local auto device if auto is the surface.",
            "A device explicitly mentioned in the query was targeted.",
            "Only one device was qualified.",
            "We target a cast group only if all the qualified devices are in the same media session. This happens before applying any of the below filters.",
            "Media sessions are targeted when session targeting is enabled, supported, a session exists with more than one device, and a session outranks all other sessions. The rankings are the keys below.",
            "A device with media focus was targeted.",
            "A default device was targeted.",
            "The local device was targeted.",
            "A device in the same room was targeted.",
            "An ambiguous device result including multiple devices was targeted.",
            "When local device is playing as a group, we retarget to the group if local device doesn't have focus. See go/group-targeting for the details.",
            "==== Sandstone related DeviceSelectionReason ==== Entries below refer to other devices that are close by. Details at: go/sandstone-lumos. The media focus device of an equally close device was targeted.",
            "The default target of an equally close device was targeted.",
            "Only one device out of the ones that are equally close was qualified.",
            "A device in the same room as an equally close device was targeted.",
            "Sometimes wearable device (e.g., smartwatch) is tethered to a phone. This value indicates the tethered phone was targeted in these scenarios. This is related but slightly different from other remote targeting cases due to the strong binding/association between local (i.e., watch) and tethered device (i.e., phone). go/rohan-media-tethered-design"
          ],
          "type": "string"
        },
        "miscSelectionSignal": {
          "items": {
            "enum": [
              "NONE",
              "BETTER_MATCH_DEVICE_WITH_HUMAN_FRIENDLY_NAME_FOUND",
              "LOCAL_DEVICE_IMPLICITLY_MENTIONED",
              "USED_LOOSE_PLAYBACK_STATE_REQUIREMENTS",
              "QUERY_3P_DEVICE_ANNOTATION_IGNORED_REQUIREMENTS"
            ],
            "enumDescriptions": [
              "",
              "A better match device was found and targeted.",
              "A local device was implicitly mentioned in the query, like \"on you\".",
              "There were no devices which satisfy the playback states requirements, so the playback states requirements were removed and we tried again.",
              "A 3P device annotated from the query was targeted. We ignore requirements sometimes for 3p devices."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsMediaFocusInfoLog": {
      "description": "The information related to Media Focus. TODO(b/138952173) Deprecate MediaFocusState in logs/proto/majel_gws/media_action_triggering_info.proto and assistant/verticals/media/proto/target_device_info.proto",
      "id": "AssistantLogsMediaFocusInfoLog",
      "properties": {
        "currentFocusDurationSec": {
          "description": "How long the device is in focus so far",
          "format": "uint32",
          "type": "integer"
        },
        "dialogTriggered": {
          "description": "TODO(b/134944092) Log MediaFocusDialogTrigger Enum in focus_status.",
          "type": "boolean"
        },
        "focusDevice": {
          "$ref": "AssistantLogsDeviceInfoLog",
          "description": "LINT.ThenChange(//depot/google3/logs/proto/majel_gws/media_action_triggering_info.proto) The focus device."
        },
        "mediaFocusState": {
          "description": "The media focus state at the time of the request.",
          "enum": [
            "NO_FOCUS",
            "RECENT_FOCUS",
            "STALE_FOCUS",
            "HARD_FOCUS",
            "SOFT_FOCUS"
          ],
          "enumDescriptions": [
            "There is no focus device available or the focus expired.",
            "Media Focus V1. The focus is valid and it is within the media_focus_dialog_threshold.",
            "The focus is valid however it is over the media_focus_dialog_threshold and might require confirmation from user (dialog) before proceeding to use focus device.",
            "Media Focus V2 The focus is valid and there is a playing session on focus device.",
            "The focus is valid however there is no playing session on focus device and might require confirmation from user (dialog) before proceeding to use focus device."
          ],
          "type": "string"
        },
        "sourceDeviceId": {
          "description": "The source device of media focus.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsMediaFocusesLog": {
      "description": "Following are the MDA compatible loggings for media focus, default settings and nearby devices.",
      "id": "AssistantLogsMediaFocusesLog",
      "properties": {
        "dialogTriggered": {
          "type": "boolean"
        },
        "localMediaFocus": {
          "$ref": "AssistantLogsMediaFocusInfoLog"
        },
        "mediaFocuses": {
          "description": "Deprecated, use nearby_media_focuses instead.",
          "items": {
            "$ref": "AssistantLogsMediaFocusInfoLog"
          },
          "type": "array"
        },
        "nearbyMediaFocuses": {
          "description": "MediaFouces found on nearby devices.",
          "items": {
            "$ref": "AssistantLogsMediaFocusInfoLog"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsMediaStreamLog": {
      "description": "Media stream is composed of a media session and one or more devices which are hosting (playing) the session. Usually, a session is only hosted by one devcie. However, with cast group or stream transfer/expansion, a session could be hosted by multiple devices, which are playing the same session simultaneously.",
      "id": "AssistantLogsMediaStreamLog",
      "properties": {
        "deviceIndex": {
          "description": "The device index in this message is consistent with the device index in DeviceInfoLog. This field refers to the devices that hosting the session.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "session": {
          "$ref": "AssistantLogsDeviceMediaSessionLog"
        }
      },
      "type": "object"
    },
    "AssistantLogsNearbyDevicesLog": {
      "id": "AssistantLogsNearbyDevicesLog",
      "properties": {
        "deviceArbitrationCreationTimestampMs": {
          "description": "The timestamp that DeviceArbitration is created in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "deviceTargetingInputCreationTimestampMs": {
          "description": "The timestamp that DeviceTargetingInput is built in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "eliminatedByFurtherDistance": {
          "format": "int32",
          "type": "integer"
        },
        "eliminatedByLocalClosest": {
          "format": "int32",
          "type": "integer"
        },
        "eliminatedByUnknownDifferentRoom": {
          "format": "int32",
          "type": "integer"
        },
        "eliminatedByUnregisteredDevice": {
          "format": "int32",
          "type": "integer"
        },
        "localDevice": {
          "$ref": "AssistantLogsDeviceInfoLog"
        },
        "nearbyDevices": {
          "items": {
            "$ref": "AssistantLogsDeviceInfoLog"
          },
          "type": "array"
        },
        "numClosestDevices": {
          "format": "int32",
          "type": "integer"
        },
        "numEquallyCloseDevices": {
          "format": "int32",
          "type": "integer"
        },
        "numFurtherDevices": {
          "format": "int32",
          "type": "integer"
        },
        "numHearingDevices": {
          "format": "int32",
          "type": "integer"
        },
        "numUnknownDistanceDevices": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantLogsProviderAnnotationLog": {
      "description": "Provider annotation annotated from the query. These fields contain the detailed information for the provider. (e.g. for Youtube, package_names contains \"com.google.android.youtube\", localized_names contains \"youtube\", and lang contains \"en\" from \"en-US\" which depends on user's setting.)",
      "id": "AssistantLogsProviderAnnotationLog",
      "properties": {
        "lang": {
          "type": "string"
        },
        "localizedNames": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "packageNames": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsQueryAnnotationLog": {
      "description": "Log about the query requirements",
      "id": "AssistantLogsQueryAnnotationLog",
      "properties": {
        "deviceAnnotation": {
          "$ref": "AssistantLogsDeviceAnnotationLog",
          "description": "Deprecated, please use room_annotations."
        },
        "deviceAnnotations": {
          "description": "Log the device annotations mentioned in the query.",
          "items": {
            "$ref": "AssistantLogsDeviceAnnotationLog"
          },
          "type": "array"
        },
        "providerAnnotation": {
          "$ref": "AssistantLogsProviderAnnotationLog",
          "description": "Log the provider annotations annotated from the query."
        },
        "roomAnnotation": {
          "$ref": "AssistantLogsRoomAnnotationLog",
          "description": "TODO(b/171250187) Deprecates the optional RoomAnnotationLog and DeviceAnnotationLog. Deprecated, please use device_annotations."
        },
        "roomAnnotations": {
          "description": "Log the room annotations mentioned in the query.",
          "items": {
            "$ref": "AssistantLogsRoomAnnotationLog"
          },
          "type": "array"
        },
        "structureAnnotations": {
          "description": "Log the structure annotations mentioned in the query.",
          "items": {
            "$ref": "AssistantLogsStructureAnnotationLog"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantLogsReminderLog": {
      "description": "Annotate a single reminder instance.",
      "id": "AssistantLogsReminderLog",
      "properties": {
        "createdSecondsAgo": {
          "description": "The reminder is created N seconds ago. This helps tracking how the user issues follow-up actions after reminder is created. For example, whether the user likes to issues another [show reminders] query right after reminder is created?",
          "format": "int64",
          "type": "string"
        },
        "retrievedRankingClass": {
          "description": "If the reminder is retrieved by a ranking class (see go/opa-reminders-ranker), this will be populated with the class info. Refer to assistant.productivity.ReminderRankingClass.RankingType. Since that proto is in proto2 format, we can only wire by int type.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantLogsRoomAnnotationLog": {
      "description": "Room annotation mentioned in query.",
      "id": "AssistantLogsRoomAnnotationLog",
      "properties": {
        "rawTextFromQuery": {
          "description": "The raw text mentioning a room from the query, such as \"my living room\".",
          "type": "string"
        },
        "roomCount": {
          "description": "The number of rooms annotated, if there are multiple structures. They are guaranteed to have the same text_from_query and name due to exact matching.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "The annotation type mentioned in the query.",
          "enum": [
            "NO_ROOM_ANNOTATION",
            "ROOM_ID_ANNOTATION",
            "ROOM_TYPE_ANNOTATION",
            "ROOM_TEXT_ANNOTATION"
          ],
          "enumDescriptions": [
            "No room is mentioned in the query.",
            "Annotation specifying a room set up by users.",
            "Annotation specifying a general room type, such as bedroom.",
            "Annotation with text. It could be random text, such as \"my room\", \"all rooms\"."
          ],
          "type": "string"
        },
        "userDefinedName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsSettingsDeviceIdLog": {
      "description": "The logging-version of DeviceId proto, which identifies a device. This mirrors cs/google3/assistant/api/core_types/device_type.proto?q=symbol:DeviceId Next ID: 6",
      "id": "AssistantLogsSettingsDeviceIdLog",
      "properties": {
        "agsaClientInstanceId": {
          "description": "The client_instance_id on devices with GSA. See 'client_instance_field' in go/androidids.",
          "type": "string"
        },
        "canonicalDeviceId": {
          "description": "A unique device ID for Assistant devices as proposed by go/ocelot-team.",
          "type": "string"
        },
        "castDeviceId": {
          "description": "If set, indicates that the device is a cast device, and contains the UUID of the cast device. Corresponds to the device_id field of the CastDevice proto.",
          "type": "string"
        },
        "clientInstanceId": {
          "description": "DUSI (go/dusi) is used as the identifier here. This identifier is unique to the user and device. This will help identify which device or application the user's request originated from. This is not to be confused with the client_instance_id that android devices provide. This is currently used by surfaces that use the assistant-legacy-nexus and assistant-legacy-clockwork pipelines. DUSI is created and set in S3. This field is only filled for GAIA requests.",
          "type": "string"
        },
        "homeGraphDeviceId": {
          "description": "The unique device ID for HomeGraph devices. This is the HomeGraph ID, created when the device is registered into HomeGraph. It is immutable for the same device unless it is completely deleted and recreated. See go/home-graph for details. }",
          "type": "string"
        },
        "libassistantDeviceId": {
          "description": "The unique ID for libassistant based devices.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsStructureAnnotationLog": {
      "description": "Structure annotation mentioned in query.",
      "id": "AssistantLogsStructureAnnotationLog",
      "properties": {
        "rawTextFromQuery": {
          "description": "The raw text mentioning a structure from the query, such as \"my house\".",
          "type": "string"
        },
        "type": {
          "description": "The annotation type mentioned in the query.",
          "enum": [
            "NO_STRUCTURE_ANNOTATION",
            "STRUCTURE_ID_ANNOTATION",
            "STRUCTURE_TEXT_ANNOTATION"
          ],
          "enumDescriptions": [
            "No structure is mentioned in the query.",
            "Annotation specifying a structure set up by users.",
            "Annotation with text. It could be random text, such as \"this house\"."
          ],
          "type": "string"
        },
        "userDefinedName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantLogsTargetDeviceLog": {
      "description": "Represents the case where the library successfully selects the target device. It could be one or multiple devices. Next ID: 4",
      "id": "AssistantLogsTargetDeviceLog",
      "properties": {
        "devices": {
          "items": {
            "$ref": "AssistantLogsDeviceInfoLog"
          },
          "type": "array"
        },
        "lowConfidenceReason": {
          "enum": [
            "UNKNOWN_REASON",
            "LOCAL_FALLBACK",
            "MANUAL_DEFINED_REASON",
            "SINGLE_NEARBY_DEVICE",
            "PERSONAL_RESPONSE_BIT_OPTOUT_ON_LOCKED_PHONE",
            "FURTHER_LOCAL_DEVICE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Lumos result from a FURTHER hearing device will be marked as low confidence."
          ],
          "type": "string"
        },
        "resultConfidenceLevel": {
          "enum": [
            "UNKNOWN",
            "LOW_CONFIDENCE",
            "HIGH_CONFIDENCE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantPrefulfillmentRankerPrefulfillmentSignals": {
      "description": "Signals to be used by the Prefulfillment Ranker. Derived from the ParsingSignals and GroundingSignals carried by the FunctionCall. LINT.IfChange Next ID: 44",
      "id": "AssistantPrefulfillmentRankerPrefulfillmentSignals",
      "properties": {
        "bindingSetAuis": {
          "description": "Assistant User Interaction Score for binding set.",
          "format": "float",
          "type": "number"
        },
        "bindingSetPauis": {
          "description": "Pauis score for the binding set",
          "format": "float",
          "type": "number"
        },
        "calibratedParsingScore": {
          "description": "A parsing score that is independently calibrated by each parser/IG.",
          "format": "double",
          "type": "number"
        },
        "deepMediaDominant": {
          "description": "Whether the intent is dominant according to NSP deep-media.",
          "type": "boolean"
        },
        "dominant": {
          "description": "Indicates interpretation dominance predicted by KScorer",
          "type": "boolean"
        },
        "effectiveArgSpanLength": {
          "description": "The total effective length of the spans for the arguments used to construct the parse. May include vertical specific adjustments. Eg: For the query [delete my 7 p.m. alarm called chicken] and intent Delete_alarm(alarm_object=RD(category=AlarmObject( label=\"chicken\", trigger_time_datetime=<< 7 PM >>))), the effective argument span is \"7 p.m.\" + \"chicken\" (total length of 13).",
          "format": "float",
          "type": "number"
        },
        "fulfillableDominantMedia": {
          "description": "Whether this is a fulfillable, dominant Media intent.",
          "type": "boolean"
        },
        "groundabilityScore": {
          "description": "Grounding Signals. Score indicating how grounded the intent is, populated by the Grounding Box.",
          "format": "double",
          "type": "number"
        },
        "groundingProviderFeatures": {
          "$ref": "AssistantGroundingRankerGroundingProviderFeatures",
          "description": "Grounding Provider related ranking features, including general Grounding Provider ranking features(shared among multiple GPs) and specific Grounding Provider ranking features(provided by a specific GP)."
        },
        "hasAnswerGroup": {
          "description": "Whether the interpretation has a Search answer group object, signifying it came from Search resolution.",
          "type": "boolean"
        },
        "inQueryMaxEffectiveArgSpanLength": {
          "description": "This is a cross-intent feature which is calculated by iterating all intent candidates. This feature should be populated in post-IG stage (before GB).",
          "format": "float",
          "type": "number"
        },
        "intentName": {
          "description": "intent_name is used by PFR ensemble model. See go/pfr_ha_launch_doc",
          "type": "string"
        },
        "intentNameAuisScore": {
          "description": "QUS intent-based ranking signals. Assistant User Interaction Score which is aggregated using intent name.",
          "format": "double",
          "type": "number"
        },
        "intentNameAuisScoreExp": {
          "description": "Assistant User Interaction Score which is aggregated using intent name from exp laelaps.",
          "format": "double",
          "type": "number"
        },
        "isFeasible": {
          "description": "Feasibility of fulfilling the binding set. Eg: For PlayMedia, this is equivalent to playability. More details: go/hgr-feasibility-feature.",
          "type": "boolean"
        },
        "isFullyGrounded": {
          "description": "Whether the intent is fully grounded.",
          "type": "boolean"
        },
        "isPlayGenericMusic": {
          "description": "Whether the intent is a PlayGenericMusic-type intent.",
          "type": "boolean"
        },
        "isPodcastIntent": {
          "description": "Whether the intent is a podcast intent.",
          "type": "boolean"
        },
        "kscorerRank": {
          "description": "The rank order of the interpretation as determined by kscorer. The kscorer-determined dominant interpretation, if any, gets a rank of 0. The remaining N interpretations get a rank of 1 through N.",
          "format": "int32",
          "type": "integer"
        },
        "laaFeatures": {
          "$ref": "AssistantGroundingRankerLaaFeatures",
          "description": "Learn and adapt(go/laa) related features. Design doc: go/laa-profile-signal-for-grounding."
        },
        "maskCandidateLevelFeatures": {
          "description": "This feature is always false / no-op in serving time. In training time, this feature may be set true on specific examples for weighted training where when this signal is true, only cross-intent level features are used for training and other candidate level features are masked (set as missing).",
          "type": "boolean"
        },
        "maxHgrScoreAcrossBindingSets": {
          "description": "The maximum score assigned by the Horizontal Grounding Ranker (HGR) across all of the intent's binding sets.",
          "format": "double",
          "type": "number"
        },
        "numAlternativeHypothesis": {
          "description": "Number of alternative hypotheses from speech recognition(S3).",
          "format": "float",
          "type": "number"
        },
        "numConstraints": {
          "description": "Sum of the number of constraints used by the Grounding Box to ground each variable.",
          "format": "double",
          "type": "number"
        },
        "numConstraintsSatisfied": {
          "description": "Sum of the number of constraints satisfied for each variable. Depending on the match score for a constraint, this number can be fractional and is in the range [0, num_constraints]. Populated by the Grounding Box.",
          "format": "double",
          "type": "number"
        },
        "numGroundableArgs": {
          "description": "Number of groundable arguments the intent has, populated by the Grounding Box.",
          "format": "double",
          "type": "number"
        },
        "numGroundedArgs": {
          "description": "Number of grounded arguments the intent has, populated by the Grounding Box.",
          "format": "double",
          "type": "number"
        },
        "numVariables": {
          "description": "Signals as proposed in go/improved-grounding-signals. Number of arguments, possibly nested, that the Grounding Box tried to ground.",
          "format": "double",
          "type": "number"
        },
        "numVariablesGrounded": {
          "description": "Number of arguments, possibly nested, that the Grounding Box was able to ground. This includes ambiguously grounded arguments.",
          "format": "double",
          "type": "number"
        },
        "parsingScoreMse8BucketId": {
          "description": "A ID corresponding to which bucket a given parsing score belongs in.",
          "format": "int32",
          "type": "integer"
        },
        "pq2tVsAssistantIbstCosine": {
          "description": "Cosine similarity between predicted query-to-term model and assistant intent-type-based salient terms. This is intended to be only used for ACE ranking and only populated for assistant traffic.",
          "format": "double",
          "type": "number"
        },
        "pq2tVsIbstCosine": {
          "description": "Cosine similarity between predicted query-to-term model and intent-type-based salient terms. This is intended to be used as a backoff to pq2t_vs_qibst_cosine if it is missing.",
          "format": "double",
          "type": "number"
        },
        "predictedIntentConfidence": {
          "description": "Intent confidence predicted by the AssistantVerticalClassifier QRewrite servlet.",
          "format": "float",
          "type": "number"
        },
        "searchDispatch": {
          "description": "The determination made by the SearchDispatchingConfig as to whether and how this interpretation should be dispatched to Search.",
          "enum": [
            "UNKNOWN",
            "NONE",
            "BRIDGE_API",
            "FULFILL_INTENT",
            "EMIT_ONLY",
            "COUNTERFACTUAL_LOG_ONLY",
            "CAPACITY_ACCOUNTING"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "These rules are no-ops wrt. dispatching. The only effect they produce is the logging of the associated |counterfactual_events|.",
            "These rules only consume capacity constraints, but are not dispatched. This way the rules can be used for the suppression for intents lower in the list."
          ],
          "type": "string"
        },
        "topHypothesisConfidence": {
          "description": "Average of per-word confidence for top speech recognition hypothesis. The value is from RecognizerHypothesisLog: http://google3/logs/proto/speech/service/recognizer_log.proto?l=848&rcl=281400256",
          "format": "float",
          "type": "number"
        },
        "verticalConfidenceScore": {
          "description": "Horizontal feature that stores information about confidence scores for each resolution within the binding set.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantProductivityListItem": {
      "description": "A message to represent an item in a list. Just a basic string for now, but extensible for the future.",
      "id": "AssistantProductivityListItem",
      "properties": {
        "name": {
          "description": "[REQUIRED] The name of the list item.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantRemindersAttachment": {
      "description": "Proto descrbing an attachment to an Assistant Reminder. If the attachment has different behavior on different surfaces (e.g., deeplinks), there will be multiple attachments attach to the Reminder. Each of them will specify the surface type and the corresponding deeplink.",
      "id": "AssistantRemindersAttachment",
      "properties": {
        "id": {
          "description": "REQUIRED. An unique identifier for the attachment. We have a plan to index this field, so it's marked as REQUIRED. Chat with opa-reminders-eng@ if you have a use case without an attachment ID.",
          "type": "string"
        },
        "link": {
          "$ref": "AssistantRemindersAttachmentLink"
        },
        "surfaceType": {
          "description": "REQUIRED. Surface types this attachment should be shown.",
          "items": {
            "enum": [
              "UNSPECIFIED",
              "ANDROID_PHONE"
            ],
            "enumDescriptions": [
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantRemindersAttachmentLink": {
      "id": "AssistantRemindersAttachmentLink",
      "properties": {
        "linkUrl": {
          "description": "REQUIRED. The link to surface to frontends (e.g., Hubpage, notifications.) This could also be a surface-specific deeplink (be sure to set `surface_type` accordingly.)",
          "type": "string"
        },
        "notificationText": {
          "$ref": "AssistantRemindersNlgTemplateKey",
          "description": "REQUIRED. The text for the notification link button. Note: We cannot take nlp_generation.TemplateData yet due to cyclic dependency. The plan is to cut dependency from TemplateData to quality.actions.Reminder."
        }
      },
      "type": "object"
    },
    "AssistantRemindersMemoryPayload": {
      "description": "Since this is stored in BE, any update on this proto needs LGTM by ARIS storage owner",
      "id": "AssistantRemindersMemoryPayload",
      "properties": {
        "hasReferencedEntityAtCreation": {
          "description": "Whether the reminder created has a referenced_entity attached to it or not(go/hub-memory-payload). Since we plan to set this in Assistant reminder creation path flow, in case later the referenced_entity is removed from the reminder, then this bit might still remain true. Also in case referenced_entity is later added to reminder(for example when referenced_entity is attached by Server), then also this bit might remain false. This bit will be used to *guess* if the user has a memory-enabled AGSA, thus we'll surface the \"open memory\" button on hubpage. This check is not perfect, as the user might have other phones with older AGSA, so this is just a *best guess*. This field won't be stored in Memory backend, and will not be populated back when retrieving reminders.",
          "type": "boolean"
        },
        "recordId": {
          "description": "Id of record that is associated with Reminder. This will be set for all Assistant reminders created after the first launch of the Reminder Memory integration, see go/reminders-memory for more details. Also, this might apply to all other types of reminders.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantRemindersNlgTemplateKey": {
      "description": "Equivalent to nlp_generation.TemplateKey. We cannot use nlp_generation.TemplateKey message directly becasue that proto is defined in a relatively large proto and has other dependencies, which will increase the size unnecessary and might hit many limitations (e.g., 5MiB limitation for Spanner type environment.).",
      "id": "AssistantRemindersNlgTemplateKey",
      "properties": {
        "messageSet": {
          "description": "REQUIRED.",
          "type": "string"
        },
        "templateName": {
          "description": "REQUIRED.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantTeleportTeleportNicknameSignals": {
      "id": "AssistantTeleportTeleportNicknameSignals",
      "properties": {
        "hasLocationInterpretation": {
          "description": "Whether the nickname could also refer to a location. For example, \"walmart\", \"starbucks\".",
          "type": "boolean"
        },
        "installInfo": {
          "description": "Indicates whether the user has the app installed.",
          "enum": [
            "INSTALLATION_INFORMATION_UNAVAILABLE",
            "IS_INSTALLED_APP",
            "IS_NOT_INSTALLED_APP"
          ],
          "enumDescriptions": [
            "The annotator was not aware of installed apps, or the resource is not an app.",
            "The resource is an app, and the annotator had the information that it is installed.",
            "The resource is an app, and the annotator had the information that it is not installed."
          ],
          "type": "string"
        },
        "isGeneric": {
          "description": "True when the name is generic, i.e when it could refer to multiple packages from different developrs. For example, \"mail\" is considered a generic name (since it can refer to \"gmail\", \"yahoo mail\" etc.) but \"facebook\" although could refer to both \"facebook\" and \"facebook lite\" is not considered generic (both packages are from the same third party).",
          "type": "boolean"
        },
        "nicknameTier": {
          "description": "The tier of the nickname.",
          "enum": [
            "UNKNOWN",
            "UNRESTRICTED",
            "INTENT_REQUIRED",
            "APP_PHRASE_REQUIRED"
          ],
          "enumDescriptions": [
            "Default value for unknown tier.",
            "Nicknames that always refer to the respective application or url. For example, \"facebook\" always refers to the Facebook app / homepage.",
            "Nicknames that refer to the app/url when the intent is to execute an action on the app/url. For example, \"most wanted\" refers to the \"Need for Speed Most Wanted\" app, only if the user asks, for example, to open the app - \"open most wanted\".",
            "Nicknames that refer to the app/url when the app/url restriction is explicit. For example, \"banking\" is a nickname for the \"Bank of America Mobile Banking\" app, only if user explicitly states they are referring to the app - \"banking app\", \"open banking application\"."
          ],
          "type": "string"
        },
        "source": {
          "enum": [
            "DEFAULT",
            "GELLER",
            "DEVICE_CAPABILITIES"
          ],
          "enumDescriptions": [
            "",
            "",
            "These annotations are generated on the fly (server-side), and are not matched by SE Muppet using the offline-generated corpus."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsCommonContactMatchSignal": {
      "description": "Neural contact match signals.",
      "id": "AssistantVerticalsCommonContactMatchSignal",
      "properties": {
        "matchScore": {
          "description": "Neural contact match similarity score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoActionProjectConfig": {
      "description": "Metadata for Actions-on-Google configuration.",
      "id": "AssistantVerticalsHomeautomationProtoActionProjectConfig",
      "properties": {
        "contextId": {
          "description": "Actions-on-Google action context ID. See go/sdm-hospitality-design.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoAgentDeviceId": {
      "description": "An agent + device pair that uniquely identifies a device.",
      "id": "AssistantVerticalsHomeautomationProtoAgentDeviceId",
      "properties": {
        "agentId": {
          "description": "The agent's ID. Generally it is the agent's Google pantheon project id.",
          "type": "string"
        },
        "deviceId": {
          "description": "Device ID defined by the agent.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoAgentInformation": {
      "description": "AgentInformation represents the details needed to support both 1P and 3P partnerships for Home Automation. Next ID: 7",
      "id": "AssistantVerticalsHomeautomationProtoAgentInformation",
      "properties": {
        "authType": {
          "enum": [
            "OPEN_AUTH_DEFAULT",
            "NEST_AUTH_PROXY"
          ],
          "enumDescriptions": [
            "Device uses 3p path with token authentication. This is the default value used when a different authentication type is not specified.",
            "Device uses 1p Nest path (eg: Olive) with gaia credential authentication."
          ],
          "type": "string"
        },
        "deviceSource": {
          "enum": [
            "UNKNOWN",
            "CLOUD_SYNC",
            "ASSISTANT_SETTING_OOBE",
            "LOCAL_SYNC",
            "CHIP_SYNC"
          ],
          "enumDescriptions": [
            "",
            "Device is created through HA2 SyncDevices flow, are HA2 cloud agent devices. ultravox is a cloud agent as well as surface device and it's using Sync flow.",
            "Device created through Assistant Setting at OOBE time, they're things that are mastered within google internally.",
            "Device is created through the local device platform to HGS sync flow. These devices are not necessarily mastered in a 3P cloud - they are locally detected by an assistant device and then synced to HGS directly. See go/aogh-dd.",
            "Device created through local CHIP provision and sync up. Chip synced devices can be the same devices as the devices synced from cloud, and the sync and de-dup logic can be very complicated."
          ],
          "type": "string"
        },
        "executionPath": {
          "enum": [
            "HARPOON_DEFAULT",
            "STUBBY"
          ],
          "enumDescriptions": [
            "Execute through Harpoon call. This is the default value used when the execution_path is not specified.",
            "Execute through stubby RPC call."
          ],
          "type": "string"
        },
        "id": {
          "description": "Unique Agent ID which maps to a specific Agent. Not using Agent Name here as it may change over time.",
          "type": "string"
        },
        "key": {
          "description": "Agent's foreign key that uniquely identifies a user's device.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoAttribute": {
      "description": "Protos representing device or structure attributes. See go/hgs-attributes-protos. Only protos approved and formalized by assistant/HG team should be added here.",
      "id": "AssistantVerticalsHomeautomationProtoAttribute",
      "properties": {
        "structureBasedRoutine": {
          "$ref": "AssistantVerticalsHomeautomationProtoCommonStructureBasedRoutine"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoAttributes": {
      "description": "LINT.IfChange(proto_attributes)",
      "id": "AssistantVerticalsHomeautomationProtoAttributes",
      "properties": {
        "attributeProtos": {
          "items": {
            "$ref": "AssistantVerticalsHomeautomationProtoAttribute"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoCommonEventTrigger": {
      "description": "LINT.IfChange(proto_event_trigger) Next id: 5",
      "id": "AssistantVerticalsHomeautomationProtoCommonEventTrigger",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "eventTriggerPayload": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "description": "Detailed settings for the event trigger; unset if not applicable.",
          "type": "object"
        },
        "eventTriggerType": {
          "description": "Different event type may have different settings. For example: * SCHEDULED will have event_trigger_payload of cs/symbol:assistant.verticals.voice_shortcut.proto.Schedule * LOCATION will have event_trigger_payload of cs/symbol:assistant.verticals.voice_shortcut.proto.LocationTriggerEvent",
          "enum": [
            "UNKNOWN",
            "SCHEDULED",
            "LOCATION",
            "DEVICE_CONTROL",
            "DEVICE_SENSES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "For Routine triggered by Home Intelligence Service (IQS) based on DEVICE_STATE_CHANGE. NOTE: This trigger is currently handled by IQS team go/iqs-hhr.",
            "For Routine triggered by Home Intelligence Service (IQS) based on DEVICE_SENSOR_SIGNAL. NOTE: This trigger is currently handled by IQS team go/iqs-hhr."
          ],
          "type": "string"
        },
        "triggerSource": {
          "description": "Unique identifier for the EventTrigger, e.g. SCHEDULED_ROUTINES. See the enum values of cs/symbol:WorkflowTriggerInput.TriggerSource",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoCommonStructureBasedRoutine": {
      "description": "Routines team stores the core Structure Based Routine data as the payload. We will add specific metadata on a per-need basis. LINT.IfChange(proto_structure_based_routine) Next id: 12 These two forms of payload are equivalent data in different formats and both will be stored in Home Graph. 1. The internal format will fan out to the DynamicEntity Footprints for read in Settings flow and Execution. 2. The UI format will be stripped out upon replication to DynamicEntity Footprints due to its redundancy and the Footprints data size limit, i.e. DE Footprints will only contain the internal format.",
      "id": "AssistantVerticalsHomeautomationProtoCommonStructureBasedRoutine",
      "properties": {
        "enabled": {
          "description": "Whether this Routine is enabled or not. If false, then this Routine can't be triggered by Voice.",
          "type": "boolean"
        },
        "googlePreconfigWorkflowId": {
          "description": "The unique identifier for a class of workflows. For example: * \"sbr_001\" => Away * \"sbr_002\" => Home * \"category_template\" => CUSTOM",
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "payload": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "description": "Internal format payload primarily for Routines team use.",
          "type": "object"
        },
        "securityLevel": {
          "description": "The security level of the Structure Based Routine as determined by the most security-sensitive task.",
          "enum": [
            "UNKNOWN",
            "ALLOW_UNVERIFIED",
            "ALLOW_VERIFIED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "shared": {
          "type": "boolean"
        },
        "storagePayload": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "type": "object"
        },
        "structureId": {
          "type": "string"
        },
        "triggers": {
          "description": "Voice or event triggers.",
          "items": {
            "$ref": "AssistantVerticalsHomeautomationProtoCommonStructureBasedRoutineTrigger"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "UNDEFINED",
            "CURATED",
            "ALARM",
            "CUSTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "uiPayload": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "description": "UI format payload primarily for external team use.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoCommonStructureBasedRoutineTrigger": {
      "description": "Next id: 3",
      "id": "AssistantVerticalsHomeautomationProtoCommonStructureBasedRoutineTrigger",
      "properties": {
        "eventTrigger": {
          "$ref": "AssistantVerticalsHomeautomationProtoCommonEventTrigger"
        },
        "voiceTrigger": {
          "$ref": "AssistantVerticalsHomeautomationProtoCommonVoiceTrigger"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoCommonVoiceTrigger": {
      "description": "LINT.IfChange(proto_voice_trigger) Next id: 2",
      "id": "AssistantVerticalsHomeautomationProtoCommonVoiceTrigger",
      "properties": {
        "query": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoConciergeFeatures": {
      "description": "The Concierge features a structure is eligible for. See {@link home.graph.common.ConciergeFeatures}.",
      "id": "AssistantVerticalsHomeautomationProtoConciergeFeatures",
      "properties": {
        "conciergeProductFeatures": {
          "items": {
            "enum": [
              "UNKNOWN_PRODUCT_FEATURE",
              "E911"
            ],
            "enumDescriptions": [
              "LINT.IfChange",
              "LINT.ThenChange(//depot/google3/home/graph/proto/common/enums.proto)"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoDeviceTargetingOutputQueryInfo": {
      "description": "Next ID: 5",
      "id": "AssistantVerticalsHomeautomationProtoDeviceTargetingOutputQueryInfo",
      "properties": {
        "annotatedSpanDevice": {
          "description": "The query span for device mention.",
          "type": "string"
        },
        "annotatedSpanRoom": {
          "description": "The query span for room mention.",
          "type": "string"
        },
        "annotatedSpanStructure": {
          "description": "The query span for structure mention.",
          "type": "string"
        },
        "processedMentionedSpan": {
          "description": "This field is from query_info.processed_mentioned_span in DTO.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoHomeAutomationDevice": {
      "description": "Next ID: 9",
      "id": "AssistantVerticalsHomeautomationProtoHomeAutomationDevice",
      "properties": {
        "deviceSelectionLog": {
          "$ref": "AssistantLogsDeviceSelectionLog",
          "description": "the next 3 fields are for Lumos output (DTO) that needs to be propagated to the Fulfilment through the HomeAutomationDevice proto."
        },
        "dtoError": {
          "$ref": "AssistantDeviceTargetingDeviceTargetingError"
        },
        "dtoQueryInfo": {
          "$ref": "AssistantVerticalsHomeautomationProtoDeviceTargetingOutputQueryInfo",
          "description": "This field is from query_info in DTO."
        },
        "homeautomationMetadata": {
          "$ref": "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaData",
          "description": "Device meta data."
        },
        "list": {
          "description": "list of HomeAutomationDeviceItem. After migration completes, we will mark the above 4 field as deprecated and only use this field.",
          "items": {
            "$ref": "AssistantVerticalsHomeautomationProtoHomeAutomationDeviceItem"
          },
          "type": "array"
        },
        "matchedItemKey": {
          "description": "Corresponding to casse matched_item CustomTypeItem key.",
          "type": "string"
        },
        "matchedItemRawvalue": {
          "description": "Corresponding to casse Argument raw_value.",
          "type": "string"
        },
        "matchedItemValue": {
          "description": "Corresponding to casse matched_item CustomTypeItem value.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoHomeAutomationDeviceItem": {
      "id": "AssistantVerticalsHomeautomationProtoHomeAutomationDeviceItem",
      "properties": {
        "homeautomationMetadata": {
          "$ref": "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaData",
          "description": "Device meta data."
        },
        "matchedItemKey": {
          "description": "Corresponding to casse matched_item CustomTypeItem key.",
          "type": "string"
        },
        "matchedItemRawvalue": {
          "description": "Corresponding to casse Argument raw_value.",
          "type": "string"
        },
        "matchedItemValue": {
          "description": "Corresponding to casse matched_item CustomTypeItem value.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaData": {
      "description": "Next ID: 43",
      "id": "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaData",
      "properties": {
        "actionProjectConfigs": {
          "description": "Custom actions that this item supports.",
          "items": {
            "$ref": "AssistantVerticalsHomeautomationProtoActionProjectConfig"
          },
          "type": "array"
        },
        "agentInformation": {
          "$ref": "AssistantVerticalsHomeautomationProtoAgentInformation",
          "description": "Agent details."
        },
        "assistantDeviceId": {
          "description": "Device ID that matches the ID passed from the device to discourse_context when a user issues a query to an Assistant-enabled device that is registered with Cast (via CCS (see go/castservers)), or some other service.",
          "type": "string"
        },
        "attributes": {
          "additionalProperties": {
            "description": "Properties of the object.",
            "type": "any"
          },
          "description": "Attributes data as provided from SYNC. This gets used in mutation and execution and in some potential cases, in biasing.",
          "type": "object"
        },
        "creatorGaiaId": {
          "description": "See Device.creator_gaia_ids in //home/graph/proto/service/types.proto. If empty, the GAIA ID from the request EUC is assumed to be the creator. We only need at most one creator_gaia_id.",
          "format": "int64",
          "type": "string"
        },
        "derivedType": {
          "description": "Any types that are not the given item type, but derived later. For example, if an item has type action.devices.types.OUTLET but is named \"floor lamp\" we can derive that it also has type action.devices.types.LIGHT. Also considered along with |type| when triggering type-based actions.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "deviceModelId": {
          "description": "See note in home_graph.proto; loaded into DE now to avoid having to double-read assistant settings records as per go/smarthome-removing-assistant-settings",
          "type": "string"
        },
        "gcmExecutionAddress": {
          "description": "GCM address for cloud execution across google cloud messaging rather than 3p cloud; for future use.",
          "type": "string"
        },
        "groupIds": {
          "description": "List of parent group IDs, if the device is added to one or multiple device groups (see go/home-groups). Will be consumed by Smart Home APIs and (in the future) Assistant CTF to populate the group member list of device groups.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "hashValue": {
          "description": "The hash value from go/de-consistency-check",
          "type": "string"
        },
        "lanscanOptedIn": {
          "description": "Whether local home platform should discover new devices via LAN for the structure.",
          "type": "boolean"
        },
        "modelName": {
          "description": "Model name from HomeGraph, populated from model_manifest.model_name. See b/200087451.",
          "type": "string"
        },
        "notificationEnabledByUser": {
          "description": "Indicates whether notifications have been enabled by a user and will be announced for this device. This is set by the user within the Google app settings, and Google will announce the device notification only if both notification_supported_by_agent and notification_enabled_by_user are true.",
          "type": "boolean"
        },
        "notificationSupportedByAgent": {
          "description": "Indicates whether the device is capable of sending notifications. This field will be set by the agent (partner) on an incoming SYNC. If a device is not capable of generating notifications, the partner should set this flag to false. If a partner is not capable of calling ReportStateAndNotification to send notifications to Google, the partner should set this flag to false. If there is a user setting in the partner app to enable notifications and it is turned off, the partner should set this flag to false.",
          "type": "boolean"
        },
        "opaqueCustomData": {
          "description": "Store custom data for agent calls here. This will likely be short-lived -- we will replace this with calls to HGS. (Note: This may end up not temporary if we only need it for a couple partners -- more efficient to have it on a few users than require HGS reads for all users.",
          "type": "string"
        },
        "operationalNodeId": {
          "description": "Operational CHIP Node ID that combines the fabric ID and node id in format of . (Hex format without 0x prefix, for example, 0F001234FA67AA39.1234ABCD1111DDDD).",
          "type": "string"
        },
        "otherDeviceIds": {
          "description": "Other agent id + foreign id pairs associated with the device. This can be used to represent a group of devices (e.g. Sonos' bonded zone) as a single device, or a device that comes in through different sync flows (e.g. Newman with a Nest camera).",
          "items": {
            "$ref": "AssistantVerticalsHomeautomationProtoAgentDeviceId"
          },
          "type": "array"
        },
        "otherDeviceSources": {
          "description": "Additional device sources. This can be the result of the device being merged with other devices with a different source.",
          "items": {
            "enum": [
              "UNKNOWN",
              "CLOUD_SYNC",
              "ASSISTANT_SETTING_OOBE",
              "LOCAL_SYNC",
              "CHIP_SYNC"
            ],
            "enumDescriptions": [
              "",
              "Device is created through HA2 SyncDevices flow, are HA2 cloud agent devices. ultravox is a cloud agent as well as surface device and it's using Sync flow.",
              "Device created through Assistant Setting at OOBE time, they're things that are mastered within google internally.",
              "Device is created through the local device platform to HGS sync flow. These devices are not necessarily mastered in a 3P cloud - they are locally detected by an assistant device and then synced to HGS directly. See go/aogh-dd.",
              "Device created through local CHIP provision and sync up. Chip synced devices can be the same devices as the devices synced from cloud, and the sync and de-dup logic can be very complicated."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "parentNode": {
          "description": "LINT.IfChange(home_graph_single_parent) At the moment, we just have a single string. In future this will expand with additional metadata from client or cloud execution data store. In today's 'tree' HomeGraph each object has a single parent. In the future this may have a mesh for complex cases -- zones, doors, etc -- so we make this a repeated element today. LINT.ThenChange(//depot/google3/assistant/assistant_server/settings/user_defined_actions/footprints/footprint_accessor.cc:home_graph_single_parent)",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "parentType": {
          "description": "The type of the parent. Currently only set for devices, to distinguish between structure and room parents. Items currently have only one parent, and entries after the first parent_type are ignored.",
          "items": {
            "enum": [
              "UNKNOWN_ITEM_TYPE",
              "DEVICE",
              "ROOM",
              "PLACE",
              "GROUP",
              "SCENE",
              "STRUCTURE"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "personalizedNicknames": {
          "description": "User-given nicknames for an entity (e.g. \"My house\"). These nicknames are unique to the gaia user. Nickname in DeviceInfo is per-entity level nickname, while personalized_nicknames is per-user per-entity.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "physicalLocation": {
          "$ref": "AssistantVerticalsHomeautomationProtoPhysicalLocation",
          "description": "Stores the location for the STRUCTURE type."
        },
        "plural": {
          "description": "We use this to determine if the synonyms matched in the aqua interpretation is plural. Then we will return disambiguate dialog or execute commands with all the targets.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "primaryName": {
          "description": "Which of the values was the original, user-provided name -- or our disambiguated, cleaned-up version of it. This is what we use in TTS when we need to identify an object that wasn't just spoken uniquely by the user -- in disambiguation dialogue, or in response to a collective interrogative (e.g. \"what lights are on in the kitchen?\")",
          "type": "string"
        },
        "roleInformation": {
          "$ref": "AssistantVerticalsHomeautomationProtoRoleInformation",
          "description": "User's role information for this device. This will be used in Home Automation server to decide if user has authority to fulfill its request."
        },
        "routableViaGcm": {
          "description": "Only present for a target device. Indicates this target device is reachable by a local (AoGH) path via an AoGH device.",
          "type": "boolean"
        },
        "saftDocument": {
          "$ref": "NlpSaftDocument",
          "description": "SAFT Document with linguistic annotations for the primary device name."
        },
        "smartDeviceManagementData": {
          "$ref": "AssistantVerticalsHomeautomationProtoSmartDeviceManagementData",
          "description": "Data needed for SDM (fleet management). See go/enterprise-id-in-assistant."
        },
        "smartHomeFeatures": {
          "$ref": "AssistantVerticalsHomeautomationProtoSmartHomeFeatures",
          "description": "SmartHome feature flags that may be enabled per-item."
        },
        "supportedStructureFeatures": {
          "$ref": "AssistantVerticalsHomeautomationProtoSupportedStructureFeatures",
          "description": "The features that are available for a structure. Will only be populated if the item_type == STRUCTURE."
        },
        "supportedTraitsByAgent": {
          "additionalProperties": {
            "$ref": "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaDataSupportedTraits"
          },
          "description": "Map from agent ID to supported traits. Some devices (e.g. Newman) have multiple agents, with each agent being associated with a specific set of traits. This could alternatively have been formatted as map as {trait, agent} pairs instead of the {agent, list of trait} pairs, but we retain this format to be consistent with HomeGraph's representation. In practice, a trait should only be paired with a single agent (i.e. we should not have two agents with the same trait in their value list). This field is optional and should only be provided if the item has multiple agents.",
          "type": "object"
        },
        "supportsDirectResponse": {
          "description": "This device supports direct response -- if the device itself is issuing the query (which means it's also an assistant surface) we can return its payload directly rather than via cloud.",
          "type": "boolean"
        },
        "targetDeviceSignalStrengths": {
          "additionalProperties": {
            "format": "int64",
            "type": "string"
          },
          "description": "Only present for an AoGH device. HGS Device ID of a target device and the signal strength (RSSI in dB, higher is better) between that target device and the AoGH device. If this map is empty, there are no target devices reachable by this AoGH device.",
          "type": "object"
        },
        "tdssUpdateTimestamp": {
          "description": "The timestamp at which the TDSS map was last updated. This information is used to help determine which hub would be preferred if multiple hubs report the same reach-ability for a device.",
          "format": "google-datetime",
          "type": "string"
        },
        "traitRoutingHints": {
          "description": "For SHED devices, some traits can only be executed on 3P cloud, e.g. \"action.devices.traits.MediaInitiation\", \"action.devices.traits.Channel\" go/shed-per-trait-routing",
          "items": {
            "$ref": "HomeGraphCommonTraitRoutingHints"
          },
          "type": "array"
        },
        "traitRoutingTable": {
          "additionalProperties": {
            "$ref": "HomeGraphCommonRoutingTable"
          },
          "description": "Map from traits to routing table. Metadata includes preferred execution path per trait and, when Matter is preferred, which endpoint should be used for the trait.",
          "type": "object"
        },
        "traitToAttributeProtos": {
          "additionalProperties": {
            "$ref": "AssistantVerticalsHomeautomationProtoAttributes"
          },
          "description": "Map of trait to a proto representing the attribute. This is different from the attributes field above which is represented as a struct. The attributes here are represented as protos and will require specific support per trait.",
          "type": "object"
        },
        "type": {
          "description": "The item type, such as \"action.devices.types.VACUUM\" - to be used in triggering type-based actions, e.g. \"start vacuuming\": go/smarthome-type-based-actions.",
          "type": "string"
        },
        "userDefinedDeviceType": {
          "description": "The priority order of speech targeting: 1. user_defined_device_type 2. derived_device_type 3. device_type",
          "type": "string"
        },
        "voiceMatchRequired": {
          "description": "Set to which level of voice match is needed. Enum based on string input from the partner in json sync. Values accepted: \"none\" (but in this case partners won't set it), \"owner\" [requires matching one of the creator gaia IDs], or \"member\" [any recognized voice 'enrolled' on the device]. This may expand; only \"owner\" is in use for first partner, Tile.",
          "enum": [
            "ANY",
            "OWNER",
            "MEMBER"
          ],
          "enumDescriptions": [
            "Also default, and existing behavior == \"none\" in text",
            "Must match an actual creator_gaia_id on device",
            "Any member of the surface / structure interacting"
          ],
          "type": "string"
        },
        "willReportState": {
          "description": "This device will report state; we can query realtime state from local HGS rather than slow QUERY intent to the 3p cloud.",
          "type": "boolean"
        },
        "zoneNameSaftDocument": {
          "$ref": "NlpSaftDocument",
          "description": "SAFT Document with linguistic annotations for the zone name, if applicable."
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaDataSupportedTraits": {
      "id": "AssistantVerticalsHomeautomationProtoHomeAutomation_MetaDataSupportedTraits",
      "properties": {
        "traits": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoPhysicalLocation": {
      "id": "AssistantVerticalsHomeautomationProtoPhysicalLocation",
      "properties": {
        "address": {
          "type": "string"
        },
        "geoLocation": {
          "$ref": "GoogleTypeLatLng"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoRoleInformation": {
      "description": "Represents the user\u2019s role such as assistant only or manager for a device. Design doc: https://docs.google.com/document/d/1c1hnauEbBfDkywO3GZkI8ejHP765l2tLspmPgckEe2Y/",
      "id": "AssistantVerticalsHomeautomationProtoRoleInformation",
      "properties": {
        "iamCheckRequired": {
          "description": "When true, role_type will be ignored, Nest IAM RPC will called to check authority.",
          "type": "boolean"
        },
        "roleType": {
          "enum": [
            "UNDEFINED",
            "ASSISTANT_ONLY",
            "CAST_LEGACY_LINKED",
            "MANAGER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoSmartDeviceManagementData": {
      "id": "AssistantVerticalsHomeautomationProtoSmartDeviceManagementData",
      "properties": {
        "enterpriseId": {
          "description": "The enterprise that owns the structure. E.g. Disney, Dream Hotel, etc. This is used for log/analytics purpose. For privacy reasons, we log at enterprise level instead of structure level.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoSmartHomeFeatures": {
      "description": "SmartHome feature flags that may be enabled per-item. LINT.IfChange",
      "id": "AssistantVerticalsHomeautomationProtoSmartHomeFeatures",
      "properties": {
        "circadianLightingEnabled": {
          "description": "Flag indicating whether the background Circadian Lighting effect is enabled for a particular light (go/circadian-lighting-e2e).",
          "type": "boolean"
        },
        "energySavingsEnabled": {
          "description": "Flag indicating whether automatic Energy Savings are enabled for this item.",
          "type": "boolean"
        },
        "gentleWakeupEnabled": {
          "description": "Flag indicating whether Gentle Wake Up is enabled for this item (go/sleep-wake-design).",
          "type": "boolean"
        },
        "homeAwayOverMatterEnabled": {
          "description": "Flag indicating whether the user has enabled / disabled sending Home/Away status updates to the device through the Google custom IntelligenceEvents Matter cluster. (go/google-clusters-design)",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "AssistantVerticalsHomeautomationProtoSupportedStructureFeatures": {
      "description": "The features a structure supports.",
      "id": "AssistantVerticalsHomeautomationProtoSupportedStructureFeatures",
      "properties": {
        "conciergeFeatures": {
          "$ref": "AssistantVerticalsHomeautomationProtoConciergeFeatures"
        }
      },
      "type": "object"
    },
    "AttentionalEntitiesMentionProperties": {
      "description": "Represents the properties of a mention. Next ID: 13",
      "id": "AttentionalEntitiesMentionProperties",
      "properties": {
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The unique device on which the mention occurred. For example, if the user has two Google Home devices, this indicates which of the two was used."
        },
        "eventId": {
          "$ref": "EventIdMessage",
          "description": "ID of the event that resulted in this entity mention. For user and system turn AEs, this is taken from the ConversationSnapshotId of the snapshot containing this mention. For client AEs, this is empty. This can be used to join back this particular mention to the specific \"turn\" in which this mention took place."
        },
        "factoidScore": {
          "description": "If this mention corresponds to a WebAnswer, then this defines the score associated with that answer.",
          "format": "float",
          "type": "number"
        },
        "listEntryInfo": {
          "$ref": "AttentionalEntitiesMentionPropertiesListEntryInfo",
          "description": "If present, this entity was mentioned as part of a larger list."
        },
        "recency": {
          "description": "Estimates the recency of the mention. This is internally computed at runtime on a turn-by-turn basis.",
          "enum": [
            "RECENCY_UNSPECIFIED",
            "MOST_RECENT_TURN"
          ],
          "enumDescriptions": [
            "",
            "Corresponds to a mention from the most recent user-driven interaction. For example, this label would be applied to both mentions of \"Barack Obama\" in the following interaction: USER: How tall is Obama? GOOGLE: Barack Obama is six feet one inch tall. NOTE: This is currently only applicable to mentions that have a source of User or System."
          ],
          "type": "string"
        },
        "role": {
          "$ref": "AttentionalEntitiesSemanticRoleId",
          "description": "The semantic role that the entity was used in."
        },
        "salience": {
          "description": "How salient this mention is. This field will only be set if the mention is derived from a SearchAnswerValue. See go/webresultsdata-as-aes for more details.",
          "enum": [
            "UNKNOWN_SALIENCE",
            "PRIMARY",
            "METADATA"
          ],
          "enumDescriptions": [
            "Any mention that is not derived from a SearchAnswerValue will not have a Salience.",
            "This mention corresponds to the primary entity in the response. For example, if the query is \"who was the 44th President of the US\", then the entity for \"Barack Obama\" would be marked as PRIMARY. Note that there may more than one PRIMARY entity in a response if a list of values is displayed (e.g. \"Stephen King books\").",
            "This mention corresponds to metadata associated with the answer. For the US President query mentioned above, something like the inauguration date could be considered as METADATA. If it is difficult to identify a PRIMARY entity, then all entities may be marked as METADATA."
          ],
          "type": "string"
        },
        "source": {
          "$ref": "AttentionalEntitiesMentionPropertiesSource",
          "description": "Contains metadata about the source of the mention."
        },
        "spatialProperties": {
          "$ref": "AttentionalEntitiesSpatialProperties",
          "description": "If present, properties of visual mentions (e.g., how they are displayed to the user, visibility, etc.)."
        },
        "surfaceForm": {
          "$ref": "AttentionalEntitiesSurfaceForm",
          "description": "Details about how this mention was presented."
        },
        "timestamp": {
          "description": "Unix timestamp noting (approximately) when this mention occurred. We do not guarantee that the time will correspond precisely to when the user uttered/heard a response. If mentions within a single turn have *different* timestamps, they should accurately reflect the order in which the mentions occurred. If that order is unknown, they should all have the same timestamp.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AttentionalEntitiesMentionPropertiesListEntryInfo": {
      "description": "Contains information about how an entity was presented as part of a list.",
      "id": "AttentionalEntitiesMentionPropertiesListEntryInfo",
      "properties": {
        "index": {
          "description": "The index of the entity presented to the user. NOTE: Indexing starts from 0.",
          "format": "int64",
          "type": "string"
        },
        "lexicalGroundingsId": {
          "description": "A string which uniquely identifies the list item this entity represents in the list. For example, consider the \"OrderPizza\" intent with the \"size\" slot: U: I want to order a pizza A: Sure. What size do you want: large, medium, or small? U: Gigantic The lexical_groundings_id can be \"large\" to identify the large item in the list. This lexical_groundings_id together with the semantic role fields (i.e., role.intent_id & role.role_id) can be used to match the nlp_semantic_parsing::LexicalGroundings::ValueTermType to utilize lexical grounding for i18n of static list selection items. Note that this field only needs to be populated when developers expect to provide lexical groundings for the list item this entity represents. Effectively, this field will be populated when this entity is published by ListPresentationFrame and the ::quality::dialog_manager::IntentStageSignals::FieldCandidate.lexical_groundings_id field is populated. See go/lpf-i18nv2 & go/taskstate-ae-sync for more details. ",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AttentionalEntitiesMentionPropertiesSource": {
      "description": "The agent or system from which the mention was derived. Each mention corresponds to a single source.",
      "id": "AttentionalEntitiesMentionPropertiesSource",
      "properties": {
        "client": {
          "$ref": "AttentionalEntitiesMentionPropertiesSourceClient"
        },
        "system": {
          "$ref": "AttentionalEntitiesMentionPropertiesSourceSystem"
        },
        "user": {
          "$ref": "AttentionalEntitiesMentionPropertiesSourceUser"
        }
      },
      "type": "object"
    },
    "AttentionalEntitiesMentionPropertiesSourceClient": {
      "description": "The client provided this entity. Currently, this exclusively corresponds to an entity that was circulated by the client. See go/on-device-aes for more details.",
      "id": "AttentionalEntitiesMentionPropertiesSourceClient",
      "properties": {},
      "type": "object"
    },
    "AttentionalEntitiesMentionPropertiesSourceSystem": {
      "description": "The Assistant mentioned this entity. This corresponds to entities annotated during fulfillment. More specifically, these entities are typically provided by developers either via a Monastery frame or an InteractionBuilder.",
      "id": "AttentionalEntitiesMentionPropertiesSourceSystem",
      "properties": {},
      "type": "object"
    },
    "AttentionalEntitiesMentionPropertiesSourceUser": {
      "description": "The user mentioned this entity. It was extracted from a previous winning intent (IntentQuery or IntentUpdate). Such entities are computed at runtime from the interpretation history without any developer intervention.",
      "id": "AttentionalEntitiesMentionPropertiesSourceUser",
      "properties": {},
      "type": "object"
    },
    "AttentionalEntitiesSemanticRoleId": {
      "description": "Uniquely identifies a semantic role. When this role corresponds to a slot in a registered user intent (see go/assistant-intent-catalog), then the SemanticRoleId maps precisely onto that slot in the intent catalog. However, not all semantic roles corresponds to such user intent slots.",
      "id": "AttentionalEntitiesSemanticRoleId",
      "properties": {
        "intentId": {
          "description": "Semantic roles will be defined locally, within the context of a single task/feature. The |intent_id| is a unique identifier for such a local cluster. In most cases, this should be exactly the same as the name of the intent used for TaskState (see go/assistant-intent-catalog). In cases where the intent isn't well-defined, this can be an arbitrary, feature-defined identifier.",
          "type": "string"
        },
        "roleId": {
          "description": "Identifier for a semantic role, unique within the namespace of |intent_id|. When this role corresponds to a slot in the intent, the |role_id| should be equal to the name of that argument. For example, consider an entry in the intent catalog: core_intent { id { id: \"BookARide\" } slot { name: \"provider\" type { string_type { } } } slot { name: \"num_riders\" type { number_type { } } } } Then, the |role_id| would be \"provider\" or \"num_riders\" when referring to one of these slots. NOTE: when responding to the user, the Assistant may actually make use of other roles such as \"ETA\" or \"driver\" that are not part of the intent declaration. These should still be assigned consistent semantic roles. For example, a dialog with the Shopping feature: User: Where can I buy XYZ? Google: [Best Buy in Sunnyvale] has [XYZ] in stock. User: Great! Give me directions. In this case, both \"Best Buy\" and \"XYZ\" would be pushed to attentional entities. Best Buy, in this case, may not be an argument in the ShoppingItemStockInquiry intent, but should still have a consistent |role_id| such as \"possessing_business\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AttentionalEntitiesSpatialProperties": {
      "description": "Properties of visual mentions (e.g., how they are displayed to the user, visibility, etc.).",
      "id": "AttentionalEntitiesSpatialProperties",
      "properties": {
        "visibility": {
          "enum": [
            "UNKNOWN_VISIBILITY",
            "VISIBLE",
            "HIDDEN"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "AttentionalEntitiesSurfaceForm": {
      "description": "How the entity was presented in this mention at a surface level. For example, \"President Barack Obama\" or \"Barack Obama\" or \"he\" might all be reasonable surface forms for the MID /m/02mjmr.",
      "id": "AttentionalEntitiesSurfaceForm",
      "properties": {
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "BiasingPerDocData": {
      "description": "This data is expected to appear in approximately 2 out of every 1,000 documents with an average of 2 fields per document. Rough order of size is in the hundreds of kilobytes per Mustang shard.",
      "id": "BiasingPerDocData",
      "properties": {
        "biasingfield": {
          "items": {
            "$ref": "BiasingPerDocDataBiasingField"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "BiasingPerDocData2": {
      "description": "A replacement for BiasingPerDocData that is more efficient wrt size in the index.",
      "id": "BiasingPerDocData2",
      "properties": {
        "biasingField": {
          "items": {
            "$ref": "BiasingPerDocData2BiasingField"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "BiasingPerDocData2BiasingField": {
      "id": "BiasingPerDocData2BiasingField",
      "properties": {
        "compressedName": {
          "description": "A fingerprint of the actual name of the field.",
          "format": "uint32",
          "type": "integer"
        },
        "value": {
          "description": "The value, under various representations to get maximum compression. Exactly one of them is guaranteed to be filled. value as a double.",
          "format": "double",
          "type": "number"
        },
        "valueFloat": {
          "description": "a floating value, represented as an integer by converting using floating_value * 1000. Useable for all floating values that need 3 digits of precision, and are small enough.",
          "format": "int32",
          "type": "integer"
        },
        "valueInt": {
          "description": "value as an int32. When the value is encode-able as an integer.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "BiasingPerDocDataBiasingField": {
      "description": "Metadata fields on which we can bias (sort) search results independently from the normal ranking using a ScoreAdjuster",
      "id": "BiasingPerDocDataBiasingField",
      "properties": {
        "Name": {
          "description": "Fingerprint of the attribute name (no need to keep long field names)",
          "format": "uint64",
          "type": "string"
        },
        "Value": {
          "description": "Biasing value translated into a double for uniform comparison",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "BlobstoreBlobRef": {
      "description": "A BlobRef is used to refer to a blob in BlobStore. Clients may only manipulate blobs through BlobRefs. BlobRefs should not be sent in the clear outside of Google (for example, encoded in URLs, stored in a client cookie, or referred to in Javascript); for efficiency, the IDs expose internal details of the blobstore (such as machine IPs or cluster names). If clients need to store BlobRefs outside of Google, they must encrypt the BlobRef securely or use an alternative insecure identifier with an id->BlobRef mapping inside our network. ",
      "id": "BlobstoreBlobRef",
      "properties": {
        "BlobID": {
          "format": "byte",
          "type": "string"
        },
        "Options": {
          "format": "int64",
          "type": "string"
        },
        "RefID": {
          "format": "byte",
          "type": "string"
        },
        "ShardBin": {
          "format": "int32",
          "type": "integer"
        },
        "Size": {
          "description": "Size of the complete blob, in bytes.",
          "format": "int64",
          "type": "string"
        },
        "SourceV2BlobID": {
          "description": "The ID of the V2 blob this blob has",
          "type": "string"
        },
        "V2ReadBlobToken": {
          "description": "Deprecated.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "BlogPerDocData": {
      "description": "Additional data for Blog/Posts",
      "id": "BlogPerDocData",
      "properties": {
        "blogurlFp": {
          "description": "used for blogurl crowding.",
          "format": "uint64",
          "type": "string"
        },
        "clientSpamminess": {
          "description": "This score captures how spammy the client is that the micropost was created with. The higher the score the worse.",
          "format": "int32",
          "type": "integer"
        },
        "convTree": {
          "$ref": "BlogsearchConversationTree",
          "description": "For the threaded conversation view. Only populated in docs with provider type SYNTHETIC_CONVERSATION_DOC."
        },
        "copycatScore": {
          "format": "int32",
          "type": "integer"
        },
        "docQualityScore": {
          "format": "int32",
          "type": "integer"
        },
        "isSyntacticReshare": {
          "description": "A syntactic reshare is a document that is * created from an original and shared with friends and * we detect this resharing property by syntactically parsing the doc. . For example, a retweet is an example of a syntactic_reshare because we can detect that it's a reshare by grepping for \"RT @\".",
          "type": "boolean"
        },
        "microblogQualityExptData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Experimental data for quality experiments. This will NOT be populated in prod, but we will use this for experiments."
        },
        "numMentions": {
          "description": "For replies/reshares. num_mentions = number of times the pattern @foo appears in the document.",
          "format": "int32",
          "type": "integer"
        },
        "outlinks": {
          "items": {
            "$ref": "BlogPerDocDataOutlinks"
          },
          "type": "array"
        },
        "postContentFingerprint": {
          "description": "The fingerprint for the body text of the microblog post. It is copied from MicroBlogPost.post_content_fingerprint.",
          "format": "int32",
          "type": "integer"
        },
        "qualityScore": {
          "format": "int32",
          "type": "integer"
        },
        "spamScore": {
          "description": "Blog scoring signals.",
          "format": "int32",
          "type": "integer"
        },
        "universalWhitelisted": {
          "type": "boolean"
        },
        "userQualityScore": {
          "description": "User and doc quality scores for updates (aka microposts).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "BlogPerDocDataOutlinks": {
      "description": "Resolved url and site spamscore for outlinks in updates (aka microposts).",
      "id": "BlogPerDocDataOutlinks",
      "properties": {
        "aggregationFp": {
          "description": "Representative id for an equivalence class of URLs. E.g. http://youtube.com/watch?v=12 and http://youtube.com/watch?v=12&feature=related have the same aggregation id since they're effectively the same webpage",
          "format": "uint64",
          "type": "string"
        },
        "resolvedUrl": {
          "type": "string"
        },
        "siteSpamScore": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "BlogsearchConversationNode": {
      "id": "BlogsearchConversationNode",
      "properties": {
        "authorName": {
          "description": "The username of the author of the microblog post represented by this node.",
          "type": "string"
        },
        "children": {
          "description": "A list of docids of child nodes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "date": {
          "description": "The creation date of the doc.",
          "format": "int64",
          "type": "string"
        },
        "docid": {
          "description": "Docid of the microblog post represented by this node.",
          "type": "string"
        },
        "parent": {
          "description": "The docid of the parent node. The root of the tree will leave this empty.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "BlogsearchConversationTree": {
      "id": "BlogsearchConversationTree",
      "properties": {
        "convId": {
          "description": "The id of this conversation.",
          "type": "string"
        },
        "nodes": {
          "description": "The nodes in this conversation. No particular order is assumed.",
          "items": {
            "$ref": "BlogsearchConversationNode"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "BlueGingerClientVisibleProtoBlueGingerSupportedServices": {
      "description": "Information to indicate BG availability for businesses. This message is filled from Topic Server and stored in the GSR in Superroot.",
      "id": "BlueGingerClientVisibleProtoBlueGingerSupportedServices",
      "properties": {
        "modules": {
          "description": "List of supported modules for a business.",
          "items": {
            "$ref": "BlueGingerClientVisibleProtoBlueGingerSupportedServicesBlueGingerModule"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "BlueGingerClientVisibleProtoBlueGingerSupportedServicesBlueGingerModule": {
      "id": "BlueGingerClientVisibleProtoBlueGingerSupportedServicesBlueGingerModule",
      "properties": {
        "name": {
          "description": "Module name, e.g. hairdresser_reservation. from quality/views/extraction/kcube/bg/modules/modules.bzl.",
          "type": "string"
        },
        "services": {
          "description": "Services of this module that are supported by the business, e.g. haircuts.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "useCase": {
          "enum": [
            "UNKNOWN_USE_CASE",
            "OPENING_HOURS",
            "ON_DEMAND_OPENING_HOURS",
            "GEO_DATA_EXTRACTION",
            "OPERATING_MODE_EXTRACTION",
            "RESTAURANT_RESERVATION",
            "MASSAGE_RESERVATION",
            "HAIRDRESSER_RESERVATION",
            "NAIL_SALON_RESERVATION",
            "RUNNING_LATE",
            "FOOD_ORDERING",
            "LOCAL_INVENTORY_CHECK",
            "ON_DEMAND_LOCAL_INVENTORY",
            "WAITLIST",
            "CHECK_WAIT",
            "CHEFBOT",
            "ADS_CALL_CENTER_AUTHENTICATION",
            "PLAYSTORE",
            "TAKING_RESTAURANT_RESERVATIONS",
            "CALL_CENTER_DEMO",
            "ASSISTED_CALL_DEMO",
            "BUSINESS_OPT_IN",
            "CALLJOY_PILOT",
            "ASSISTANT_REMINDERS_DEMO",
            "HAPPY_BIRTHDAY",
            "ASSISTED_IVR",
            "DUPLEX_FOR_BUSINESS_PILOT",
            "SAY_THE_SAME_THING",
            "COVID_FAQ",
            "VANCOUVER",
            "MEENAPLEX",
            "REMOVED_USE_CASE_6",
            "SEMI_DELEGATED_CALLING",
            "HARDWARE_SETUP",
            "DUMDA_BOT",
            "SMART_REPLY",
            "DUPLEX_ZERO",
            "SPAM_FILTER",
            "TEXT",
            "IVR_CRAWLING",
            "VOICEMAIL",
            "INBOUND_SMB",
            "CCAI_DEMO",
            "DIALOGFLOW_DELEGATION",
            "AD_LEAD_VERIFICATION",
            "GET_HUMAN",
            "CHECK_INSURANCE_ACCEPTANCE"
          ],
          "enumDescriptions": [
            "// Data extraction:",
            "Opening hours extraction, triggered internally without an end-user in the loop. The trigger might be a user-edit, but the user is not being updated about the extraction results.",
            "On-demand opening hours extraction, i.e. requests are issued by an end-user who is also notified about the results of the task.",
            "",
            "",
            "",
            "",
            "See go/bg-hdr-2019.",
            "",
            "See go/duplex-running-late.",
            "See go/duplex-fo-pilot.",
            "Local Inventory Checks (go/duplex-dove).",
            "On-Demand Local Inventory (go/duplex-li-on-demand).",
            "",
            "Check wait: go/duplex-check-wait-time",
            "Chefbot (go/duplexify-cooking-goals).",
            "",
            "Play Store user authentication. See http://doc/16tApXKX1cc23AIuhIhPCWVkm1qkcajx2pHMkxW6kMAs",
            "Taking restaurant reservations on behalf of a restaurant. i.e. getting calls from clients who want to make a reservation, and trying to match their request with the restaurant's schedule.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Duplex for Business Pilot: go/duplex-voice-pilot",
            "Say The Same Thing game bot.",
            "Bot for answering FAQ about COVID-19 (go/bg-covid-faq).",
            "",
            "go/meenaplex-dd",
            "Was: ON_DEMAND_OPENING_HOURS.",
            "UC ID for testing ideas around a partial call delegation bot.",
            "UC ID for hardware setup prototype",
            "Experimental use case for a form of Meena+Duplex.",
            "Personal Call Assist.",
            "Duplex Zero Bot.",
            "Spam filter bot.",
            "Text extraction bot.",
            "IVR crawling bot.",
            "Voicemail bot.",
            "Duplex for Business - Inbound SMB bot.",
            "Duplex for Business - Demo for the CCAI integration.",
            "Duplex for Business - Dialogflow delegation module for CCAI integration.",
            "Duplex for Business - ad lead verification module for GLS integration.",
            "Get Human bot.",
            "Check health insurance acceptance."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "BookCitationPerDocData": {
      "description": "Per-doc data for the web page about the cited book Approximate size is on average ~10bytes",
      "id": "BookCitationPerDocData",
      "properties": {
        "bookId": {
          "description": "the book id for the main citation",
          "format": "int64",
          "type": "string"
        },
        "discretizedCitationScore": {
          "description": "the discretized citation score for the main book. we map the raw score 1.0-20.0 to 0 - 127",
          "format": "int32",
          "type": "integer"
        },
        "previewable": {
          "description": "Is there a preview or excerpt of the book on this document?",
          "type": "boolean"
        },
        "secondBookId": {
          "description": "book id for the second citation if we can't separate the two top citations (they are too close).",
          "format": "int64",
          "type": "string"
        },
        "secondDiscretizedCitationScore": {
          "description": "the discretized score for the second citation",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "BusinessHours": {
      "description": "We divide up a week into individual open intervals. If any are present then they must be arranged in strictly increasing order, with non-empty spaces between successive intervals, and all times between 0 and 604800, the number of seconds in a week.",
      "id": "BusinessHours",
      "properties": {
        "dayopen": {
          "format": "int32",
          "type": "integer"
        },
        "interval": {
          "items": {
            "$ref": "BusinessHoursInterval"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "BusinessHoursInterval": {
      "id": "BusinessHoursInterval",
      "properties": {
        "end": {
          "description": "The interval ends at the start of this second",
          "format": "int32",
          "type": "integer"
        },
        "start": {
          "description": "Time in seconds since Midnight-Monday-Morn",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ChatBotPlatformBotSendToken": {
      "description": "Token to be exposed and stored by the bot",
      "id": "ChatBotPlatformBotSendToken",
      "properties": {
        "expiryTimeMicros": {
          "description": "Time since epoch (micros) that this will expire",
          "format": "int64",
          "type": "string"
        },
        "sendToken": {
          "description": "Encrypted InternalSendToken",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ChatBotPlatformFireballId": {
      "id": "ChatBotPlatformFireballId",
      "properties": {
        "id": {
          "$ref": "GoogleInternalCommunicationsInstantmessagingV1Id",
          "description": "When used as a user ID, it's the phone number of the sender. When used as a session ID: For group conversation, it is the group ID. For 1 to 1, it is the receiver or sender phone number. For 1 to bot, it is the receiver phone number or empty."
        }
      },
      "type": "object"
    },
    "ClassifierPornAggregatedUrlPornScores": {
      "description": "Per-URL porn scores for the URLs associated with the corresponding image.",
      "id": "ClassifierPornAggregatedUrlPornScores",
      "properties": {
        "averageUrlPornScore": {
          "format": "float",
          "type": "number"
        },
        "urlCount": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ClassifierPornClassifierData": {
      "description": "Next ID: 6",
      "id": "ClassifierPornClassifierData",
      "properties": {
        "classification": {
          "items": {
            "$ref": "ClassifierPornClassifierDataClassification"
          },
          "type": "array"
        },
        "imageBasedDetectionDone": {
          "description": "Records whether the image linker is run already. This is only used for Alexandria but NOT for Segindexer.",
          "type": "boolean"
        },
        "timestamp": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ClassifierPornClassifierDataClassification": {
      "id": "ClassifierPornClassifierDataClassification",
      "properties": {
        "label": {
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ClassifierPornDocumentData": {
      "description": "Next ID: 3",
      "id": "ClassifierPornDocumentData",
      "properties": {
        "classifierdata": {
          "$ref": "ClassifierPornClassifierData"
        },
        "sitedata": {
          "$ref": "ClassifierPornSiteData"
        }
      },
      "type": "object"
    },
    "ClassifierPornQueryClassifierOutput": {
      "description": "Generic output for one vertical.",
      "id": "ClassifierPornQueryClassifierOutput",
      "properties": {
        "csaiClassification": {
          "description": "This field is only filled for the CSAI vertical.",
          "enum": [
            "NOT_PROTECTED",
            "PROTECTED",
            "STRONGLY_PROTECTED"
          ],
          "enumDescriptions": [
            "Contract: (STRONGLY_PROTECTED & PROTECTED) == PROTECTED",
            "",
            ""
          ],
          "type": "string"
        },
        "csaiRegexpHighConfidenceClassification": {
          "description": "DO NOT USE: This field is temporary and should be used only for the CSAI Onebox. This field is the result of the regular expression classifier alone as opposed to a combination with Seti classifier as in csai_classification field.",
          "enum": [
            "NOT_PROTECTED",
            "PROTECTED",
            "STRONGLY_PROTECTED"
          ],
          "enumDescriptions": [
            "Contract: (STRONGLY_PROTECTED & PROTECTED) == PROTECTED",
            "",
            ""
          ],
          "type": "string"
        },
        "debug": {
          "description": "Human-readable debug information about the classification. This field is only set if output_debug is set in the classification input.",
          "type": "string"
        },
        "isPositive": {
          "description": "The bit that shows if this classifier outputs positive classification for the input query. Set by thresholding with a recommended threshold.",
          "type": "boolean"
        },
        "score": {
          "description": "The score that the classifier assigned to the input query. This is filled by all verticals.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ClassifierPornQueryMultiLabelClassifierOutput": {
      "description": "Multi-label classification output. It contains the output for each vertical. The output for some verticals can be empty, in case that vertical is not supported by the classifier or if the set of verticals was restricted using MultiLabelClassifierInput.verticals.",
      "id": "ClassifierPornQueryMultiLabelClassifierOutput",
      "properties": {
        "csai": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "fringe": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "medical": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "offensive": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "porn": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "spoof": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "violence": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        },
        "vulgar": {
          "$ref": "ClassifierPornQueryClassifierOutput"
        }
      },
      "type": "object"
    },
    "ClassifierPornQueryStats": {
      "description": "QuerySats contains the information about the queries that users typed to search for this image.",
      "id": "ClassifierPornQueryStats",
      "properties": {
        "queryTextPornScore": {
          "description": "A query text porn score for the queries which have clicks to the image: query_text_porn_score := sum(clicks(query) * text_porn_score(query)) / sum(clicks(query))",
          "format": "float",
          "type": "number"
        },
        "totalClicks": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ClassifierPornReferrerCounts": {
      "description": "ReferrerCounts stores how many referrers an images has and how many of them were classified as porn and as adult/softporn respectively. Note that a referrer is usually a landing page, but as of March 2011 this also includes referrers which an image can 'inherit' by propagating counts from near duplicate images.",
      "id": "ClassifierPornReferrerCounts",
      "properties": {
        "adult": {
          "format": "int32",
          "type": "integer"
        },
        "porn": {
          "description": "Number of referrers which are classified as porn and as adult.",
          "format": "int32",
          "type": "integer"
        },
        "total": {
          "description": "Total number of referrers.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ClassifierPornSiteData": {
      "description": "Next ID: 52",
      "id": "ClassifierPornSiteData",
      "properties": {
        "avgPedoPageScore": {
          "description": "The average pedo page score for the site.",
          "format": "float",
          "type": "number"
        },
        "finalPedoSiteScore": {
          "format": "float",
          "type": "number"
        },
        "numberOfPages": {
          "description": "The number of pages that were used to compute the scores and ratios.",
          "format": "uint64",
          "type": "string"
        },
        "numberOfPedoPages": {
          "description": "The number of pages with pedo restrict.",
          "format": "uint64",
          "type": "string"
        },
        "site": {
          "description": "Sitechunk used to compute the signals. The field is present only for data created after December 2022.",
          "type": "string"
        },
        "sitePornRatio": {
          "description": "The ratio of porn/softporn of the site this page belongs to.",
          "format": "float",
          "type": "number"
        },
        "siteSoftpornRatio": {
          "format": "float",
          "type": "number"
        },
        "versionedscore": {
          "items": {
            "$ref": "ClassifierPornSiteDataVersionedScore"
          },
          "type": "array"
        },
        "violenceStats": {
          "$ref": "ClassifierPornSiteViolenceStats"
        }
      },
      "type": "object"
    },
    "ClassifierPornSiteDataVersionedScore": {
      "description": "The site porn score of the site to which the page of interest belongs to. Multiple versions are kept across large changes for some time. The Version-4 score is the average Universal Page Probability of all the site's pages, and will come with populated verticals4_score and site_rule (if any rule fires) fields. When using this score it is recommended to subscribe to the following mailing list: g/safesearch-announce.",
      "id": "ClassifierPornSiteDataVersionedScore",
      "properties": {
        "score": {
          "format": "float",
          "type": "number"
        },
        "siteRule": {
          "items": {
            "enum": [
              "HIGH_PORN_FRACTION_RULE",
              "DEPRECATED_USER_GENERATED_CONTENT_RULE",
              "DEPRECATED_SITES_WITH_IGNORED_SCORES_LIST"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "version": {
          "format": "int32",
          "type": "integer"
        },
        "verticals4Score": {
          "description": "Please talk to safesearch@ before relying on any of these internal fields:",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ClassifierPornSiteViolenceStats": {
      "description": "Next ID: 6",
      "id": "ClassifierPornSiteViolenceStats",
      "properties": {
        "meanFinalViolenceScore": {
          "format": "float",
          "type": "number"
        },
        "numberOfImages": {
          "format": "uint64",
          "type": "string"
        },
        "numberOfVideos": {
          "format": "uint64",
          "type": "string"
        },
        "videoViolenceScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CommerceDatastoreDeepTag": {
      "description": "The basic message that contains a single decision output of go/deeptagger.",
      "id": "CommerceDatastoreDeepTag",
      "properties": {
        "confidence": {
          "description": "The confidence of the tag, encoded to 14 bits (range [0, 16383]). Due to modeling details, a large number of tags become trustworthy with confidence greater than 0.001, so two bytes of precision are required.",
          "format": "uint32",
          "type": "integer"
        },
        "tag": {
          "description": "A Deep Tag enum in uint32 form.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CommerceDatastoreImageDeepTags": {
      "description": "Image-level deep tags: essentially equivalent to the proto above but containing tags that are computed at the image level. These image signals are maintained by the Visual Shopping team (visual-shopping@). *** If you do use the signals, please add an entry in go/ShoppingImageAttributeClients to be notified for model upgrade. *** We recommend our clients against using the raw confidence value directly. Instead, the clients should use the library, cs/ads/shopping/visual/deeptags/public/single_tag.h and cs/ads/shopping/visual/deeptags/public/single_scored_tag.h to specify an operating point in terms of precision or recall. See the following code example: http://google3/shopping/visual/explore_looks/looks_offline_pipeline.cc?l=268&rcl=304165166 *** `model_outputs` is a repeated field. Please check `version` to get the model you desire to use, instead of indexing the model_outputs directly e.g. model_outputs(0). We will remove the old versions in the future and this will lead to incorrect model. *** Models: As of Q2 2020, we have two models running within Shopping: model one only has the overlay tag, which we are deprecating, and model two has the tags specified in go/VisualShoppingImageAttributes.",
      "id": "CommerceDatastoreImageDeepTags",
      "properties": {
        "modelOutputs": {
          "description": "The set of outputs for a series of model versions. The size of this field should not extend beyond 4 at any time: two versions for slow-update track dependencies, and two versions for fast-update track dependencies.",
          "items": {
            "$ref": "CommerceDatastoreImageDeepTagsModelOutput"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CommerceDatastoreImageDeepTagsModelOutput": {
      "id": "CommerceDatastoreImageDeepTagsModelOutput",
      "properties": {
        "backgroundType": {
          "$ref": "CommerceDatastoreDeepTag"
        },
        "collage": {
          "$ref": "CommerceDatastoreDeepTag"
        },
        "cropping": {
          "$ref": "CommerceDatastoreDeepTag",
          "description": "We are looking to deploy a model for the Ads team to identify images with bad cropping. The model will be for Ads only and we will not populate the cropping field in CDS."
        },
        "modelType": {
          "$ref": "CommerceDatastoreDeepTag"
        },
        "nfs": {
          "$ref": "CommerceDatastoreDeepTag",
          "description": "Tag corresponds to the shopping non-family safe (nfs) image signal."
        },
        "objectCount": {
          "$ref": "CommerceDatastoreDeepTag"
        },
        "overlay": {
          "$ref": "CommerceDatastoreDeepTag",
          "description": "Tag corresponding to unwanted text overlay (watermarks, logos, promotional elements, artifacts, etc)."
        },
        "selfie": {
          "$ref": "CommerceDatastoreDeepTag"
        },
        "textOverlay": {
          "description": "Tag corresponding to the text overlay classifier (watermarks, logos, promotional elements, artifacts, etc).",
          "items": {
            "$ref": "CommerceDatastoreDeepTag"
          },
          "type": "array"
        },
        "version": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CompositeDoc": {
      "description": "Protocol record used for collecting together all information about a document. Please consult go/dj-explorer for two basic questions about `CompositeDoc`: - Where should I look up certain information (e.g: pagerank, language)? - What does each field in CompositeDoc mean and who should I contact if I have questions? To add a new field into CompositeDoc, or change existing field's size significantly, please file a ticket at go/dj-new-field, fill in necessary information and get approved by docjoin-access@ team. Next id: 191",
      "id": "CompositeDoc",
      "properties": {
        "ContentChecksum96": {
          "description": "Visible content checksum as computed by repository::parsehandler::checksum::Checksum96bitsParseHandler. The value is a Fprint96 in \"key format\" (i.e., by Fprint96::AsKey()).",
          "format": "byte",
          "type": "string"
        },
        "accessRequirements": {
          "$ref": "IndexingPrivacyAccessAccessRequirements",
          "description": "Contains necessary information to enforce row level Docjoin access control."
        },
        "additionalchecksums": {
          "$ref": "CompositeDocAdditionalChecksums"
        },
        "alternatename": {
          "items": {
            "$ref": "CompositeDocAlternateName"
          },
          "type": "array"
        },
        "anchorStats": {
          "$ref": "IndexingDocjoinerAnchorStatistics"
        },
        "anchors": {
          "$ref": "Anchors"
        },
        "badSslCertificate": {
          "$ref": "IndexingBadSSLCertificate",
          "description": "This field is present iff the page has a bad SSL certificate itself or in its redirect chain."
        },
        "cseId": {
          "items": {
            "$ref": "QualityProseCSEUrlInfo"
          },
          "type": "array"
        },
        "csePagerankCutoff": {
          "description": "URL should only be selected for CSE Index if it's pagerank is higher than cse_pagerank_cutoff.",
          "format": "int32",
          "type": "integer"
        },
        "dataVersion": {
          "$ref": "IndexingDocjoinerDataVersion",
          "description": "Contains the tracking version of various data fields in CompositeDoc."
        },
        "doc": {
          "$ref": "GDocumentBase"
        },
        "docAttachments": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A generic container to hold document annotations and signals. For a full list of extensions live today, see go/wde."
        },
        "docImages": {
          "description": "Info about \"selected\" images associated with the document for which we (already) have ImageData. For each image URL, some fixed number of documents are selected as web referrers for the image URL, and within those selected documents, we say the image is \"selected\". Within the remaining documents, we say the image is \"rejected\". Note that this distinction is slightly different from selected for indexing. Only images within doc_images where is_indexed_by_imagesearch is true will be selected for indexing. You can find the rejected images at composite_doc.doc_attachments().get(). You can find images that are selected, but for which we have no ImageData (yet) at composite_doc.image_indexing_info().selected_not_indexed_image_link()",
          "items": {
            "$ref": "ImageData"
          },
          "type": "array"
        },
        "docVideos": {
          "description": "Info about videos embedded in the document.",
          "items": {
            "$ref": "ImageRepositoryVideoProperties"
          },
          "type": "array"
        },
        "docinfoPassthroughAttachments": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "This message set is used for data pushed into the index using the signals framework that is never to be used in Mustang or TG Continuum scoring/snippeting code. Any protocol buffer stored in this message set is automatically returned in a docinfo response - it ends up in the \"info\" message set in the WWWSnippetResponse, so it can be used in post-doc twiddlers and for display in GWS with no code changes in Mustang or Teragoogle."
        },
        "embeddedContentInfo": {
          "$ref": "IndexingEmbeddedContentEmbeddedContentInfo",
          "description": "Data produced by the embedded-content system. This is a thin message, containing only embedded_links_info data for the embedder and JavaScript/CSS embedded links (the embedded-content bigtable also contains snapshots, compressed document trees and all embedded link types). Provided using the index signal API."
        },
        "extradup": {
          "items": {
            "$ref": "CompositeDocExtraDup"
          },
          "type": "array"
        },
        "forwardingdup": {
          "items": {
            "$ref": "CompositeDocForwardingDup"
          },
          "type": "array"
        },
        "includedcontent": {
          "items": {
            "$ref": "CompositeDocIncludedContent"
          },
          "type": "array"
        },
        "indexingIntermediate": {
          "description": "Serialized indexing intermediate data.",
          "format": "byte",
          "type": "string"
        },
        "indexinginfo": {
          "$ref": "CompositeDocIndexingInfo"
        },
        "labelData": {
          "$ref": "QualityLabelsGoogleLabelData",
          "description": "This field associates a document to particular labels and assigns confidence values to them."
        },
        "liveexperimentinfo": {
          "$ref": "CompositeDocLiveExperimentInfo"
        },
        "localinfo": {
          "$ref": "LocalWWWInfo"
        },
        "localizedAlternateName": {
          "description": "Localized alternate names are similar to alternate names, except that it is associated with a language different from its canonical. This is the subset of webmaster-provided localized alternate names being in the dup cluster of this document. Used during serving for swapping in the URL based on regional and language preferences of the user.",
          "items": {
            "$ref": "IndexingConverterLocalizedAlternateName"
          },
          "type": "array"
        },
        "localizedvariations": {
          "$ref": "CompositeDocLocalizedVariations"
        },
        "partialUpdateInfo": {
          "$ref": "CompositeDocPartialUpdateInfo",
          "description": "Only present in partial cdocs."
        },
        "perDocData": {
          "$ref": "PerDocData"
        },
        "porninfo": {
          "$ref": "ClassifierPornDocumentData",
          "description": "Porn related data used for image and web search porn classification as well as for diagnostics purposes."
        },
        "properties": {
          "$ref": "DocProperties"
        },
        "ptoken": {
          "$ref": "PtokenPToken",
          "description": "Contains information necessary to perform policy decision on the usage of the data assosiated with this cdoc."
        },
        "qualitysignals": {
          "$ref": "CompositeDocQualitySignals"
        },
        "registrationinfo": {
          "$ref": "RegistrationInfo",
          "description": "Information about the most recent creation and expiration of this domain. It's extracted from domainedge signal."
        },
        "richcontentData": {
          "$ref": "IndexingConverterRichContentData",
          "description": "If present, indicates that some content was inserted, deleted, or replaced in the document's content (in CompositeDoc::doc::Content::Representation), and stores information about what was inserted, deleted, or replaced."
        },
        "richsnippet": {
          "$ref": "RichsnippetsPageMap",
          "description": "rich snippet extracted from the content of a document."
        },
        "robotsinfolist": {
          "$ref": "CompositeDocRobotsInfoList"
        },
        "scaledIndyRank": {
          "description": "to copy to per-doc",
          "format": "int32",
          "type": "integer"
        },
        "sitemap": {
          "$ref": "Sitemap",
          "description": "Sitelinks: a collection of interesting links a user might be interested in, given they are interested in this document. WARNING: this is different from the crawler Sitemaps (see SitemapsSignals in the attachments)."
        },
        "storageRowTimestampMicros": {
          "description": "Row timestamp in CDoc storage.",
          "format": "int64",
          "type": "string"
        },
        "subindexid": {
          "items": {
            "enum": [
              "LTG_CANDIDATE",
              "NOSUBINDEX",
              "BASE",
              "CSEINDEX_EXTENDED",
              "DAILY",
              "TIMBIT_PROTECTED",
              "LANDFILL1",
              "LANDFILL2",
              "LANDFILL3",
              "LANDFILL_BLOGSEARCH",
              "LANDFILL_SOCIAL",
              "INSTANT",
              "UNIFIED_LANDFILL",
              "BLOGSEARCH_DYNAMIC_ASSIMILATED",
              "BLOGSEARCH_EXTENDED",
              "MOFFETT",
              "UNSELECTED_DOCUMENTS",
              "AQUARIUS",
              "WEBSEARCH_FRESH",
              "WEBSEARCH1",
              "WEBSEARCH2",
              "WEBSEARCH3",
              "UNIFIED_ZEPPELIN_HIGH_QUALITY",
              "ASIANREGIONAL",
              "EMEAREGIONAL",
              "CSEINDEX",
              "BASEREGIONAL",
              "BLACKHOLE",
              "XBASE",
              "FRESHBASE",
              "XASIANREGIONAL",
              "XEMEAREGIONAL",
              "XBASEREGIONAL",
              "BLIMPIE",
              "BLIMPIEPP",
              "GOODYEAR",
              "GOODYEARPP",
              "QUASAR",
              "ZEPPELIN1",
              "ZEPPELIN2",
              "ZEPPELIN3",
              "ZEPPELIN_STAGING",
              "PULSAR",
              "TIMBIT",
              "LANDFILL_CSE",
              "UNIFIED_ZEPPELIN"
            ],
            "enumDescriptions": [
              "ltg-candidate is a label for docs whose selection decision is deferred to ltg by Alexandria. It does not correspond to any serving corpus.",
              "",
              "",
              "Custom Search Engine extended corpus to catch all CSE urls not indexed in unified zeppelin or higher tiers.",
              "",
              "timbit_protected is a label for keeping docs from dropping out of base, i.e., all timbit protected docs belong to base/basextended.",
              "Generic corpora used in Oscar.",
              "",
              "",
              "Blogsearch special purpose corpus for Oscar.",
              "Social special purpose corpus for Oscar.",
              "",
              "One big landfill index for Union.",
              "Alexandria version of Blogsearch Assimilated.",
              "Blogsearch corpus for all docs not indexed in unified zeppelin or higher.",
              "Moffett corpus for all docs indexed in base and unified zeppelin.",
              "Unselected documents corpus used for index-selection eval tools.",
              "Aquarius corpus which is used to hold all app-only documents. go/aquarius",
              "Corpus corresponding to serving corpus websearch_fresh.",
              "Corpus corresponding to serving corpus websearch_1.",
              "Corpus corresponding to serving corpus websearch_2.",
              "Corpus corresponding to serving corpus websearch_3.",
              "Top quality documents in unified zeppelin",
              "Deprecated corpora.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "syntacticDate": {
          "$ref": "QualityTimebasedSyntacticDate"
        },
        "url": {
          "description": "WARNING!!! \"url\" field in CompositeDoc is optional, and is usually missing: e.g., Docjoin CompositeDoc's don't have CompositeDoc::url. has_url() checking is often useful. So don't rely on CompositeDoc::url unless you're sure otherwise. Usually you want to use CompositeDoc::doc::url instead.",
          "type": "string"
        },
        "urldate": {
          "description": "Date in the url extracted by quality/snippets/urldate/date-in-url.cc This is given as midnight GMT on the date in question.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CompositeDocAdditionalChecksums": {
      "description": "Additional checksums of the document.",
      "id": "CompositeDocAdditionalChecksums",
      "properties": {
        "NoTransientChecksum96": {
          "description": "Same as ContentChecksum96 but without transient boilerplate.",
          "format": "byte",
          "type": "string"
        },
        "SimHash": {
          "description": "Deprecated. Use simhash_v2 and simhash_v2_significance instead.",
          "format": "uint64",
          "type": "string"
        },
        "SimHashIsTrusted": {
          "type": "boolean"
        },
        "simhashV2": {
          "description": "Simhash-v2 is generated by SimHashParseHandler, designed as a complete replacement of simhash-v1 (a.k.a. the original simhash above) from ApproxDupsParseHandler. Simhash-v2 uses a revised algorithm so that it is expected to work better in most cases than simhash-v1. They coexist in current transition period, then simhash-v1 will be retired.",
          "format": "uint64",
          "type": "string"
        },
        "simhashV2Significance": {
          "description": "Simhash-v2-significance is used to describe the confidence about the corresponding simhash-v2 value. It is defined as the average absolute difference from zero of all internal state components when finalizing a simhash-v2 value in HashMultiSetDotCauchy. We used to compare the significance against some pre-defined threshold (default: 20) to get a boolean value \"trusted_simhash_v2\". However, it is possible that this field is missing while \"simhash_v2\" is present, in such case (1) Use \"SimHashIsTrusted\" instead if it is present, AND/OR (2) Assume \"simhash_v2\" is trusted if its value is non-zero.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CompositeDocAlternateName": {
      "description": "Alternate names are some urls that we would like to associate with documents in addition to canonicals. Sometimes we may want to serve these alternatenames instead of canonicals. Alternames in CompositeDoc should come from WebMirror pipeline.",
      "id": "CompositeDocAlternateName",
      "properties": {
        "Url": {
          "type": "string"
        },
        "UrlEncoding": {
          "description": "See webutil/urlencoding",
          "format": "int32",
          "type": "integer"
        },
        "ecnFp": {
          "description": "Fp96 of webmirror equivalence class as of last time this was exported.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CompositeDocExtraDup": {
      "description": "The top non-forwarding dups of the canonical url.",
      "id": "CompositeDocExtraDup",
      "properties": {
        "ecnFp": {
          "description": "Fp96 of webmirror equivalence class as of last time this was exported.",
          "format": "byte",
          "type": "string"
        },
        "url": {
          "description": "The url of the non-forwarding dup.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CompositeDocForwardingDup": {
      "description": "The top forwarding dups of the canonical url. (note: it may actually include some dups that are NOT used for forwarding data but for making \"info:\" complete)",
      "id": "CompositeDocForwardingDup",
      "properties": {
        "ecn": {
          "description": "The name of the url's webmirror equivalence class.",
          "format": "byte",
          "type": "string"
        },
        "ecnFp": {
          "format": "byte",
          "type": "string"
        },
        "purposes": {
          "description": "The purpose(s) of the forwarding dup indicating if it is used for forwarding signal/anchors generally, or only for forwarding some specific signal (e.g. navboost), or for some other purposes (e.g., not for forwarding any data but for making \"info:\" complete). See indexing/dups/public/dups.h for more details.",
          "format": "int32",
          "type": "integer"
        },
        "rawPagerank": {
          "description": "Raw pagerank of the url.",
          "format": "int32",
          "type": "integer"
        },
        "repid": {
          "description": "The webmirror repid of the forwarding dup.",
          "format": "byte",
          "type": "string"
        },
        "url": {
          "description": "The url of the forwarding dup.",
          "type": "string"
        },
        "urlencoding": {
          "description": "The encoding of the url (see webutil/urlencoding for details).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CompositeDocIncludedContent": {
      "id": "CompositeDocIncludedContent",
      "properties": {
        "SourceTypeBitfield": {
          "description": "Indicate how this content came to be included. Legal values are constructed by bitwise-OR-ing values from the included_content::SourceType enum. Default SourceTypeBitfield = included_content::INCLUDED_FRAME",
          "format": "int64",
          "type": "string"
        },
        "includedDoc": {
          "$ref": "GDocumentBase"
        },
        "linkUrl": {
          "type": "string"
        },
        "perDocData": {
          "$ref": "PerDocData"
        },
        "properties": {
          "$ref": "DocProperties"
        }
      },
      "type": "object"
    },
    "CompositeDocIndexingInfo": {
      "description": "Contains information *mostly* used within indexing (e.g. not used for building the production serving shards). Most of this data is generated only in Alexandria, however there are exceptions.",
      "id": "CompositeDocIndexingInfo",
      "properties": {
        "cdocBuildInfo": {
          "$ref": "IndexingDocjoinerCDocBuildInfo",
          "description": "To hold extra info for building a final cdoc from raw cdoc and goldmine annotations."
        },
        "contentProtected": {
          "description": "Whether current page is under content protection, i.e. a page has been crawled as an error page, but we preserve its last known good content and keep its crawl_status as converter.CrawlStatus::CONTENT.",
          "type": "boolean"
        },
        "convertToRobotedReason": {
          "description": "If set, indicates that the crawl status was converted to ROBOTED for the reason specified by the enum value in converter.RobotedReasons.ConvertToRobotedReasons. See indexing/converter/proto/converter.proto for details. If unset, then the document was not converted to roboted, and if the document crawl status is ROBOTED, then the document is disallowed (at least to Google) in robots.txt.",
          "format": "int32",
          "type": "integer"
        },
        "crawlStatus": {
          "description": "One of the enum values in converter.CrawlStatus.State (see indexing/converter/proto/converter.proto for details). Default is converter.CrawlStatus::CONTENT. The document is roboted if the value is converter.CrawlStatus::ROBOTED.",
          "format": "int32",
          "type": "integer"
        },
        "demotionTags": {
          "items": {
            "enum": [
              "DEMOTION_TYPE_NONE",
              "DEMOTION_TYPE_BADURLS_DEMOTE"
            ],
            "enumDescriptions": [
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "errorType": {
          "description": "One of the enum values in converter.ErrorPageType (see indexing/converter/proto/error-page-detector-enum.proto for detail). Default is converter::ERROR_PAGE_NONE.",
          "format": "int32",
          "type": "integer"
        },
        "freshdocsCorpora": {
          "items": {
            "enum": [
              "WEB",
              "REALTIME",
              "CSE",
              "CSE_PREMIUM",
              "BUSTER_IMAGES",
              "NEWS",
              "VIDEO",
              "YOUTUBE",
              "WEB_INSTANT",
              "WEB_DAILY",
              "CACHE_COLON"
            ],
            "enumDescriptions": [
              "DEPRECATED",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "A table with just the bodysource attachment"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "hostid": {
          "description": "The host id of the document. Used chiefly to determine whether the document is part of a parked domain.",
          "format": "uint64",
          "type": "string"
        },
        "ieIdentifier": {
          "description": "A short descriptive string to help identify the IE application or setup where this CDoc is generated. For example: websearch_m3 This field is for debuggability purposes.",
          "type": "string"
        },
        "imageIndexingInfo": {
          "$ref": "ImageSearchImageIndexingInfo",
          "description": "Indexing info about images (i.e. image links missing image data, etc)."
        },
        "indexingTs": {
          "description": "The timestamp (the time since the Epoch, in microseconds) when the docjoin is exported from indexing. The main purpose of this field is to identify different versions of the same document.",
          "format": "int64",
          "type": "string"
        },
        "isSiblingDeletion": {
          "description": "Page is deleted when indexing choice flips between different corpora (e.g. desktop, mobile, archive, scholar, etc.) for the same URL. It's only set for deletion cdocs. Downstreams using URL as key should ignore the current deletion if the field is set.",
          "type": "boolean"
        },
        "noLongerCanonicalTimestamp": {
          "description": "If set, the timestamp in microseconds when the URL stopped being canonical. This should never be set for exported canonical documents. This field is used by dups during canonical flip, and by webmain when doc selection switched between desktop and mobile. Union respects this timestamp to prevent old doc being deleted until the new doc is picked up",
          "format": "int64",
          "type": "string"
        },
        "normalizedClickScore": {
          "description": "This score is calculated by re-mapping the back onto the partition's score distribution, such that the score represents the score of the equivalently ranked organically-selected document.",
          "format": "float",
          "type": "number"
        },
        "rawNavboost": {
          "description": "The raw navboost count for the canonical url without aggregating the navboost from dup urls. This field is used when building forwarding map.",
          "format": "int32",
          "type": "integer"
        },
        "rowTimestamp": {
          "description": "The timestamp (the time since the Epoch, in microseconds) to represent doc version, which is used in the downstream processing after Raffia. If it's not set, indexing_ts will be used as row_timestamp. The timestamp is generally set by reprocessing to set slightly newer indexing_ts such that the system can respect the reprocessed version to overwrite old data in storage.",
          "format": "int64",
          "type": "string"
        },
        "selectionTierRank": {
          "description": "Selection tier rank is a language normalized score ranging from 0-1 over the serving tier (Base, Zeppelins, Landfills) for this document.",
          "format": "float",
          "type": "number"
        },
        "tracingId": {
          "description": "The tracing ids is to label the version of url for url status tracking. This repeated field will carry at most 10 tracing id. See more details in go/rich-tracing-design There will be less than 2% base+uz cdocs carrying this field. The major sources of tracing ids include: * Indexing API pushed urls * Index Metrics sampling urls The tracing ids will be written into cdocs by Webmain Ramifier. The consumer of the tracing ids is Union serving notification collector see more at go/serving-notification-from-union",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "urlChangerate": {
          "$ref": "CrawlerChangerateUrlChangerate",
          "description": "Changerate information for this doc (see crawler/changerate/changerate.proto for details)."
        },
        "urlHistory": {
          "$ref": "CrawlerChangerateUrlHistory",
          "description": "Url change history for this doc (see crawler/changerate/changerate.proto for details). Note if a doc has more than 20 changes, we only keep the last 20 changes here to avoid adding to much data in its docjoin."
        },
        "urlPatternSignals": {
          "$ref": "IndexingSignalAggregatorUrlPatternSignals",
          "description": "UrlPatternSignals for this doc, used to compute document score in LTG (see indexing/signal_aggregator/proto/signal-aggregator.proto for details)."
        },
        "videoIndexingInfo": {
          "$ref": "ImageRepositoryVideoIndexingInfo",
          "description": "Indexing info about videos."
        }
      },
      "type": "object"
    },
    "CompositeDocLiveExperimentInfo": {
      "description": "Contains information needed for end-to-end live experiments. For a cdoc generated by production pipeline, it includes experiment IDs that have selected current document. For a cdoc generated by experiment pipeline, it includes current experiment ID.",
      "id": "CompositeDocLiveExperimentInfo",
      "properties": {
        "perLiveExperimentInfo": {
          "description": "List of necessary information for each live experiments.",
          "items": {
            "$ref": "CompositeDocLiveExperimentInfoPerLiveExperimentInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CompositeDocLiveExperimentInfoPerLiveExperimentInfo": {
      "description": "Contains information for a live experiment.",
      "id": "CompositeDocLiveExperimentInfoPerLiveExperimentInfo",
      "properties": {
        "experimentId": {
          "description": "ID of a live experiment.",
          "type": "string"
        },
        "partialCdoc": {
          "$ref": "CompositeDoc",
          "description": "Partial CDoc for a live experiment."
        }
      },
      "type": "object"
    },
    "CompositeDocLocalizedVariations": {
      "id": "CompositeDocLocalizedVariations",
      "properties": {
        "dupsComputedAlternateNames": {
          "description": "A subset of computed variations, only the members which are dups to the main url. Used during serving for swapping in the URL based on regional and language preferences of the user.",
          "items": {
            "$ref": "IndexingDupsComputedLocalizedAlternateNamesLocaleEntry"
          },
          "type": "array"
        },
        "webmasterAlternateNames": {
          "description": "All localized alternate names provided by the webmaster (canonical and dups, indexed and not-indexed). Used on the ranking side for swapping out results based on the webmaster preference.",
          "items": {
            "$ref": "IndexingConverterLocalizedAlternateName"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CompositeDocPartialUpdateInfo": {
      "description": "Contains information about the partial updates present in a partial CompositeDoc.",
      "id": "CompositeDocPartialUpdateInfo",
      "properties": {
        "goldmineAnnotatorNames": {
          "description": "List of goldmine annotator updates present in the enclosing partial cdoc.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "imagesSignalNames": {
          "description": "List of images signal updates present in the enclosing partial cdoc. Images signal name for a images signal is the unique name for the signal according to SignalSpec.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "lastFullIndexingInfo": {
          "description": "Contains last full indexing information for partial updates.",
          "items": {
            "$ref": "CompositeDocPartialUpdateInfoLastFullIndexingInfo"
          },
          "type": "array"
        },
        "shouldLookupDocjoinsTier": {
          "description": "Which tier we should do cdoc lookup to merge partial cdocs. This uses the integer value of indexing.selection.CorpusId. NOT intended for other usage.",
          "format": "int32",
          "type": "integer"
        },
        "signalNames": {
          "description": "List of signal updates present in the enclosing partial cdoc. Signal name for a signal is unique name for the signal according to SignalSpec.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CompositeDocPartialUpdateInfoLastFullIndexingInfo": {
      "description": "Last full indexing information for the partial CDoc.",
      "id": "CompositeDocPartialUpdateInfoLastFullIndexingInfo",
      "properties": {
        "corpus": {
          "description": "The corpus of last full updates.",
          "enum": [
            "RAFFIA_WEBSEARCH",
            "RAFFIA_FASTPATH_DAILY",
            "RAFFIA_FASTPATH_INSTANT"
          ],
          "enumDescriptions": [
            "Base Raffia corpora",
            "Fastpath Raffia corpora",
            ""
          ],
          "type": "string"
        },
        "lastFullIndexingTsMicros": {
          "description": "Last full update indexing timestamp in microseconds.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CompositeDocQualitySignals": {
      "description": "Note: This is a misleading name as of 2022/10/14. The field is still set and has meaningful data, but no longer holds quality signals. All the data are freshness-related and they're not particularly sensitive.",
      "id": "CompositeDocQualitySignals",
      "properties": {
        "lastSignificantUpdate": {
          "$ref": "QualityTimebasedLastSignificantUpdate",
          "description": "Contains a date used for the \"Date Last Modified\" toolbelt restrict mode. Note: this date is a combined date and is different from the pure shingle-based signal stored in contentage.last_significant_update field."
        },
        "pagetype": {
          "$ref": "QualityTimebasedPageType"
        }
      },
      "type": "object"
    },
    "CompositeDocRobotsInfoList": {
      "description": "List of robots info parsed for the user-agents other than the default used to crawl this page.",
      "id": "CompositeDocRobotsInfoList",
      "properties": {
        "newsRobotsInfo": {
          "$ref": "IndexingConverterRobotsInfo"
        }
      },
      "type": "object"
    },
    "CompressedQualitySignals": {
      "description": "A message containing per doc signals that are compressed and included in Mustang and TeraGoogle. For TeraGoogle, this message is included in perdocdata which means it can be used in preliminary scoring. CAREFUL: For TeraGoogle, this data resides in very limited serving memory (Flash storage) for a huge number of documents. Next id: 42",
      "id": "CompressedQualitySignals",
      "properties": {
        "anchorMismatchDemotion": {
          "description": "anchor_mismatch_demotion: converted from QualityBoost.mismatched.boost.",
          "format": "uint32",
          "type": "integer"
        },
        "authorityPromotion": {
          "description": "authority promotion: converted from QualityBoost.authority.boost",
          "format": "uint32",
          "type": "integer"
        },
        "babyPandaDemotion": {
          "description": "baby_panda_demotion: converted from QualityBoost.rendered.boost.",
          "format": "uint32",
          "type": "integer"
        },
        "babyPandaV2Demotion": {
          "description": "New BabyPanda demotion, applied on top of Panda. This is meant to replace |baby_panda_demotion|.",
          "format": "uint32",
          "type": "integer"
        },
        "crapsAbsoluteHostSignals": {
          "description": "Impressions, unsquashed, host level, not to be used with compressed ratios. Not to be used in Pattern Data.",
          "format": "uint32",
          "type": "integer"
        },
        "crapsNewHostSignals": {
          "format": "uint64",
          "type": "string"
        },
        "crapsNewPatternSignals": {
          "format": "uint64",
          "type": "string"
        },
        "crapsNewUrlSignals": {
          "description": "For craps_[url|pattern]_signals, please avoid accessing these fields directly, even in minor ways like checking has_craps_*. Instead, please use methods from quality/navboost/craps/craps-lossy-compression.h or talk to dice-team.",
          "format": "uint64",
          "type": "string"
        },
        "crapsUnscaledIpPriorBadFraction": {
          "format": "uint32",
          "type": "integer"
        },
        "exactMatchDomainDemotion": {
          "description": "Page quality signals converted from fields in proto QualityBoost in quality/q2/proto/quality-boost.proto. To save indexing space, we convert the float values in [0, 1] to integers in range [0, 1023] (use 10 bits). exact_match_domain_demotion: converted from QualityBoost.emd.boost.",
          "format": "uint32",
          "type": "integer"
        },
        "experimentalNsrTeamData": {
          "$ref": "QualityNsrExperimentalNsrTeamData",
          "description": "This field is *not* propagated to shards, but it's populated at serving time by go/web-signal-joins (see b/207344056). See go/0DayLEs for details. This is only meant to be used during LEs, it should *not* be used for launches."
        },
        "experimentalNsrTeamWsjData": {
          "description": "This field is *not* propagated to shards, but it's populated at serving time by go/web-signal-joins (see b/207344056). See go/0DayLEs for details. This is only meant to be used during LEs, it should *not* be used for launches.",
          "items": {
            "$ref": "QualityNsrExperimentalNsrTeamWSJData"
          },
          "type": "array"
        },
        "experimentalQstarDeltaSignal": {
          "description": "This field is *not* propagated to shards. It is meant to be populated at serving time using one of the versions present in the `experimental_nsr_team_wsj_data` field above (using the `ExperimentalNsrTeamDataOverridesParams` opti to populate it; see http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). The purpose of this field is to be read by an experimental Q* component, in order to quickly run LEs with new delta components. See go/0DayLEs for details.",
          "format": "float",
          "type": "number"
        },
        "experimentalQstarSignal": {
          "description": "This field is *not* propagated to shards. It is meant to be populated at serving time using one of the versions present in the `experimental_nsr_team_wsj_data` field above (using the `ExperimentalNsrTeamDataOverridesParams` opti to populate it; see http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). The purpose of this field is to be read by an experimental Q* component, in order to quickly run LEs with new components. See go/0DayLEs for details.",
          "format": "float",
          "type": "number"
        },
        "experimentalQstarSiteSignal": {
          "description": "This field is *not* propagated to shards. It is meant to be populated at serving time using one of the versions present in the `experimental_nsr_team_wsj_data` field above (using the `ExperimentalNsrTeamDataOverridesParams` opti to populate it; see http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). The purpose of this field is to be read by an experimental Q* component, in order to quickly run LEs with new site components. See go/0DayLEs for details.",
          "format": "float",
          "type": "number"
        },
        "lowQuality": {
          "description": "S2V low quality score: converted from quality_nsr.NsrData, applied in Qstar. See quality_nsr::util::ConvertNsrDataToLowQuality.",
          "format": "uint32",
          "type": "integer"
        },
        "navDemotion": {
          "description": "nav_demotion: converted from QualityBoost.nav_demoted.boost.",
          "format": "uint32",
          "type": "integer"
        },
        "nsrConfidence": {
          "description": "NSR confidence score: converted from quality_nsr.NsrData.",
          "format": "uint32",
          "type": "integer"
        },
        "nsrOverrideBid": {
          "description": "NSR override bid, used in Q* for emergency overrides.",
          "format": "float",
          "type": "number"
        },
        "nsrVersionedData": {
          "description": "Versioned NSR score to be used in continuous evaluation of the upcoming NSR version and assess quality impact on various slices.",
          "items": {
            "$ref": "NSRVersionedItem"
          },
          "type": "array"
        },
        "pairwiseqScoringData": {
          "$ref": "PairwiseQScoringData",
          "description": "PairwiseQ data for QTJ. This field is *not* propagated to shards, but is populated at serving time by go/web-signal-joins. See b/175762140"
        },
        "pairwiseqVersionedData": {
          "description": "Versioned PairwiseQ score to be used in continuous evaluation of the upcoming PairwiseQ versions and assess quality impact on various slices.",
          "items": {
            "$ref": "PairwiseQVersionedItem"
          },
          "type": "array"
        },
        "pandaDemotion": {
          "description": "This is the encoding of Panda fields in the proto SiteQualityFeatures in quality/q2/proto/site_quality_features.proto. The encoding/decoding is performed using functions from quality_coati::coati_util.",
          "format": "uint32",
          "type": "integer"
        },
        "pqData": {
          "description": "Encoded page-level PQ signals.",
          "format": "uint32",
          "type": "integer"
        },
        "pqDataProto": {
          "$ref": "QualityNsrPQData",
          "description": "Stripped page-level signals, not present in the encoded field 'pq_data'."
        },
        "productReviewPDemotePage": {
          "format": "uint32",
          "type": "integer"
        },
        "productReviewPDemoteSite": {
          "description": "Product review demotion/promotion confidences. (Times 1000 and floored)",
          "format": "uint32",
          "type": "integer"
        },
        "productReviewPPromotePage": {
          "format": "uint32",
          "type": "integer"
        },
        "productReviewPPromoteSite": {
          "format": "uint32",
          "type": "integer"
        },
        "productReviewPReviewPage": {
          "description": "Fields product_review_p_review_page and product_review_p_uhq_page are for promoting/demoting HQ/LQ review pages in NGS. See go/pr-boosts for details. The possibility of a page being a review page.",
          "format": "uint32",
          "type": "integer"
        },
        "productReviewPUhqPage": {
          "description": "The possibility of a page being a high quality review page.",
          "format": "uint32",
          "type": "integer"
        },
        "scamness": {
          "description": "Scam model score. Used as one of the web page quality qstar signals. Value range from 0 to 1023.",
          "format": "uint32",
          "type": "integer"
        },
        "serpDemotion": {
          "description": "serp demotion: applied in Qstar.",
          "format": "uint32",
          "type": "integer"
        },
        "siteAuthority": {
          "description": "site_authority: converted from quality_nsr.SiteAuthority, applied in Qstar.",
          "format": "uint32",
          "type": "integer"
        },
        "topicEmbeddingsVersionedData": {
          "description": "Versioned TopicEmbeddings data to be populated later into superroot / used directly in scorers.",
          "items": {
            "$ref": "QualityAuthorityTopicEmbeddingsVersionedItem"
          },
          "type": "array"
        },
        "unauthoritativeScore": {
          "description": "Unauthoritative score. Used as one of the web page quality qstar signals.",
          "format": "uint32",
          "type": "integer"
        },
        "vlqNsr": {
          "description": "NSR for low-quality videos, converted from quality_nsr.NsrData.vlq_nsr.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ContentAttributions": {
      "description": "The following protobuf is used to store an attribution from one page to (usually) one other page, giving credit for the content. This information is used during ranking to promote the attributed page. This protobuf is copied from a quality_contra::SelectedAttribution. See //quality/contra/authorship/attribution and https://qwiki.corp.google.com/display/Q/ContentTrackingContentAttribution.",
      "id": "ContentAttributions",
      "properties": {
        "freshdocsOutgoing": {
          "description": "Selected outgoing attributions extracted on FreshDocs.",
          "items": {
            "$ref": "ContentAttributionsOutgoingAttribution"
          },
          "type": "array"
        },
        "offlineOutgoing": {
          "description": "Selected outgoing attributions extracted via offline MR jobs.",
          "items": {
            "$ref": "ContentAttributionsOutgoingAttribution"
          },
          "type": "array"
        },
        "onlineOutgoing": {
          "description": "Selected outgoing attributions extracted online on Alexandria.",
          "items": {
            "$ref": "ContentAttributionsOutgoingAttribution"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ContentAttributionsOutgoingAttribution": {
      "description": "This is a copy of quality_contra::SelectedAttribution::SelectedInfo. The url is converted to docid and other fields are copied directly.",
      "id": "ContentAttributionsOutgoingAttribution",
      "properties": {
        "bestEvidenceType": {
          "enum": [
            "PAGE_LINK_TO",
            "SITE_LINK_TO",
            "SITE_OTHER_PAGE_LINK_TO",
            "ORG_OTHER_SITE_LINK_TO",
            "ORG_OTHER_PAGE_LINK_TO",
            "SITE_SCORE_BASED",
            "LOW_CONFIDENCE_LINK_TO",
            "ANCHOR_ATTRIBUTION_TO",
            "SITE_NAME_MENTION",
            "SITE_NAME_MENTION_KEYWORDED",
            "EVIDENCE_TYPE_END"
          ],
          "enumDescriptions": [
            "Direct link to page in question.",
            "Link to the site of the page in question: Example: \"<a href=\"http://cnn.com>\" or \"source: cnn.com\" for the page \"http://cnn.com/news/13\"",
            "Link to some *other* page on the site of the page in question: Example: \"<a href=\"http://cnn.com/news/14>\" for the page \"http://cnn.com/news/13\"",
            "Direct link to some *site* with the same OrgName. Example: \"<a href=\"http://cnn.co.uk/>\" for the page \"http://cnn.com/news/13\"",
            "Link to some page on a site with the same OrgName. Example: \"<a href=\"http://cnn.co.uk/schmoo/14>\" for the page \"http://cnn.com/news/13\"",
            "Fake link which is created based on site scores to propagate offline clustering data.",
            "Link with low confidence score. Is used for online clustering only.",
            "Anchor to page in question.",
            "A mention of the site name in the text.",
            "A mention of the site name with citation keyword in front of it.",
            ""
          ],
          "type": "string"
        },
        "docid": {
          "format": "uint64",
          "type": "string"
        },
        "properties": {
          "format": "uint32",
          "type": "integer"
        },
        "usableForClustering": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ContentAwareCropsIndexing": {
      "id": "ContentAwareCropsIndexing",
      "properties": {
        "mustangBytes": {
          "description": "Compact representation for Mustang storage. See image/search/utils/packed_crops.h for details on the packing format.",
          "format": "byte",
          "type": "string"
        },
        "mustangBytesVersion": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CopleyLexicalMetadata": {
      "description": "Contains lexical metadata for a given reference. For example, this proto will be used to store locale-specific Lexical mids for contact relationships (e.g. /g/11gv0vypg4 is the mid for mother in english and /g/11gmy_gv87 is for mother in french) as an extension to QRefAnnotation::other_metadata, when available.",
      "id": "CopleyLexicalMetadata",
      "properties": {
        "canonicalLexicalMid": {
          "description": "Mid for an entity that has lexical data (a LexiconEntry). See https://g3doc.corp.google.com/nlp/generation/g3doc/lexical_data.md for for more information about lexical data. This is the canonical mid for this entity (eg. it would be for \"mother\" in EN even if user referred to \"mom\").",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CopleyPersonalReference": {
      "description": "Represents a reference made by a user that refers to some personal entity.",
      "id": "CopleyPersonalReference",
      "properties": {
        "personalReferenceType": {
          "description": "The manner in which the entity was referenced (e.g. \"my hotel\", \"the airport\").",
          "enum": [
            "PERSONAL_UNKNOWN_REFERENCE",
            "PERSONAL_HOTEL_REFERENCE",
            "PERSONAL_HOTEL_BOOKING_AGENT_REFERENCE",
            "PERSONAL_RESTAURANT_REFERENCE",
            "PERSONAL_RESTAURANT_BOOKING_AGENT_REFERENCE",
            "PERSONAL_PARKING_REFERENCE",
            "PERSONAL_FLIGHT_REFERENCE",
            "PERSONAL_GENERIC_SOCIAL_EVENT_REFERENCE",
            "PERSONAL_CONCERT_REFERENCE",
            "PERSONAL_SPORTS_REFERENCE",
            "PERSONAL_MOVIE_REFERENCE",
            "PERSONAL_TOUR_REFERENCE",
            "PERSONAL_HOME_REFERENCE",
            "PERSONAL_WORK_REFERENCE",
            "PERSONAL_MAPS_ALIAS_REFERENCE",
            "PERSONAL_CONTACT_REFERENCE",
            "PERSONAL_CONTACT_PERSON_REFERENCE",
            "PERSONAL_CONTACT_LOCATION_REFERENCE",
            "PERSONAL_FAMILY_MEMBER_REFERENCE",
            "PERSONAL_CONTACT_BIRTHDAY_REFERENCE",
            "PERSONAL_CONTACT_ADDRESS_REFERENCE",
            "PERSONAL_RELATIONSHIP_REFERENCE",
            "PERSONAL_RELATIONSHIP_PERSON_REFERENCE",
            "PERSONAL_RELATIONSHIP_LOCATION_REFERENCE",
            "PERSONAL_MEMORABLE_DATE_REFERENCE",
            "PERSONAL_MEMORY_ANNIVERSARY_DATE_REFERENCE",
            "PERSONAL_MEMORY_PAYDAY_DATE_REFERENCE",
            "PERSONAL_MEMORY_WEDDING_DATE_REFERENCE",
            "PERSONAL_MEMORY_BIRTHDAY_DATE_REFERENCE",
            "PERSONAL_MEMORY_EXAM_DATE_REFERENCE",
            "PERSONAL_MEMORY_MATHEXAM_DATE_REFERENCE",
            "PERSONAL_MEMORY_OILCHANGE_DATE_REFERENCE",
            "PERSONAL_MEMORY_GRADUATION_DATE_REFERENCE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "CopleyPersonalReferenceMetadata": {
      "description": "General message used to store metadata about references to personal entities, even if those entities cannot be resolved.",
      "id": "CopleyPersonalReferenceMetadata",
      "properties": {
        "referenceScore": {
          "description": "The strength of the personal reference. For example \"my flight\" may receive a high reference_score, whereas \"the airport\" may receive a low score.",
          "format": "float",
          "type": "number"
        },
        "references": {
          "description": "A list of all references made. Empty if no personal references exist. Multiple references can be present when multiple references were made in a single query, or the type of reference was ambiguous.",
          "items": {
            "$ref": "CopleyPersonalReference"
          },
          "type": "array"
        },
        "subreferenceMetadata": {
          "$ref": "CopleySubreferenceMetadata",
          "description": "Subreference metadata for all compound references on this span."
        }
      },
      "type": "object"
    },
    "CopleySourceTypeList": {
      "id": "CopleySourceTypeList",
      "properties": {
        "sourceTypeMetadata": {
          "items": {
            "$ref": "CopleySourceTypeMetadata"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CopleySourceTypeMetadata": {
      "description": "Contains the source and type information related to a personal entity, for example if it's an hotel or a restaurant (type) and if it comes from gmail, calendar, etc. (source). Next ID: 13",
      "id": "CopleySourceTypeMetadata",
      "properties": {
        "contactAnnotationId": {
          "description": "Annotation ID of a contact annotation, e.g. a relationship set via Assistant. This ID is generated by People Write Server. It is used to delete Contact Annotations via People API.",
          "type": "string"
        },
        "displayableName": {
          "type": "string"
        },
        "emailIdentifier": {
          "description": "Only used if personal_data_provenance == PERSONAL_SOURCE_GMAIL. Used to create a link to the source email in the form: mail.google.com/mail/u/0/?extsrc=sync&client=h&plid={email_identifier}",
          "type": "string"
        },
        "eventId": {
          "$ref": "EventIdMessage",
          "description": "Populated for some footprints data sources; uniquely identifies the footprint that generated the personal data that this provenance is attached to."
        },
        "localDiscoverySettingsMetadata": {
          "$ref": "PersonalizationSettingsApiProtoLocalDiscoveryLocalDiscoverySettingsMetadata"
        },
        "personalDataProvenance": {
          "enum": [
            "PERSONAL_SOURCE_UNKNOWN",
            "PERSONAL_SOURCE_GMAIL",
            "PERSONAL_SOURCE_CALENDAR",
            "PERSONAL_SOURCE_MAPS_ALIAS",
            "PERSONAL_SOURCE_FOCUS",
            "PERSONAL_SOURCE_FOCUS_CONSISTENT",
            "PERSONAL_SOURCE_FOCUS_TOP_N_CONTACTS",
            "PERSONAL_SOURCE_ASSISTANT_CONTACT_AFFINITY",
            "PERSONAL_SOURCE_ASSISTANT_MEMORY",
            "PERSONAL_SOURCE_PWS",
            "PERSONAL_SOURCE_HOUSEHOLD",
            "PERSONAL_SOURCE_HULK_PLACES",
            "PERSONAL_SOURCE_FOCUS_OWNER",
            "PERSONAL_SOURCE_WHITEPAGES",
            "PERSONAL_SOURCE_ASSISTANT_DEVICES",
            "PERSONAL_SOURCE_TEACH_LEARN",
            "PERSONAL_SOURCE_GELLER_ANSWERS",
            "PERSONAL_SOURCE_LAMS_SETTINGS",
            "PERSONAL_SOURCE_GAIA",
            "PERSONAL_SOURCE_XTALK",
            "PERSONAL_SOURCE_MOVIE_DIALOG",
            "PERSONAL_SOURCE_MEDIA_HABITUAL_CACHE",
            "PERSONAL_SOURCE_PERSONAL_TOPICSERVER",
            "PERSONAL_SOURCE_PHOTO_LABELS",
            "PERSONAL_SOURCE_PEOPLE_API",
            "PERSONAL_SOURCE_CONTEXT_API",
            "PERSONAL_SOURCE_MUSIC_PREFERRED_PROVIDER",
            "PERSONAL_SOURCE_STASH",
            "PERSONAL_SOURCE_SMART_HOME_DEVICES",
            "PERSONAL_SOURCE_DEVICE_STATES",
            "PERSONAL_SOURCE_HANDBAG_PERSONALIZED_WEBREF_ENTITIES",
            "PERSONAL_GRAPH_PEOPLE_SIGNAL_POST_PROCESSING",
            "PERSONAL_SOURCE_PERSONALIZED_PRONUNCIATIONS",
            "PERSONAL_SOURCE_DEVICE_INSTALLED_APPS",
            "PERSONAL_SOURCE_CONTACT_AGGREGATED_DATA",
            "PERSONAL_SOURCE_DYNAMIC_ENTITY_INDEX",
            "PERSONAL_SOURCE_STADIA",
            "PERSONAL_SOURCE_COMMUNAL_GROUP",
            "PERSONAL_SOURCE_LOCATION_SHARING",
            "PERSONAL_SOURCE_MAPS_SEARCH",
            "PERSONAL_SOURCE_MEDIA_USER_CONTEXT_INFO",
            "PERSONAL_SOURCE_MEDIA_USER_ENTITIES",
            "PERSONAL_SOURCE_DEVICE_SIGNED_IN_ACCOUNTS",
            "PERSONAL_SOURCE_ASSISTANT_USER_PROFILES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "A subset of the user's Focus and device contacts from Starlight. As of 11/2020, this subset includes: starred contacts, relationships, and contacts with attributes (birthday, address, etc.) set via Assistant. Only requests Starlight's base model.",
            "Same as PERSONAL_SOURCE_FOCUS, but additionally includes photos labels (face clusters, albums, locations) from Starlight. Requires Starlight's fresh model (go/starlight-freshness) for more consistent results. Use with caution: May fail to return any data if the fresh model is not loaded in time.",
            "User's top n(~200) contacts returned by Starlight. Starlight uses various signals and sources to prepare a list of top n contacts for a given user.",
            "User's contact affinities read from Footprint's assistant_contact_affinity corpus.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Reads from the ASSISTANT_DEVICE_SETTINGS",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The user's photo labels from Starlight.",
            "The current user's data from the people API. This includes the user's profile image.",
            "",
            "",
            "",
            "The user's SmartHome devices from AutomationService. This includes user's devices, rooms and structures.",
            "The user's devices states from DeviceStatesService. For example, if the device is playing music and the name of the music if it is.",
            "Personalized WebRef entity mids synced down to device (go/handbag).",
            "For triples produced by postprocessing signals for people entities.",
            "",
            "The names of the user's installed apps on their Android phone.",
            "",
            "For triples directly served from Footprints Corpus DYNAMIC_ENTITY_INDEX. These are often smart home devices.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "personalDataType": {
          "enum": [
            "PERSONAL_UNKNOWN",
            "PERSONAL_HOTEL",
            "PERSONAL_RESTAURANT",
            "PERSONAL_PARKING",
            "PERSONAL_FLIGHT",
            "PERSONAL_SOCIAL_EVENT",
            "PERSONAL_MAPS_ALIAS",
            "PERSONAL_CONTACT",
            "PERSONAL_PROFILE",
            "PERSONAL_BILL",
            "PERSONAL_CAR_RENTAL",
            "PERSONAL_GENERIC_EVENT",
            "PERSONAL_TRAIN",
            "PERSONAL_BUS",
            "PERSONAL_TAXI",
            "PERSONAL_FERRY",
            "PERSONAL_PHONE_NUMBER",
            "PERSONAL_DEVICE",
            "PERSONAL_PREFERENCE",
            "PERSONAL_DIETARY_RESTRICTION",
            "PERSONAL_MEDIA_HABITUAL_CACHE",
            "PERSONAL_NEWS_PREFERENCE",
            "PERSONAL_FAVORITE",
            "PERSONAL_GAMER_CONTACT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "provenanceCategory": {
          "items": {
            "enum": [
              "PROVENANCE_CATEGORY_UNKNOWN",
              "CORE_APPS_DATA"
            ],
            "enumDescriptions": [
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "sensitivity": {
          "$ref": "KnowledgeAnswersSensitivitySensitivity",
          "description": "Sensitivity applying to this copley annotation."
        }
      },
      "type": "object"
    },
    "CopleySubreferenceMetadata": {
      "description": "Represents the most compound resolved entities and most nested unresolved references for a span. Useful for punting.",
      "id": "CopleySubreferenceMetadata",
      "properties": {
        "mostCompoundResolvedEntities": {
          "description": "Resolved entities are sorted from highest resolution score to lowest.",
          "items": {
            "$ref": "CopleySubreferenceResolution"
          },
          "type": "array"
        },
        "mostNestedUnresolvedReference": {
          "$ref": "CopleySubreferenceReference",
          "description": "This is a merged representation of the compound reference having the most_compound_resolved_entities as an argument."
        }
      },
      "type": "object"
    },
    "CopleySubreferenceReference": {
      "description": "Represents a reference that may be part of a larger compound reference. For example, \"my brother's birthday\" will have a subreference that may have references for \"my brother\".",
      "id": "CopleySubreferenceReference",
      "properties": {
        "personalReferenceTypes": {
          "description": "Type of reference. There may be multiple for a single reference (e.g. relationship and contact).",
          "items": {
            "enum": [
              "PERSONAL_UNKNOWN_REFERENCE",
              "PERSONAL_HOTEL_REFERENCE",
              "PERSONAL_HOTEL_BOOKING_AGENT_REFERENCE",
              "PERSONAL_RESTAURANT_REFERENCE",
              "PERSONAL_RESTAURANT_BOOKING_AGENT_REFERENCE",
              "PERSONAL_PARKING_REFERENCE",
              "PERSONAL_FLIGHT_REFERENCE",
              "PERSONAL_GENERIC_SOCIAL_EVENT_REFERENCE",
              "PERSONAL_CONCERT_REFERENCE",
              "PERSONAL_SPORTS_REFERENCE",
              "PERSONAL_MOVIE_REFERENCE",
              "PERSONAL_TOUR_REFERENCE",
              "PERSONAL_HOME_REFERENCE",
              "PERSONAL_WORK_REFERENCE",
              "PERSONAL_MAPS_ALIAS_REFERENCE",
              "PERSONAL_CONTACT_REFERENCE",
              "PERSONAL_CONTACT_PERSON_REFERENCE",
              "PERSONAL_CONTACT_LOCATION_REFERENCE",
              "PERSONAL_FAMILY_MEMBER_REFERENCE",
              "PERSONAL_CONTACT_BIRTHDAY_REFERENCE",
              "PERSONAL_CONTACT_ADDRESS_REFERENCE",
              "PERSONAL_RELATIONSHIP_REFERENCE",
              "PERSONAL_RELATIONSHIP_PERSON_REFERENCE",
              "PERSONAL_RELATIONSHIP_LOCATION_REFERENCE",
              "PERSONAL_MEMORABLE_DATE_REFERENCE",
              "PERSONAL_MEMORY_ANNIVERSARY_DATE_REFERENCE",
              "PERSONAL_MEMORY_PAYDAY_DATE_REFERENCE",
              "PERSONAL_MEMORY_WEDDING_DATE_REFERENCE",
              "PERSONAL_MEMORY_BIRTHDAY_DATE_REFERENCE",
              "PERSONAL_MEMORY_EXAM_DATE_REFERENCE",
              "PERSONAL_MEMORY_MATHEXAM_DATE_REFERENCE",
              "PERSONAL_MEMORY_OILCHANGE_DATE_REFERENCE",
              "PERSONAL_MEMORY_GRADUATION_DATE_REFERENCE"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "referenceScore": {
          "description": "Highest reference score for any references merged in this span.",
          "format": "float",
          "type": "number"
        },
        "relationshipLexicalInfo": {
          "$ref": "CopleyLexicalMetadata",
          "description": "Only set for unresolved relationship references and can be used to get the canonical word for the relationship (e.g. \"mother\") in TTS."
        }
      },
      "type": "object"
    },
    "CopleySubreferenceResolution": {
      "description": "Represents a resolution that may be part of a larger compound reference. For example, \"my brother's birthday\" will have a subreference that may have resolutions for \"my brother\".",
      "id": "CopleySubreferenceResolution",
      "properties": {
        "mid": {
          "description": "Can be used with PKG Service for looking up metadata about this entity at fulfillment/GenX time.",
          "type": "string"
        },
        "name": {
          "description": "Name of the entity represented by this resolution.",
          "type": "string"
        },
        "resolutionScore": {
          "description": "A resolution score of 0 indicates that it did not resolve to a real entity.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CorpusSelectionInfo": {
      "id": "CorpusSelectionInfo",
      "properties": {
        "corpus": {
          "enum": [
            "UNKNOWN",
            "LENS"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "corpusScore": {
          "description": "Corpus specific score for an image",
          "format": "float",
          "type": "number"
        },
        "isSelectedForIndexing": {
          "description": "Whether an image was selected for indexing.",
          "type": "boolean"
        },
        "referrerDocid": {
          "description": "Set of referrers indexed with the image.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "referrerUrls": {
          "description": "Set of referrer urls indexed with the image.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CountryClickDistribution": {
      "id": "CountryClickDistribution",
      "properties": {
        "confidence": {
          "description": "To store confidence in the distribution in cases when total is not set.",
          "format": "double",
          "type": "number"
        },
        "item": {
          "items": {
            "$ref": "CountryClickDistributionItem"
          },
          "type": "array"
        },
        "total": {
          "description": "To store total clicks on this page/domain.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CountryClickDistributionItem": {
      "id": "CountryClickDistributionItem",
      "properties": {
        "doubleValue": {
          "format": "double",
          "type": "number"
        },
        "name": {
          "type": "string"
        },
        "value": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CountryCountryAttachment": {
      "description": "If you add new fields to this message, do not use any tag value less than the \"Next free tag\" below. The lower tag values might be missing in this file, but they were used in past for some field, so cannot be used again. Next free tag: 44",
      "id": "CountryCountryAttachment",
      "properties": {
        "clickDistribution": {
          "$ref": "CountryClickDistribution",
          "description": "Store weighted click distribution for page level country-id classification."
        },
        "countryidFromUgc": {
          "description": "Is true if the country attachment was computed through the UGC pipeline.",
          "type": "boolean"
        },
        "debug": {
          "description": "A non critical field to store debug info for a country attachment. Used in experiments and for debugging.",
          "type": "string"
        },
        "debugSourceUrl": {
          "description": "Set to the signal source URLs when merging country signals in Alexandria during sitemoves. Essentially if sites A and B move to C, and we merge A and B's signal to C, in the countryattachment signal C will have URL A and B as source_url. Only used for debugging and it doesn't show up in docjoins.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "documentLocationSource": {
          "description": "Specifies the origin of `geo_locations`. Right now, it can either come from deprecated Docloc system or the new Brainloc system when Docloc doesn't have sufficient evidence.",
          "enum": [
            "UNSPECIFIED",
            "DOCLOC",
            "BRAINLOC",
            "LOGLOC"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "existNextLevel": {
          "type": "boolean"
        },
        "fromLanguageFallback": {
          "description": "Booleans to keep track of where the country-id of the page came from. These are used for debugging and/or unittests, and cleared in production.",
          "type": "boolean"
        },
        "fromRestricts": {
          "type": "boolean"
        },
        "fromSgDomains": {
          "type": "boolean"
        },
        "fromTld": {
          "type": "boolean"
        },
        "fromUgc": {
          "type": "boolean"
        },
        "fromUrlPattern": {
          "type": "boolean"
        },
        "fromWmx": {
          "type": "boolean"
        },
        "geoLocations": {
          "$ref": "CountryGeoLocations",
          "description": "New MetroID: Now called GeoLocations since the locations could be sublocalities, cities or states. GeoLocations are always more fine grained than country. TODO (jayeshv): Once new MetroID/GeoLocations is launched everywhere, deleted old MetroID related fields."
        },
        "global": {
          "type": "boolean"
        },
        "isValidForCountryRestrict": {
          "description": "Set to true if the local_countries field can be used for country restricts as well.",
          "type": "boolean"
        },
        "localCountries": {
          "description": "two-letter(lower-case) countrycode, e.g. us countries that is local to",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "localCountryCodes": {
          "description": "Fields that actually store the country id in docjoins. The format of this data is defined in //i18n/identifiers/stableinternalregionconverter.cc. Converter defined there can be used to convert it to RegionCode format.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "metroIdList": {
          "description": "Metro locations: list of NavBoost feature V2 associated with a doc, along with the enclosing province. Metro locations with new tags.",
          "items": {
            "$ref": "CountryMetroNBFeature"
          },
          "type": "array"
        },
        "metroLocationId": {
          "description": "Metro level data. metro_location_id stores geotokens for metro restricts.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "metroNavboost": {
          "description": "Metro navboost: list of (NavBoost feature V2, navboost float) pairs.",
          "items": {
            "$ref": "CountryMetroNBFeature"
          },
          "type": "array"
        },
        "provinceGeotokenList": {
          "items": {
            "$ref": "CountryProvinceGeotoken"
          },
          "type": "array"
        },
        "relatedCountries": {
          "description": "two-letter(lower-case) countrycode, e.g. us countries that is related to, but not local to",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "relatedCountryCodes": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "restrictCountries": {
          "description": "List of two-letter(lower-case) countrycodes(e.g. us) valid for restricts. Typically cloned out of local_countries if is_valid_for_country_restrict is set to true.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "salientCountries": {
          "description": "[Experimental]: Top salient countries for a doc. If a country can not be found on this field it can be considered that this doc is not relevant to it.",
          "items": {
            "$ref": "CountrySalientCountry"
          },
          "type": "array"
        },
        "salientCountrySet": {
          "$ref": "QualitySalientCountriesSalientCountrySet"
        },
        "sitename": {
          "description": "Domain name of keys in filtering metro reducer class, used only by the intermediate mapreduces to produce filtered data.",
          "type": "string"
        },
        "superGlobal": {
          "description": "Super global pages get lesser demotion than global pages. A document can only be either global or super_global but not both.",
          "type": "boolean"
        },
        "urlPatternBasedCountry": {
          "format": "int32",
          "type": "integer"
        },
        "urlPatternBasedLanguage": {
          "description": "Language and country extracted using the URL pattern map.",
          "format": "int32",
          "type": "integer"
        },
        "userVisibleCountryFromLogs": {
          "description": "This is used to store the visible country id computed from logs data",
          "type": "string"
        },
        "userVisibleLocalCountry": {
          "description": "This is the country id we show to users on the result page. This is kept different from country demotion country id because we dont want to expose our backoff and url based detection algorithm - also we want to be ultra conservative in showing this.",
          "format": "int32",
          "type": "integer"
        },
        "weightAboveIdealForLocalness": {
          "description": "If result is global, store weight above ideal, as a confidence signal. Used in query localness, cleared in production CountryAttachment.",
          "format": "double",
          "type": "number"
        },
        "wmxCountry": {
          "description": "Country specified for a web-site through webmaster console.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CountryGeoLocation": {
      "description": "Stores one location and all meta-data associated with that location.",
      "id": "CountryGeoLocation",
      "properties": {
        "clickRadius50Percent": {
          "description": "The radius (in miles) around the assigned location that the document gets 50% of its clicks.",
          "format": "uint32",
          "type": "integer"
        },
        "confidence": {
          "description": "Confidence on the location. Ranges in [0.0, 1.0]. Cleared during index creation.",
          "format": "float",
          "type": "number"
        },
        "confidencePercent": {
          "description": "Confidence mapped to [0, 100]. Converted to integer for efficient storage. Populated during index creation.",
          "format": "uint32",
          "type": "integer"
        },
        "internalId": {
          "description": "Used for compressed docloc data. In compressed data, instead of location_info, only an integer ID for that LocationInfo is stored. A separate lookup table is used to get full LocationInfo from the internal ID.",
          "format": "int32",
          "type": "integer"
        },
        "locationInfo": {
          "$ref": "CountryLocationInfo"
        },
        "propagatedFromASubpage": {
          "description": "True if this location is assigned to one of the subpages, and not to the page itself. If the total number of locations assigned to all the subpages of a page is small (usually up to 5), then that page also gets assigned those locations, and this flag is set for those locations.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "CountryGeoLocations": {
      "description": "List of locations assigned to a document.",
      "id": "CountryGeoLocations",
      "properties": {
        "geoLocation": {
          "items": {
            "$ref": "CountryGeoLocation"
          },
          "type": "array"
        },
        "isNonLocationSpecific": {
          "description": "This will be set to true for documents which receive several clicks but are not assigned any location because the click distribution is flat. Typical examples are global sites like facebook.com, chains like walmart.com, informational sites like wikipedia.org etc. This flag is not propagated to deeper pages since this signal is meant to indicate that a website or a part of website is conclusively non-local, so propagating this information to deeper pages does not make sense. If this flag is set, then the only possible geo_location will be the ones which are propagated_from_a_subpage.",
          "type": "boolean"
        },
        "propagationDepthFromParent": {
          "description": "Depth of the URL from it's nearest parent in GeoLocation data. Webpages inherhit locations from their parent pages. For example, if foo.com/a is assigned location L1, and foo.com/a/b is not assigned any location, then http://www.foo.com/a/b inherits location L1 from it's nearest parent foo.com/a in GeoLocation data. This attribute is the distance from the nearest parent which is present in GeoLocation data. In this particular case, it will be 1.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CountryLocationInfo": {
      "description": "This represents one location.",
      "id": "CountryLocationInfo",
      "properties": {
        "center": {
          "$ref": "GeostorePointProto",
          "description": "The latitude and longitude of the conceptual center of the location. For cities, this would be the center of the downtown, or maybe the location of city hall. For states and countries it might be the capital city. But there are no guarantees and this may be any random point inside the location."
        },
        "city": {
          "type": "string"
        },
        "country": {
          "description": "Human readable name hierarchy. Only the relevant fields will be present. For example for city GeoLocations, sub_locality field will not be present. Cleared during index creation.",
          "type": "string"
        },
        "county": {
          "type": "string"
        },
        "enclosingStateFeatureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Oyster feature ID of the enclosing state. Cleared during index creation."
        },
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Oyster feature ID of the location. Cleared during index creation."
        },
        "state": {
          "type": "string"
        },
        "stateIdFprint": {
          "description": "32 bit fingerprint of the feature id of the state of this location. For cities and sub-localities it will be the enclosing state. For state locations, it will be fingerprint of the feture-id of the location itself. Populated during index creation.",
          "format": "uint32",
          "type": "integer"
        },
        "subLocality": {
          "type": "string"
        },
        "type": {
          "description": "Type of the location (sub-locality, city, state etc).",
          "enum": [
            "TYPE_ANY",
            "TYPE_TRANSPORTATION",
            "TYPE_ROUTE",
            "TYPE_DEPRECATED_HIGHWAY_DO_NOT_USE",
            "TYPE_HIGHWAY",
            "TYPE_HIGHWAY_1",
            "TYPE_HIGHWAY_2",
            "TYPE_HIGHWAY_3",
            "TYPE_HIGHWAY_4",
            "TYPE_HIGHWAY_5",
            "TYPE_HIGHWAY_6",
            "TYPE_HIGHWAY_7",
            "TYPE_HIGHWAY_8",
            "TYPE_HIGHWAY_9",
            "TYPE_BICYCLE_ROUTE",
            "TYPE_TRAIL",
            "TYPE_SEGMENT",
            "TYPE_ROAD",
            "TYPE_RAILWAY",
            "TYPE_STANDARD_TRACK",
            "TYPE_JR_TRACK",
            "TYPE_NARROW_TRACK",
            "TYPE_MONORAIL_TRACK",
            "TYPE_SUBWAY_TRACK",
            "TYPE_LIGHT_RAIL_TRACK",
            "TYPE_BROAD_TRACK",
            "TYPE_HIGH_SPEED_RAIL",
            "TYPE_TROLLEY_TRACK",
            "TYPE_FERRY",
            "TYPE_FERRY_BOAT",
            "TYPE_FERRY_TRAIN",
            "TYPE_VIRTUAL_SEGMENT",
            "TYPE_INTERSECTION",
            "TYPE_TRANSIT",
            "TYPE_TRANSIT_STATION",
            "TYPE_BUS_STATION",
            "TYPE_TRAMWAY_STATION",
            "TYPE_TRAIN_STATION",
            "TYPE_SUBWAY_STATION",
            "TYPE_FERRY_TERMINAL",
            "TYPE_AIRPORT",
            "TYPE_AIRPORT_CIVIL",
            "TYPE_AIRPORT_MILITARY",
            "TYPE_AIRPORT_MIXED",
            "TYPE_HELIPORT",
            "TYPE_SEAPLANE_BASE",
            "TYPE_AIRSTRIP",
            "TYPE_CABLE_CAR_STATION",
            "TYPE_GONDOLA_LIFT_STATION",
            "TYPE_FUNICULAR_STATION",
            "TYPE_SPECIAL_STATION",
            "TYPE_HORSE_CARRIAGE_STATION",
            "TYPE_MONORAIL_STATION",
            "TYPE_SEAPORT",
            "TYPE_TRANSIT_STOP",
            "TYPE_TRANSIT_TRIP",
            "TYPE_TRANSIT_DEPARTURE",
            "TYPE_TRANSIT_LEG",
            "TYPE_TRANSIT_LINE",
            "TYPE_TRANSIT_AGENCY_DEPRECATED_VALUE",
            "TYPE_TRANSIT_TRANSFER",
            "TYPE_SEGMENT_PATH",
            "TYPE_ROAD_SIGN",
            "TYPE_INTERSECTION_GROUP",
            "TYPE_PATHWAY",
            "TYPE_RESTRICTION_GROUP",
            "TYPE_TOLL_CLUSTER",
            "TYPE_POLITICAL",
            "TYPE_COUNTRY",
            "TYPE_ADMINISTRATIVE_AREA",
            "TYPE_ADMINISTRATIVE_AREA1",
            "TYPE_US_STATE",
            "TYPE_GB_COUNTRY",
            "TYPE_JP_TODOUFUKEN",
            "TYPE_ADMINISTRATIVE_AREA2",
            "TYPE_GB_FORMER_POSTAL_COUNTY",
            "TYPE_GB_TRADITIONAL_COUNTY",
            "TYPE_ADMINISTRATIVE_AREA3",
            "TYPE_ADMINISTRATIVE_AREA4",
            "TYPE_ADMINISTRATIVE_AREA5",
            "TYPE_ADMINISTRATIVE_AREA6",
            "TYPE_ADMINISTRATIVE_AREA7",
            "TYPE_ADMINISTRATIVE_AREA8",
            "TYPE_ADMINISTRATIVE_AREA9",
            "TYPE_COLLOQUIAL_AREA",
            "TYPE_RESERVATION",
            "TYPE_LOCALITY",
            "TYPE_GB_POST_TOWN",
            "TYPE_JP_GUN",
            "TYPE_JP_SHIKUCHOUSON",
            "TYPE_JP_SUB_SHIKUCHOUSON",
            "TYPE_COLLOQUIAL_CITY",
            "TYPE_SUBLOCALITY",
            "TYPE_US_BOROUGH",
            "TYPE_GB_DEPENDENT_LOCALITY",
            "TYPE_JP_OOAZA",
            "TYPE_JP_KOAZA",
            "TYPE_JP_GAIKU",
            "TYPE_GB_DOUBLE_DEPENDENT_LOCALITY",
            "TYPE_JP_CHIBAN",
            "TYPE_JP_EDABAN",
            "TYPE_SUBLOCALITY1",
            "TYPE_SUBLOCALITY2",
            "TYPE_SUBLOCALITY3",
            "TYPE_SUBLOCALITY4",
            "TYPE_SUBLOCALITY5",
            "TYPE_NEIGHBORHOOD",
            "TYPE_CONSTITUENCY",
            "TYPE_DESIGNATED_MARKET_AREA",
            "TYPE_SCHOOL_DISTRICT",
            "TYPE_LAND_PARCEL",
            "TYPE_DISPUTED_AREA",
            "TYPE_POLICE_JURISDICTION",
            "TYPE_STATISTICAL_AREA",
            "TYPE_CONSTITUENCY_FUTURE",
            "TYPE_PARK",
            "TYPE_GOLF_COURSE",
            "TYPE_LOCAL_PARK",
            "TYPE_NATIONAL_PARK",
            "TYPE_US_NATIONAL_PARK",
            "TYPE_US_NATIONAL_MONUMENT",
            "TYPE_NATIONAL_FOREST",
            "TYPE_PROVINCIAL_PARK",
            "TYPE_PROVINCIAL_FOREST",
            "TYPE_CAMPGROUNDS",
            "TYPE_HIKING_AREA",
            "TYPE_BUSINESS",
            "TYPE_GOVERNMENT",
            "TYPE_BORDER_CROSSING",
            "TYPE_CITY_HALL",
            "TYPE_COURTHOUSE",
            "TYPE_EMBASSY",
            "TYPE_LIBRARY",
            "TYPE_SCHOOL",
            "TYPE_UNIVERSITY",
            "TYPE_EMERGENCY",
            "TYPE_HOSPITAL",
            "TYPE_PHARMACY",
            "TYPE_POLICE",
            "TYPE_FIRE",
            "TYPE_DOCTOR",
            "TYPE_DENTIST",
            "TYPE_VETERINARIAN",
            "TYPE_TRAVEL_SERVICE",
            "TYPE_LODGING",
            "TYPE_RESTAURANT",
            "TYPE_GAS_STATION",
            "TYPE_PARKING",
            "TYPE_POST_OFFICE",
            "TYPE_REST_AREA",
            "TYPE_CASH_MACHINE",
            "TYPE_CAR_RENTAL",
            "TYPE_CAR_REPAIR",
            "TYPE_SHOPPING",
            "TYPE_GROCERY",
            "TYPE_TOURIST_DESTINATION",
            "TYPE_ECO_TOURIST_DESTINATION",
            "TYPE_BIRD_WATCHING",
            "TYPE_FISHING",
            "TYPE_HUNTING",
            "TYPE_NATURE_RESERVE",
            "TYPE_TEMPLE",
            "TYPE_CHURCH",
            "TYPE_GURUDWARA",
            "TYPE_HINDU_TEMPLE",
            "TYPE_MOSQUE",
            "TYPE_SYNAGOGUE",
            "TYPE_STADIUM",
            "TYPE_BAR",
            "TYPE_MOVIE_RENTAL",
            "TYPE_COFFEE",
            "TYPE_GOLF",
            "TYPE_BANK",
            "TYPE_DOODLE",
            "TYPE_GROUNDS",
            "TYPE_AIRPORT_GROUNDS",
            "TYPE_BUILDING_GROUNDS",
            "TYPE_CEMETERY",
            "TYPE_HOSPITAL_GROUNDS",
            "TYPE_INDUSTRIAL",
            "TYPE_MILITARY",
            "TYPE_SHOPPING_CENTER",
            "TYPE_SPORTS_COMPLEX",
            "TYPE_UNIVERSITY_GROUNDS",
            "TYPE_DEPRECATED_TARMAC",
            "TYPE_ENCLOSED_TRAFFIC_AREA",
            "TYPE_PARKING_LOT",
            "TYPE_PARKING_GARAGE",
            "TYPE_OFF_ROAD_AREA",
            "TYPE_BORDER",
            "TYPE_BUILDING",
            "TYPE_GEOCODED_ADDRESS",
            "TYPE_NATURAL_FEATURE",
            "TYPE_TERRAIN",
            "TYPE_SAND",
            "TYPE_BEACH",
            "TYPE_DUNE",
            "TYPE_ROCKY",
            "TYPE_ICE",
            "TYPE_GLACIER",
            "TYPE_BUILT_UP_AREA",
            "TYPE_VEGETATION",
            "TYPE_SHRUBBERY",
            "TYPE_WOODS",
            "TYPE_AGRICULTURAL",
            "TYPE_GRASSLAND",
            "TYPE_TUNDRA",
            "TYPE_DESERT",
            "TYPE_SALT_FLAT",
            "TYPE_WATER",
            "TYPE_OCEAN",
            "TYPE_BAY",
            "TYPE_BIGHT",
            "TYPE_LAGOON",
            "TYPE_SEA",
            "TYPE_STRAIT",
            "TYPE_INLET",
            "TYPE_FJORD",
            "TYPE_LAKE",
            "TYPE_SEASONAL_LAKE",
            "TYPE_RESERVOIR",
            "TYPE_POND",
            "TYPE_RIVER",
            "TYPE_RAPIDS",
            "TYPE_DISTRIBUTARY",
            "TYPE_CONFLUENCE",
            "TYPE_WATERFALL",
            "TYPE_SPRING",
            "TYPE_GEYSER",
            "TYPE_HOT_SPRING",
            "TYPE_SEASONAL_RIVER",
            "TYPE_WADI",
            "TYPE_ESTUARY",
            "TYPE_WETLAND",
            "TYPE_WATER_NAVIGATION",
            "TYPE_FORD",
            "TYPE_CANAL",
            "TYPE_HARBOR",
            "TYPE_CHANNEL",
            "TYPE_REEF",
            "TYPE_REEF_FLAT",
            "TYPE_REEF_GROWTH",
            "TYPE_REEF_EXTENT",
            "TYPE_REEF_ROCK_SUBMERGED",
            "TYPE_IRRIGATION",
            "TYPE_DAM",
            "TYPE_DRINKING_WATER",
            "TYPE_CURRENT",
            "TYPE_WATERING_HOLE",
            "TYPE_TECTONIC",
            "TYPE_WATERING_HOLE_DEPRECATED",
            "TYPE_VOLCANO",
            "TYPE_LAVA_FIELD",
            "TYPE_FISSURE",
            "TYPE_FAULT",
            "TYPE_LAND_MASS",
            "TYPE_CONTINENT",
            "TYPE_ISLAND",
            "TYPE_ATOLL",
            "TYPE_OCEAN_ROCK_EXPOSED",
            "TYPE_CAY",
            "TYPE_PENINSULA",
            "TYPE_ISTHMUS",
            "TYPE_ELEVATED",
            "TYPE_PEAK",
            "TYPE_NUNATAK",
            "TYPE_SPUR",
            "TYPE_PASS",
            "TYPE_PLATEAU",
            "TYPE_RIDGE",
            "TYPE_RAVINE",
            "TYPE_CRATER",
            "TYPE_KARST",
            "TYPE_CLIFF",
            "TYPE_VISTA",
            "TYPE_DIGITAL_ELEVATION_MODEL",
            "TYPE_UPLAND",
            "TYPE_TERRACE",
            "TYPE_SLOPE",
            "TYPE_CONTOUR_LINE",
            "TYPE_PAN",
            "TYPE_UNSTABLE_HILLSIDE",
            "TYPE_MOUNTAIN_RANGE",
            "TYPE_UNDERSEA",
            "TYPE_SUBMARINE_SEAMOUNT",
            "TYPE_SUBMARINE_RIDGE",
            "TYPE_SUBMARINE_GAP",
            "TYPE_SUBMARINE_PLATEAU",
            "TYPE_SUBMARINE_DEEP",
            "TYPE_SUBMARINE_VALLEY",
            "TYPE_SUBMARINE_BASIN",
            "TYPE_SUBMARINE_SLOPE",
            "TYPE_SUBMARINE_CLIFF",
            "TYPE_SUBMARINE_PLAIN",
            "TYPE_SUBMARINE_FRACTURE_ZONE",
            "TYPE_CAVE",
            "TYPE_ROCK",
            "TYPE_ARCHIPELAGO",
            "TYPE_POSTAL",
            "TYPE_POSTAL_CODE",
            "TYPE_POSTAL_CODE_PREFIX",
            "TYPE_PREMISE",
            "TYPE_SUB_PREMISE",
            "TYPE_SUITE",
            "TYPE_POST_TOWN",
            "TYPE_POSTAL_ROUND",
            "TYPE_META_FEATURE",
            "TYPE_DATA_SOURCE",
            "TYPE_LOCALE",
            "TYPE_TIMEZONE",
            "TYPE_BUSINESS_CHAIN",
            "TYPE_PHONE_NUMBER_PREFIX",
            "TYPE_PHONE_NUMBER_AREA_CODE",
            "TYPE_BUSINESS_CORRIDOR",
            "TYPE_ADDRESS_TEMPLATE",
            "TYPE_TRANSIT_AGENCY",
            "TYPE_FUTURE_GEOMETRY",
            "TYPE_EVENT",
            "TYPE_EARTHQUAKE",
            "TYPE_HURRICANE",
            "TYPE_WEATHER_CONDITION",
            "TYPE_TRANSIENT",
            "TYPE_ENTRANCE",
            "TYPE_CARTOGRAPHIC",
            "TYPE_HIGH_TENSION",
            "TYPE_SKI_TRAIL",
            "TYPE_SKI_LIFT",
            "TYPE_SKI_BOUNDARY",
            "TYPE_WATERSHED_BOUNDARY",
            "TYPE_TARMAC",
            "TYPE_WALL",
            "TYPE_PICNIC_AREA",
            "TYPE_PLAY_GROUND",
            "TYPE_TRAIL_HEAD",
            "TYPE_GOLF_TEEING_GROUND",
            "TYPE_GOLF_PUTTING_GREEN",
            "TYPE_GOLF_ROUGH",
            "TYPE_GOLF_SAND_BUNKER",
            "TYPE_GOLF_FAIRWAY",
            "TYPE_GOLF_HOLE",
            "TYPE_DEPRECATED_GOLF_SHOP",
            "TYPE_CAMPING_SITE",
            "TYPE_DESIGNATED_BARBECUE_PIT",
            "TYPE_DESIGNATED_COOKING_AREA",
            "TYPE_CAMPFIRE_PIT",
            "TYPE_WATER_FOUNTAIN",
            "TYPE_LITTER_RECEPTACLE",
            "TYPE_LOCKER_AREA",
            "TYPE_ANIMAL_ENCLOSURE",
            "TYPE_CARTOGRAPHIC_LINE",
            "TYPE_ESTABLISHMENT",
            "TYPE_ESTABLISHMENT_GROUNDS",
            "TYPE_ESTABLISHMENT_BUILDING",
            "TYPE_ESTABLISHMENT_POI",
            "TYPE_ESTABLISHMENT_SERVICE",
            "TYPE_CELESTIAL",
            "TYPE_ROAD_MONITOR",
            "TYPE_PUBLIC_SPACES_AND_MONUMENTS",
            "TYPE_STATUE",
            "TYPE_TOWN_SQUARE",
            "TYPE_LEVEL",
            "TYPE_COMPOUND",
            "TYPE_COMPOUND_GROUNDS",
            "TYPE_COMPOUND_BUILDING",
            "TYPE_COMPOUND_SECTION",
            "TYPE_TERMINAL_POINT",
            "TYPE_REGULATED_AREA",
            "TYPE_LOGICAL_BORDER",
            "TYPE_DO_NOT_USE_RESERVED_TO_CATCH_GENERATED_FILES",
            "TYPE_UNKNOWN"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "ABSTRACT",
            "A route is any section of road (or rails, etc.) that has a name. This includes city streets as well as highways. Road segments can belong to multiple routes (e.g. El Camino, CA-82).",
            "DEPRECATED",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "A designated bicycle route, whose segments may consist of any combination of bicycle paths, bicycle lanes, or city streets.",
            "A designated trail, which may consist of paved walkways, dirt paths, fire road, streets or highways, etc.",
            "ABSTRACT",
            "",
            "Railroads use several different incompatible track types.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Tracks for streetcars, cable-cars, etc. Ferries are services that are part of the road network but are not roads. They typically involve fares and scheduled departure times.",
            "ABSTRACT",
            "The vast majority of ferries are ferry boats.",
            "Also called a \"car transport\", a ferry train is a rail service that carries passengers and their vehicles across undrivable terrain. The Channel Tunnel (\"Chunnel\") is the most famous example, but they are also common in the Alps where they connect neighboring valleys otherwise separated by impassable mountains.",
            "Any plausible 1-dimensional path through a 2+ dimensional space, for the purposes of making graph-search-based routing possible. Such segments can be used to model paths through parking lots, squares, floors of buildings and other areas.",
            "An intersection consists of a collection of segments that terminate at the same location. This is topological definition: it may not match what a typical user would think of as an \"intersection\". See TYPE_INTERSECTION_GROUP, below, for more information. Each segment terminating at an intersection has an \"endpoint type\" that specifies how that segment is terminated: stop sign, yield sign, three-way light, etc.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A transit line is a collection of transit legs, associated with some invariant properties of the trips that run over the legs. See also transitline.proto",
            "TYPE_TRANSIT_AGENCY was moved to 0xC91. This deprecated enum value still exists for debugging purposes only.",
            "DEPRECATED",
            "ABSTRACT",
            "Road sign features have names, point geometry, etc. They also have segment_path data (see below) which lists the segments that refer to the sign. See segment.proto for the reference from the segment to the road sign.",
            "Our TYPE_INTERSECTION feature, above, models the point where one or more segments terminate. This is topological definition: it may not match what a typical user would think of as an \"intersection\". Consider the intersections where Hayes, Market, Larkin, and 9th Street meet near (37.77765, -122.41638) in San Francisco. Most people would probably consider this a single feature, even though we model it as four separate TYPE_INTERSECTION features. This TYPE_INTERSECTION_GROUP is used to model the user's concept of a complex intersection.",
            "RESERVED",
            "A restriction group describes a set of segment restrictions that belong together and have a name or an associated event. See also restriction_group.proto",
            "A toll cluster is either a single point on a segment (represented as a point at the end of the segment that has ENDPOINT_TOLL_BOOTH set) or a group of points on various road segments in MapFacts that represents one or more lanes passing through a toll fixture that all go to the same routing destination. Each toll cluster should have at most a single price per payment method. E.g. {CASH = $5, PASS = $1}. Note: If a toll fixture has different prices for multiple routing destinations, drivers need to be in the correct lane before passing through the toll fixture and hence such a fixture is represented by multiple toll clusters. A toll cluster does not necessarily represent a real-world entity, e.g. a particular plaza/structure as perceived by humans. This is because a plaza can be represented by more than one toll cluster. We require toll clusters to have names, but they might be non-unique. For example, a plaza might be represented by multiple toll clusters that may have the same plaza name. For further details, please see go/toll-cluster-schema.",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "e.g. Silicon Valley",
            "A reservation is a region collectively held or governed by indigenous people and officially recognized by the country\u2019s government at the federal or state level. A reservation may be fully contained within an administrative feature or partially contained within two or more. These regions are referred to by different categorical names depending on country and even by state, including but not limited to: \u201cIndian Reservations\u201d, \u201cIndian Reserves\u201d, \u201cLand Claim Settlement Lands\u201d, \u201cIndian Lands\u201d, \u201cTreaty Lands\u201d, \u201cIndigenous Territories\u201d, etc. A reservation is not a historic indigenous territory boundary or a region which has applied for land rights but has not yet received official recognition.",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "An entity widely considered to be a city, that may itself be made up of smaller political entities, some of which are cities/towns/villages themselves. For example, the colloquial view of Sydney, Australia actually comprises many smaller cities, but is regarded as a city itself. This type is not suitable for modeling official metro-/micropolitan or other statistical areas.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Designated Market Areas (or DMAs) are used by marketing and ratings companies (such as the Nielsen Media Research company) to describe geographical regions (such as the greater New York metropolitan area) that are covered by a set of television stations. (See http://www.schooldata.com/pdfs/DMA.pdf) In the United States, DMAs should have a DMA numeric ID name, tagged with the FLAG_DESIGNATED_MARKET_AREA_ID flag.",
            "",
            "",
            "Eventually we'll have more data for disputed areas (e.g., who makes claims on the area, who has de facto control, etc.). For the moment, we just define a type so we can simply mark areas as disputed.",
            "Boundaries representing the jurisdiction of a particular police station.",
            "An area used for aggregating statistical data, eg, a census region. Note that TYPE_STATISTICAL_AREA has a third nibble so we can add an abstract parent above it later if need be at 0x2E1 (and rename TYPE_STATISTICAL_AREA as TYPE_STATISTICAL_AREA1).",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A line representing the boundary between two features. See border.proto for details.",
            "DEPRECATED",
            "An association of a point with an address, with no other information.",
            "ABSTRACT",
            "Expanses of land that share common surface attributes. These areas would look more or less uniform from a high altitude.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Terrain that looks populated.",
            "Terrain that is covered in vegetation.",
            "",
            "",
            "",
            "",
            "",
            "",
            "A flat expanse of salt left by the evaporation of a body of salt water.",
            "Features can be TYPE_WATER if we don't have enough information to properly type the body of water. TYPE_WATER is also used as the type for child features that compose a TYPE_RIVER feature.",
            "One of the large salt-water bodies that covers most of the globe.",
            "An ocean subdivision formed by a coastal indentation. Includes coves and gulfs.",
            "An open body of water formed by a slight coastal indentation.",
            "",
            "An ocean subdivision more or less confined by land and islands.",
            "A long narrow ocean subdivision. Includes sounds.",
            "",
            "",
            "An inland body of standing water.",
            "A lake that dries up part of the year.",
            "An artificial body of water, possibly created by a dam, often used for irrigation or house use.",
            "",
            "An inland body of moving water, or parts associated with it in which there is little or no current (backwater).",
            "",
            "A branch which flows away from the main river. Includes deltas.",
            "A place where two or more rivers join.",
            "",
            "A place where ground water flows naturally out of the ground.",
            "",
            "",
            "A river that dries up part of the year.",
            "A dry riverbed that occasionally receives flashfloods.",
            "A place at the end of a river where fresh and salt water mix. Includes tidal creeks and limans.",
            "Land that is usually flooded. Includes bogs, marshes, flats, moors, and swamps.",
            "",
            "A shallow place where water may be waded through.",
            "A narrow passage used by boats. Normally artificial.",
            "A deep place near a shore where ships commonly drop anchor.",
            "A deep part in a body of water that is suitable for navigation. Includes narrows.",
            "Rocks, coral, sandbars, or other features beneath the surface of the water that pose a hazard to passing ships. Includes shoals.",
            "A relatively shallow zone of the back reef located closest to the shore, that may be exposed at low tide.",
            "A small section of rocks, coral, sandbars, or other features beneath the surface of the water that forms part of a reef.",
            "The full extent of the reef complex.",
            "A submerged rock in the water.",
            "Man-made (and sometimes natural) channels used to move water. This type was used for both dam structures and water that is hold back by dams. We should use TYPE_COMPOUND_BUILDING for dam structures and TYPE_RESERVOIR for water.",
            "DEPRECATED",
            "",
            "Includes overfalls.",
            "A natural depression filled with water where animals come to drink.",
            "ABSTRACT This type is incorrectly under TYPE_TECTONIC instead of TYPE_WATER. This was a mistake and is now fixed. See TYPE_WATERING_HOLE for the replacement.",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "An exposed rock in the water.",
            "A small, low-elevation, sandy island formed on the surface of coral reefs",
            "A stretch of land projecting into water. Includes capes and spits.",
            "A strip of land connecting two larger land masses, such as continents.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "Elevations that have a distinctive peak.",
            "A peak or ridge of a mountain that extends through a glacier.",
            "A subsidiary peak of a mountain.",
            "A route over an otherwise difficult to traverse feature. Includes saddle.",
            "Elevations that are flat on top. Includes mesas and buttes.",
            "A ridge is a geographical feature consisting of a chain of mountains or hills that form a continuous elevated crest with a single ridgeline for some distance.",
            "Steep declines usually carved by erosion. Includes valleys, canyons, ditches, and gorges.",
            "Depressions causes by impact, explosion, and sometimes sink-holes.",
            "Topography formed on limestone and gypsum by dissolution with sinkholes, caves, etc.",
            "A vertical or nearly vertical slope. Includes escarpments.",
            "An elevated place that is notable for having a good view. Raster digital elevation data. This is not a type to be used by providers or consumed by clients.",
            "RESERVED",
            "Land along streams higher than the alluvial plain or stream terrace.",
            "",
            "Land not so steep as a cliff, but changing elevation. Includes slides.",
            "All the points on the polygon are at the same elevation.",
            "A near-level shallow, natural depression or basin, usually containing an intermittent lake, pond, or pool.",
            "",
            "A series of mountains or hills ranged in a line and connected by high ground. Mountain ranges usually consist of many smaller ridges. For example, the Himalayas, the Andes. the Alps, etc.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "includes peaks, ranges, and spurs",
            "",
            "includes saddles",
            "",
            "",
            "includes trenches and troughs",
            "",
            "",
            "",
            "",
            "",
            "Don't use 0xA7. Use 8 bits for additional types under TYPE_NATURAL_FEATURE, so we don't run out of space. The following are miscellaneous natural features that don't fit any of the categories above.",
            "",
            "A feature representing a group or chain of islands. ",
            "ABSTRACT",
            "This is the type for postal codes which are complete and independent enough that there should be a feature for them (e.g. US 5-digit ZIP codes). For even more detailed suffixes that further subdivide a postal code (such as the +4 component in US ZIP codes), store the information in a TYPE_POSTAL_CODE_SUFFIX address component. When a range or set of postal codes share the same geographical area, e.g. because a precise subdivision does not exist or this subdivision is unknown, this type is used for each individual postal code.",
            "A prefix portion of a postal code which does not meet the requirements for TYPE_POSTAL_CODE, but which is useful to search for, for example UK outcodes.",
            "DEPRECATED",
            "DEPRECATED This is deprecated and we want to use TYPE_COMPOUND_SECTION instead.",
            "DEPRECATED",
            "The term \"post town\" is used for a locality-like-entity that is only used for postal addresses.",
            "DEPRECATED",
            "ABSTRACT",
            "Every data source used in constructing a data repository has a corresponding feature that provides more information about that data source. The extra information is stored in the optional data_source field below.",
            "A locale feature provides region specific conventions such as preferred language and formatting details for time, date, and currency values. Locales aren't necessary defined by physical geographic features, so they are classified as meta-features.",
            "A timezone feature is used to specify the region covering an international timezone. When a point is covered by multiple timezone features, the most specific one can be used to compute the local time at this point. Most specific implies a much smaller region or the one that is closer to the center. A feature's timezone can be specified in the repeated related_timezone field.",
            "A business chain feature is used to represent a chain, e.g. Starbucks, McDonald's, etc. Other features representing specific stores/franchises of this chain may refer to one such feature via RELATION_MEMBER_OF_CHAIN. This is not strictly reserved to commercial chains but can also be used to model organizations such as the Red Cross or the United Nations.",
            "A phone number prefix feature is used to specify the region where phone numbers (typically fixed-line numbers) must begin with a certain prefix. Any phone number prefix down to any level of granularity could be represented by this type.",
            "A phone number area code is a prefix which also coincides with the area code, or national destination code, of a particular region.",
            "A Business Corridor is a dense cluster of semantically similar establishments. TYPE_BUSINESS_CORRIDOR features are distinguished from TYPE_COLLOQUIAL_AREA features because the corridors are not under the political hierarchy, are allowed to be nameless, and may not correspond to well-known real world locations. For more details, see go/geo-corridors-schema.",
            "An address template feature provides region-specific conventions for structuring addresses. These features aren't necessarily defined by physical geographic features, so they are classified as meta-features.",
            "A transit agency operates a number of lines, typically all in the same city, region or country. See also transitagency.proto",
            "A feature whose geometry is planned to replace the geometry on another feature.",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "RESERVED",
            "A portal of entry or exit to another feature. Examples: - Subway station entrance. - Parking lot entrance.",
            "Cartographic features are used to capture real-world objects for which there is no current desire to model any specific attributes. These are only useful to make the map tiles look pretty.",
            "DEPRECATED",
            "Also see skitrail.proto",
            "Also see skilift.proto",
            "Also see skiboundary.proto",
            "",
            "Starting with TYPE_TARMAC, we use longer IDs, so that we can expand the number of feature types under TYPE_CARTOGRAPHIC.",
            "Use TYPE_COMPOUND_GROUND and appropriate gcids for the next two.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "Sub-types within a golf course.",
            "",
            "",
            "",
            "",
            "Use TYPE_ESTABLISHMENT_POI and gcid:golf_shop for golf shops instead.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "Subtype within a zoo - a cage or fenced-off or otherwise delineated area containing animals.",
            "A line for a cartographic detail. For example the international date line. Such features should have polyline geometry.",
            "ABSTRACT This type is being replaced by TYPE_COMPOUND_GROUNDS. For further details, see go/compounds-v2",
            "DEPRECATED This type has been replaced by TYPE_COMPOUND_BUILDING. For further details, see go/oyster-compounds",
            "DEPRECATED",
            "An establishment which has a address (a.k.a. location or storefront). Note that it *may* also have a service area (e.g. a restaurant that offers both dine-in and delivery). This type of business is also known as a \"hybrid\" Service Area Business. Establishment POIs can be referenced by TYPE_COMPOUND features using the RELATION_PRIMARILY_OCCUPIED_BY. This is the reciprocal relation of the RELATION_OCCUPIES.",
            "A business without a storefront, e.g. a plumber. It would normally not have a place that a customer could visit to receive service, but it would have an area served by the business. Also known as a \"pure\" Service Area Business. NOTE(tcain): Using value 0xD441, since we could find ourselves with a need to differentiate service areas from online-only at this level in the future, but still benefit from being able to group those under a common parent, disjoint from TYPE_ESTABLISHMENT_POI.",
            "The root of types of features that are in the sky, rather than on the earth. There will eventually be a hierarchy of types here.",
            "Features responsible for monitoring traffic on roads (usually for speed). Includes cameras at particular points as well as monitors that cover larger spans. Features of this type should have a corresponding gcid that specifies the correct subtype (e.g. gcid:road_camera or gcid:speed_camera_zone). This type was originally named as TYPE_ROAD_CAMERA.",
            "ABSTRACT",
            "Note that this type does not distinguish the nature of the statue (religious, historical, memorial, tourist, ...).",
            "Open space used for events, gathering, or as market-place.",
            "A feature used to represent a logical level, e.g. floor.",
            "ABSTRACT",
            "e.g. campus, compound, parcel.",
            "e.g. single family dwelling, office building.",
            "e.g. suite, room, hallway, cubicle.",
            "A terminal point represents a good location for a user to meet a taxi, ridesharing vehicle, or general driver.",
            "An area controlled in some way by an authoritative source, such as a government-designated COVID containment zone or an area under government sanctions. Features of this type should have one or more gcids corresponding to their specific regulation, and client handling of these features may vary based on the type of regulation.",
            "A grouping of TYPE_BORDER features (\"border segments\"), which together represent a border between two features of the same type.",
            "DEPRECATED",
            "A feature of completely unknown type. This should only be used when absolutely necessary. One example in which this type is useful is in the Chinese importer, which must heuristically segment addresses into components - it often does not know what types to make those components. Please note that the Oyster address formatter does not currently support address components of TYPE_UNKNOWN well."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "CountryMetroNBFeature": {
      "description": "A metro feature, keyed by NavBoost feature id V2. This can be a metro id, a boost, or extended in the future to add probabilities or weights.",
      "id": "CountryMetroNBFeature",
      "properties": {
        "enclosingProvinceGeotoken": {
          "description": "The enclosing_province_geotoken is a 32 bit fingerprint of the state encosing the (metro) id. MetroId's can span multiple states. Enclosing geotoken is filled in with the state name for disambiguation. ProvinceGeotoken field is different as it indicates an \"interest\". Format: 32 bit fingerprint(__state__country).",
          "format": "uint32",
          "type": "integer"
        },
        "id": {
          "description": "A 32 bit navboost v2 feature id encoding (country, language, metro). NavBoosterUtils class (google3/quality/navboost/nav_booster_utils.h) provides functions to decode this feature.",
          "format": "uint32",
          "type": "integer"
        },
        "navboost": {
          "description": "This is the multiplier to apply to the result for this locale & query. NOTE: This is for serving purposes only and should not be populated in the index.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CountryProvinceGeotoken": {
      "description": "A 32 bit fingerprint of a state level geotoken. The geotoken is in the following format: __state__country. These indicate a page is of interest to these states/regions of a country. The use of message is to enable easy additions of probabilities or weights per metro id in the future.",
      "id": "CountryProvinceGeotoken",
      "properties": {
        "geotoken": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CountrySalientCountry": {
      "description": "Salient Countries is an estimated probability (salience) of a doc to be relevant to a country. On this message, countries are represented as int32 (the format of this data is defined in i18n/identifiers/stableinternalregionconverter.cc). Salience is a value in range [0.0 - 1.0] in which 1.0 represents a high likelihood to be relevant to the country",
      "id": "CountrySalientCountry",
      "properties": {
        "compressedSalience": {
          "format": "uint32",
          "type": "integer"
        },
        "countryCode": {
          "format": "int32",
          "type": "integer"
        },
        "salience": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CrawlerChangerateMultipleComponentDistribution": {
      "description": "Proto contains parameters for a multiple component distributions, where each component has non-negative weight and the sum of component weights is 1.",
      "id": "CrawlerChangerateMultipleComponentDistribution",
      "properties": {
        "components": {
          "items": {
            "$ref": "CrawlerChangerateSingleComponentDistribution"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CrawlerChangerateSingleComponentDistribution": {
      "description": "Proto contains parameters of a single component distribution.",
      "id": "CrawlerChangerateSingleComponentDistribution",
      "properties": {
        "logScaling": {
          "description": "Scaling factor to ensure the approximated posterior to have the same scale as the product of prior and likelihood. This value is used to compute posterior weights. Uses log scale to provide a wider range. This field is for internal use only.",
          "format": "float",
          "type": "number"
        },
        "type": {
          "description": "The type indicates the type of the distribution.",
          "enum": [
            "LOG_GAMMA",
            "INV_GAMMA",
            "GAMMA",
            "LOG_NORMAL"
          ],
          "enumDescriptions": [
            "Log-Gamma distribution, where it assumes the log of the values follow Gamma distribution. It uses extension gamma_params.",
            "Inverse-Gamma distribution, where it assumes the inverse of values follow Gamma distribution. It uses extension gamma_params.",
            "Gamma distribution. It uses extension gamma_params.",
            "Log-Normal distribution. It uses extension log_normal_params."
          ],
          "type": "string"
        },
        "weight": {
          "description": "The weight is only used in multiple component scenarios.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CrawlerChangerateUrlChange": {
      "description": "NEXT_TAG: 13",
      "id": "CrawlerChangerateUrlChange",
      "properties": {
        "additionalChangesMerged": {
          "description": "Duplicate UrlChanges crawled within a specified time range will be merged together. UrlChanges are considered duplicates if the simhash, simhash_is_trusted, simhash_v2, simhash_v2_is_trusted, and shingle_simhash are the same. additional_changes_merged indiciates the number of duplicate UrlChanges merged into this UrlChange.",
          "format": "int32",
          "type": "integer"
        },
        "fractionalTileChange": {
          "description": "Deprecated fields. The fraction of tiles (0 to 1) that changed.",
          "format": "double",
          "type": "number"
        },
        "interval": {
          "description": "The length in seconds of the change.",
          "format": "int32",
          "type": "integer"
        },
        "offDomainLinksChange": {
          "description": "Whether the content of the off-domain links changed.",
          "type": "boolean"
        },
        "offDomainLinksCount": {
          "description": "The new count of off-domain links, if they changed.",
          "format": "int32",
          "type": "integer"
        },
        "onDomainLinksCount": {
          "description": "The new count of on-domain links, if the count changed.",
          "format": "int32",
          "type": "integer"
        },
        "onDomainLinksCountChange": {
          "description": "Whether the number of on-domain links changed.",
          "type": "boolean"
        },
        "shingleSimhash": {
          "$ref": "IndexingConverterShingleFingerprint",
          "description": "The old simhash value obtained from shingles."
        },
        "simhash": {
          "description": "The simhash-v1 value. Use of simhash-v1 is deprecated, and newer UrlChange should only contain simhash-v2. During this transition period, UrlChange can contain either simhash or simhash_v2. It is possible that previous UrlChange only contain simhash-v1 and the next UrlChange only contain simhash-v2. In this case, we skip that interval in our changerate computation. [go/changerate-simhash-v2-migration]",
          "format": "uint64",
          "type": "string"
        },
        "simhashIsTrusted": {
          "description": "Whether the simhash-v1 should be trusted.",
          "type": "boolean"
        },
        "simhashV2": {
          "description": "The simhash-v2 value.",
          "format": "uint64",
          "type": "string"
        },
        "simhashV2IsTrusted": {
          "description": "Whether the simhash-v2 value should be trusted.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "CrawlerChangerateUrlChangerate": {
      "description": "The next available field number is 22. To access the best estimate of change period, please use GetChangePeriod in predict-change-rate.h to select between this and other change period estimates below.",
      "id": "CrawlerChangerateUrlChangerate",
      "properties": {
        "approximatedPosterior": {
          "$ref": "CrawlerChangerateMultipleComponentDistribution",
          "description": "The approximated posterior distribution."
        },
        "averageChangeSignificance": {
          "description": "The \"significance\" of the average change we saw of this document (from 0 to 1). Influenced by content changes. This can be used for prioritizing the crawl (higher significance first).",
          "format": "double",
          "type": "number"
        },
        "changeperiod": {
          "description": "//////////////////////////////////////////////////////////////////////////// The classic changerate estimation. //////////////////////////////////////////////////////////////////////////// The classic estimate of change period (in seconds). It is computed by inserted a \"fake\" change and no-change interval as a prior distribution. This field is generally not used and should NOT be accessed directly. See above for correct method for determining the change period estimate.",
          "format": "int32",
          "type": "integer"
        },
        "confidence": {
          "description": "The confidence (between 0 and 1) in the changeperiod guess.",
          "format": "double",
          "type": "number"
        },
        "globalBasedChangePeriod": {
          "description": "//////////////////////////////////////////////////////////////////////////// The changerate estimation based on the global prior. //////////////////////////////////////////////////////////////////////////// The global-based changeperiod. This is our estimate (in seconds) for the average time between changes. It is computed using the new prior method based on global_based_prior_period and the global_based_prior_strength specified below. This is used for computing pattern priors. Use pattern_based_change_period or changeperiod fields for all other purposes.",
          "format": "int32",
          "type": "integer"
        },
        "globalBasedChangePeriodConfidence": {
          "description": "The 'confidence' of the global-based changeperiod. This is the n-th root of the posterior evaluated at MAP point, where n is the number of history intervals. For now, it is hard to interpret the meaning of the absolute values of 'average' posterior cross different sets of data.",
          "format": "double",
          "type": "number"
        },
        "globalBasedPriorPeriod": {
          "description": "The 2 parameters below specify the prior employed in calculating the global_based_change_period. These values are precomputed through an offline analysis and specified via flags.",
          "format": "double",
          "type": "number"
        },
        "globalBasedPriorStrength": {
          "format": "double",
          "type": "number"
        },
        "lastChangeSignificance": {
          "description": "The \"significance\" of the last change we saw of this document (from 0 to 1). Influenced by content changes, etc. This can be used for prioritizing the crawl (higher significance first).",
          "format": "double",
          "type": "number"
        },
        "lastChanged": {
          "description": "The last time (unix timestamp) we saw a changed copy of the document. Provided iff we have seen the page change.",
          "format": "int32",
          "type": "integer"
        },
        "lastFetched": {
          "description": "The last time (unix timestamp) we saw a fetched copy of the document.",
          "format": "int32",
          "type": "integer"
        },
        "numIntervals": {
          "description": "The number of intervals we've seen for this document (where an interval is two different versions).",
          "format": "int32",
          "type": "integer"
        },
        "patternBasedChangePeriod": {
          "description": "//////////////////////////////////////////////////////////////////////////// The changerate estimation based on the pattern prior. //////////////////////////////////////////////////////////////////////////// The pattern-based changeperiod. This is our estimate (in seconds) for the average time between changes. It is calculated based on the pattern_based_prior_period and pattern_based_prior_strength below. This quantity will eventually replace the old changeperiod calculation.",
          "format": "int32",
          "type": "integer"
        },
        "patternBasedChangePeriodConfidence": {
          "description": "The same as global_based_change_period_confidence, except it is computed using pattern based priors.",
          "format": "double",
          "type": "number"
        },
        "patternBasedLowerChangePeriod": {
          "description": "The lower edge of a confidence interval for the pattern-based change period.",
          "format": "int32",
          "type": "integer"
        },
        "patternBasedPriorPeriod": {
          "description": "The 2 parameters below specify the prior employed in calculating the pattern_based_change_period. These values are calculated in a separate process and looked up based on the URL pattern.",
          "format": "double",
          "type": "number"
        },
        "patternBasedPriorStrength": {
          "format": "double",
          "type": "number"
        },
        "patternChangePeriodVersion": {
          "description": "The version number of the algorithm, refer to ChangePeriodVersion for more information.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "//////////////////////////////////////////////////////////////////////////// Basic information of a document. //////////////////////////////////////////////////////////////////////////// The type of the document determined by crawl histories, refer to TYPE for more information.",
          "format": "int32",
          "type": "integer"
        },
        "ugcChangePeriod": {
          "description": "//////////////////////////////////////////////////////////////////////////// The UGC changerate estimation. //////////////////////////////////////////////////////////////////////////// Information on change period generated from user generated content (UGC) change history.",
          "format": "int32",
          "type": "integer"
        },
        "ugcChangePeriodConfidence": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "CrawlerChangerateUrlHistory": {
      "id": "CrawlerChangerateUrlHistory",
      "properties": {
        "change": {
          "description": "All the changes we've seen for this URL.",
          "items": {
            "$ref": "CrawlerChangerateUrlChange"
          },
          "type": "array"
        },
        "latestVersion": {
          "$ref": "CrawlerChangerateUrlVersion",
          "description": "The latest version we've seen."
        },
        "url": {
          "description": "This field in only set in 'url_history' column of Union repository to avoid having to read CompositeDocs.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "CrawlerChangerateUrlVersion": {
      "description": "NEXT_TAG: 15",
      "id": "CrawlerChangerateUrlVersion",
      "properties": {
        "additionalChangesMerged": {
          "description": "Same as the field in UrlChange. This allows us to merge identical UrlVersions into a single UrlVersion.",
          "format": "int32",
          "type": "integer"
        },
        "contentType": {
          "description": "The content type of the page.",
          "format": "int32",
          "type": "integer"
        },
        "isImsNotModified": {
          "description": "Whether this is an IMS response (a 304, not modified).",
          "type": "boolean"
        },
        "lastModified": {
          "description": "The date from the LastModified header, if present.",
          "format": "int32",
          "type": "integer"
        },
        "offDomainLinksChecksum": {
          "description": "The checksum of all the off-domain links on the page.",
          "format": "int32",
          "type": "integer"
        },
        "offDomainLinksCount": {
          "description": "The count of all the off-domain links on the page.",
          "format": "int32",
          "type": "integer"
        },
        "onDomainLinksCount": {
          "description": "The count of all the on-domain links on the page. We aren't worried about the contents themselves, since they might often change (e.g., session ids). We assume that a change in the number of links is significant, however.",
          "format": "int32",
          "type": "integer"
        },
        "shingleSimhash": {
          "$ref": "IndexingConverterShingleFingerprint",
          "description": "The simhash value obtained from shingles."
        },
        "simhash": {
          "description": "The simhash-v1 value. The simhash-v1 is now deprecated and new UrlVersions should only populate simhash-v2. During migration phase from using simhash-v1 to simhash-v2, it is possible that previous UrlChange only contain simhash-v1 and the next UrlChange / UrlVersion could only contain simhash-v2. In this case, we skip that interval in our changerate computation. [go/changerate-simhash-v2-migration]",
          "format": "uint64",
          "type": "string"
        },
        "simhashIsTrusted": {
          "description": "Whether the simhash-v1 should be trusted.",
          "type": "boolean"
        },
        "simhashV2": {
          "description": "The simhash-v2 value.",
          "format": "uint64",
          "type": "string"
        },
        "simhashV2IsTrusted": {
          "description": "Whether the simhash-v2 value should be trusted.",
          "type": "boolean"
        },
        "tile": {
          "description": "The tiles of the document body. We use int32s instead of int64s (the norm) in order to save space. Since rare inaccuracy doesn't really matter, we've decided this is an okay tradeoff.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "timestamp": {
          "description": "The timestamp we crawled the page.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "CrowdingPerDocData": {
      "id": "CrowdingPerDocData",
      "properties": {
        "newscluster": {
          "items": {
            "$ref": "CrowdingPerDocDataNewsCluster"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "CrowdingPerDocDataNewsCluster": {
      "description": "For crowding in news we need to keep data about the last X clustering iterations around.",
      "id": "CrowdingPerDocDataNewsCluster",
      "properties": {
        "ClusterId": {
          "description": "Fingerprint combination of all urls in a cluster",
          "format": "uint64",
          "type": "string"
        },
        "ClusterSize": {
          "description": "This is the X in the \"and X related >>\" link on headlines and search results",
          "format": "int32",
          "type": "integer"
        },
        "ClusterTimeStamp": {
          "description": "When was this clustered (needed for keeping last X iterations around and discarding earlier ones)",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "DeepCropIndexing": {
      "id": "DeepCropIndexing",
      "properties": {
        "cropBytes": {
          "description": "Compact representation for indexing, see creatism::CropBitmap for details on the packing format.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "DeepCropPixels": {
      "id": "DeepCropPixels",
      "properties": {
        "x0": {
          "description": "Pixels version of the DeepCropIndexing bytes, this corresponds to the crop box for a given image (based input image size and desired aspect ratio).",
          "format": "uint32",
          "type": "integer"
        },
        "x1": {
          "format": "uint32",
          "type": "integer"
        },
        "y0": {
          "format": "uint32",
          "type": "integer"
        },
        "y1": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "DocProperties": {
      "description": "NOTE: In segindexer, the docproperties of a document may be reused from a previous cycle if its content is not changed. If you add a new field to DocProperties, make sure it is taken care (i.e., gets copied from a previous cycle to the current document) in CDocProperties::EndDocument().",
      "id": "DocProperties",
      "properties": {
        "avgTermWeight": {
          "description": "The average weighted font size of a term in the doc body",
          "format": "int32",
          "type": "integer"
        },
        "badTitle": {
          "description": "Missing or meaningless title",
          "type": "boolean"
        },
        "badtitleinfo": {
          "items": {
            "$ref": "DocPropertiesBadTitleInfo"
          },
          "type": "array"
        },
        "languages": {
          "description": "A Language enum value. See: go/language-enum",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "leadingtext": {
          "$ref": "SnippetsLeadingtextLeadingTextInfo",
          "description": "Leading text information generated by google3/quality/snippets/leadingtext/leadingtext-detector.cc"
        },
        "numPunctuations": {
          "format": "int32",
          "type": "integer"
        },
        "numTags": {
          "format": "int32",
          "type": "integer"
        },
        "numTokens": {
          "description": "The number of tokens, tags and punctuations in the tokenized contents. This is an approximation of the number of tokens, tags and punctuations we end up with in mustang, but is inexact since we drop some tokens in mustang and also truncate docs at a max cap.",
          "format": "int32",
          "type": "integer"
        },
        "proseRestrict": {
          "description": "The restricts for CSE structured search.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "restricts": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "timestamp": {
          "description": "The time CDocProperties::StartDocument() is called, encoded as seconds past the epoch (Jan 1, 1970). This value is always refreshed and not reused.",
          "format": "int64",
          "type": "string"
        },
        "title": {
          "description": "Extracted from the title tag of the content. This is typically extracted by TitleMetaCollector defined at google3/segindexer/title-meta-collector.h. Please see its documentation for the format and other caveats.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "DocPropertiesBadTitleInfo": {
      "description": "Bad title information.",
      "id": "DocPropertiesBadTitleInfo",
      "properties": {
        "score": {
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "NOT_BAD",
            "MISSING_OR_MEANINGLESS",
            "BOILERPLATE",
            "FOREIGN",
            "UNREADABLE",
            "NAKED",
            "NO_QUERY_SUPPORT",
            "NO_SITE_INFO"
          ],
          "enumDescriptions": [
            "",
            "An empty string, or a bad title such as \"Untitled\". See quality_titles::bad_titles::BadTitleDetector for more details.",
            "Most of the title is marked as boilerplate regions. See boilerplate::BoilerplateTitleScorer for more details.",
            "The language of a title is different from the language of the document. See quality_snippets::foreigntitle::ForeignTitleScorer for more details.",
            "Title has a low readability score. See quality_titles::ReadabilityScorer for more details.",
            "Title needs more context (i.e. a site name), e.g. \"Photos\", \"Contact Us\". See quality_titles::bad_titles::BadTitleDetector for more details.",
            "Title contains no navboost query. See quality_titles::AlternativeTitlesGenerator for more details.",
            "Title has no site title information. See quality_titles::AlternativeTitlesGenerator for more details."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "DrishtiDenseFeatureData": {
      "id": "DrishtiDenseFeatureData",
      "properties": {
        "extra": {
          "description": "If extra is present it must be of the same length as value.",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "value": {
          "description": "Dense data.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "DrishtiFeatureExtra": {
      "id": "DrishtiFeatureExtra",
      "properties": {},
      "type": "object"
    },
    "DrishtiFeatureSetData": {
      "id": "DrishtiFeatureSetData",
      "properties": {
        "extra": {
          "description": "Extra information for this particular FeatureSetData (example timestamp of this frame in the video). (Almost never used).",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "feature": {
          "description": "The following can have multiple FeatureSetElement(s) Each of these FeatureSetElement correspond to the various feature groups. One concrete example is the way these features are generated - example audio, video or OCR.",
          "items": {
            "$ref": "DrishtiFeatureSetDataFeatureSetElement"
          },
          "type": "array"
        },
        "label": {
          "description": "Labels for this particular FeatureSetData. (Almost never used). Only interesting when you have (for example) frame level labels.",
          "items": {
            "$ref": "DrishtiLabelSetElement"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "DrishtiFeatureSetDataFeatureSetElement": {
      "description": "A FeatureSetElement stores the features coming from a single group.",
      "id": "DrishtiFeatureSetDataFeatureSetElement",
      "properties": {
        "dense": {
          "$ref": "DrishtiDenseFeatureData"
        },
        "indexed": {
          "$ref": "DrishtiIndexedFeatureData"
        },
        "name": {
          "description": "A name for the feature group: example \"AUDIO\", \"VIDEO\", \"OCR\", etc.",
          "type": "string"
        },
        "quantized": {
          "$ref": "DrishtiQuantizedDenseFeatureData"
        },
        "quantizedByteDense": {
          "$ref": "DrishtiQuantizedByteDenseFeatureData"
        },
        "quantizedByteIndexed": {
          "$ref": "DrishtiQuantizedByteIndexedFeatureData"
        },
        "sparse": {
          "$ref": "DrishtiSparseFeatureData"
        }
      },
      "type": "object"
    },
    "DrishtiFeatureSetDataSequence": {
      "description": "This represents a sequence (ordered) of FeatureSetData elements.",
      "id": "DrishtiFeatureSetDataSequence",
      "properties": {
        "element": {
          "description": "FeatureSetData contains the features. In most scenarios, you only have one element. However, multiple elements are appropriate in case of videos where each element may correspond to a frame in the video.",
          "items": {
            "$ref": "DrishtiFeatureSetData"
          },
          "type": "array"
        },
        "extra": {
          "description": "Some extra information about this FeatureSetDataSequence. (Almost never used).",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "label": {
          "description": "Global (video-level) labels. In most cases, you only have one LabelSetElement. All the labels will be stored in this single LabelSetElement. Scenarios where you may have multiple LabelSetElement(s) is (for example) when you want to differentiate the labels into various sub-groups - eg, central vs relevant, kg-ids vs queries, etc.",
          "items": {
            "$ref": "DrishtiLabelSetElement"
          },
          "type": "array"
        },
        "timestamp": {
          "description": "If set, must be same length as element. Each entry is the timestamp in microseconds where the FeatureSetData element was extracted.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "DrishtiIndexedFeatureData": {
      "id": "DrishtiIndexedFeatureData",
      "properties": {
        "extra": {
          "description": "If extra is present it must be of the same length as index and value.",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "index": {
          "description": "Indexed data. index and value must be of the same length.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "value": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "DrishtiLabelSetData": {
      "id": "DrishtiLabelSetData",
      "properties": {
        "extra": {
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "targetClass": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "targetClassName": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "targetValue": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "targetWeight": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "weight": {
          "description": "Weight assigned to this set of labels.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "DrishtiLabelSetElement": {
      "id": "DrishtiLabelSetElement",
      "properties": {
        "label": {
          "$ref": "DrishtiLabelSetData"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "DrishtiQuantizedByteDenseFeatureData": {
      "description": "Proto message to store quantized dense feature data.",
      "id": "DrishtiQuantizedByteDenseFeatureData",
      "properties": {
        "extra": {
          "description": "If extra is present it must be of the same length as value.",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "value": {
          "description": "Quantized values for the feature.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "DrishtiQuantizedByteIndexedFeatureData": {
      "description": "Proto message to store quantized indexed feature data.",
      "id": "DrishtiQuantizedByteIndexedFeatureData",
      "properties": {
        "extra": {
          "description": "If extra is present it must be of the same length as value.",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "index": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "value": {
          "description": "Quantized values for the feature.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "DrishtiQuantizedDenseFeatureData": {
      "id": "DrishtiQuantizedDenseFeatureData",
      "properties": {
        "extra": {
          "description": "If extra is present it must be of the same length as value.",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "value": {
          "description": "Quantized Dense data.",
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "DrishtiSparseFeatureData": {
      "id": "DrishtiSparseFeatureData",
      "properties": {
        "extra": {
          "description": "If extra is present it must be of the same length as label and value.",
          "items": {
            "$ref": "DrishtiFeatureExtra"
          },
          "type": "array"
        },
        "generalExtra": {
          "$ref": "DrishtiFeatureExtra"
        },
        "label": {
          "description": "Indexed data. label and value must be of the same length.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "value": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "DrishtiVesperEncodedThumbnail": {
      "description": "The attributes of encoded thumbnail images. Next id: 7.",
      "id": "DrishtiVesperEncodedThumbnail",
      "properties": {
        "encodingQuality": {
          "description": "JPEG/WEBP quality factor in range [0,100].",
          "format": "int32",
          "type": "integer"
        },
        "encodingType": {
          "description": "Image encoding type.",
          "enum": [
            "UNKNOWN",
            "JPEG",
            "WEBP",
            "PNG"
          ],
          "enumDescriptions": [
            "",
            "JPEG encoded.",
            "WEBP encoded.",
            "PNG encoded."
          ],
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "imageBytes": {
          "description": "Encoded thumbnail bytes. Prefer this over `image_string` as we are not supposed to store image bytes in a proto string field.",
          "format": "byte",
          "type": "string"
        },
        "imageString": {
          "description": "Please migrate to `image_bytes`.",
          "type": "string"
        },
        "width": {
          "description": "Thumbnail resolution.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "DrishtiVesperMovingThumbnail": {
      "description": "LINT: LEGACY_NAMES MovingThumbnail is defined as a short video clip that represents the whole video content. Next id: 17.",
      "id": "DrishtiVesperMovingThumbnail",
      "properties": {
        "beginTimestampMs": {
          "description": "The begin timestamp in milliseconds.",
          "format": "int32",
          "type": "integer"
        },
        "durationMs": {
          "description": "The duration of the moving thumbnail in milliseconds. Note that the duration may not be the difference between begin_timestamp_ms and end_timestamp_ms, esp when the moving thumbnail covers multiple clips from the video.",
          "format": "int32",
          "type": "integer"
        },
        "encodedGifAnimation": {
          "format": "byte",
          "type": "string"
        },
        "encodedVideoString": {
          "description": "The encoded video string.",
          "format": "byte",
          "type": "string"
        },
        "encodedWebpAnimation": {
          "description": "The encoded WebP animation.",
          "format": "byte",
          "type": "string"
        },
        "endTimestampMs": {
          "description": "The end timestamp in milliseconds.",
          "format": "int32",
          "type": "integer"
        },
        "height": {
          "description": "Pixel height of the moving thumbnail.",
          "format": "int32",
          "type": "integer"
        },
        "id": {
          "description": "MovingThumbnail id (e.g., the video id).",
          "type": "string"
        },
        "movingThumbnailerVersion": {
          "description": "If set, this is the algorithm version used to generate this moving thumbnail.",
          "enum": [
            "V0",
            "V1",
            "DEPRECATED_V2",
            "DEPRECATED_V3",
            "V4",
            "V5",
            "V6",
            "SHORT_PREVIEW_V0",
            "LIVE_MOVING_THUMBNAILER",
            "MANUAL"
          ],
          "enumDescriptions": [
            "Version 0 and 1 - Initial version with thumbnail quality, iconic face and motion scores.",
            "",
            "Version 2 - Version 1 with default static thumbnail matching, title matching, face matching and face clustering (Deprecated).",
            "Version 3 - Version 2 with high resolution transcodes preferred (Deprecated).",
            "Version 4 - Version 1 with default static thumbnail matching, title matching, and high resolution transcodes preferred.",
            "Version 5 - Version 1 with title matching and high res transcodes preferred.",
            "Version 6 - Version 1 with default static thumbnail matching, title matching, retention data and high resolution transcodes preferred.",
            "Version used for YT Shorts.",
            "Live moving thumbnailer (no scorers involved).",
            "Manually generated."
          ],
          "type": "string"
        },
        "name": {
          "description": "MovingThumbnail name.",
          "enum": [
            "UNKNOWN",
            "MQDEFAULT",
            "MQDEFAULT_6S",
            "LQDEFAULT_6S",
            "MQ220P_5S",
            "MQDEFAULT_6S_HIGHLIGHT",
            "MQDEFAULT_6S_PRE_HIGHLIGHT",
            "MQDEFAULT_6S_THIRD_HIGHLIGHT",
            "MQDEFAULT_6S_ZOOM_IN",
            "SD360P_6S_ZOOM_IN",
            "MQDEFAULT_3S",
            "MQDEFAULT_6S_480x270",
            "MQDEFAULT_1S",
            "MQ_SHORTS_PREVIEW",
            "HQ_SHORTS_PREVIEW"
          ],
          "enumDescriptions": [
            "",
            "320x180, 10s",
            "320x180, 6s",
            "196x110, 6s",
            "392x220, 5s",
            "320x180, 6s, highlight",
            "320x180, 6s, pre-highlight",
            "(3s before highlight) 320x180, 6s, 3rd best highlight",
            "320x180, 6s, central zoom-in version",
            "640x360, 6s, central zoom-in version",
            "320x180, 3s",
            "480x270, 6s",
            "Do not use this (deprecated)",
            "360x360, original aspect ratio",
            "480x480, original aspect ratio"
          ],
          "type": "string"
        },
        "score": {
          "description": "The score of the moving thumbnail.",
          "format": "float",
          "type": "number"
        },
        "scoreComponents": {
          "$ref": "DrishtiVesperMovingThumbnailScoreComponents"
        },
        "thumbnails": {
          "description": "A set of single frame thumbnails in the MovingThumbnail.",
          "items": {
            "$ref": "DrishtiVesperThumbnail"
          },
          "type": "array"
        },
        "type": {
          "description": "MovingThumbnail type.",
          "enum": [
            "TYPE_UNKNOWN",
            "AN_GIF",
            "AN_WEBP",
            "AN_MP4",
            "AN_WEBM"
          ],
          "enumDescriptions": [
            "",
            "Animated gif.",
            "Animated webp.",
            "Animated mp4.",
            "Animated webm."
          ],
          "type": "string"
        },
        "webpQualityLevel": {
          "description": "The actual quality of the Webp animation. Note this value may not be equal to the quality value requested in the animation creator's options. This is because other requirements, such as the max file size, may force the creator to lower the actual quality value.",
          "format": "float",
          "type": "number"
        },
        "width": {
          "description": "Pixel width of the moving thumbnail.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "DrishtiVesperMovingThumbnailScoreComponents": {
      "description": "Sum of individual score components within a moving thumbnail. Used as input for weight fitting.",
      "id": "DrishtiVesperMovingThumbnailScoreComponents",
      "properties": {
        "audienceRewindRatioScore": {
          "format": "float",
          "type": "number"
        },
        "iconicFaceScore": {
          "format": "float",
          "type": "number"
        },
        "matchingScore": {
          "format": "float",
          "type": "number"
        },
        "motionScore": {
          "format": "float",
          "type": "number"
        },
        "titleMatchingScore": {
          "format": "float",
          "type": "number"
        },
        "videoThumbQualityScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "DrishtiVesperThumbnail": {
      "description": "The attributes of a video thumbnail.",
      "id": "DrishtiVesperThumbnail",
      "properties": {
        "denseFeatures": {
          "description": "Thumbnail dense features",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "encodedImageString": {
          "description": "Thumbnail image as an encoded image. Deprecated, use encoded_thumbnails instead.",
          "type": "string"
        },
        "encodedImageStringSmall": {
          "description": "Thumbnail image as an encoded image with smaller resolution. Deprecated, use encoded_thumbnails instead.",
          "type": "string"
        },
        "encodedThumbnails": {
          "description": "Encoded thumbnail images.",
          "items": {
            "$ref": "DrishtiVesperEncodedThumbnail"
          },
          "type": "array"
        },
        "id": {
          "description": "Thumbnail id.",
          "type": "string"
        },
        "ocrText": {
          "description": "Text in video thumbnails that was detected by OCR.",
          "type": "string"
        },
        "qualityScores": {
          "description": "Thumbnail quality scores.",
          "items": {
            "$ref": "DrishtiVesperThumbnailQualityScore"
          },
          "type": "array"
        },
        "shouldUpdateDefaultThumbnail": {
          "description": "If true, this thumbnail should update default thumbnail.",
          "type": "boolean"
        },
        "thumbnailerModelVersion": {
          "description": "Thumbnailer Version.",
          "enum": [
            "VERSION_UNKNOWN",
            "VERSION_FIRST",
            "VERSION_RANDOM",
            "VERSION_4",
            "VERSION_5",
            "VERSION_6",
            "VERSION_7",
            "VERSION_8",
            "VERSION_SHORTS_4",
            "VERSION_SHORTS_5",
            "VERSION_SHORTS_6",
            "VERSION_STORY_4",
            "VERSION_STORY_5",
            "VERSION_MOVING_4",
            "VERSION_MOVING_5",
            "VERSION_MOVING_6",
            "VERSION_MOVING_SHORTS_0",
            "VERSION_MOVING_LIVE_0",
            "VERSION_MOVING_MANUAL_0",
            "VERSION_LITE_1",
            "VERSION_CUSTOM",
            "VERSION_REJECTED"
          ],
          "enumDescriptions": [
            "",
            "Use the first frame as thumbnail.",
            "Randomly choose a frame as thumbnail.",
            "Thumbnailer version 4.",
            "Thumbnailer version 5.",
            "Thumbnailer version 6 for violative thumbnail regeneration. Design: go/reduce-violative-thumb",
            "Thumbnailer version 7.",
            "Thumbnailer version 8 for violative thumbnail regeneration. Design: go/reduce-violative-thumb",
            "Thumbnailer version 4 for shorts videos.",
            "Thumbnailer version 5 for shorts videos.",
            "Thumbnailer version 6 for shorts videos.",
            "Thumbnailer version 4 for stories.",
            "Thumbnailer version 5 for stories.",
            "Moving thumbnailer version 4.",
            "Moving thumbnailer version 5.",
            "Moving thumbnailer version 6.",
            "Moving thumbnailer version 0 for shorts.",
            "Moving thumbnailer version 0 for live.",
            "Moving thumbnail generated manually.",
            "Lite Thumbnailer (previously known as FirstFrameThumbnailer)",
            "Custom image (not generated). Likely client provided.",
            "A gray fallback image for images that have been rejected."
          ],
          "type": "string"
        },
        "timestampMs": {
          "description": "Thumbnail timestamp in milliseconds.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "Thumbnail type.",
          "enum": [
            "UNKNOWN",
            "MAIN_THUMB_CUSTOM",
            "MAIN_THUMB_NON_CUSTOM",
            "SHOT_THUMB",
            "NUMBERED_THUMB",
            "KEY_FRAME",
            "FRAME",
            "AUTO"
          ],
          "enumDescriptions": [
            "",
            "Customized main thumbnail uploaded from user.",
            "Non-customized main thumbnail.",
            "Shot thumbnail.",
            "The numbered thumbnail, e.g. 1.jpg, 2.jpg, 3.jpg.",
            "The iframe extracted from the media decoder.",
            "The regular video frame.",
            "This type indicates that the thumbnail is to use for thumbnail A/B test. In this case the id field will be used to indicate the control and experimental thumbnail."
          ],
          "type": "string"
        },
        "userReportedThumbnail": {
          "$ref": "DrishtiVesperUserReportUserReportedThumbnail"
        },
        "userReportedThumbnails": {
          "description": "All user reported thumbnails of interest.",
          "items": {
            "$ref": "DrishtiVesperUserReportUserReportedThumbnail"
          },
          "type": "array"
        },
        "version": {
          "description": "Thumbnail version, i.e., the unix time in seconds when the thumbnail was created.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "DrishtiVesperThumbnailQualityScore": {
      "id": "DrishtiVesperThumbnailQualityScore",
      "properties": {
        "score": {
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "UNKNOWN",
            "PHOTO_QUALITY",
            "PAMIR_IMAGE_QUALITY",
            "VIDEO_THUMB_QUALITY",
            "SALIENCY",
            "COMPLEXITY",
            "SHARPNESS",
            "CLOSE_UP",
            "BEEHIVE_QUALITY",
            "ICONIC_FACE",
            "DUMMY",
            "COLORFULNESS",
            "MOTION",
            "RETENTION_STATS",
            "FACIAL_EXPRESSION",
            "MATCHING",
            "LUCKYSHOT_SHARPNESS",
            "SINGLE_FACE_MODULE",
            "TITLE_MATCHING",
            "FACE_CLUSTERING",
            "FACE_MATCHING",
            "RACY_SCORE",
            "NON_RACY_SCORE",
            "SALIENCY_COVERAGE",
            "AUDIENCE_WATCH_DATA",
            "AUDIENCE_REWATCH_DATA",
            "AUDIENCE_REWIND_RATIO",
            "AUDIENCE_DROPOFF_RATIO",
            "HIGHLIGHT_SCORE",
            "JOY_FACE",
            "EYE_OPEN",
            "FACE_RATIO",
            "OCR_RACY_SCORE",
            "SHOT_BOUNDARY",
            "NIMA",
            "FOREGROUND_MOTION_SALIENCY",
            "PAGE_QUALITY",
            "GLOBAL_MOTION",
            "CHAPTER_TITLE_MATCHING",
            "DBSCAN_FRAME_CHAPTER_SIMILARITY",
            "EYES_NOT_VISIBLY_CLOSED",
            "ENGAGINESS",
            "MERGED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The higher the score, the racier the thumbnail.",
            "The higher the score, less racier of the thumbnail.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "go/nima",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The score merged from the above source types."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "DrishtiVesperUserReportHumanLabel": {
      "description": "Proto holding values for details about human labels.",
      "id": "DrishtiVesperUserReportHumanLabel",
      "properties": {
        "racyLevel": {
          "enum": [
            "UNKNOWN",
            "SAFE",
            "BORDERLINE",
            "SEXUAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "DrishtiVesperUserReportModelScore": {
      "description": "Proto holding values for details about score and the source model.",
      "id": "DrishtiVesperUserReportModelScore",
      "properties": {
        "modelName": {
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "DrishtiVesperUserReportUserReportedThumbnail": {
      "description": "Proto holding values for user reported thumbnails. Next id: 12",
      "id": "DrishtiVesperUserReportUserReportedThumbnail",
      "properties": {
        "denseFeatures": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "duration": {
          "description": "Number of days in which volume is calculated.",
          "format": "int32",
          "type": "integer"
        },
        "humanLabel": {
          "$ref": "DrishtiVesperUserReportHumanLabel"
        },
        "impressions": {
          "description": "Daily aggregared impressions for the reported video.",
          "format": "int32",
          "type": "integer"
        },
        "needHumanLabel": {
          "description": "Whether the thumbnail needs a human label.",
          "type": "boolean"
        },
        "rawHumanLabels": {
          "items": {
            "$ref": "DrishtiVesperUserReportHumanLabel"
          },
          "type": "array"
        },
        "reportScore": {
          "$ref": "DrishtiVesperUserReportModelScore"
        },
        "reportType": {
          "enum": [
            "UNKNOWN",
            "RACY"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "score": {
          "$ref": "DrishtiVesperUserReportModelScore"
        },
        "useCase": {
          "enum": [
            "UNKNOWN",
            "TRAIN",
            "EVAL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "volume": {
          "description": "Number of reports.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "DrishtiVesperVideoThumbnail": {
      "description": "Video level container for thumbnail with its attributes, e.g., timestamp, id, quality scores, annotations, or features.",
      "id": "DrishtiVesperVideoThumbnail",
      "properties": {
        "id": {
          "description": "Video id.",
          "type": "string"
        },
        "movingThumbnails": {
          "items": {
            "$ref": "DrishtiVesperMovingThumbnail"
          },
          "type": "array"
        },
        "thumbnails": {
          "items": {
            "$ref": "DrishtiVesperThumbnail"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "EmbedsDeepLinkData": {
      "description": "Deep-linking data is used to construct a deep-link URI for an activity or frame's embed, such that on click, the user is taken to the right place in a mobile app. If the app is not installed, the user is taken to the app store. If not on mobile, an analogous web uri is used.",
      "id": "EmbedsDeepLinkData",
      "properties": {
        "appId": {
          "description": "Application ID (or project ID) from Google API Console.",
          "format": "int64",
          "type": "string"
        },
        "client": {
          "description": "The data for a Google API Console client is entered by a developer during client registration and is stored in PackagingService.",
          "items": {
            "$ref": "EmbedsPackagingServiceClient"
          },
          "type": "array"
        },
        "deepLinkId": {
          "description": "The ID for non-URL content. Embeds may either have no analogous web presence or prefer a native mobile experience if supported. In the case of no web presence, instead of setting the \"url\" field of an embed, such developers will set this field and other content fields, e.g. thumbnail, title, description. If set, this field is used to construct the deep-link URI. Note that the native experience is preferred over the web link and the web link is used as a fallback.",
          "type": "string"
        },
        "url": {
          "description": "Analogous web presence. Used as desktop fallback or when no native link data is present.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "EmbedsEmbedClientItem": {
      "description": "Represents an embedded object in an update. This is a wrapper class that can contain a single specific item proto in an extension field. Think of it as a base class like `Message` in Java. Each item proto must declare that it extends this proto: message ExampleObject { option (item_type) = EXAMPLE_OBJECT; extend EmbedClientItem { optional ExampleObject example_object = ; } } See go/es-embeds for details.",
      "id": "EmbedsEmbedClientItem",
      "properties": {
        "canonicalId": {
          "description": "The canonical ID of the embed. If absent, the canonical ID is equal to the ID; if present, then the canonical ID represents an \"equivalence class\" of embeds which really refer to the same object. (For example, the URLs http://www.foo.com/ and http://foo.com/ refer to the same object) This field may be updated periodically by background processes.",
          "type": "string"
        },
        "deepLinkData": {
          "$ref": "EmbedsDeepLinkData",
          "description": "Deep-linking data to take the user to the right place in a mobile app. This is only used for preview and attribution. Links that are specific to a given embed type should live on that specific embed's proto by using Link. See http://goto.google.com/mariana-design."
        },
        "id": {
          "description": "The ID of the embed. This corresponds to the schema.org ID, as represented in the ItemScope.id field.",
          "type": "string"
        },
        "provenance": {
          "$ref": "EmbedsProvenance",
          "description": "The provenance of the embed, populated when the embed originated from a web fetch. The provenance captures information about the web page the embed had originated, like the URL that was retrieved and the retrieved URL's canonical form. This is useful in the case where the URL shared by the URL redirects (e.g., in the case of a shortened URL)."
        },
        "renderId": {
          "description": "The ID used to identify the embed during rendering. This field will match ID, if set, otherwise it will be the ID of the parent activity. This field is only populated on the server for client use and is not persisted to storage.",
          "type": "string"
        },
        "signature": {
          "description": "Signature of the embed, used for verification.",
          "type": "string"
        },
        "transientData": {
          "$ref": "EmbedsTransientData",
          "description": "Transient generic data that will not be saved on the server."
        },
        "type": {
          "description": "The first value in `type` determines which extension field will be set. When creating an EmbedClientItem, you only need to set the first (primary) type in this field. When the server receives the item, it will populate the full type list using the parent annotations in the ItemType enum.",
          "items": {
            "enum": [
              "UNKNOWN",
              "ACTION_V2",
              "ADD_ACTION_V2",
              "AGGREGATE_RATING_V2",
              "ARTICLE_V2",
              "ASSESS_ACTION_V2",
              "AUDIO_OBJECT_V2",
              "BASIC_INTERACTION_V2",
              "BLOG_POSTING_V2",
              "BLOG_V2",
              "BOOK_V2",
              "BUY_ACTION_V2",
              "CHECK_IN_ACTION_V2",
              "CHECKIN_V2",
              "COLLEXION_V2",
              "COMMENT_ACTION_V2",
              "COMMENT_V2",
              "COMMUNICATE_ACTION_V2",
              "CONSUME_ACTION_V2",
              "CREATE_ACTION_V2",
              "CREATIVE_WORK_V2",
              "DISCOVER_ACTION_V2",
              "DOCUMENT_OBJECT_V2",
              "DRAWING_OBJECT_V2",
              "DRIVE_OBJECT_V2",
              "EMOTISHARE_V2",
              "ENTRY_POINT_V2",
              "EVENT_TIME_V2",
              "EVENT_V2",
              "FILE_OBJECT_V2",
              "FIND_ACTION_V2",
              "FINANCIAL_QUOTE_V2",
              "FORM_OBJECT_V2",
              "GEO_COORDINATES_V2",
              "GOOGLE_OFFER_V2",
              "HANGOUT_CHAT_MESSAGE",
              "HANGOUT_QUOTE",
              "HANGOUT_V2",
              "HOA_PLUS_EVENT_V2",
              "IMAGE_OBJECT_V2",
              "INTERACT_ACTION_V2",
              "INTERACTION_V2",
              "LISTEN_ACTION_V2",
              "LOCAL_BUSINESS_V2",
              "LOCAL_PLUS_PHOTO_ALBUM_V2",
              "MAGAZINE_V2",
              "MEDIA_OBJECT_V2",
              "MOBILE_APPLICATION_V2",
              "MOVIE_V2",
              "MUSIC_ALBUM_V2",
              "MUSIC_GROUP_V2",
              "MUSIC_PLAYLIST_V2",
              "MUSIC_RECORDING_V2",
              "NEWS_ARTICLE_V2",
              "OFFER_V2",
              "ORGANIZATION_V2",
              "ORGANIZE_ACTION_V2",
              "PERSON_V2",
              "PLACE_REVIEW_V2",
              "PLACE_V2",
              "PLAN_ACTION_V2",
              "PLAY_MUSIC_ALBUM_V2",
              "PLAY_MUSIC_TRACK_V2",
              "PLAY_OBJECT_V2",
              "PLUS_AUDIO_V2",
              "PLUS_EVENT_V2",
              "PLUS_MEDIA_COLLECTION_V2",
              "PLUS_MEDIA_OBJECT_V2",
              "PLUS_PAGE_V2",
              "PLUS_PHOTOS_ADDED_TO_COLLECTION_V2",
              "PLUS_PHOTO_ALBUM_V2",
              "PLUS_PHOTO_COLLECTION_V2",
              "PLUS_PHOTO_V2",
              "PLUS_POST_V2",
              "PLUS_RESHARE_V2",
              "PLUS_SOFTWARE_APPLICATION_V2",
              "POLL_OPTION_V2",
              "POLL_V2",
              "POSTAL_ADDRESS_V2",
              "PRESENTATION_OBJECT_V2",
              "PRODUCT_REVIEW_V2",
              "RATING_V2",
              "REACT_ACTION_V2",
              "RESERVATION_V2",
              "RESERVE_ACTION_V2",
              "REVIEW_V2",
              "REVIEW_ACTION_V2",
              "SOFTWARE_APPLICATION_V2",
              "SPREADSHEET_OBJECT_V2",
              "SQUARE_INVITE_V2",
              "SQUARE_V2",
              "STICKER_V2",
              "STORY_V2",
              "THING_V2",
              "TRADE_ACTION_V2",
              "DEPRECATED_TOUR_OBJECT_V2",
              "TV_EPISODE_V2",
              "TV_SERIES_V2",
              "UPDATE_ACTION_V2",
              "VIEW_ACTION_V2",
              "VIDEO_OBJECT_V2",
              "VIDEO_GALLERY_V2",
              "WANT_ACTION_V2",
              "WEB_PAGE_V2",
              "WRITE_ACTION_V2",
              "YOUTUBE_CHANNEL_V2",
              "GOOGLE_USER_PHOTO_V2",
              "GOOGLE_USER_PHOTO_ALBUM",
              "GOOGLE_PHOTO_RECIPE",
              "THING",
              "CREATIVE_WORK",
              "EVENT",
              "INTANGIBLE",
              "ORGANIZATION",
              "PERSON",
              "PLACE",
              "PRODUCT",
              "ARTICLE",
              "BLOG_POSTING",
              "NEWS_ARTICLE",
              "SCHOLARLY_ARTICLE",
              "BLOG",
              "BOOK",
              "COMMENT",
              "ITEM_LIST",
              "MAP",
              "MEDIA_OBJECT",
              "AUDIO_OBJECT",
              "IMAGE_OBJECT",
              "MUSIC_VIDEO_OBJECT",
              "VIDEO_OBJECT",
              "MOVIE",
              "MUSIC_PLAYLIST",
              "MUSIC_ALBUM",
              "MUSIC_RECORDING",
              "PAINTING",
              "PHOTOGRAPH",
              "RECIPE",
              "REVIEW",
              "SCULPTURE",
              "SOFTWARE_APPLICATION",
              "MOBILE_APPLICATION",
              "WEB_APPLICATION",
              "TV_EPISODE",
              "TV_SEASON",
              "TV_SERIES",
              "WEB_PAGE",
              "ABOUT_PAGE",
              "CHECKOUT_PAGE",
              "COLLECTION_PAGE",
              "IMAGE_GALLERY",
              "VIDEO_GALLERY",
              "CONTACT_PAGE",
              "ITEM_PAGE",
              "PROFILE_PAGE",
              "SEARCH_RESULTS_PAGE",
              "WEB_PAGE_ELEMENT",
              "SITE_NAVIGATION_ELEMENT",
              "TABLE",
              "WP_AD_BLOCK",
              "WP_FOOTER",
              "WP_HEADER",
              "WP_SIDEBAR",
              "APP_INVITE",
              "EMOTISHARE",
              "BUSINESS_EVENT",
              "CHILDRENS_EVENT",
              "COMEDY_EVENT",
              "DANCE_EVENT",
              "EDUCATION_EVENT",
              "FESTIVAL",
              "FOOD_EVENT",
              "LITERARY_EVENT",
              "MUSIC_EVENT",
              "SALE_EVENT",
              "SOCIAL_EVENT",
              "SPORTS_EVENT",
              "THEATER_EVENT",
              "VISUAL_ARTS_EVENT",
              "RESERVATION",
              "TRAVEL_EVENT",
              "CORPORATION",
              "EDUCATIONAL_ORGANIZATION",
              "COLLEGE_OR_UNIVERSITY",
              "ELEMENTARY_SCHOOL",
              "HIGH_SCHOOL",
              "MIDDLE_SCHOOL",
              "PRESCHOOL",
              "SCHOOL",
              "GOVERNMENT_ORGANIZATION",
              "LOCAL_BUSINESS",
              "ANIMAL_SHELTER",
              "AUTOMOTIVE_BUSINESS",
              "AUTO_BODY_SHOP",
              "AUTO_DEALER",
              "AUTO_PARTS_STORE",
              "AUTO_RENTAL",
              "AUTO_REPAIR",
              "AUTO_WASH",
              "GAS_STATION",
              "MOTORCYCLE_DEALER",
              "MOTORCYCLE_REPAIR",
              "CHILD_CARE",
              "DRY_CLEANING_OR_LAUNDRY",
              "EMERGENCY_SERVICE",
              "FIRE_STATION",
              "HOSPITAL",
              "POLICE_STATION",
              "EMPLOYMENT_AGENGY",
              "ENTERTAINMENT_BUSINESS",
              "ADULT_ENTERTAINMENT",
              "AMUSEMENT_PARK",
              "ART_GALLERY",
              "CASINO",
              "COMEDY_CLUB",
              "MOVIE_THEATER",
              "NIGHT_CLUB",
              "FINANCIAL_SERVICE",
              "ACCOUNTING_SERVICE",
              "AUTOMATED_TELLER",
              "BANK_OR_CREDIT_UNION",
              "INSURANCE_AGENCY",
              "FOOD_ESTABLISHMENT",
              "BAKERY",
              "BAR_OR_PUB",
              "BREWERY",
              "CAFE_OR_COFFEE_SHOP",
              "FAST_FOOD_RESTAURANT",
              "ICE_CREAM_SHOP",
              "RESTAURANT",
              "WINERY",
              "GOVERNMENT_OFFICE",
              "POST_OFFICE",
              "HEALTH_AND_BEAUTY_BUSINESS",
              "BEAUTY_SALON",
              "DAY_SPA",
              "HAIR_SALON",
              "HEALTH_CLUB",
              "NAIL_SALON",
              "TATTOO_PARLOR",
              "HOME_AND_CONSTRUCTION_BUSINESS",
              "ELECTRICIAN",
              "GENERAL_CONTRACTOR",
              "HVAC_BUSINESS",
              "HOUSE_PAINTER",
              "LOCKSMITH",
              "MOVING_COMPANY",
              "PLUMBER",
              "ROOFING_CONTRACTOR",
              "INTERNET_CAFE",
              "LIBRARY",
              "LODGING_BUSINESS",
              "BED_AND_BREAKFAST",
              "HOSTEL",
              "HOTEL",
              "MOTEL",
              "MEDICAL_ORGANIZATION",
              "DENTIST",
              "MEDICAL_CLINIC",
              "OPTICIAN",
              "PHARMACY",
              "PHYSICIAN",
              "VETERINARY_CARE",
              "PROFESSIONAL_SERVICE",
              "ATTORNEY",
              "NOTARY",
              "RADIO_STATION",
              "REAL_ESTATE_AGENT",
              "RECYCLING_CENTER",
              "SELF_STORAGE",
              "SHOPPING_CENTER",
              "SPORTS_ACTIVITY_LOCATION",
              "BOWLING_ALLEY",
              "EXERCISE_GYM",
              "GOLF_COURSE",
              "PUBLIC_SWIMMING_POOL",
              "SKI_RESORT",
              "SPORTS_CLUB",
              "STADIUM_OR_ARENA",
              "TENNIS_COMPLEX",
              "STORE",
              "BIKE_STORE",
              "BOOK_STORE",
              "CLOTHING_STORE",
              "COMPUTER_STORE",
              "CONVENIENCE_STORE",
              "DEPARTMENT_STORE",
              "ELECTRONICS_STORE",
              "FLORIST",
              "FURNITURE_STORE",
              "GARDEN_STORE",
              "GROCERY_STORE",
              "HARDWARE_STORE",
              "HOBBY_SHOP",
              "HOME_GOODS_STORE",
              "JEWELRY_STORE",
              "LIQUOR_STORE",
              "MENS_CLOTHING_STORE",
              "MOBILE_PHONE_STORE",
              "MOVIE_RENTAL_STORE",
              "MUSIC_STORE",
              "OFFICE_EQUIPMENT_STORE",
              "OUTLET_STORE",
              "PAWN_SHOP",
              "PET_STORE",
              "SHOE_STORE",
              "SPORTING_GOODS_STORE",
              "TIRE_SHOP",
              "TOY_STORE",
              "WHOLESALE_STORE",
              "TELEVISION_STATION",
              "TOURIST_INFORMATION_CENTER",
              "TRAVEL_AGENCY",
              "PERFORMING_GROUP",
              "MUSIC_GROUP",
              "ADMINISTRATIVE_AREA",
              "CITY",
              "COUNTRY",
              "STATE",
              "CIVIC_STRUCTURE",
              "AIRPORT",
              "AQUARIUM",
              "BEACH",
              "BUS_STATION",
              "BUS_STOP",
              "CAMPGROUND",
              "CEMETERY",
              "CREMATORIUM",
              "EVENT_VENUE",
              "GOVERNMENT_BUILDING",
              "CITY_HALL",
              "COURTHOUSE",
              "DEFENCE_ESTABLISHMENT",
              "EMBASSY",
              "LEGISLATIVE_BUILDING",
              "MUSEUM",
              "MUSIC_VENUE",
              "PARK",
              "PARKING_FACILITY",
              "PERFORMING_ARTS_THEATER",
              "PLACE_OF_WORSHIP",
              "BUDDHIST_TEMPLE",
              "CATHOLIC_CHURCH",
              "CHURCH",
              "HINDU_TEMPLE",
              "MOSQUE",
              "SYNAGOGUE",
              "PLAYGROUND",
              "R_V_PARK",
              "RESIDENCE",
              "APARTMENT_COMPLEX",
              "GATED_RESIDENCE_COMMUNITY",
              "SINGLE_FAMILY_RESIDENCE",
              "TOURIST_ATTRACTION",
              "SUBWAY_STATION",
              "TAXI_STAND",
              "TRAIN_STATION",
              "ZOO",
              "LANDFORM",
              "BODY_OF_WATER",
              "CANAL",
              "LAKE_BODY_OF_WATER",
              "OCEAN_BODY_OF_WATER",
              "POND",
              "RESERVOIR",
              "RIVER_BODY_OF_WATER",
              "SEA_BODY_OF_WATER",
              "WATERFALL",
              "CONTINENT",
              "MOUNTAIN",
              "VOLCANO",
              "LANDMARKS_OR_HISTORICAL_BUILDINGS",
              "USER_INTERACTION",
              "USER_PLUS_ONES",
              "ENUMERATION",
              "BOOK_FORMAT_TYPE",
              "ITEM_AVAILABILITY",
              "OFFER_ITEM_CONDITION",
              "JOB_POSTING",
              "LANGUAGE",
              "OFFER",
              "QUANTITY",
              "DISTANCE",
              "DURATION",
              "ENERGY",
              "MASS",
              "RATING",
              "AGGREGATE_RATING",
              "STRUCTURED_VALUE",
              "CONTACT_POINT",
              "POSTAL_ADDRESS",
              "GEO_COORDINATES",
              "GEO_SHAPE",
              "NUTRITION_INFORMATION",
              "PRESENTATION_OBJECT",
              "DOCUMENT_OBJECT",
              "SPREADSHEET_OBJECT",
              "FORM_OBJECT",
              "DRAWING_OBJECT",
              "PLACE_REVIEW",
              "FILE_OBJECT",
              "PLAY_MUSIC_TRACK",
              "PLAY_MUSIC_ALBUM",
              "MAGAZINE",
              "CAROUSEL_FRAME",
              "PLUS_EVENT",
              "HANGOUT",
              "HANGOUT_BROADCAST",
              "HANGOUT_CONSUMER",
              "CHECKIN",
              "EXAMPLE_OBJECT",
              "SQUARE",
              "SQUARE_INVITE",
              "PLUS_PHOTO",
              "PLUS_PHOTO_ALBUM",
              "LOCAL_PLUS_PHOTO_ALBUM",
              "PRODUCT_REVIEW",
              "FINANCIAL_QUOTE",
              "DEPRECATED_TOUR_OBJECT",
              "PLUS_PAGE",
              "GOOGLE_CHART",
              "PLUS_PHOTOS_ADDED_TO_COLLECTION",
              "RECOMMENDED_PEOPLE",
              "PLUS_POST",
              "DATE",
              "DRIVE_OBJECT_COLLECTION",
              "NEWS_MEDIA_ORGANIZATION",
              "DYNAMITE_ATTACHMENT_METADATA",
              "DYNAMITE_MESSAGE_METADATA"
            ],
            "enumDescriptions": [
              "Largely deprecated, effectively an error condition and should not be in storage.",
              "Embeds V2 types",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "The action of checking in, as opposed to a \"check-in\".",
              "",
              "",
              "The act of commenting, which might result in a comment.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Boswell story (see goto/boswell)",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "A photo stored in photo service owned by a Google account user. This is distinct from PlusPhoto as it isn't tied to GPlus, but is instead intended to be a more general photo tied to a google user.",
              "A photo album in photo service owned by a Google account user. This is distinct from PlusPhotoAlbum as it isn't tied to GPlus, but is instead intended to be a general photo album tied to a google user.",
              "An embed used to create a single photo in photo service. This type is never stored but is used to create a GOOGLE_USER_PHOTO_V2 or PLUS_PHOTO_V2 embed.",
              "Embeds V1 types",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "CREATIVE_WORK subtypes",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "EVENT subtypes",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "ORGANIZATION subtypes",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "PLACE subtypes",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "NOTE(jpanzer): This is a badly designed hierarchy and we should avoid depending on Event properties inside UserInteractions as much as possible IMHO.",
              "",
              "Intangibles, primarily used as sub-objects of other types",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "CREATIVE_WORK extensions",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Single frame for http://goto/carousel.",
              "EVENT extensions",
              "No declared proto. Used only as a base type for now.",
              "",
              "",
              "",
              "",
              "NOTE(melchang): These correspond to http://schema.org/WebPage/Community and http://schema.org/WebPage/CommunityInvite. See b/7653610 for why these are \"SQUARE\" and not \"COMMUNITY\".",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Data visualizations. See http://code.google.com/apis/chart/index.html",
              "",
              "A collection of people that have been recommended to a user.",
              "A Google+ post.",
              "An http://schema.org/Date unstructured ISO-8859 timestamp string.",
              "Embed representing a collection of multiple Drive objects.",
              "https://schema.org/NewsMediaOrganization",
              "Deprecated in favor of DYNAMITE_MESSAGE_METADATA",
              "Used for Dynamite message metadata in Hangouts"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "EmbedsPackagingServiceClient": {
      "description": "Developers register a client in Google API Console to get the deep-linking feature on Google+ posts or frames about their apps. The client data is stored in this proto.",
      "id": "EmbedsPackagingServiceClient",
      "properties": {
        "androidPackageName": {
          "description": "Android app's package name to generate the deep-link URI.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app's App Store ID to generate the App Store URL when app is not installed on device.",
          "type": "string"
        },
        "iosBundleId": {
          "description": "iOS app's bundle ID to generate the deep-link URI.",
          "type": "string"
        },
        "type": {
          "description": "Type of Google API Console client.",
          "enum": [
            "ANDROID",
            "IOS"
          ],
          "enumDescriptions": [
            "Client for Android app.",
            "Client for iOS app."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "EmbedsProvenance": {
      "description": "This field records where the ItemScope was retrieved, if it was created via a web fetch.",
      "id": "EmbedsProvenance",
      "properties": {
        "annotationBlob": {
          "description": "Annotation blob from Annotation Service.",
          "format": "byte",
          "type": "string"
        },
        "canonicalUrl": {
          "description": "Canonical url of the retrieved_url, if one was resolved during retrieval, for example, if a rel=\"canonical\" link tag was provided in the retrieved web page.",
          "type": "string"
        },
        "inputUrl": {
          "description": "The url originally passed in the PRS request, which should be used to re-discover the content. Note that this URL may be a forwarding service or link shortener (bit.ly), so it should not be assumed to be canonical, but should be used for navigation back to the original source of the itemscope.",
          "type": "string"
        },
        "itemtype": {
          "description": "Contains exact types as parsed, whether or not we recognized that type at parse time. If an itemscope is created by merging SchemaOrg markup and open graph markup then the first itemtype would be schemaorg type, the second would be open graph and so on. example: http://schema.org/VideoObject, og:video.movie Plain text; usually a URL",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "retrievedTimestampMsec": {
          "description": "The server retrieved timestamp (in msec).",
          "format": "uint64",
          "type": "string"
        },
        "retrievedUrl": {
          "description": "The final URL that was the actual source of the itemscope, after any redirects.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "EmbedsTransientData": {
      "description": "Transient generic data that will not be saved on the server.",
      "id": "EmbedsTransientData",
      "properties": {},
      "type": "object"
    },
    "EventIdMessage": {
      "description": "An EventId is a 128 bit identifier that uniquely identifies an event, such as a query. The event time recorded to the nearest microsecond, along with information about the process generating the event, ensures that all EventIds are unique. Details of this EventId are described in a design document: http://www/eng/designdocs/sawmill/adlogs.html",
      "id": "EventIdMessage",
      "properties": {
        "processId": {
          "description": "process_id is an integer that identifies the process on this machine that generated this event. This id is calculated once when the server generates its first event, and may change if the process is migrated to a different host. This field has a very specific format mandated by the logs collection infrastructure, which is subject to change WITHOUT NOTICE. As of 2013-01-09, this format is: uint32 process_id = (time(NULL) << 24) + (getpid() & 0xFFFFFF); If you are generating an extended_pid directly, you MUST use one of the maintained library implementations in order to generate it properly: C++ //borg/borgletlib:extended_pid; call borg::ExtendedPid() Python //borg/borgletlib/python:pyextendedpid; call ExtendedPid() Go //borg/borgletlib/go:extendedpid; call Get() Java //java/com/google/common/logging; call EventId.getPid() If you think that you need to parse the values of this field, please contact logs-collection-dev@ to discuss your requirement.",
          "format": "uint32",
          "type": "integer"
        },
        "serverIp": {
          "description": "server_ip is the IPv4 address or http://go/ghostid of the machine running the server that created this event message. This allows us to distinguish between events that occur at the same time on different servers. Format: 10.1.2.3 is stored as 0x0a010203, and GHostId 1 as 0x00000001.",
          "format": "uint32",
          "type": "integer"
        },
        "timeUsec": {
          "description": "time_usec is the number of microseconds since the epoch (i.e., since 1970-01-01 00:00:00 UTC) as an int64: 1e6 * (unix time) + microseconds. Applications must ensure that EventIdMessages have increasing times, artificially increasing time_usec to one greater than the previous value if necessary. Alternate implementations were considered: 1. storing unix time and microseconds separately would require a bit more storage, and the convenience of having a single value representing the time seemed more useful than having trivial access to a unix time. 2. storing unix time in the upper 32 bits would allow for more precision - up to 4G events/second, but it wouldn't print nicely as a decimal value and it seems unlikely that any single server would ever sustain more than 1M events/second. 3. Java-compatible time uses millis - this would limit servers to 1000 events per second - too small. Other names for this field were considered, including time, time_stamp, and utime. We felt that including the units in the name would tend to produce more readable code. utime might be interpreted as user time. unix timestamp * 1e6 + microseconds",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ExtraSnippetInfoResponse": {
      "description": "the extra info response from ascorer used to build snippets in GWS experiments",
      "id": "ExtraSnippetInfoResponse",
      "properties": {
        "matchinfo": {
          "$ref": "ExtraSnippetInfoResponseMatchInfo"
        },
        "querysubitem": {
          "items": {
            "$ref": "ExtraSnippetInfoResponseQuerySubitem"
          },
          "type": "array"
        },
        "tidbit": {
          "items": {
            "$ref": "ExtraSnippetInfoResponseTidbit"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ExtraSnippetInfoResponseMatchInfo": {
      "id": "ExtraSnippetInfoResponseMatchInfo",
      "properties": {
        "titleMatches": {
          "description": "bitvector of query items matching the title",
          "format": "uint64",
          "type": "string"
        },
        "urlMatches": {
          "description": "bitvector of query items matching the url",
          "format": "uint64",
          "type": "string"
        },
        "weightedItems": {
          "description": "bitvector of query items considered by chooser",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ExtraSnippetInfoResponseQuerySubitem": {
      "description": "A query term, phrase, or synonym. An original query term or phrase is called an \"item\". Each item may have more than one \"subitem\" if there are synonyms. In rare cases a subitem may correspond to multiple items, such as the subitem \"cia\" in the query [central intelligence agency].",
      "id": "ExtraSnippetInfoResponseQuerySubitem",
      "properties": {
        "isHighlighted": {
          "description": "Additional information from the SnippetQuery.",
          "type": "boolean"
        },
        "isOptional": {
          "type": "boolean"
        },
        "isOriginal": {
          "description": "true iff this subitem was an original query term or phrase. Can only be false if want_all_query_subitems == true in the request.",
          "type": "boolean"
        },
        "items": {
          "description": "a bitvector of the query items corresponding to this subitem. Typically only one bit is set, but see comment above.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "text associated with this query item",
          "type": "string"
        },
        "weight": {
          "description": "the weight of this query item, as calculated by SubitemWeight(): https://qwiki.corp.google.com/display/Q/SnippetWeights",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ExtraSnippetInfoResponseTidbit": {
      "id": "ExtraSnippetInfoResponseTidbit",
      "properties": {
        "anchorinfo": {
          "$ref": "ExtraSnippetInfoResponseTidbitAnchorInfo"
        },
        "begin": {
          "description": "For tidbits only: position of tidbit in the document. More specifically, tidbit is found at [begin, end) in the document's tokens.",
          "format": "int32",
          "type": "integer"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "description": "a bitvector of each query term within this tidbit",
          "format": "uint64",
          "type": "string"
        },
        "score": {
          "description": "the score for this tidbit if there was one this is returned for Snippets and Tidbits and is only meaningful for comparing between objects of the same type (snippet to snippet, tidbit to tidbit)",
          "format": "float",
          "type": "number"
        },
        "text": {
          "description": "the tidbit text, with search terms already highlighted",
          "type": "string"
        },
        "type": {
          "enum": [
            "TIDBIT",
            "BODY",
            "META",
            "GWD",
            "FULL",
            "ANCHOR"
          ],
          "enumDescriptions": [
            "it is a tidbit returned by want_all_tidbits",
            "these are the best candidate snippets from each section, returned by want_all_snippets",
            "",
            "NOTE(kinoue): ODP/GWD snippet is unlaunched as of June 2017. This is no longer used.",
            "",
            "NOTE(kinoue): Deprecated and unsupported. anchor text, returned if max_anchors_wanted > 0"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ExtraSnippetInfoResponseTidbitAnchorInfo": {
      "description": "this information is specific to anchors and is only returned if type == ANCHOR",
      "id": "ExtraSnippetInfoResponseTidbitAnchorInfo",
      "properties": {
        "offdomainCount": {
          "format": "int32",
          "type": "integer"
        },
        "ondomainCount": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "FaceIndexing": {
      "id": "FaceIndexing",
      "properties": {
        "mustangBytes": {
          "description": "Always use image/search/utils/face_proto_util.h for packing and unpacking these values.",
          "format": "byte",
          "type": "string"
        },
        "mustangBytesVersion": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "FatcatCompactBinaryClassification": {
      "id": "FatcatCompactBinaryClassification",
      "properties": {
        "binaryClassifier": {
          "description": "Either binary_classifier will be set, using the enum above, or binary_classifier_name will be set, if it is not one of the classifiers in the enum - never both.",
          "enum": [
            "BLOG",
            "FORUM",
            "LOGIN",
            "B2B_OK",
            "IMAGES",
            "SOCIAL",
            "PURCHASING_INTENT",
            "PORN",
            "ADULTISH",
            "VIOLENCE_GORE",
            "GOSSIP"
          ],
          "enumDescriptions": [
            "Pagetypes",
            "",
            "",
            "",
            "",
            "",
            "",
            "Sensitive content",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "binaryClassifierName": {
          "type": "string"
        },
        "discreteFraction": {
          "description": "A CompactDocClassification will not usually have a weight. For a CompactSiteClassification, this value will be 0...127 corresponding to 0.0...1.0, indicating fraction of the site that this label applies to",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "FatcatCompactDocClassification": {
      "description": "The result of PetacatAnnotator. Each result contains: 1. RephilClusters; 2. At most 5 verticals from each taxonomy, sorted by the probabilities in descending order. 3. Binary classification results about page types and sensitive content. The types of taxonomies include: verticals4, geo, verticals4_geo, products_services, icm_im_audiences and icm_im_audiences_dev.",
      "id": "FatcatCompactDocClassification",
      "properties": {
        "binary": {
          "items": {
            "$ref": "FatcatCompactBinaryClassification"
          },
          "type": "array"
        },
        "clusters": {
          "$ref": "FatcatCompactRephilClusters"
        },
        "epoch": {
          "type": "string"
        },
        "langCode": {
          "type": "string"
        },
        "rephilModelId": {
          "description": "The id of the Rephil model used to generate the Rephil clusters. If it is absent, Rephil 4 is assumed.",
          "format": "int32",
          "type": "integer"
        },
        "taxonomic": {
          "items": {
            "$ref": "FatcatCompactTaxonomicClassification"
          },
          "type": "array"
        },
        "url": {
          "description": "not needed if the url is the sstable / bigtable key used during intermediate processing only",
          "type": "string"
        },
        "weight": {
          "description": "The relative weight of this doc within a site, typically something like pagerank or navboost impressions. May be a large number (like an actual pageviews estimate), not limited to a small range.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FatcatCompactRephilClusters": {
      "id": "FatcatCompactRephilClusters",
      "properties": {
        "cluster": {
          "items": {
            "$ref": "FatcatCompactRephilClustersCluster"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "FatcatCompactRephilClustersCluster": {
      "id": "FatcatCompactRephilClustersCluster",
      "properties": {
        "discreteWeight": {
          "description": "0...127 corresponds to 0.0 - 1.0",
          "format": "int32",
          "type": "integer"
        },
        "id": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "FatcatCompactTaxonomicClassification": {
      "description": "A version of this proto for logging is available at cs/symbol:logged_fatcat.LoggedCompactTaxonomicClassification",
      "id": "FatcatCompactTaxonomicClassification",
      "properties": {
        "category": {
          "items": {
            "$ref": "FatcatCompactTaxonomicClassificationCategory"
          },
          "type": "array"
        },
        "classifierVersion": {
          "type": "string"
        },
        "taxonomy": {
          "description": "Either taxonomy will be set, using the enum above, or taxonomy_name will be set (if the taxonomy is not one of the ones in the enum) - never both",
          "enum": [
            "VERTICALS",
            "VERTICALS4",
            "VERTICALS4_GEO",
            "GEO",
            "PRODUCTS_SERVICES",
            "ICM_IM_AUDIENCES",
            "ICM_IM_AUDIENCES_DEV"
          ],
          "enumDescriptions": [
            "DEPRECATED Verticals, v3",
            "Publisher Verticals, v4. go/verticals4",
            "Publisher Verticals, v4 + World Localities",
            "World Localities",
            "Products & Services",
            "ICM In Market Audiences",
            "Experimental ICM In Market Audiences"
          ],
          "type": "string"
        },
        "taxonomyName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "FatcatCompactTaxonomicClassificationCategory": {
      "description": "A taxonomic category. A classification consists of weight (totalling 1.0) distributed among one or more categories.",
      "id": "FatcatCompactTaxonomicClassificationCategory",
      "properties": {
        "discreteWeight": {
          "description": "go/petacat-faq#how-should-i-interpret-classification-weights Discrete to reduce size. Range is [0,127], corresponding to [0.0,1.0].",
          "format": "int32",
          "type": "integer"
        },
        "id": {
          "description": "The category's ID, e.g. 20 for /Sports in the go/verticals4 taxonomy.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "FocusBackendContactDetailHash": {
      "description": "http://go/contact-detail-hash.",
      "id": "FocusBackendContactDetailHash",
      "properties": {
        "type": {
          "enum": [
            "UNSPECIFIED",
            "PHONE",
            "EMAIL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "description": "The hash here will be a 16-bit weak hash to avoid reverse engineering for decoding the actual contact detail. The hash value is computed by the fingerprint of the raw contact detail mod 2^16.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "FocusBackendContactPointer": {
      "description": "A contact pointer that represents a contact (http://go/assistant-contact-id).",
      "id": "FocusBackendContactPointer",
      "properties": {
        "annotationId": {
          "description": "The annotation ID. Annotations are only allowed to point to annotations that do not themselves have a pointer (avoids any possibilty of loops). Cast this field to string in javascript to make it compile in js.",
          "format": "int64",
          "type": "string"
        },
        "deviceRawContactId": {
          "$ref": "FocusBackendDeviceRawContactId",
          "description": "The raw contact ID from an active mobile device of the user."
        },
        "focusContactId": {
          "description": "The contact ID from the Focus backend. Cast this field to string in javascript to make it compile in js.",
          "format": "int64",
          "type": "string"
        },
        "otherContactId": {
          "$ref": "FocusBackendOtherContactId",
          "description": "Additional contact ids that are not actively used to match contact pointers to contacts."
        },
        "secondaryId": {
          "$ref": "FocusBackendSecondaryContactId",
          "description": "The secondary identifier of contact. It will be used when the primary ID doesn't match any contact."
        }
      },
      "type": "object"
    },
    "FocusBackendDeviceContactId": {
      "description": "//////////////////// DeviceContactId ////////////////////// Used by Device Contacts only. For more details see go/fbs-support-for-device-contacts.",
      "id": "FocusBackendDeviceContactId",
      "properties": {
        "ContactId": {
          "description": "DeviceContact Id.",
          "format": "int64",
          "type": "string"
        },
        "DeviceId": {
          "$ref": "FocusBackendDeviceId",
          "description": "Device Id."
        }
      },
      "type": "object"
    },
    "FocusBackendDeviceId": {
      "description": "//////////////////// DeviceId ////////////////////// Used by Device Contacts only. For more details see go/fbs-support-for-device-contacts.",
      "id": "FocusBackendDeviceId",
      "properties": {
        "AndroidDeviceId": {
          "description": "The GServices id on Android. See go/android-id.",
          "format": "int64",
          "type": "string"
        },
        "Hash": {
          "description": "DeviceId.Hash is a SHA256 of some attribute of the user and device. For Android devices: Hash = SHA256(gaia_account_name + \u201c:\u201d + \u201c1\u201d + \u201c:\u201d + (android id - LSB)); For iOS devices: Hash = TOLOWER(HEX(GMCSComputeUserDeviceToken(userId, iOsDeviceId)) For more details see go/client-instance-id.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FocusBackendDeviceRawContactId": {
      "description": "//////////////////// DeviceRawContactId ////////////////////// Used by Device Contacts Only. The Raw ID as assigned to the original contact on the device. For more details see go/fbs-support-for-device-contacts.",
      "id": "FocusBackendDeviceRawContactId",
      "properties": {
        "DeviceId": {
          "$ref": "FocusBackendDeviceId"
        },
        "RawContactId": {
          "description": "Raw ID assigned by the device. Cast this field to string in javascript to make it compile in js.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FocusBackendOtherContactId": {
      "description": "Additional contact ids that are not actively used to match contact pointers to contacts. There may be overlap with primary or secondary contact ids.",
      "id": "FocusBackendOtherContactId",
      "properties": {
        "deviceContactId": {
          "description": "Device contact ID, when available: - The annotation points to a device contact, and the device contact id was correctly populated when the annotation was created. Note that the device contact id is populated once per device contact on a device. It is distinct from RawContactId - a single device contact may have multiple raw contact ids. - The annotation points to a Focus contact that was merged with device contact information in Starlight. When the annotation was created, a device contact id was available on the merged person object. - The contact annotation was created from April 2021 onwards. All prior annotations do not populate this field. ContactPointer creation relies on the client caller to correctly populate the device contact id, and does not enforce any assumptions on availability of this field. This field is repeated because in rare cases Starlight may merge device contact information across different devices into a single merged person object. WARNING: Use with extreme caution! This ID is not stable. For more details see go/fbs-support-for-device-contacts.",
          "items": {
            "$ref": "FocusBackendDeviceContactId"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "FocusBackendSecondaryContactId": {
      "description": "The secondary ID of a contact.",
      "id": "FocusBackendSecondaryContactId",
      "properties": {
        "contactDetailHash": {
          "description": "The hashes of the contact details (e.g. phone number and email address).",
          "items": {
            "$ref": "FocusBackendContactDetailHash"
          },
          "type": "array"
        },
        "contactName": {
          "description": "The contact's full name, not hashed.",
          "type": "string"
        },
        "contactNameHash": {
          "description": "The hash of contact's full name, generated using Fingerprint2011(). Cast this field to string in javascript to make it compile in js.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FreebaseCitation": {
      "description": "Citation contains the information needed to correctly attribute the source of data.",
      "id": "FreebaseCitation",
      "properties": {
        "dataset": {
          "description": "Mid of the dataset.",
          "type": "string"
        },
        "isAttributionRequired": {
          "description": "If set to true, the citation is required to be displayed when the data is used.",
          "type": "boolean"
        },
        "project": {
          "description": "Name of the project of the data's origin.",
          "type": "string"
        },
        "provider": {
          "description": "The name of the provider of this information.",
          "type": "string"
        },
        "statement": {
          "description": "A human readable statement of attribution.",
          "type": "string"
        },
        "uri": {
          "description": "Uri link associated with this data.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FreebaseId": {
      "description": "An Id contains the identifiers used to reference this topic (entity) in the Knowledge Graph. The Knowledge Graph supports several forms of identifiers: - \"mids\" (machine ids) that are assigned at creation time, and support a resolution mechanism that tracks topics after they are merged (for more about mids, see go/kg-mid), - \"ids\" are human-readable ids (HRIDs) that are derived from a namespace hierarchy stored in Knowledge Graph, and a set of rules, - \"guids\" are low-level ids historically used in Freebase (pre-Knowledge Graph, deprecated). Only the mid and id are supplied here. Note that mids can be converted to guids or uint64s (see //metaweb/util/mid/mid.h).",
      "id": "FreebaseId",
      "properties": {
        "id": {
          "description": "\"id\" may be a human readable ID (HRID) or a MID. Originally it was intended to always be a human readable ID, but that convention was not always followed so clients should be wary. Not every topic has an id.",
          "type": "string"
        },
        "mid": {
          "description": "The \"mid\" should be used whenever a globally unique, primary key into the Knowledge Graph is needed. These keys are always prefixed with the \"/m\" and \"/g\", (and more rarely the \"/x\" and \"/t\") namespaces, and are alphanumeric strings consisting of lowercase letters excluding vowels, numbers and the underscore character. (Applications should not assume a constant length for these strings as Livegraph reserves the right to extend the number of characters to accommodate more topics.)",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FreebaseLatLong": {
      "description": "Represents a geopoint, which is one of the possible Value types.",
      "id": "FreebaseLatLong",
      "properties": {
        "latDeg": {
          "format": "float",
          "type": "number"
        },
        "longDeg": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "FreebaseMeasurement": {
      "description": "Represents a measurements, which is one of the possible Value types. A measurement value like \"5.2 meter^2 / second\" would be represented as: magnitude: 5.2 unit { unit_mid: \"/m/mid_for_meter\" power: 2 } unit { unit_mid: \"/m/mid_for_second\" power: -1 }",
      "id": "FreebaseMeasurement",
      "properties": {
        "magnitude": {
          "format": "float",
          "type": "number"
        },
        "unit": {
          "description": "Repeated units are interpreted as a product. i.e. (meter ^ 1) * (second ^ -2)",
          "items": {
            "$ref": "FreebaseMeasurementUnit"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "FreebaseMeasurementUnit": {
      "id": "FreebaseMeasurementUnit",
      "properties": {
        "power": {
          "format": "int32",
          "type": "integer"
        },
        "unit": {
          "$ref": "FreebaseId"
        },
        "unitMid": {
          "description": "Deprecated fields.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FreebaseNestedStruct": {
      "description": "List of { predicate, { object } } to be processed as a Nested Struct. Nested Struct can be recursive. NestedStruct.property_value(i).value(j) may have nested_struct field.",
      "id": "FreebaseNestedStruct",
      "properties": {
        "propertyValue": {
          "items": {
            "$ref": "FreebasePropertyValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "FreebasePropertyValue": {
      "description": "A PropertyValue associates properties with values in the context of a topic.",
      "id": "FreebasePropertyValue",
      "properties": {
        "property": {
          "$ref": "FreebaseId",
          "description": "The id of the property."
        },
        "totalValueCount": {
          "description": "Indicates the total values that exist for this property, even if they aren't all present in the value field, due to truncation.",
          "format": "int64",
          "type": "string"
        },
        "value": {
          "description": "The value associated with the property for the containing topic.",
          "items": {
            "$ref": "FreebaseValue"
          },
          "type": "array"
        },
        "valueStatus": {
          "description": "If ValueStatus is not set at all, the implication is that there are well-known value(s), specified in the \"value\" field. (It should be considered malformed data to have value_status set when len(values) > 0.)",
          "enum": [
            "HAS_UNKNOWN_VALUE",
            "HAS_NO_VALUE"
          ],
          "enumDescriptions": [
            "There are values, but we don't know what they are. (e.g. person is known to have children, but we don't know who they are) (This is only sensible if len(values) == 0; it is an error to see this value if len(values) > 0)",
            "We know that there are no values for this predicate. (e.g. person is known to have zero children) (This is only sensible if len(values) == 0; it is an error to see this value if len(values) > 0)"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "FreebaseTopic": {
      "description": "A Topic represents a Knowledge Graph entity with its associated properties and their values.",
      "id": "FreebaseTopic",
      "properties": {
        "id": {
          "$ref": "FreebaseId",
          "description": "The id (mid and human-readable id) of the topic. The id will always be present and will contain a mid value for topics in the topic sstable."
        },
        "propertyValue": {
          "description": "The property-value bindings associated with the topic. Note that in the case where a property is relevant to a topic based on its type, but no values of that property are present for the topic, the PropertyValue will simply not appear, rather than being present with a null value, or empty repeated value list.",
          "items": {
            "$ref": "FreebasePropertyValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "FreebaseValue": {
      "description": "Values are effectively a union of several possible Knowledge Graph types: simple primitive datatypes such as booleans, integers and floats, references to other Knowledge Graph topics (by id), or \"compound values\" which are expressed as embedded topics with associated properties and values. Values occur in indexed order (if any).",
      "id": "FreebaseValue",
      "properties": {
        "boolValue": {
          "description": "key, uri, or datetime. Present when value is bool.",
          "type": "boolean"
        },
        "citation": {
          "$ref": "FreebaseCitation",
          "description": "Citation data for this value. See: http://go/kg-clap"
        },
        "compoundValue": {
          "$ref": "FreebaseTopic",
          "description": "Compound values are those that contain either a number of simple valued facets (such as a latitude/longitude pair), or \"mediator\" topics representing multi-dimensional relationships between topics. In both cases we represent them here with an embedded topic, although the topic's identity is somewhat secondary to the property/value pairs it contains. (The identity is still made available so that it can be used to perform updates to that mediator on the Knowledge Graph.)"
        },
        "deletionProvenance": {
          "description": "Deletion provenance for this value.",
          "items": {
            "$ref": "StorageGraphBfgTripleProvenance"
          },
          "type": "array"
        },
        "displayLang": {
          "description": "The lang of the display_value field.",
          "type": "string"
        },
        "displayValue": {
          "description": "The display value of this value. This is a i18n-aware formatted value if present.",
          "type": "string"
        },
        "expectedProto": {
          "description": "An optional name for a proto field.",
          "type": "string"
        },
        "floatValue": {
          "description": "Present when value is float.",
          "format": "double",
          "type": "number"
        },
        "idValue": {
          "$ref": "FreebaseId",
          "description": "Present when value is an id."
        },
        "index": {
          "description": "Index of the value relative to the containing property (if any). Knowledge Graph supports a loose notion of indexing: some non-unique properties may have indices, while others may not. Furthermore, for a single property, some values may have indices (such as the top 5 actors in a film), while others may not (the film's supporting cast). Un-indexed values will appear at the end of the repeated value list. This field contains the index value only when is present in the Knowledge Graph.",
          "format": "uint64",
          "type": "string"
        },
        "intValue": {
          "description": "Present when value is int.",
          "format": "int64",
          "type": "string"
        },
        "lang": {
          "description": "Whenever the value is text with TYPE_TEXT, the lang field is populated with the III LanguageCode associated with the string_value field.",
          "type": "string"
        },
        "latLongValue": {
          "$ref": "FreebaseLatLong"
        },
        "measurementValue": {
          "$ref": "FreebaseMeasurement"
        },
        "nestedStruct": {
          "$ref": "FreebaseNestedStruct",
          "description": "Populated if this value holds NestedStruct. 'type' field needs to be set to TYPE_NESTED_STRUCT."
        },
        "provenance": {
          "description": "Provenance for this value.",
          "items": {
            "$ref": "StorageGraphBfgTripleProvenance"
          },
          "type": "array"
        },
        "rawValue": {
          "description": "Similar to string_value/etc but contains raw bytes.",
          "format": "byte",
          "type": "string"
        },
        "stringValue": {
          "description": "Present when value is text, enum,",
          "type": "string"
        },
        "subgraphId": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "timestamp": {
          "description": "The ISO-8601 timestamp corresponding to when this value was created (when it was written to the Knowledge Graph). Deprecated in favor of timestamp_usec.",
          "type": "string"
        },
        "timestampUsec": {
          "description": "The microsecond timestamp corresponding to when this value was created.",
          "format": "int64",
          "type": "string"
        },
        "type": {
          "enum": [
            "TYPE_NULL",
            "TYPE_ID",
            "TYPE_TEXT",
            "TYPE_ENUM",
            "TYPE_KEY",
            "TYPE_URI",
            "TYPE_DATETIME",
            "TYPE_BOOL",
            "TYPE_INT",
            "TYPE_FLOAT",
            "TYPE_COMPOUND",
            "TYPE_PROTO",
            "TYPE_EXTENSION",
            "TYPE_NESTED_STRUCT",
            "TYPE_SEMANTIC_REFERENCE",
            "TYPE_LAT_LONG",
            "TYPE_MEASUREMENT",
            "TYPE_HAS_VALUE",
            "TYPE_HAS_NO_VALUE"
          ],
          "enumDescriptions": [
            "No fields are supplied.",
            "id_value contains an Id of a referenced topic.",
            "For text, string_value contains an UTF-8 string,",
            "and lang contains the III LanguageCode code. For bytes, string_value contains non-UTF-8 bytes. string_value contains an enum key string.",
            "string_value contains a namespace key string.",
            "string_value contains a URI string.",
            "string_value contains a (possibly truncated)",
            "ISO-8601 datetime string (always UTC relative). bool_value contains a bool.",
            "int_value contains an int. Uint64 are supported",
            "(they are encoded as int64, which looks odd when printed, but the representation is correct). float_value contains a float.",
            "compound_value contains property/value pairs.",
            "raw_value contains a raw proto.",
            "This proto has extensions set.",
            "nested_struct field is populated.",
            "string_value contains a Meaning Schema(go/life-of-a-meaning-schema) type name which needs to be a valid ValueType or SemanticType. This is currently used by semantic type based answer value formatting(go/semantic-type-format) before Search Response Meaning(go/srm-design) is ready for use",
            "lat_long_value contains a geopoint.",
            "measurement_value contains a measurement.",
            "No longer used; pending downstream code cleanup.",
            "No longer used; pending downstream code cleanup."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GDocumentBase": {
      "description": "Next id: 127",
      "id": "GDocumentBase",
      "properties": {
        "ContentExpiryTime": {
          "description": "unix secs from epoch",
          "format": "int32",
          "type": "integer"
        },
        "DisplayUrl": {
          "description": "Sometimes the URL displayed in search results should be different from what gets indexed (e.g. in enterprise, content management systems). If this value is not set, we default to the regular URL.",
          "type": "string"
        },
        "DocId": {
          "description": "64-bit docid of the document (usually fingerprint of URL, but not always). WARNING: This does NOT uniquely identify a document ANYMORE. For a unique identifier across all documents in production please refer to the field 'id().key()' listed above.",
          "format": "uint64",
          "type": "string"
        },
        "ExternalFeedMetadata": {
          "type": "string"
        },
        "ExternalHttpMetadata": {
          "description": "Enterprise-specific external metadata. See http://engdoc/eng/designdocs/enterprise/enterprise_indexing_metadata.html",
          "type": "string"
        },
        "FilterForSafeSearch": {
          "description": "Deprecated, do not use, this field is not populated since 2012.",
          "format": "int32",
          "type": "integer"
        },
        "IPAddr": {
          "description": "IP addr in binary (allows for IPv6)",
          "format": "byte",
          "type": "string"
        },
        "NoArchiveReason": {
          "format": "int32",
          "type": "integer"
        },
        "NoFollowReason": {
          "format": "int32",
          "type": "integer"
        },
        "NoImageIndexReason": {
          "format": "int32",
          "type": "integer"
        },
        "NoImageframeOverlayReason": {
          "format": "int32",
          "type": "integer"
        },
        "NoIndexReason": {
          "description": "When these reasons are set to a non zero value, the document should not be indexed, or show a snippet, or show a cache, etc. These reasons are bit maps of indexing.converter.RobotsInfo.RobotedReasons enum values reflecting the places where the restriction was found.",
          "format": "int32",
          "type": "integer"
        },
        "NoPreviewReason": {
          "format": "int32",
          "type": "integer"
        },
        "NoSnippetReason": {
          "format": "int32",
          "type": "integer"
        },
        "NoTranslateReason": {
          "format": "int32",
          "type": "integer"
        },
        "Pagerank": {
          "description": "Pagerank for doc (if known)",
          "format": "int32",
          "type": "integer"
        },
        "PagerankNS": {
          "description": "Pagerank-NearestSeeds is an alternative pagerank score for the doc.",
          "format": "int32",
          "type": "integer"
        },
        "Repid": {
          "description": " is the webmirror representative id of the canonical url. Urls with the same repid are considered as dups in webmirror. WARNING: use this field with caution! The webmirror duprules change frequently, so this value only reflects the duprules at the time when the canonical's docjoin is built.",
          "format": "byte",
          "type": "string"
        },
        "ScienceMetadata": {
          "$ref": "ScienceCitation",
          "description": "Citation data for science articles."
        },
        "URL": {
          "description": "WARNING: the URL does NOT uniquely identify a document ANYMORE. For a unique identifier across all documents in production please refer to the field 'id().key()' listed above. Reason: foo.bar:/http and foo.bar:/http:SMARTPHONE share the same URL, but the body of the two documents might differ because of different crawl-context (desktop vs. smartphone in this example).",
          "type": "string"
        },
        "URLAfterRedirects": {
          "type": "string"
        },
        "URLEncoding": {
          "description": "See webutil/urlencoding",
          "format": "int32",
          "type": "integer"
        },
        "content": {
          "$ref": "GDocumentBaseContent"
        },
        "directory": {
          "items": {
            "$ref": "GDocumentBaseDirectory"
          },
          "type": "array"
        },
        "ecnFp": {
          "description": "96-bit fingerprint of the canonical url's webmirror equivalence class name as of when this cdoc was exported.",
          "format": "byte",
          "type": "string"
        },
        "id": {
          "$ref": "IndexingCrawlerIdServingDocumentIdentifier",
          "description": "The primary identifier of a production document is the document key given in the ServingDocumentIdentifier, which is the same as the row-key in Alexandria, and represents a URL and its crawling context. In your production code, please always assume that the document key is the only way to uniquely identify a document. ## Recommended way of reading: const string& doc_key = cdoc.doc().id().key(); ## CHECK(!doc_key.empty()); More background information can be found in google3/indexing/crawler_id/servingdocumentidentifier.proto The ServingDocumentIdentifier uniquely identifies a document in serving and also distinguishes between experimental vs. production documents. The SDI is also used as an input for the union/muppet key generation in serving."
        },
        "localsearchDocInfo": {
          "$ref": "LocalsearchDocInfo",
          "description": "Localsearch-specific data."
        },
        "oceanDocInfo": {
          "$ref": "OceanDocInfo",
          "description": "Ocean-specific data."
        },
        "originalcontent": {
          "$ref": "GDocumentBaseOriginalContent"
        },
        "userAgentName": {
          "description": "The user agent name used to crawl the URL. See //crawler/engine/webmirror_user_agents.h for the list of user-agents (e.g. crawler::WebmirrorUserAgents::kGoogleBot). NOTE: This field is copied from the first WEBMIRROR FetchReplyClientInfo in trawler_fetch_info column. We leave this field unpopulated if no WEBMIRROR FecthReplyClientInfo is found. As the submission of cl/51488336, Alexandria starts to populate this field. However, docjoins from freshdocs (or any other source), won't have this field populated, because we believe no one needs to read this field from freshdocs docjoins.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GDocumentBaseContent": {
      "description": "Main content section",
      "id": "GDocumentBaseContent",
      "properties": {
        "AuthMethod": {
          "format": "int32",
          "type": "integer"
        },
        "ContentLength": {
          "description": "The actual length of the content: If Representation is compressed, this equals to Content.UncompressedLength; otherwise it is the length of the representation string.",
          "format": "int32",
          "type": "integer"
        },
        "ContentType": {
          "description": "See enum ContentType in //depot/google3/webutil/http/content-type.proto.",
          "format": "int32",
          "type": "integer"
        },
        "CrawlTime": {
          "description": "Seconds since Unix epoch.",
          "format": "int64",
          "type": "string"
        },
        "Encoding": {
          "description": "See //depot/google3/i18n/encodings/public/encodings.h Encoding of representation",
          "format": "int32",
          "type": "integer"
        },
        "HasHttpHeader": {
          "description": "Set to false if Representation does not contain HTTP headers.",
          "type": "boolean"
        },
        "Language": {
          "description": "A Language enum value. See: go/language-enum Default is english",
          "format": "int32",
          "type": "integer"
        },
        "OriginalEncoding": {
          "description": "If OriginalEncoding is present, the body part of the Representation was converted to UTF-8, Encoding was set to UTF8, and OriginalEncoding was set to the original encoding before conversion. However, the HTTP headers part of the content might not be valid UTF-8. -1=an invalid value",
          "format": "int32",
          "type": "integer"
        },
        "Representation": {
          "description": "Possibly compressed for old documents. It is not compressed for docjoins produced by Raffia after ~2012.",
          "format": "byte",
          "type": "string"
        },
        "UncompressedLength": {
          "description": "Historically present if Representation is compressed.",
          "format": "int32",
          "type": "integer"
        },
        "VisualType": {
          "description": "Whether the content was visual right-to-left, and if so, what type of visual document it is. Must be one of the values in enum VisualType from google3/repository/rtl/visualtype.h Default is NOT_VISUAL_DOCUMENT. See http://wiki/Main/RtlLanguages for background.",
          "format": "int32",
          "type": "integer"
        },
        "crawledFileSize": {
          "description": "Crawled file size of the original document.",
          "format": "int32",
          "type": "integer"
        },
        "encodedGeometryAnnotations": {
          "description": "GeometryAnnotations, encoded with GeometryUtil::DeltaEncode() to reduce disk space usage. Use GeometryUtil::DeltaDecode() to decode this field.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GDocumentBaseDirectory": {
      "description": "The Directory proto group holds snippet and title metadata which is made available to the snippet code. The proto group was originally created for metadata coming from the Google Web Directory (gwd) project. It has since come to be used to hold metadata from gwd and other sources. ",
      "id": "GDocumentBaseDirectory",
      "properties": {
        "Category": {
          "description": "encoded in UTF8",
          "type": "string"
        },
        "Description": {
          "description": "encoded in UTF8",
          "type": "string"
        },
        "DescriptionScore": {
          "format": "float",
          "type": "number"
        },
        "Identifier": {
          "description": "\"gwd\", etc.",
          "type": "string"
        },
        "Language": {
          "description": "go/language-enum",
          "format": "int32",
          "type": "integer"
        },
        "Title": {
          "description": "encoded in UTF8",
          "type": "string"
        },
        "TitleScore": {
          "description": "Deprecated; do not use. There is no code populating these fields as of Oct 2017.",
          "format": "float",
          "type": "number"
        },
        "URL": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "GDocumentBaseOriginalContent": {
      "description": "The original, unconverted document, typically PDF or Word. Copied from OriginalDoc field of doclogs. Unlike \"Content\", this does not contain any HTTP headers. The content may be compressed using the same method as \"Content\". In practice it is only compressed in the Teragoogle index. It is never compressed in docjoins because those are compressed at the sstable level. In doclogs content will only be compressed if the Trawler fetchreply is also compressed--which is currently never and unlikely to change for performance reasons.",
      "id": "GDocumentBaseOriginalContent",
      "properties": {
        "Representation": {
          "type": "string"
        },
        "UncompressedLength": {
          "description": "present iff rep is compressed",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GenericSnippetResponse": {
      "description": "The generic version of a snippet response",
      "id": "GenericSnippetResponse",
      "properties": {
        "debugInfo": {
          "description": "Per-doc debug information.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Servlet-specific response info."
        },
        "snippet": {
          "description": "Lines of the snippet HTML. Typically gws concatenates these and lets the browser wrap. The values include trailing spaces, so inserting additional spaces is not necessary. However, for very old browsers, gws may insert break tags after each snippet line. This field is confusing and poorly named; \"snippet_line\" would be better. In particular, note that this does not return multiple snippets for a result. Nor are these fields the individual tidbits of the snippet.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "title": {
          "description": "The title HTML. It may contain tags to denote query term matches. It may be already truncated and \"...\" is put instead (note that truncation does not always happen at the very end of the title text). However the existence of \"...\" does not guarantee that the snippet generation algorithm truncated it; e.g. webmasters themselves can write \"...\".",
          "type": "string"
        },
        "wwwSnippetResponse": {
          "$ref": "WWWSnippetResponse",
          "description": "Snippet-specific members (tag ids 16+, must be optional!) Example: optional NewContentResponse new_response;"
        }
      },
      "type": "object"
    },
    "GeoOndemandAssistantSupportedActions": {
      "description": "Actions supported by Madden for a local entity.",
      "id": "GeoOndemandAssistantSupportedActions",
      "properties": {
        "allowsGuestCheckout": {
          "description": "Whether this local entity allows guest checkout for reservations.",
          "type": "boolean"
        },
        "isAsynchronousRestaurantReservation": {
          "description": "Whether or not this local entity supports asynchronous restaurant reservations, through the above restaurant_reservation_url.",
          "type": "boolean"
        },
        "restaurantReservationUrl": {
          "description": "URL for the Madden restaurant reservation flow, e.g. for display in a WebView. Not populated if restaurant reservations are not supported for the local entity.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAccessPointProto": {
      "description": "This class holds information about a single access point. An access point establishes a relationship between a feature (like a POI or building) and some other feature. For example, consider a TYPE_LOCALITY feature like Seattle. An access point might be the TYPE_AIRPORT feature for Seattle-Tacoma International Airport. The airport feature defines the access point to gain airplane-based access to Seattle. A feature like Seattle will typically have multiple access points. You can get to Seattle using airplanes, various forms of public transit, or by driving a car. Thus Seattle would have multiple access points. You may be able to get to Seattle by flying into SeaTac, or you might be able to fly into Boeing Field, or Paine Field in Everett. You could drive in from the North/South using I-5, or you could drive in from the East using I-90. Many access points are from the road network. Thus the access point for some building at 123 Main Street would likely be a segment that defines the 100-200 block of \"Main Street\". A feature at the corner of \"Hollywood\" and \"Vine\" streets might have access points from both named streets. Access points are an optional field. Data editors may ignore them when creating features or editing other fields. In these cases, other quality teams will synthesize and update them. Several fields are also optional, as they are derivable from other fields. Access points to non-TYPE_SEGMENT features should always have the following fields set: - feature_type - feature_id - point Location and reference fields: BASIC vs DERIVABLE Access points to TYPE_SEGMENT features must have all the following BASIC fields: - feature_type (of the segment, e.g. TYPE_ROAD or TYPE_VIRTUAL_SEGMENT) - point_off_segment (or point; see \"fuzzy point\" note below) - unsuitable_travel_mode (may be empty) - level (indoor access points only) The following are DERIVABLE fields, which should only be added if the supplier is confident about their accuracy: - feature_id - point_on_segment - segment_position Editing clients are encouraged to set all fields, but they may set only the BASIC fields, in which case quality teams may use the BASIC fields to snap to an appropriate segment and derive the remaining fields. Example: The segment is split, so that the portion that the access point is on has a new feature ID. Quality teams notice that the point_on_segment is no longer on the segment with feature_id, finds the new nearest segment based on feature_type and existing point_on_segment, and re-derives a new feature_id, point_on_segment, and segment_position, keeping other fields consistent. Fuzzy point special case If the editor does not have side-of-road information for access points or is otherwise unsure of the precise placement of the access point, it may supply the point field (and not point_off_segment) as basic data instead, in which case quality teams may generate the point_off_segment. Identity Access points are considered semantically equivalent if they have the same geometry, including derived fields, and the same references to other features (feature_id, level_feature_id). For the exact definition, see cs/symbol:geostore::AreAccessPointsEquivalent. Field definitions",
      "id": "GeostoreAccessPointProto",
      "properties": {
        "canEnter": {
          "description": "RESERVED",
          "type": "boolean"
        },
        "canExit": {
          "description": "RESERVED",
          "type": "boolean"
        },
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The ID of the feature that defines the access point. The bounding box of the feature is expanded to include the bounding box of the feature with the access point in accordance with the standard practice for bucketing map/reduce operations. See the wiki page at http://wiki/Main/OysterBucketingMapReduce for more information. For access points to TYPE_SEGMENT features, this may be re-derived if necessary by looking up the nearest segment to existing geometry."
        },
        "featureType": {
          "description": "The type of the feature. Required, to allow handling the access point differently based on feature type. For access points to non-TYPE_SEGMENT features, this cached type also makes things easier for clients that aren't running a bucketing map-reduce. For access points to TYPE_SEGMENT features, this is used to find to find the nearest segment of the given type.",
          "format": "int32",
          "type": "integer"
        },
        "levelFeatureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "For indoor access points, this should be set to the level that the access point is on. The feature_id should point to the indoor segment, but when it is missing or invalid, and we need to derive it from geometry, only segments on this level will be considered. For non-indoor access points, level should remain unset, and when we derive feature_id from geometry, only segments not on any level (non-indoor segments) will be considered. The bounding box of the level feature is expanded to include the bounding box of the feature with the access point in accordance with the standard practice for bucketing map/reduce operations. See the wiki page at http://wiki/Main/OysterBucketingMapReduce for more information. (Though in general the feature should reside on the level already anyway..)"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this access point."
        },
        "point": {
          "$ref": "GeostorePointProto",
          "description": "For access points to non-TYPE_SEGMENT features, the location of the access point. For access points to TYPE_SEGMENT features, this can be supplied as a fuzzy access point that is not guaranteed to be on the correct side of road. It should not be used by end clients in case of TYPE_SEGMENT access points."
        },
        "pointOffSegment": {
          "$ref": "GeostorePointProto",
          "description": "If the access point is defined by a TYPE_SEGMENT feature, this is the location of the access point displaced slightly to the correct side of the segment. This offset is in a direction perpendicular to the direction of travel along the segment. The actual offset distance is unspecified. It would typically be relatively small (approximately 1 meter). You can subtract the \"off segment\" point from the \"on segment\" point to get a vector of unknown length pointing from \"on segment\" point to the \"off segment\" point. You can then scale that vector to whatever length you want. Note that extending this displacement vector a large distance (10s of meters) may result in a new point that is in the middle of some other feature (park, street, intersection). This is the preferred basic geometry field for incoming data from editing clients and importers, if side-of-road is well-established."
        },
        "pointOnSegment": {
          "$ref": "GeostorePointProto",
          "description": "If the access point is defined by a TYPE_SEGMENT feature, this is the point on the centerline of the segment that is closest to the actual access point. May be re-derived if necessary to maintain precise placement on segment."
        },
        "priority": {
          "description": "LINT.ThenChange(//depot/google3/geostore/cleanup/callbacks/\\ ID_DUPLICATE_ACCESS_POINT.cc)",
          "enum": [
            "TYPE_PRIMARY",
            "TYPE_SECONDARY"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "segmentPosition": {
          "description": "If the access point is defined by a TYPE_SEGMENT feature, this is the location of the access point expressed as a fractional distance along the segment. The value runs from 0 to 1 inclusive. May be re-derived if necessary to maintain precise placement on segment.",
          "format": "float",
          "type": "number"
        },
        "unsuitableTravelMode": {
          "description": "This list represents the travel modes for which this access-point should be avoided. If this list is empty, the access-point is suitable for any travel mode. If all access points are unsuitable for the current travel mode, client should revert to other heuristics (e.g. feature center). This is only used for access points to TYPE_SEGMENT features; access points to non-TYPE_SEGMENT features, e.g. TYPE_ESTABLISHMENT_POI features with gcid:transit_station GConcepts are just identified by feature_type and feature_id.",
          "items": {
            "enum": [
              "TRAVEL_MODE_MOTOR_VEHICLE",
              "TRAVEL_MODE_AUTO",
              "TRAVEL_MODE_TWO_WHEELER",
              "TRAVEL_MODE_BICYCLE",
              "TRAVEL_MODE_PEDESTRIAN",
              "TRAVEL_MODE_PUBLIC_TRANSIT"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreAddressComponentProto": {
      "description": "This class represents a parsed field within an address. NOTE: if you add a field to this proto, please update the AreAddressComponentsEquivalent() function in google3/geostore/base/internal/addresscomponent.cc",
      "id": "GeostoreAddressComponentProto",
      "properties": {
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The id of the corresponding Feature, if such a feature is defined. As discussed above for feature_type, components of TYPE_FEATURE or TYPE_LANDMARK may have a corresponding feature id."
        },
        "featureType": {
          "description": "For components of TYPE_FEATURE or TYPE_LANDMARK, this is the feature type (TYPE_COUNTRY, TYPE_LOCALITY, TYPE_ESTABLISHMENT_POI etc.). Note that some features may not actually exist in the geostore (e.g. a village that we've never heard of), in which case the feature_id will be missing but the feature_type is still specified. Please refer to IsValidAddressComponentFeatureType() in google3/geostore/base/public/addresscomponent.h for the definitive list of feature types allowed for the type (either TYPE_FEATURE or TYPE_LANDMARK) of components.",
          "format": "int32",
          "type": "integer"
        },
        "index": {
          "description": "The order of this address component relative to the ones that share the same feature_type in the AddressProto. For now, the primary use of this index field is to handle ordering issue of multiple occurrences of AddressComponentProto with feature_type of TYPE_ROUTE (and subtypes), or TYPE_POLITICAL, where the order of the address components matters as there are dependences. 0 is the smallest valid index value, representing the most specific address component. Index value of 1 represents a relatively less specific address component of the same feature_type on which the 0-indexed address component depends.",
          "format": "int32",
          "type": "integer"
        },
        "parsedName": {
          "description": "The parsed_name field contains one or more names of an address component. Its actual contents depends on where in the Geo/Google stack you are reading a feature: 1. When an address is initially parsed via a feed or other raw input and structured as an AddressProto, parsed_name should contain the set of names that corresponds to the (possibly normalized) raw text from the raw input. 2. In MapFacts, the address component may be linked to an actual feature via feature_id. Any address formatting directly from MapFacts should follow links to retrieve names when possible. The parsed_name contents may be formatted directly if the address component is unlinked following the same rules as selecting and formatting the name of a feature. The cached parsed_name is regularly refreshed from the linked feature with the minimal set of names for address components (usually just a single, preferred name, in the local language, plus a Latin-script name: go/story-of-ac-names). 3. In serving systems, the names of linked features may be denormalized into the parsed_name field to facilitate quicker address formatting or for simple data filtering (e.g. finding all geocodes in California by name). If reading a feature from such a system, the parsed_name field could contain multiple names in multiple languages that reflect a cached copy of the names associated with the linked features. Formatting of such names should follow the same rules as selecting and formatting the name of a feature itself.",
          "items": {
            "$ref": "GeostoreNameProto"
          },
          "type": "array"
        },
        "range": {
          "$ref": "GeostoreAddressRangeProto",
          "description": "Any numerical address component may optionally be specified as a range. For example if a component of TYPE_STREET_NUMBER has the optional \"range\" attribute, then it represents a range of addresses rather than a single address (see AddressRangeProto for details)."
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to an address component. Never set in MapFacts."
        },
        "textAffix": {
          "description": "Additional text to append before and/or after the parsed_name, when the address is formatted. Multiple instance should represent translations. Currently, this is only permitted on TYPE_LANDMARK components, and only one instance is permitted.",
          "items": {
            "$ref": "GeostoreTextAffixProto"
          },
          "type": "array"
        },
        "type": {
          "description": "Every address component has a type. Most address components correspond to one of the feature types defined in FeatureProto, so rather than defining a separate category system here, instead we mark them as TYPE_FEATURE and store the FeatureProto type in the feature_type() field. This is how we handle countries, cities, streets, etc. However, there are a few types of address components that do not have a corresponding feature type (e.g. PO boxes). These components have their type defined here. An address component of TYPE_STREET_NUMBER may correspond to a physical entity that defines a street number, such as a geocoded address or a land parcel. In this case, the address component may have a link to the corresponding feature. A good reference for what types of address components are possible is the xAL standard, which is a published XML schema: http://www.oasis-open.org/committees/ciq/download.shtml. This standard is the basis of the PostalAddress protocol message.",
          "enum": [
            "TYPE_FEATURE",
            "TYPE_POSTAL_CODE_SUFFIX",
            "TYPE_POST_BOX",
            "TYPE_STREET_NUMBER",
            "TYPE_FLOOR",
            "TYPE_ROOM",
            "TYPE_HOUSE_ID",
            "TYPE_DISTANCE_MARKER",
            "TYPE_LANDMARK",
            "TYPE_PLUS_CODE"
          ],
          "enumDescriptions": [
            "",
            "Address contains a suffix that refines the postal code in this address (e.g. the '+4' portion of a US '5+4' zip code). Postal code suffixes do not point to features.",
            "",
            "",
            "DEPRECATED, use TYPE_FEATURE/TYPE_LEVEL",
            "DEPRECATED, use TYPE_FEATURE/TYPE_COMPOUND_SECTION",
            "A building number unique relative to some political feature.",
            "A component corresponding to a marker for the approximate distance of the address along the route. Distance markers do not point to features and must have a single name that corresponds to the distance measured along the route in the standard units of the locale in which the address is contained (units themselves omitted from the name). The name must be a canonical floating point number in the feature's locale. E.g. in the US, the name representing 1000.5 must be '1,000.5'. Trailing zeros after the decimal and superfluous zeros preceding the number are forbidden.",
            "A component representing a reference to some nearby landmark, to aid navigation. Landmark components are distinguished by the fact that they have additional text to relate the feature with this address, for example \"near\" or \"opposite\". This text is stored in the affix field. Landmark components may point to features, but are not required to.",
            "Plus codes (go/pluscodes) are short, user readable encodings of latitude and longitude, that are intended as a substitute for street addresses where these do not exist or are not commonly used. Used when the physical address of the feature contains a local plus code, e.g.'PXX7+RW' in 'PXX7+RW Damaturu, Nigeria'."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAddressLinesProto": {
      "description": "Represents the unparsed portion of an address with an associated language.",
      "id": "GeostoreAddressLinesProto",
      "properties": {
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. We place extra restrictions on languages in addition to what the III library requires. See http://go/geo-schema-reference/feature-properties/languages.md",
          "type": "string"
        },
        "line": {
          "description": "These lines are in display order.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreAddressProto": {
      "description": "This class represents an address, partial address, or address range. It is intended to be attached to features to identify their address(es). Some important points about addresses: - The addresses in the Geo Schema do *not* include a component for the name of the feature, i.e. they are not self-referential. For example, the name of a feature might be \"Zack's Pizza\" and its address would be \"123 Main Street\". Similarly, streets, cities, and counties do not include themselves as part of their address. The address of \"Seattle\" is \"King County, Washington, USA\". If want to construct an address that *does* include the feature name, you can simply prepend it to the other address components. - Lakes, mountains, and other natural features do not normally have addresses. Countries also do not have addresses because they are at the top of the political hierarchy. - Address components in the Geo Schema are listed in a particular order, independent of the conventions used by the country in which they occur. The basic order is \"smallest to largest\" starting with street numbers and routes, then political features, and ending with postal features. The exact rules are defined by the implementation of the AddressComponentOrdering::IsLessThan() function. - Some types of address components may occur more than once in an address. For example, a UK address with a \"dependent thoroughfare\" would have two components of TYPE_ROUTE (i.e. street names). These are listed in the order they are normally written.",
      "id": "GeostoreAddressProto",
      "properties": {
        "addressLines": {
          "description": "The unparsed portion (lines) of the address. An address can have multiple unparsed portions. Multiple unparsed portions sharing the same language should be modeled as one address_lines instance having multiple lines. Historically, we also supported uparsed portions in different languages, but we no longer do. Consequently, only one value is allowed for this field despite the fact that it is repeated. See go/address-lines-multi-language for information about why we made this change. If any components are filled in, this is supplemental to (i.e. disjoint from) them. Furthermore, this must be the most specific portion of the address (except for the portion, if any, stored in the name field of feature.proto). Unparsed lines are always formatted together in a block. Other address components are never formatted between the address lines. This doesn't imply that the address lines are always either the first or the last part of the formatted output.",
          "items": {
            "$ref": "GeostoreAddressLinesProto"
          },
          "type": "array"
        },
        "component": {
          "description": "A list of parsed address components, e.g. the street, city, etc. An address range is one type of component.",
          "items": {
            "$ref": "GeostoreAddressComponentProto"
          },
          "type": "array"
        },
        "crossStreet": {
          "description": "** DEPRECATED ** This field is now deprecated (see b/33268032). If you want to store cross street information as part of an address, use the address_lines field.",
          "items": {
            "$ref": "GeostoreAddressComponentProto"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this address."
        },
        "partialDenormalization": {
          "$ref": "GeostoreAddressProto",
          "description": "reserved"
        },
        "templateId": {
          "description": "The opaque ID of the address template that contains rules for structuring this address. The id of the address template can be retrieved using google3/geostore/address_templates/public/address_templates.h",
          "type": "string"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to an address. Never set in MapFacts."
        }
      },
      "type": "object"
    },
    "GeostoreAddressRangeProto": {
      "description": "This class represents a range of numbers in an address. It is an optional additional field in the 'AddressComponentProto' message. This structure can be used to model both single addresses and address ranges. There are two primary use-cases for address ranges: definitions and references. Ranges are being defined when they are present on the addresses of segment features. Ranges are being referenced when they are present on non-segment features. NOTE: If you add fields in this proto, consider updating the AreAddressRangesEquivalent() function in google3/geostore/base/internal/addressrange.cc",
      "id": "GeostoreAddressRangeProto",
      "properties": {
        "number": {
          "description": "Two or more address numbers. Each number represents an address that was mentioned by the data provider.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "parameter": {
          "description": "For address range definitions: Two or more interpolation parameter values. The length of this array must match the length of the number array, and each parameter number specifies the position of the corresponding address number. Each value is an interpolation between 0.0 and 1.0 inclusive. The value is proportional to the distance traveled along the segment's polyline starting at its origin. The parameters must be provided in increasing order and the values in the number array must be in strictly increasing or decreasing order. We make an exception for singleton addresses, which are represented as two copies of a (number, parameter) pair, for backwards compatibility. For address range references: This array must be empty.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "prefix": {
          "description": "If specified, the prefix or suffix is applied to all numbers in the range. For example, this can be used to indicate that addresses B1 through B99 are on one side of the street, while A1 through A99 are on the other side of the street.",
          "type": "string"
        },
        "sameParity": {
          "description": "If 'same_parity' is true, then all 'number' values must have the same parity (even or odd), and this address range only includes addresses whose parity is the same as the given 'number' values.",
          "type": "boolean"
        },
        "suffix": {
          "type": "string"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to an address range. Never set in MapFacts. Here are some examples: Example #1: Single non-numeric address (e.g., \"Twelve\") At the moment this can only be represented as a street number (with the value in the parsed_name field of the AddressComponentProto). We have future plans to make other changes so we can handle this case. Example #2: Single semi-numeric address (e.g., \"12bis\") The number array contains two copies of the single numeric value (12). The prefix is empty and the suffix contains \"bis\". The parameter array has two identical values specifying the position of the single address. Example #3: Simple address range (e.g., \"100 to 198, even numbers only\") The number array contains the two values \"100\" and \"198\". The prefix and suffix strings are empty in this example. The parameter array has two values, one for each number. The same_parity flag is set in this example."
        }
      },
      "type": "object"
    },
    "GeostoreAnchoredGeometryProto": {
      "description": "A feature\u2019s geometry that is populated from the 3D Geometry Store. Please see go/a3d-and-mapfacts for design details.",
      "id": "GeostoreAnchoredGeometryProto",
      "properties": {
        "geometryId": {
          "description": "The ID to be used to fetch the feature\u2019s geometry from the 3D Geometry Store.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAppliedSpeedLimitProto": {
      "description": "A container for speed limits that allows tagging with a correctness trust level.",
      "id": "GeostoreAppliedSpeedLimitProto",
      "properties": {
        "speedLimit": {
          "$ref": "GeostoreSpeedLimitProto",
          "description": "The actual speed limit value."
        },
        "trustLevel": {
          "description": "The level of trust we have in this speed limit value.",
          "enum": [
            "SPEED_LIMIT_TRUST_LEVEL_UNKNOWN",
            "LOW_QUALITY",
            "HIGH_QUALITY",
            "EXACT"
          ],
          "enumDescriptions": [
            "Default proto value, this value will never be set in MapFacts.",
            "This speed limit is set, but may be completely wrong and potential users should consult external quality metrics before deciding whether to use it.",
            "We have high confidence that this is the correct speed limit, and that it's good enough to be shown to users. However, we are not completely confident the value is correct.",
            "We are certain that this is the correct speed limit."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAttachmentsAttachmentProto": {
      "description": "An AttachmentProto contains structured data of a client-specified type. An attachment is uniquely identified by the combination of its attachment_id and client_name_space fields. ",
      "id": "GeostoreAttachmentsAttachmentProto",
      "properties": {
        "attachmentId": {
          "description": "attachment_id distinguishes messages of the same type_id associated with the same feature. It can not be set to 0x0.",
          "format": "uint64",
          "type": "string"
        },
        "clientNameSpace": {
          "description": "This field specifies a namespace identifier that can be used to track the sources of attachments in a human friendly format. Name spaces must be at most 64 characters long and must be composed entirely of alphanumeric characters, hyphens, and underscores. No other characters are allowed.",
          "type": "string"
        },
        "comment": {
          "description": "comment is a human-readable string that is logged whenever this attachment is processed by the framework.",
          "type": "string"
        },
        "messages": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "messages contains the structured data for this attachment. It should contain a single message with a type ID matching the value of the type_id field below."
        },
        "typeId": {
          "description": "type_id determines the type of the actual attachment that should be set in the messages MessageSet. It can not be set to 0x0.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAttributeIdProto": {
      "description": "Used to represent the unique id of an attribute.",
      "id": "GeostoreAttributeIdProto",
      "properties": {
        "id": {
          "description": "The id of the attribute. Stored as a stripped format of the gcid (e.g. \"foo\" instead of \"gcid:att_foo\").",
          "type": "string"
        },
        "providerId": {
          "description": "Set because it's required, but not really meaningful in geostore (always set to \"Geo\").",
          "type": "string"
        },
        "type": {
          "enum": [
            "ITEMCLASS",
            "ATTRIBUTE",
            "VALUESPACE",
            "DATASTORE"
          ],
          "enumDescriptions": [
            "deprecated",
            "",
            "deprecated",
            "deprecated"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAttributeProto": {
      "description": "Protocol buffer for attaching attributes and values to instances. This is for assigning a particular attribute and value to a repository item, not for metadata. For protocol buffers that represents metadata about attributes and values, see CanonicalAttribute in itemclass.proto and ValueSpace in valuespace.proto.",
      "id": "GeostoreAttributeProto",
      "properties": {
        "applicationData": {
          "$ref": "Proto2BridgeMessageSet"
        },
        "attributeDisplay": {
          "items": {
            "$ref": "GeostoreAttributeValueDisplayProto"
          },
          "type": "array"
        },
        "booleanValue": {
          "type": "boolean"
        },
        "canonicalAttributeId": {
          "$ref": "GeostoreAttributeIdProto",
          "description": "The canonical attribute for this attribute instance."
        },
        "doubleValue": {
          "format": "double",
          "type": "number"
        },
        "enumIdValue": {
          "description": "For those attribute ids that expect their values to be taken from an enumeration-style set of values, that value's gcid should be stored here, e.g. \"gcid:attval_yes\".",
          "type": "string"
        },
        "floatValue": {
          "format": "float",
          "type": "number"
        },
        "int64Value": {
          "format": "int64",
          "type": "string"
        },
        "integerValue": {
          "format": "int32",
          "type": "integer"
        },
        "itemClassId": {
          "$ref": "GeostoreAttributeIdProto"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this attribute"
        },
        "protoValue": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Fully qualified package name because genprotohdf uses genproto for this proto2 syntax: https://wiki.corp.google.com/twiki/bin/view/Main/Proto2WithGenproto"
        },
        "stringValue": {
          "description": "The attribute value falls into one of these fields, based on value_type:",
          "type": "string"
        },
        "uint32Value": {
          "format": "uint32",
          "type": "integer"
        },
        "valueDisplay": {
          "description": "Used to store language-specific names of this attribute's value (e.g. a translation into another language).",
          "items": {
            "$ref": "GeostoreAttributeValueDisplayProto"
          },
          "type": "array"
        },
        "valueSpaceId": {
          "$ref": "GeostoreAttributeIdProto"
        },
        "valueType": {
          "enum": [
            "NONE",
            "STRING",
            "INTEGER",
            "DOUBLE",
            "BOOLEAN",
            "PROTO_VALUE",
            "INT64",
            "FLOAT",
            "DISPLAY_ONLY",
            "UINT32",
            "ENUM_ID"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The value comes from an enumerated attribute valuespace."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreAttributeValueDisplayProto": {
      "description": "Used to help display language-specific names of attributes.",
      "id": "GeostoreAttributeValueDisplayProto",
      "properties": {
        "language": {
          "type": "string"
        },
        "synonym": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreBarrierLogicalMaterialProto": {
      "id": "GeostoreBarrierLogicalMaterialProto",
      "properties": {
        "material": {
          "items": {
            "enum": [
              "UNKNOWN_LOGICAL_MATERIAL",
              "CONCRETE",
              "METAL",
              "PLASTIC",
              "STONE",
              "TIMBER"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreBestLocaleProto": {
      "description": "A BestLocaleProto holds information about the best-match locale for a feature. Clients may use this information to determine the appropriate local name of a feature.",
      "id": "GeostoreBestLocaleProto",
      "properties": {
        "locale": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The ID of the best-match TYPE_LOCALE feature for this feature."
        },
        "localizationPolicyId": {
          "description": "The ID of the localization policy to apply when selecting a name for a feature. This field should always be set. If feature_id is also defined, this field should have the same localization policy ID as the referenced locale feature. Localization policy IDs are arbitrary identifiers (up to some number of bytes; see geostore/base/public/constants.h) that uniquely distinguish a set of language-selection rules.",
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this best locale."
        }
      },
      "type": "object"
    },
    "GeostoreBizBuilderReferenceProto": {
      "description": "The reference to a BizBuilder listing. For details on BizBuilder see http://g3doc/commerce/bizbuilder/backend/g3doc/index.md",
      "id": "GeostoreBizBuilderReferenceProto",
      "properties": {
        "id": {
          "description": "Listing id. Used in queries to BizBuilder backend for listing access.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreBorderProto": {
      "description": "A border represents a line of division between two features of the same type (i.e. United States and Mexico, but not California and Mexico). Borders are only used for features that tile an area. For example, country features have borders with one another because they tile an area of land. Country features do not have borders with province features because those two types of features may intersect with each other. The geometry of a border will often be similar (or derived from) the geometry of the two features that it separates. However, it is useful to have borders represented by stand-alone features for map-styling purposes. Ideally, the geometry in a border feature would be exactly the same as the common edges of the polygonal geometry of the two features. This may not always be true in practice. At some point in the future we would like to build a network of borders for features that are supposed to tile with each other. The network would be composed of different border types meeting at endpoint intersections. In the process of building this network, we would perform small geometry corrections to ensure that the borders align properly at all zoom levels. Border features are intended primarily for map drawing, and they would rarely be useful for geocoding. One exception would be for famous borders like the \"Mason Dixon Line\" or the \"Berlin Wall.\" The standard feature properties have the following interpretations: name - Borders rarely have names unless they notable in their own right (e.g. \"Mason Dixon Line\", \"Berlin Wall\"). point - A border should not have point geometry. polyline - A border should have a single polyline that represents the division between the two features. polygon - A border should not have polygon geometry.",
      "id": "GeostoreBorderProto",
      "properties": {
        "featureIdLeft": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The ids of the area features to the left and right of the border, relative to the start and end of this borders' polyline geometry. These features should have the same type as the \"type\" attribute above. These ids are not required because the corresponding features may be nonexistent or difficult to obtain."
        },
        "featureIdRight": {
          "$ref": "GeostoreFeatureIdProto"
        },
        "logicalBorder": {
          "description": "The logical borders which this border is a part of.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "overrideStatus": {
          "description": "List of border status overrides. Due to legal reasons, we may be required to display some borders differently on some domains for instance.",
          "items": {
            "$ref": "GeostoreOverrideBorderStatusProto"
          },
          "type": "array"
        },
        "status": {
          "description": "The border status identifies the legal status of the border line.",
          "enum": [
            "STATUS_NORMAL",
            "STATUS_DISPUTED",
            "STATUS_UNSURVEYED",
            "STATUS_INTERNATIONAL_WATER",
            "STATUS_NEVER_DISPLAY",
            "STATUS_TREATY",
            "STATUS_PROVISIONAL",
            "STATUS_NO_LABEL"
          ],
          "enumDescriptions": [
            "Most border lines have this status, which typically means both parties agree on the location of the line. These might be called \"de jure\" borders.",
            "This status is used when the two parties disagree on the location of the line. There can be multiple border lines in a given disputed area. One might be the line proposed by country \"A\" and another the line proposed by country \"B\". A third line might mark the de facto line of control. Other border lines might indicate historical borders, e.g., \"1949 Armistice Line\".",
            "This is used for one section of border between Argentina and Chile. Both parties agree that a border line exists somewhere on the glacier, but the exact location has not been determined.",
            "This is a border line between a country and international water.",
            "This status is only used for the borders that should never display to users. Typically it is for the borders that we don't want to represent but that we would still like to use to model country boundaries, e.g. Hong Kong and Macau.",
            "This is used for borders that refer to well-defined boundaries which have been established by a specific treaty, agreement, armistice or other such agreement between two or more parties, yet the position and/or status is not considered to be legal and final (e.g., the final demarcation of the exact position has not occurred or the final political status is not resolved).",
            "This is used for borders for which a formal agreement has not been established between the parties involved, yet the existing line acts as a de facto functional border without existence of any dispute.",
            "This is used for borders which should not have country labels to either side, but should otherwise be styled the same as a border with STATUS_NORMAL. This is typically for borders which are not themselves disputed but still form part of the boundary around a disputed area that is not otherwise modeled or labeled as a country, or as an override where we are obligated to remove labels for region specific versions of Maps."
          ],
          "type": "string"
        },
        "type": {
          "description": "The type of the features this border separates. Should always be a subtype of TYPE_POLITICAL. NOTE: as of December 2019, we currently require this to be equal to TYPE_COUNTRY or TYPE_ADMINISTRATIVE_AREA1. In the future, we may support TYPE_BORDER for lower types of political features.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreBoundingMarkerProto": {
      "id": "GeostoreBoundingMarkerProto",
      "properties": {
        "boundingMarker": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "References to any gcid:physical_lane_marker features that bound this lane or lane connection."
        },
        "boundingMarkerToken": {
          "description": "A token that can be used to identify the version of the data about this bounding marker.",
          "type": "string"
        },
        "flowlineAdjacencyBeginFraction": {
          "description": "Which part of the flowline does this association refer to? These should be between 0 and 1. These are optionally set, but can be approximated geometrically if they aren\u2019t set. NOTE: These refer to the geometry of this feature.",
          "format": "double",
          "type": "number"
        },
        "flowlineAdjacencyEndFraction": {
          "format": "double",
          "type": "number"
        },
        "markerAdjacencyBeginFraction": {
          "description": "Which part of the marker track does this association refer to? These should be between 0 and 1. These are optionally set, but can be approximated geometrically if they aren\u2019t set. NOTE: These refer to the geometry of the marker feature.",
          "format": "double",
          "type": "number"
        },
        "markerAdjacencyEndFraction": {
          "format": "double",
          "type": "number"
        },
        "side": {
          "description": "Which side of the flowline does the marker occur on.",
          "enum": [
            "UNKNOWN",
            "LEFT",
            "RIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreBuildingProto": {
      "description": "This protocol buffer holds the building-specific attributes for features of type TYPE_COMPOUND_BUILDING.",
      "id": "GeostoreBuildingProto",
      "properties": {
        "baseHeightMetersAgl": {
          "description": "The height of the base of this building, in meters above ground-level, if known.",
          "format": "float",
          "type": "number"
        },
        "defaultDisplayLevel": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The level in this building that should get displayed by default. If present, the default display level must be one of this building's levels that are listed in the level[] field, and if a level is set as a default level of one building, all buildings sharing the level should have that same level as their default level. If not present, clients should not display any level by default for that building."
        },
        "floors": {
          "description": "The number of floors above the base of the building, if known. For example a regular 1-story building would set this to \"1\". Use a value of GeostoreConstants::kDefaultHeightPerFloor when converting \"floors\" to \"height_meters\".",
          "format": "int32",
          "type": "integer"
        },
        "floorsMetadata": {
          "$ref": "GeostoreFieldMetadataProto"
        },
        "heightMeters": {
          "description": "The height of the building above its base, in meters, if known.",
          "format": "float",
          "type": "number"
        },
        "heightMetersMetadata": {
          "$ref": "GeostoreFieldMetadataProto"
        },
        "level": {
          "description": "The levels in this building, in no particular order. These levels refer back to the building via another strong reference (the LevelProto.building field).",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "structure": {
          "description": "\"Structure\" denotes a physical architecture of the building that is readily visible. This attribute is useful in that rarer structures can make good landmarks.",
          "enum": [
            "STRUCTURE_ANY",
            "STRUCTURE_TOWER",
            "STRUCTURE_DOME",
            "STRUCTURE_CASTLE",
            "STRUCTURE_SHRINE",
            "STRUCTURE_TEMPLE",
            "STRUCTURE_TANK"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "The root of all structure categories. Not a meaningful value and should never be set on any feature.",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreBusinessChainProto": {
      "description": "This holds data specific to business chain features.",
      "id": "GeostoreBusinessChainProto",
      "properties": {
        "canonicalGconcepts": {
          "description": "Canonical GConcepts describe the ideal state of the GConcepts of this business chain's members.",
          "items": {
            "$ref": "GeostoreCanonicalGConceptProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreBusinessHoursProto": {
      "description": "A BusinessHoursProto stores a weekly schedule of opening hours for a business (represented as a BusinessHours message) together with other closely related information that is Geo-specific.",
      "id": "GeostoreBusinessHoursProto",
      "properties": {
        "data": {
          "$ref": "BusinessHours",
          "description": "The actual hours represented by this BusinessHoursProto."
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for these hours."
        }
      },
      "type": "object"
    },
    "GeostoreCallToActionProto": {
      "description": "Message containing calls to action specified by the business owner.",
      "id": "GeostoreCallToActionProto",
      "properties": {
        "ctaType": {
          "description": "Required.",
          "enum": [
            "CTA_TYPE_UNSPECIFIED",
            "CTA_TYPE_BOOK",
            "CTA_TYPE_BUY",
            "CTA_TYPE_ORDER_ONLINE",
            "CTA_TYPE_LEARN_MORE",
            "CTA_TYPE_SIGN_UP",
            "CTA_TYPE_GET_OFFER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "url": {
          "$ref": "GeostoreUrlProto"
        }
      },
      "type": "object"
    },
    "GeostoreCanonicalGConceptProto": {
      "description": "This proto represents a canonical gconcept of a business chain's members.",
      "id": "GeostoreCanonicalGConceptProto",
      "properties": {
        "gconcept": {
          "$ref": "GeostoreGConceptInstanceProto"
        },
        "isRequired": {
          "description": "Whether the gconcept must be on a member. This must be true for a primary gconcept.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GeostoreCellCoveringProto": {
      "description": "This protocol buffer holds S2 cell covering for the feature. See util/geometry/s2cell_union.h for more information on S2 cells. See geostore/base/public/cellcovering.h for utility functions.",
      "id": "GeostoreCellCoveringProto",
      "properties": {
        "cellId": {
          "description": "Array of S2 cell ids that represent the covering. There is no preset limit on how many cells can be used.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreComposableItemProto": {
      "description": "Generic item proto. This is intended to have only certain aspects filled (e.g. photo only, name + price). Valid combinations of properties are enforced by linters.",
      "id": "GeostoreComposableItemProto",
      "properties": {
        "callToAction": {
          "$ref": "GeostoreCallToActionProto",
          "description": "Call to action for the individual product."
        },
        "jobMetadata": {
          "$ref": "GeostoreJobMetadata"
        },
        "media": {
          "description": "Any photos describing this item.",
          "items": {
            "$ref": "GeostoreMediaItemProto"
          },
          "type": "array"
        },
        "nameInfo": {
          "description": "The repeated name_info field is for price list sections listed in multiple languages. At least one name_info containing id must be specified. There should be at most one name_info for any given language. When representing a job item, there should be exactly one name_info specified.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        },
        "offered": {
          "description": "Represents if an item is offered at a business. For TYPE_JOB, this represents if this job is offered by the corresponding business",
          "enum": [
            "OFFERED_UNSPECIFIED",
            "OFFERED",
            "OFFERED_NOT",
            "OFFERED_ON_WEBSITE"
          ],
          "enumDescriptions": [
            "Merchant says nothing",
            "Merchant explicitly says this is offered",
            "Merchant explicitly says this is NOT offered",
            "Merchant mentioned this job on their websites"
          ],
          "type": "string"
        },
        "price": {
          "$ref": "GeostorePriceRangeProto",
          "description": "Price of the item. There should be at most one price for any given currency."
        },
        "priceFormat": {
          "description": "Represents which price format is being used by this item, which determines the usage/meaning of the \u201cprice\u201d field above. Optional \u2013 the default value is legal and safe (represents no price if the \u201cprice\u201d field is unset).",
          "enum": [
            "PRICE_FORMAT_DEFAULT",
            "PRICE_FORMAT_VARIES"
          ],
          "enumDescriptions": [
            "Default price format which uses the PriceRangeProto (set or unset) in the \"price\" field above to represent a price interval, or lack thereof.",
            "Value for a price which explicitly varies, i.e. it should show as \u201cPrice may vary\" or similar. If this is the price_format, contents of the \"price\" field will be ignored."
          ],
          "type": "string"
        },
        "rankingHint": {
          "description": "Numerical score which can be provided by data sources to indicate preferred item ordering. This is purely a hint \u2013 we are not required to followed it if we have a different order we think is better. Higher scores represent items that should be shown more prominently/earlier. Optional.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreCountComparisonProto": {
      "description": "A count value tagged with a comparison operator. This can be used for axle count, trailer count, etc.",
      "id": "GeostoreCountComparisonProto",
      "properties": {
        "comparisonOperator": {
          "enum": [
            "UNSPECIFIED",
            "EQUAL",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "count": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreCrossingStripePatternProto": {
      "description": "Possible patterns of a crossing stripe (any element that denotes a point on a segment or lane at which the vehicle must stop or yield). These include crosswalks, stop, and yield lines.",
      "id": "GeostoreCrossingStripePatternProto",
      "properties": {
        "borderLine": {
          "$ref": "GeostorePhysicalLineProto"
        },
        "borderPattern": {
          "enum": [
            "UNKNOWN_BORDER_PATTERN",
            "NO_BORDER_PATTERN",
            "SOLID",
            "DASHED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "color": {
          "description": "Colors found on this crossing.",
          "items": {
            "$ref": "GeostorePaintedElementLogicalColorProto"
          },
          "type": "array"
        },
        "stripePattern": {
          "enum": [
            "UNKNOWN_STRIPE_PATTERN",
            "NO_STRIPE_PATTERN",
            "LONGITUDINAL_STRIPE",
            "DIAGONAL_STRIPE",
            "LATERAL_STRIPE",
            "SINGLE_CROSSING_LINE",
            "DOUBLE_CROSSING_LINE",
            "TRIANGLE_CROSSING_LINE_POINTING_LEFT",
            "TRIANGLE_CROSSING_LINE_POINTING_RIGHT",
            "STRUCTURED_CROSSING_LINE"
          ],
          "enumDescriptions": [
            "",
            "For crosswalk No crossing stripes. Usually comes with the bordered crosswalk.",
            "",
            "",
            "",
            "A crossing line consisting of a single stripe e.g. a stop line.",
            "A crossing line consisting of a double stripe.",
            "A crossing line made of repeating triangles e.g. a California yield line. The teeth are always facing the left of the crossing line.",
            "A crossing line made of repeating triangles e.g. a California yield line. The teeth are always facing the right of the crossing line.",
            "The crossing line has a more complex structure than just a single conceptual stripe or row of symbols."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreCurveConnectionProto": {
      "description": "Protocol buffer describing a curve that connects two externally specified endpoints.",
      "id": "GeostoreCurveConnectionProto",
      "properties": {
        "bezierParams": {
          "$ref": "GeostoreCurveConnectionProtoBezierParams"
        },
        "circleParams": {
          "$ref": "GeostoreCurveConnectionProtoCircleParams"
        },
        "type": {
          "enum": [
            "UNSPECIFIED",
            "BEZIER",
            "CIRCLE",
            "STRAIGHT_EDGE"
          ],
          "enumDescriptions": [
            "The connection is unspecified. Rendering code will rely on heuristics to choose one.",
            "Bezier curve interpolates the two endpoints.",
            "Endpoints are connected via a circle arc.",
            "Endpoints are connected by a straight edge."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreCurveConnectionProtoBezierParams": {
      "id": "GeostoreCurveConnectionProtoBezierParams",
      "properties": {
        "controlPoint": {
          "description": "Internal Bezier handles. One can be used for a quadratic curve, two for cubic Beziers.",
          "items": {
            "$ref": "GeostoreCurveConnectionProtoBezierParamsControlPoint"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreCurveConnectionProtoBezierParamsControlPoint": {
      "id": "GeostoreCurveConnectionProtoBezierParamsControlPoint",
      "properties": {
        "angleDegrees": {
          "description": "We use this parameterization to make curves change predictable when endpoints move. Each point P is defined in terms of the straight edge [S, E] between the start point of the curve S and its end point E. *P / / / S *------------* E Counter-clockwise angle between vector SE and vector SP.",
          "format": "double",
          "type": "number"
        },
        "distanceMultiplier": {
          "description": "Distance(S, P) in units of Distance(S, E).",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreCurveConnectionProtoCircleParams": {
      "id": "GeostoreCurveConnectionProtoCircleParams",
      "properties": {
        "radius": {
          "description": "Arc radius. Must be greater than half-distance between two endpoints.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreDataSourceProto": {
      "description": "Every data source used to construct a data repository has an associated feature that provides more information about it. The standard feature properties have the following interpretations: bound - The bounds must includes all features that refer to this data source, so that bucketing MapReduce passes work correctly. name - The provider name associated with this data source. It is expected to remain constant from release to release, and between datasets. address - should be empty. point, polyline, polygon - should be empty. source_info - should not be set. child - should be empty.",
      "id": "GeostoreDataSourceProto",
      "properties": {
        "attributionUrl": {
          "description": "This is the URL of a website representing this DataSource as a whole. If this DataSource feature is specific to a particular dataset or product, the page may contain information relevant to that dataset or product or may be the main page of the organization.",
          "items": {
            "$ref": "GeostoreUrlProto"
          },
          "type": "array"
        },
        "copyrightOwner": {
          "description": "A UTF8 string that will be inserted in copyright messages to refer to this copyright owner, e.g. \"Tele Atlas\".",
          "type": "string"
        },
        "copyrightYear": {
          "description": "The copyright year of this data (which may be different than the year of the release date), e.g. 2005.",
          "format": "int32",
          "type": "integer"
        },
        "description": {
          "description": "A free-form description of this data source. Ideally the description should include: - Where the data was obtained (URL, company name, individual, etc). - Where to find detailed documentation. - A brief summary of the licensing terms. - As much internal and external contact information as possible (e.g. who to ask about licensing questions, interpreting the data, updating the data, fixing bugs in the importer, etc).",
          "type": "string"
        },
        "importerBuildInfo": {
          "description": "The build information of the importer binary used to generate this data source.",
          "type": "string"
        },
        "importerBuildTarget": {
          "description": "The build target of the importer binary used to generate this data source.",
          "type": "string"
        },
        "importerClientInfo": {
          "description": "The Perforce client information of the importer binary used to generate this data source.",
          "type": "string"
        },
        "importerMpmVersion": {
          "description": "If the importer was built as an MPM, the version number can be stored in this field. As with build_info, this can be useful when tracking down issues that may be due to the use of a particular binary.",
          "type": "string"
        },
        "importerTimestamp": {
          "description": "The timestamp of the importer binary used to generate this data source.",
          "type": "string"
        },
        "provider": {
          "description": "The provider type of this data source.",
          "enum": [
            "PROVIDER_ANY",
            "PROVIDER_UNKNOWN",
            "PROVIDER_NAVTEQ",
            "PROVIDER_TELE_ATLAS",
            "PROVIDER_TELE_ATLAS_MULTINET",
            "PROVIDER_TELE_ATLAS_CODEPOINT",
            "PROVIDER_TELE_ATLAS_GEOPOST",
            "PROVIDER_TELE_ATLAS_DATAGEO",
            "PROVIDER_TELE_ATLAS_ADDRESS_POINTS",
            "PROVIDER_TELCONTAR",
            "PROVIDER_EUROPA",
            "PROVIDER_ROYAL_MAIL",
            "PROVIDER_GOOGLE",
            "PROVIDER_GOOGLE_HAND_EDIT",
            "PROVIDER_GOOGLE_BORDERS",
            "PROVIDER_GOOGLE_SUBRANGE",
            "PROVIDER_GOOGLE_GT_FUSION",
            "PROVIDER_GOOGLE_ZAGAT_CMS",
            "PROVIDER_GOOGLE_PLACE_NAVBOOST",
            "PROVIDER_GOOGLE_FOOTPRINT",
            "PROVIDER_GOOGLE_PRODUCT_TERMS",
            "PROVIDER_GOOGLE_POINTCARDS",
            "PROVIDER_GOOGLE_BUSINESS_CHAINS",
            "PROVIDER_GOOGLE_LOCAL_SUMMARIZATION",
            "PROVIDER_GOOGLE_PRONUNCIATIONS",
            "PROVIDER_GOOGLE_DUMPLING",
            "PROVIDER_GOOGLE_DISTILLERY",
            "PROVIDER_GOOGLE_LOCAL_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_RELATION_MINER",
            "PROVIDER_GOOGLE_MAPSPAM",
            "PROVIDER_GOOGLE_ROSE",
            "PROVIDER_GOOGLE_LOCAL_PLACE_RATINGS",
            "PROVIDER_GOOGLE_WIPEOUT",
            "PROVIDER_GOOGLE_KNOWLEDGE_GRAPH",
            "PROVIDER_GOOGLE_BEEGEES",
            "PROVIDER_GOOGLE_REVIEW_SUMMARIZATION",
            "PROVIDER_GOOGLE_OFFLINE_NON_CORE_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_GEO_WORLDMAPS",
            "PROVIDER_GOOGLE_GEO_MODERATION",
            "PROVIDER_GOOGLE_OYSTER_AUTO_EDITS",
            "PROVIDER_GOOGLE_LOCAL_ALCHEMY",
            "PROVIDER_GOOGLE_KEROUAC",
            "PROVIDER_GOOGLE_MOBRANK",
            "PROVIDER_GOOGLE_RAPTURE",
            "PROVIDER_GOOGLE_CULTURAL_INSTITUTE",
            "PROVIDER_GOOGLE_GEOCODES_FROM_LOCAL_FEEDS",
            "PROVIDER_GOOGLE_ATTRIBUTES_FROM_CRAWLED_CHAINS",
            "PROVIDER_GOOGLE_TACTILE_MAPS",
            "PROVIDER_GOOGLE_MAPS_FOR_MOBILE",
            "PROVIDER_GOOGLE_GEO_REALTIME",
            "PROVIDER_GOOGLE_PROMINENT_PLACES",
            "PROVIDER_GOOGLE_PLACE_ACTIONS",
            "PROVIDER_GOOGLE_GT_AUTO_EDITS",
            "PROVIDER_GOOGLE_WAZE",
            "PROVIDER_GOOGLE_ONTHEGO",
            "PROVIDER_GOOGLE_GT_IMPORT",
            "PROVIDER_GOOGLE_STRUCTURED_DATA",
            "PROVIDER_GOOGLE_HELICOPTER",
            "PROVIDER_GOOGLE_ROLLBACK",
            "PROVIDER_GOOGLE_RIGHTS_REPAIR",
            "PROVIDER_GOOGLE_PERFUME",
            "PROVIDER_GOOGLE_MAPS_TRANSLATION",
            "PROVIDER_GOOGLE_CALL_ME_MAYBE",
            "PROVIDER_GOOGLE_LOCAL_UNIVERSAL",
            "PROVIDER_GOOGLE_CROUPIER",
            "PROVIDER_GOOGLE_SKYSMART",
            "PROVIDER_GOOGLE_RIDDLER",
            "PROVIDER_GOOGLE_ROADCLOSURES",
            "PROVIDER_GOOGLE_SPORE",
            "PROVIDER_GOOGLE_LOCALIZATION",
            "PROVIDER_GOOGLE_CATTERMS",
            "PROVIDER_GOOGLE_GT_FIELD_OPS",
            "PROVIDER_GOOGLE_MATCHMAKER",
            "PROVIDER_GOOGLE_ARBITRATION",
            "PROVIDER_GOOGLE_BIZBUILDER_OPS",
            "PROVIDER_GOOGLE_LOCAL_INVENTORY_ADS",
            "PROVIDER_GOOGLE_GT_DRAFTY",
            "PROVIDER_GOOGLE_HOTELADS_OPS",
            "PROVIDER_GOOGLE_MARKERS",
            "PROVIDER_GOOGLE_STATE_MACHINE",
            "PROVIDER_GOOGLE_ATTRIBUTES_INFERENCE",
            "PROVIDER_GOOGLE_BIKESHARE",
            "PROVIDER_GOOGLE_GHOSTWRITER",
            "PROVIDER_GOOGLE_EDIT_PLATFORM",
            "PROVIDER_GOOGLE_BLUE_GINGER",
            "PROVIDER_GOOGLE_GEO_TIGER",
            "PROVIDER_GOOGLE_HYADES",
            "PROVIDER_GOOGLE_WEBQUARRY",
            "PROVIDER_GOOGLE_GEO_MADDEN",
            "PROVIDER_GOOGLE_ANDROID_PAY",
            "PROVIDER_GOOGLE_OPENING_HOURS_TEAM",
            "PROVIDER_GOOGLE_LOCAL_DISCOVERY",
            "PROVIDER_GOOGLE_LOCAL_HEALTH",
            "PROVIDER_GOOGLE_UGC_MAPS",
            "PROVIDER_GOOGLE_FIBER",
            "PROVIDER_GOOGLE_REVGEO",
            "PROVIDER_GOOGLE_HOTELADS_PARTNER_FRONT_END",
            "PROVIDER_GOOGLE_GEO_UGC_TASKS",
            "PROVIDER_GOOGLE_GEOCODING",
            "PROVIDER_GOOGLE_SPYGLASS",
            "PROVIDER_GOOGLE_PLUS_CODES_AS_ADDRESSES",
            "PROVIDER_GOOGLE_GEO_CHANGES",
            "PROVIDER_GOOGLE_HUME",
            "PROVIDER_GOOGLE_MEGAMIND",
            "PROVIDER_GOOGLE_GT_ROADSYNTH",
            "PROVIDER_GOOGLE_FIREBOLT",
            "PROVIDER_GOOGLE_LOCAL_PLACE_OFFERINGS",
            "PROVIDER_GOOGLE_UGC_SERVICES",
            "PROVIDER_GOOGLE_GEOALIGN",
            "PROVIDER_GOOGLE_GT_COMPOUNDS",
            "PROVIDER_GOOGLE_FOOD_ORDERING",
            "PROVIDER_GOOGLE_HOTEL_KNOWLEDGE_OPS",
            "PROVIDER_GOOGLE_URAW",
            "PROVIDER_GOOGLE_FLYEYE",
            "PROVIDER_GOOGLE_YOUKE",
            "PROVIDER_GOOGLE_GT_ZEPHYR",
            "PROVIDER_GOOGLE_USER_SAFETY",
            "PROVIDER_GOOGLE_ADDRESS_MAKER",
            "PROVIDER_GOOGLE_UGC_PHOTOS",
            "PROVIDER_GOOGLE_GT_WINDCHIME",
            "PROVIDER_GOOGLE_SNAG_FIXER",
            "PROVIDER_GOOGLE_GEO_DEALS",
            "PROVIDER_GOOGLE_LOCAL_PLACE_TOPICS",
            "PROVIDER_GOOGLE_PROPERTY_INSIGHTS",
            "PROVIDER_GOOGLE_GEO_CONSUMER_MERCHANT_EXPERIMENTS",
            "PROVIDER_GOOGLE_GEO_PORTKEY",
            "PROVIDER_GOOGLE_ROAD_MAPPER",
            "PROVIDER_GOOGLE_LOCATION_PLATFORM",
            "PROVIDER_GOOGLE_POSTTRIP",
            "PROVIDER_GOOGLE_TRAVEL_DESTINATION",
            "PROVIDER_GOOGLE_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_BIZBUILDER_CLEANUP",
            "PROVIDER_GOOGLE_USER",
            "PROVIDER_GOOGLE_STATION",
            "PROVIDER_GOOGLE_GEO_FOOD",
            "PROVIDER_GOOGLE_GEO_AR",
            "PROVIDER_GOOGLE_GEO_TEMPORAL",
            "PROVIDER_GOOGLE_SERVICES_MARKETPLACE",
            "PROVIDER_GOOGLE_IMT_CLEANUP",
            "PROVIDER_GOOGLE_GEO_FOOD_MENU",
            "PROVIDER_GOOGLE_CARENAV",
            "PROVIDER_GOOGLE_DRIVING_FEEDS",
            "PROVIDER_GOOGLE_DRIVING_UGC",
            "PROVIDER_GOOGLE_POLAR",
            "PROVIDER_GOOGLE_TRIWILD",
            "PROVIDER_GOOGLE_CROWD_COMPUTE_OPS",
            "PROVIDER_GOOGLE_SA_FROM_WEB",
            "PROVIDER_GOOGLE_POI_ALIGNMENT",
            "PROVIDER_GOOGLE_SA_FROM_HULK",
            "PROVIDER_GOOGLE_SERVICES_INTERACTIONS",
            "PROVIDER_GOOGLE_ROADS_UGC_EDITOR",
            "PROVIDER_GOOGLE_SA_FROM_NG_INFERENCE",
            "PROVIDER_GOOGLE_GEO_DRIVING_VIZ",
            "PROVIDER_GOOGLE_GEO_TASKING",
            "PROVIDER_GOOGLE_CROWDTASK_DATACOMPUTE",
            "PROVIDER_GOOGLE_CROWDTASK_TASKADS",
            "PROVIDER_GOOGLE_CROWDTASK_TASKMATE",
            "PROVIDER_GOOGLE_CROWDTASK_FURBALL",
            "PROVIDER_GOOGLE_CROWDTASK_ADAP",
            "PROVIDER_GOOGLE_GPAY",
            "PROVIDER_GOOGLE_GEO_UGC_TRUSTED_USERS",
            "PROVIDER_GOOGLE_THIRD_PARTY_DATA_PRODUCTION",
            "PROVIDER_GOOGLE_GEOTRACKER",
            "PROVIDER_GOOGLE_LOCAL_LANDMARK_INFERENCE",
            "PROVIDER_GOOGLE_GEO_CLOSED_LOOP",
            "PROVIDER_GOOGLE_SA_FROM_MERCHANT_POSTS",
            "PROVIDER_GOOGLE_CORE_DATA_RIGHTS",
            "PROVIDER_GOOGLE_SA_FROM_USER_REVIEWS",
            "PROVIDER_GOOGLE_GEO_CONTENT_FIXER",
            "PROVIDER_GOOGLE_POLYGON_REFINEMENT",
            "PROVIDER_GOOGLE_HANASU",
            "PROVIDER_GOOGLE_FULLRIGHTS_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_FULLRIGHTS_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_ATTRIBUTION_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_SA_FROM_FOOD_MENUS",
            "PROVIDER_GOOGLE_GT_CONSISTENCY_EDITS",
            "PROVIDER_GOOGLE_SA_QUALITY",
            "PROVIDER_GOOGLE_GDCE_CLEANUP",
            "PROVIDER_GOOGLE_UGC_QUALITY_CHAINS",
            "PROVIDER_GOOGLE_ATTRIBUTES_DISCOVERY",
            "PROVIDER_GOOGLE_GEO_LDE",
            "PROVIDER_GOOGLE_GEO_SIGNAL_TRACKING",
            "PROVIDER_GOOGLE_UGC_AGGREGATION",
            "PROVIDER_GOOGLE_3D_BASEMAP",
            "PROVIDER_GOOGLE_MAPFACTS_PRIVACY",
            "PROVIDER_GOOGLE_GT_ALF",
            "PROVIDER_GOOGLE_GT_OPERATOR_PROVENANCE",
            "PROVIDER_GOOGLE_LOCAL_SERVICES_ADS",
            "PROVIDER_GOOGLE_LOCALSEARCH",
            "PROVIDER_GOOGLE_TRANSIT",
            "PROVIDER_GOOGLE_GEOWIKI",
            "PROVIDER_GOOGLE_CHINA_LOCAL_TEAM",
            "PROVIDER_GOOGLE_SYNTHESIZED",
            "PROVIDER_GOOGLE_INTERNAL_TEST",
            "PROVIDER_GOOGLE_DISPUTED_AREAS",
            "PROVIDER_GOOGLE_3DWAREHOUSE",
            "PROVIDER_GOOGLE_GROUNDS_BUILDER",
            "PROVIDER_GOOGLE_SESAME",
            "PROVIDER_GOOGLE_GT",
            "PROVIDER_GOOGLE_GT_BASEMAP_UPLOAD",
            "PROVIDER_GOOGLE_ADSDB",
            "PROVIDER_GOOGLE_MACHINE_TRANSLITERATION",
            "PROVIDER_GOOGLE_TRAVELSEARCH",
            "PROVIDER_GOOGLE_PANORAMIO",
            "PROVIDER_GOOGLE_YOUTUBE",
            "PROVIDER_GOOGLE_OLD",
            "PROVIDER_GOOGLE_STREETVIEW",
            "PROVIDER_GOOGLE_STREETVIEW_BIZVIEW",
            "PROVIDER_GOOGLE_ZIPIT",
            "PROVIDER_GOOGLE_OYSTER_CONNECT_ROUTES",
            "PROVIDER_GOOGLE_GOLDEN",
            "PROVIDER_GOOGLE_INNERSPACE",
            "PROVIDER_GOOGLE_MAPSEARCH",
            "PROVIDER_GOOGLE_CATEGORIES_TEAM",
            "PROVIDER_GOOGLE_CROWDSENSUS",
            "PROVIDER_GOOGLE_LOCAL_ALGORITHMIC_IDENTITY",
            "PROVIDER_GOOGLE_FREEBASE",
            "PROVIDER_GOOGLE_HOTELADS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGES",
            "PROVIDER_GOOGLE_PLACES_API",
            "PROVIDER_GOOGLE_NAMEHEATMAP",
            "PROVIDER_GOOGLE_MAPMAKER",
            "PROVIDER_GOOGLE_MAPMAKER_MOBILE",
            "PROVIDER_GOOGLE_MAPMAKER_PANCAKE",
            "PROVIDER_GOOGLE_MAPMAKER_V2",
            "PROVIDER_GOOGLE_LOCAL_CLUSTERING_OPERATOR_OVERRIDE",
            "PROVIDER_GOOGLE_SERVED_ON_MAPMAKER",
            "PROVIDER_GOOGLE_GT_LOCAL",
            "PROVIDER_GOOGLE_GT_LOCAL_WITH_RIGHTS",
            "PROVIDER_GOOGLE_LOGS_RANKING_SIGNALS",
            "PROVIDER_GOOGLE_ENTITY_NAVBOOST",
            "PROVIDER_GOOGLE_RELATED_PLACES",
            "PROVIDER_GOOGLE_KNOWN_FOR_TERMS",
            "PROVIDER_GOOGLE_SYNTHETIC_AREAS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGE_PHOTOS",
            "PROVIDER_GOOGLE_CROSS_STREETS",
            "PROVIDER_GOOGLE_CORRIDORS",
            "PROVIDER_GOOGLE_BICYCLE_RENTAL",
            "PROVIDER_GOOGLE_CONCRETE_URLS",
            "PROVIDER_GOOGLE_LEANBACK",
            "PROVIDER_GOOGLE_LOCKED_LISTINGS",
            "PROVIDER_GOOGLE_MONITORING",
            "PROVIDER_GOOGLE_SPROUT",
            "PROVIDER_GOOGLE_LOCAL_SEARCH_QUALITY",
            "PROVIDER_GOOGLE_GOBY",
            "PROVIDER_GOOGLE_PROBLEM_REPORT",
            "PROVIDER_GOOGLE_CANDID",
            "PROVIDER_GOOGLE_BIZBUILDER",
            "PROVIDER_AUTOMOTIVE_NAVIGATION_DATA",
            "PROVIDER_MAPDATA_SCIENCES",
            "PROVIDER_MAPONICS",
            "PROVIDER_SKI_RESORTS",
            "PROVIDER_ZENRIN",
            "PROVIDER_SANBORN",
            "PROVIDER_URBAN_MAPPING",
            "PROVIDER_US_GOVERNMENT",
            "PROVIDER_US_CENSUS",
            "PROVIDER_US_POSTAL_SERVICE",
            "PROVIDER_US_GEOLOGICAL_SURVEY",
            "PROVIDER_US_GNIS",
            "PROVIDER_US_LANDSAT",
            "PROVIDER_US_NATIONAL_GEOSPATIAL_INTELLIGENCE_AGENCY",
            "PROVIDER_US_NGA_GNS",
            "PROVIDER_US_SSIBL",
            "PROVIDER_US_BUREAU_OF_TRANSPORTATION_STATISTICS",
            "PROVIDER_US_NATIONAL_OCEANIC_AND_ATMOSPHERIC_ADMINISTRATION",
            "PROVIDER_US_POLAR_GEOSPATIAL_CENTER",
            "PROVIDER_US_DEPARTMENT_OF_AGRICULTURE",
            "PROVIDER_US_NPI_REGISTRY",
            "PROVIDER_US_BUREAU_OF_INDIAN_AFFAIRS",
            "PROVIDER_DMTI_SPATIAL",
            "PROVIDER_INTERNATIONAL_HYDROGRAPHIC_ORGANIZATION",
            "PROVIDER_MAPLINK",
            "PROVIDER_KINGWAY",
            "PROVIDER_GEOCENTRE",
            "PROVIDER_CN_NATIONAL_FOUNDAMENTAL_GIS",
            "PROVIDER_CN_MAPABC",
            "PROVIDER_SMITHSONIAN_INSTITUTE",
            "PROVIDER_TRACKS_FOR_AFRICA",
            "PROVIDER_PPWK",
            "PROVIDER_LEADDOG",
            "PROVIDER_CENTRE_DONNEES_ASTRONOMIQUES_STRASBOURG",
            "PROVIDER_GISRAEL",
            "PROVIDER_BASARSOFT",
            "PROVIDER_MAPINFO",
            "PROVIDER_MAPIT",
            "PROVIDER_GEOBASE",
            "PROVIDER_ORION",
            "PROVIDER_CENTRAL_EUROPEAN_DATA_AGENCY",
            "PROVIDER_ANASAT",
            "PROVIDER_MINED_POSTCODES",
            "PROVIDER_DMAPAS",
            "PROVIDER_COMMON_LOCALE_DATA_REPOSITORY",
            "PROVIDER_CH_SBB",
            "PROVIDER_SKENERGY",
            "PROVIDER_GBRMPA",
            "PROVIDER_KOREA_POST",
            "PROVIDER_CN_AUTONAVI",
            "PROVIDER_MINED_POI",
            "PROVIDER_ML_INFOMAP",
            "PROVIDER_SNOOPER",
            "PROVIDER_GEOSISTEMAS",
            "PROVIDER_AFRIGIS",
            "PROVIDER_TRANSNAVICOM",
            "PROVIDER_EASYCONNECT",
            "PROVIDER_LANTMATERIET",
            "PROVIDER_LOGICA",
            "PROVIDER_MAPKING",
            "PROVIDER_DIANPING",
            "PROVIDER_GEONAV",
            "PROVIDER_HEIBONSHA",
            "PROVIDER_DEUTSCHE_TELEKOM",
            "PROVIDER_LINGUISTIC_DATA_CONSORTIUM",
            "PROVIDER_ACXIOM",
            "PROVIDER_DUN_AND_BRADSTREET",
            "PROVIDER_FEDERAL_AVIATION_ADMINISTRATION",
            "PROVIDER_INFOUSA",
            "PROVIDER_INFOUSA_NIXIE",
            "PROVIDER_THOMSON_LOCAL",
            "PROVIDER_TELEFONICA_PUBLICIDAD_E_INFORMACION",
            "PROVIDER_WIKIPEDIA",
            "PROVIDER_INFOBEL",
            "PROVIDER_MX_GOVERNMENT",
            "PROVIDER_MX_NATIONAL_INSTITUTE_STATISTICS_GEOGRAPHY",
            "PROVIDER_MX_SERVICIO_POSTAL_MEXICANO",
            "PROVIDER_TELEGATE",
            "PROVIDER_TELELISTAS",
            "PROVIDER_MAPCITY",
            "PROVIDER_EXPLAINER_DC",
            "PROVIDER_DAIKEI",
            "PROVIDER_NL_CHAMBER_OF_COMMERCE",
            "PROVIDER_KOREA_INFO_SERVICE",
            "PROVIDER_WIKITRAVEL",
            "PROVIDER_FLICKR",
            "PROVIDER_DIANCO",
            "PROVIDER_VOLT_DELTA",
            "PROVIDER_SG_GOVERNMENT",
            "PROVIDER_SG_LAND_TRANSPORT_AUTHORITY",
            "PROVIDER_MAPBAR",
            "PROVIDER_LONGTU",
            "PROVIDER_SA_GOVERNMENT",
            "PROVIDER_SA_SAUDI_POST",
            "PROVIDER_PEAKLIST",
            "PROVIDER_LOCAL_BUSINESS_CENTER",
            "PROVIDER_LOCAL_FEED_XML",
            "PROVIDER_WEB",
            "PROVIDER_RAILS_TO_TRAILS",
            "PROVIDER_INDIACOM",
            "PROVIDER_INFOMEDIA",
            "PROVIDER_PICASA",
            "PROVIDER_AT_GOVERNMENT",
            "PROVIDER_AT_BUNDESAMT_FUR_EICH_UND_VERMESSUNGSWESEN",
            "PROVIDER_AT_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_AT_AUSTRIA_POST",
            "PROVIDER_NO_GOVERNMENT",
            "PROVIDER_NO_NORSK_EIENDOMSINFORMASJON",
            "PROVIDER_NO_POSTEN_NORGE_AS",
            "PROVIDER_CH_GOVERNMENT",
            "PROVIDER_CH_SWISS_POST",
            "PROVIDER_CH_SWISSTOPO",
            "PROVIDER_CH_SWISS_NATIONAL_PARK",
            "PROVIDER_NAVIT",
            "PROVIDER_GEOSEARCH",
            "PROVIDER_DE_GOVERNMENT",
            "PROVIDER_BUNDESAMT_KARTOGRAPHIE_UND_GEODASIE",
            "PROVIDER_BUNDESNETZAGENTUR",
            "PROVIDER_SCHOBER_GROUP",
            "PROVIDER_MIREO",
            "PROVIDER_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WEBSTER_TEXAS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_AMHERST_MASSACHUSETTS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BLOOMINGTON_INDIANA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PASADENA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_CHULA_VISTA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_TEMPE_ARIZONA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_COLUMBUS_OHIO",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PORTAGE_MICHIGAN",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GEORGETOWN_KENTUCKY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GREENVILLE_SOUTH_CAROLINA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_NASHVILLE_TENNESSEE",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WASHINGTON_DISTRICT_OF_COLUMBIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BOULDER_COLORADO",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY_ENVIRONMENT_BAY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY_BIELSKO_BIALA",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_FRANKFURT",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_HAMBURG",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_KARLSRUHE",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY_SANTA_CRUZ",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_KLAGENFURT",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_LINZ",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_AZKOITIA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_BEASAIN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_GIRONA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_SAN_SEBASTIAN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_CATALUNYA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_HONDARRIBIA",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY_LAUNCESTON_TASMANIA",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY_REYKJAVIK",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY_AMELSTEVEEN",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY_ANTWERPEN",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_FREDERICTON_NEW_BRUNSWICK",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_KAMLOOPS_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_NANAIMO_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_BANFF_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_CALGARY_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_TORONTO_ONTARIO",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY_UMEA",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY_KHARKIV",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY_AQUA_CALIENTE_CAHUILLA_INDIANS",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_PONT_AUDEMER",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_BORDEAUX",
            "PROVIDER_SG_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY_RIO_DE_JANEIRO",
            "PROVIDER_MAPCUBE",
            "PROVIDER_3D_REALITYMAPS",
            "PROVIDER_DEUTSCHES_ZENTRUM_FUR_LUFT_UND_RAUMFAHRT",
            "PROVIDER_3D_CITIES_SOCIEDADE_ANONIMA",
            "PROVIDER_DISNEY",
            "PROVIDER_CYBERCITY",
            "PROVIDER_PRECISION_LIGHTWORKS_MODELWORKS",
            "PROVIDER_VIRTUAL_HUNGARY_LIMITED",
            "PROVIDER_VIRTUEL_CITY",
            "PROVIDER_SCREAMPOINT_INTERNATIONAL",
            "PROVIDER_AGENTSCHAP_VOOR_GEOGRAFISCHE_INFORMATIE_VLAANDEREN",
            "PROVIDER_FR_GOVERNMENT",
            "PROVIDER_FR_INSTITUT_GEOGRAPHIQUE_NATIONAL",
            "PROVIDER_FR_CADASTRE",
            "PROVIDER_DIADIEM",
            "PROVIDER_THE_WEATHER_CHANNEL",
            "PROVIDER_COWI",
            "PROVIDER_FALKPLAN_ANDES",
            "PROVIDER_NL_GOVERNMENT",
            "PROVIDER_NL_KADASTER",
            "PROVIDER_NL_BOARD_OF_TOURISM_AND_CONVENTIONS",
            "PROVIDER_DIGITAL_MAP_PRODUCTS",
            "PROVIDER_SILICE_DIGITAL",
            "PROVIDER_TYDAC",
            "PROVIDER_ALBRECHT_GOLF",
            "PROVIDER_HEALTH_CH",
            "PROVIDER_VISITDENMARK",
            "PROVIDER_FLYHERE",
            "PROVIDER_DIGITAL_DATA_SERVICES",
            "PROVIDER_MECOMO",
            "PROVIDER_ZA_GOVERNMENT",
            "PROVIDER_ZA_RURAL_DEVELOPMENT_LAND_REFORM",
            "PROVIDER_SENSIS",
            "PROVIDER_JJCONNECT",
            "PROVIDER_OPPLYSNINGEN",
            "PROVIDER_TELLUS",
            "PROVIDER_IQONIA",
            "PROVIDER_BE_GOVERNMENT",
            "PROVIDER_BE_NATIONAAL_GEOGRAFISCH_INSTITUUT",
            "PROVIDER_BE_BRUSSELS_MOBILITY",
            "PROVIDER_YELLOWMAP_AG",
            "PROVIDER_STIFTUNG_GESUNDHEIT",
            "PROVIDER_GIATA",
            "PROVIDER_SANPARKS",
            "PROVIDER_CENTRE_DINFORMATIQUE_POUR_LA_REGION_BRUXELLOISE",
            "PROVIDER_INFOPORTUGAL",
            "PROVIDER_NEGOCIOS_DE_TELECOMUNICACOES_E_SISTEMAS_DE_INFORMACAO",
            "PROVIDER_COLLINS_BARTHOLOMEW",
            "PROVIDER_PROTECT_PLANET_OCEAN",
            "PROVIDER_KARTTAKESKUS",
            "PROVIDER_FI_GOVERNMENT",
            "PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION",
            "PROVIDER_FI_NATIONAL_LAND_SURVEY",
            "PROVIDER_FI_STATISTICS_FINLAND",
            "PROVIDER_GB_GOVERNMENT",
            "PROVIDER_GB_ORDNANCE_SURVEY",
            "PROVIDER_NATURAL_ENGLAND",
            "PROVIDER_WELSH_GOVERNMENT",
            "PROVIDER_GB_OFFICE_FOR_NATIONAL_STATISTICS",
            "PROVIDER_EPSILON",
            "PROVIDER_PARTNER_FRONT_END",
            "PROVIDER_CARTESIA",
            "PROVIDER_SE_GOVERNMENT",
            "PROVIDER_SE_TRAFIKVERKET",
            "PROVIDER_SE_NATURVARDSVERKET",
            "PROVIDER_IE_GOVERNMENT",
            "PROVIDER_IE_ORDNANCE_SURVEY_IRELAND",
            "PROVIDER_LU_GOVERNMENT",
            "PROVIDER_LU_P_AND_T_LUXEMBOURG",
            "PROVIDER_LU_ADMINISTRATION_DU_CADASTRE_ET_DE_LA_TOPOGRAPHIE",
            "PROVIDER_LU_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_MAPFLOW",
            "PROVIDER_TKARTOR",
            "PROVIDER_JUMPSTART",
            "PROVIDER_EPTISA",
            "PROVIDER_MC_GOVERNMENT",
            "PROVIDER_MC_PRINCIPAUTE_DE_MONACO",
            "PROVIDER_MONOLIT",
            "PROVIDER_ENVIRONMENTAL_SYSTEMS_RESEARCH_INSTITUTE",
            "PROVIDER_MODIS",
            "PROVIDER_GEOX",
            "PROVIDER_GEODIRECTORY",
            "PROVIDER_GEOPLAN",
            "PROVIDER_INFODIREKT",
            "PROVIDER_GEOGLOBAL",
            "PROVIDER_DEUTSCHE_POST",
            "PROVIDER_TRACASA",
            "PROVIDER_CORREOS",
            "PROVIDER_ES_GOVERNMENT",
            "PROVIDER_ES_CENTRO_NACIONAL_DE_INFORMACION_GEOGRAFICA",
            "PROVIDER_EDIMAP",
            "PROVIDER_VERIZON",
            "PROVIDER_NATIONAL_GEOGRAPHIC_MAPS",
            "PROVIDER_PROMAPS",
            "PROVIDER_CONSODATA",
            "PROVIDER_DE_AGOSTINI",
            "PROVIDER_FEDERPARCHI",
            "PROVIDER_NAVIGO",
            "PROVIDER_ITALIAMAPPE",
            "PROVIDER_CZECOT",
            "PROVIDER_NATURAL_EARTH",
            "PROVIDER_REGIO",
            "PROVIDER_SHIPWRECK_CENTRAL",
            "PROVIDER_RUTGERS_STATE_UNIVERSITY",
            "PROVIDER_TWINICE",
            "PROVIDER_NORTHERN_IRELAND_TOURIST_BOARD",
            "PROVIDER_INFOGROUP",
            "PROVIDER_TNET",
            "PROVIDER_CTT_CORREIOS_DE_PORTUGAL",
            "PROVIDER_EUROPARC",
            "PROVIDER_IUPPITER",
            "PROVIDER_MICHAEL_BAUER_INTERNATIONAL",
            "PROVIDER_LEPTON",
            "PROVIDER_MAPPOINT",
            "PROVIDER_GEODATA",
            "PROVIDER_RU_GOVERNMENT",
            "PROVIDER_RU_FNS_KLADR",
            "PROVIDER_BR_GOVERNMENT",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DO_MEIO_AMBIENTE_E_DOS_RECURSOS_NATURAIS_RENOVAVEIS",
            "PROVIDER_BR_MINISTERIO_DO_MEIO_AMBIENTE",
            "PROVIDER_BR_AGENCIA_NACIONAL_DE_AGUAS",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DE_GEOGRAFIA_E_ESTATISTICA",
            "PROVIDER_BR_FUNDACAO_NACIONAL_DO_INDIO",
            "PROVIDER_BR_DEPARTAMENTO_NACIONAL_DE_INFRAESTRUTURA_DE_TRANSPORTES",
            "PROVIDER_AZAVEA",
            "PROVIDER_NORTHSTAR",
            "PROVIDER_COMMEDI",
            "PROVIDER_NEXUS_GEOGRAFICS",
            "PROVIDER_INFOERA",
            "PROVIDER_AD_GOVERNMENT",
            "PROVIDER_AD_AREA_DE_CARTOGRAFIA",
            "PROVIDER_MAXXIMA",
            "PROVIDER_SI_GOVERNMENT",
            "PROVIDER_SI_AGENCY_FOR_ENVIRONMENT",
            "PROVIDER_TRANSPORT_HI_TECH_CONSULTANTS",
            "PROVIDER_L1_TECHNOLOGIES",
            "PROVIDER_TELEMEDIA",
            "PROVIDER_CDCOM_PROGOROD",
            "PROVIDER_MIT_CITYGUIDE",
            "PROVIDER_SUNCART",
            "PROVIDER_MICROMAPPER",
            "PROVIDER_RICHI",
            "PROVIDER_FORUM44",
            "PROVIDER_SEAT",
            "PROVIDER_VALASSIS",
            "PROVIDER_NAVICOM",
            "PROVIDER_COLTRACK",
            "PROVIDER_PSMA_AUSTRALIA",
            "PROVIDER_PT_DUTA_ASTAKONA_GIRINDA",
            "PROVIDER_CA_GOVERNMENT",
            "PROVIDER_STATISTICS_CANADA",
            "PROVIDER_TOCTOC",
            "PROVIDER_RMSI",
            "PROVIDER_TRUE_TECHNOLOGY",
            "PROVIDER_INCREMENT_P_CORPORATION",
            "PROVIDER_GOJAVAS",
            "PROVIDER_GEOINFORMATION_GROUP",
            "PROVIDER_CYBERSOFT",
            "PROVIDER_TSENTR_EFFEKTIVNYKH_TEKHNOLOGIY",
            "PROVIDER_EE_GOVERNMENT",
            "PROVIDER_EE_MAA_AMET",
            "PROVIDER_GASBUDDY",
            "PROVIDER_DK_GOVERNMENT",
            "PROVIDER_DK_GEODATASTYRELSEN",
            "PROVIDER_MURCIA_REGION_GOVERNMENT",
            "PROVIDER_CORREIOS",
            "PROVIDER_WEST_WORLD_MEDIA",
            "PROVIDER_INTERNATIONAL_MAPPING_ASSOCIATION",
            "PROVIDER_MEDICARE",
            "PROVIDER_POLARIS",
            "PROVIDER_TW_GOVERNMENT",
            "PROVIDER_TW_MINISTRY_OF_THE_INTERIOR_SURVEYING_AND_MAPPING_CENTER",
            "PROVIDER_NORDECA",
            "PROVIDER_AFRIMAPPING",
            "PROVIDER_OVERDRIVE",
            "PROVIDER_PROVIDER_NETWORK_DIRECTORIES",
            "PROVIDER_BR_MINISTERIO_DA_SAUDE",
            "PROVIDER_DIGITAL_EGYPT",
            "PROVIDER_INRIX",
            "PROVIDER_ARPINDO",
            "PROVIDER_IT_GOVERNMENT",
            "PROVIDER_ISTITUTO_GEOGRAFICO_MILITARE",
            "PROVIDER_EAST_END_GROUP",
            "PROVIDER_INGEOLAN",
            "PROVIDER_SEMACONNECT",
            "PROVIDER_BLINK",
            "PROVIDER_EVGO",
            "PROVIDER_CHARGEPOINT",
            "PROVIDER_TPL_TRAKKER",
            "PROVIDER_OI",
            "PROVIDER_MAPARADAR",
            "PROVIDER_SINGAPORE_POST",
            "PROVIDER_CHARGEMASTER",
            "PROVIDER_TESLA",
            "PROVIDER_VISICOM",
            "PROVIDER_GEOLYSIS",
            "PROVIDER_ZEPHEIRA",
            "PROVIDER_HUBJECT",
            "PROVIDER_PODPOINT",
            "PROVIDER_CHARGEFOX",
            "PROVIDER_KR_GOVERNMENT",
            "PROVIDER_KR_MOLIT",
            "PROVIDER_KR_MINISTRY_OF_THE_INTERIOR_AND_SAFETY",
            "PROVIDER_CRITCHLOW",
            "PROVIDER_EIFRIG",
            "PROVIDER_GIREVE",
            "PROVIDER_CN_NAVINFO",
            "PROVIDER_JAPAN_CHARGE_NETWORK",
            "PROVIDER_NOBIL",
            "PROVIDER_INDIA_BANKS",
            "PROVIDER_INDONESIA_ELECTION_KPU",
            "PROVIDER_CAREERS360",
            "PROVIDER_SOURCE_LONDON",
            "PROVIDER_EVBOX",
            "PROVIDER_JP_GOVERNMENT",
            "PROVIDER_JP_MINISTRY_OF_THE_ENVIRONMENT",
            "PROVIDER_YUMYUM",
            "PROVIDER_HWW_AUSTRALIA",
            "PROVIDER_CINERGY",
            "PROVIDER_MTIME",
            "PROVIDER_KULTUNAUT",
            "PROVIDER_BLITZ",
            "PROVIDER_PIA",
            "PROVIDER_INTERPARK",
            "PROVIDER_CINEMA_ONLINE",
            "PROVIDER_BELBIOS",
            "PROVIDER_MOVIESEER",
            "PROVIDER_SODAMEDYA",
            "PROVIDER_ATMOVIES",
            "PROVIDER_HOTELBEDS",
            "PROVIDER_VERICRED",
            "PROVIDER_CIRRANTIC",
            "PROVIDER_GOGO_LABS",
            "PROVIDER_ELECTRIFY_AMERICA",
            "PROVIDER_CMS_MPPUF",
            "PROVIDER_DIGIROAD",
            "PROVIDER_KONTEX_GEOMATICS",
            "PROVIDER_NZ_GOVERNMENT",
            "PROVIDER_NZ_LINZ",
            "PROVIDER_NZ_DOC",
            "PROVIDER_FASTNED",
            "PROVIDER_DESTINY_CS",
            "PROVIDER_IONITY",
            "PROVIDER_EV_CONNECT",
            "PROVIDER_PANPAGES",
            "PROVIDER_ETECNIC",
            "PROVIDER_VOLTA",
            "PROVIDER_NISSAN_MEXICO",
            "PROVIDER_BMW_GROUP_LATIN_AMERICA",
            "PROVIDER_FEDERAL_ELECTRICITY_COMMISSION_MEXICO",
            "PROVIDER_VOLVO_CARS_BRASIL",
            "PROVIDER_CHARGE_AND_PARKING",
            "PROVIDER_DEDUCE_TECHNOLOGIES",
            "PROVIDER_SK_TELECOM",
            "PROVIDER_ECO_MOVEMENT",
            "PROVIDER_GOOGLE_GMS",
            "PROVIDER_EASYWAY",
            "PROVIDER_PHYSICIAN_COMPARE",
            "PROVIDER_HOSPITAL_COMPARE",
            "PROVIDER_ENDOLLA_BARCELONA",
            "PROVIDER_BE_CHARGE",
            "PROVIDER_ONE_NETWORK",
            "PROVIDER_CARENAV_DUPLEX",
            "PROVIDER_CARENAV_POI",
            "PROVIDER_IN_GOVERNMENT",
            "PROVIDER_SURVEY_OF_INDIA",
            "PROVIDER_E_ON",
            "PROVIDER_ELECTRIFY_CANADA",
            "PROVIDER_GRIDCARS",
            "PROVIDER_DRIVECO",
            "PROVIDER_GREEN_ACTION_STUDIOS",
            "PROVIDER_GREEN_ACTION_STUDIO",
            "PROVIDER_EVINY",
            "PROVIDER_MASTERCARD",
            "PROVIDER_VATTENFALL",
            "PROVIDER_VIETGIS",
            "PROVIDER_UNITE",
            "PROVIDER_NEOGY",
            "PROVIDER_AMPUP",
            "PROVIDER_LOOP",
            "PROVIDER_ZEST",
            "PROVIDER_EZVOLT"
          ],
          "enumDescriptions": [
            "ABSTRACT The root of all provider types. This should never be present on an actual feature, but can be useful when calling InCategory.",
            "not actually a legal value, used as sentinel",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "All new \"Google\" provider entries must be full ints. The next available ID is: 0x111730B1",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This is an internal *only* provider meant for sending wipeout requests to mapfacts.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Never rely on source infos with this provider to identify whether or not a feature is a Prominent Place! Instead, use the proper API, localsearch_clustering::QualityTierHelper::IsProminentPlace().",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Shopping Attributes Discovery",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The next new \"Google\" provider entries should be placed above.",
            "UMBRELLA",
            "",
            "",
            "",
            "This is a testing provider for teams that wish to integrate with components of the Geo Data Infrastructure that require a valid provider. No production data should ever be sent using this provider.",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "UMBRELLA",
            "0x1117F must not be used, since its range extends the PROVIDER_GOOGLE hierarchy.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated in favor of PROVIDER_GOOGLE_STRUCTURED_DATA (for attributes) and PROVIDER_GOOGLE_GEO_TIGER (for categories).",
            "",
            "0x1117FF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. aka Local AI.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "No data is obtained from this provider. It is only used to identify features that must be served on MapMaker.",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x1117FFF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. Synthetically generated areas (sublocalities/neighborhoods/ postal codes/etc) based on dropped terms from approximate geocoding. More info on go/syntheticareas.",
            "",
            "",
            "",
            "Similar to Google Transit, a provider that aggregates positions of bicycle rental points that we have agreements with to show on maps",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This range has been depleted. For new Ids see PROVIDER_GOOGLE_SUBRANGE above.",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Small Scale International Boundary Lines",
            "",
            "NOAA",
            "PGC",
            "USDA",
            "National Provider Identifier Registry",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "old name for PROVIDER_NAVIGO",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "See b/33687395",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "IBAMA",
            "MMA",
            "ANA",
            "IBGE",
            "FUNAI",
            "DNIT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Department of Cartography",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x12 and 0x120 are not to be used. OOO CET",
            "ABSTRACT",
            "Estonian Land Board",
            "",
            "ABSTRACT",
            "Danish Geodata Agency",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Ministry of land, infrastructure and transport, \uad6d\ud1a0\uad50\ud1b5\ubd80, Guktogyotongbu",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Use PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION.",
            "",
            "ABSTRACT",
            "Land Information New Zealand",
            "NZ Department of Conservation",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: Next available value is 0x1270C."
          ],
          "type": "string"
        },
        "rawMetadata": {
          "description": "For every key that is used in raw_data from this source, there must be a corresponding entry in raw_metadata that describes this key.",
          "items": {
            "$ref": "GeostoreRawMetadataProto"
          },
          "type": "array"
        },
        "release": {
          "description": "A release string that doesn't have to be a date. This is provided so that we can preserve provider release strings that aren't based on dates. If you don't set it, the release_date will get formatted into this field for debugging purposes.",
          "type": "string"
        },
        "releaseDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "The release date of this data."
        },
        "sourceDataset": {
          "description": "A data provider defined string describing the source dataset from which the features of this data source were generated. For example, the MultiNet \"fra\" dataset produces features for both France and Monaco.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreDateTimeProto": {
      "description": "WARNING: Outside of FeatureProto, please avoid in favor of a standard civil time type. Direct usage is error-prone due to the conflation of physical time and civil time (go/httat). In a protocol buffer, please use google.type.Date, with an additional google.type.TimeOfDay for precision finer-grained than a day. (For google.type.DateTime, go/prototime#types cites go/httat#zoned_datetime as a caveat). In a programming language, see go/time-devguide/languages. Additionally in C++, google3/geostore/base/public/datetime.h has conversion functions between DateTimeProto and Abseil's civil time types.",
      "id": "GeostoreDateTimeProto",
      "properties": {
        "precision": {
          "description": "This attribute describes the precision of the date and time. It would be unusual for a data provider to provide a precision along with their date. It is more likely that the precision of a date will be inferred from the date format. For example \"19th century\" is likely to be correct to the century, while \"1800\" is probably correct to the year. The precision should be semantically interpreted as a cast, so a DateTimeProto object with a seconds value corresponding to 2018-03-28 18:40:00 UTC and a precision of MONTH should be interpreted as \"March 2018\". The enums above are only some of the possible precision levels for dates and times. Clients may wish to add more precision enums in the future. However, these enums must be ordered by decreasing duration. Clients should be able to write date formatting code that looks like this: if (datetime.precision() <= DateTimeProto::PRECISION_CENTURY) { date = FormatCenturyDate(proto.seconds()); } else if (proto.precision() <= case DateTimeProto::PRECISION_DECADE) { date = FormatDecadeDate(proto.seconds()); } else { ... } See geostore/base/public/datetime.h for date formatting utility functions.",
          "enum": [
            "PRECISION_CENTURY",
            "PRECISION_DECADE",
            "PRECISION_YEAR",
            "PRECISION_MONTH",
            "PRECISION_DAY",
            "PRECISION_HOUR",
            "PRECISION_MINUTE",
            "PRECISION_SECOND"
          ],
          "enumDescriptions": [
            "The enum values here should be ordered from low precision to high precision.",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "seconds": {
          "description": "Number of seconds since (or before) the UNIX epoch (January 1, 1970). This is also the standard epoch for Java and Python time representations. If it is important for this time be displayed correctly for different time zones, convert the time to Coordinated Universal Time (UTC).",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreDimensionComparisonProto": {
      "description": "A dimension value tagged with a comparison operator. This can be used for height, width, or length.",
      "id": "GeostoreDimensionComparisonProto",
      "properties": {
        "comparisonOperator": {
          "enum": [
            "UNSPECIFIED",
            "EQUAL",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "dimensionWithUnit": {
          "$ref": "GeostoreDimensionProto"
        }
      },
      "type": "object"
    },
    "GeostoreDimensionProto": {
      "description": "A dimension with a numerical value and unit. This can be a height, width, or length.",
      "id": "GeostoreDimensionProto",
      "properties": {
        "dimension": {
          "format": "float",
          "type": "number"
        },
        "unit": {
          "enum": [
            "UNIT_UNKNOWN",
            "METERS",
            "FEET"
          ],
          "enumDescriptions": [
            "Default proto value, this value will never be set in MapFacts.",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreDisplayDataProto": {
      "description": "This holds data specific to rendering a POI on a map. It's derived from data already in MapFacts, e.g. containing features and the feature's point field. If empty, this proto should be ignored for rendering. See go/maps-render-alignment for motivation and more details.",
      "id": "GeostoreDisplayDataProto",
      "properties": {
        "displayLocation": {
          "$ref": "GeostorePointProto",
          "description": "The location where this feature should be rendered."
        }
      },
      "type": "object"
    },
    "GeostoreDoodleProto": {
      "description": "This protocol buffer holds the doodle-specific attributes for features of type TYPE_DOODLE.",
      "id": "GeostoreDoodleProto",
      "properties": {
        "type": {
          "description": "The type of this feature -- see comments above.",
          "enum": [
            "TYPE_ANY",
            "TYPE_USER_DEFINED_LABEL",
            "TYPE_POINT_ANNOTATION",
            "TYPE_LINE_ANNOTATION",
            "TYPE_AREA_ANNOTATION"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "A label that a cartographer has manually placed on the map. These may be read in from configuration files in a renderer and drawn on the map in the appropriate location.",
            "Point, line, and area annotations. There used to be a more detailed list of doodle types here, but the doodles encoded with them turned out to have a fair bit of tricky datasource-specific baggage. Rather than list provider-specific types here, they've been pulled out and are now private to the importer and the renderer. The point/line/area distinction however has proven to be useful for configuration and filtering, and remains.",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreDurationBasedRateProto": {
      "description": "A single cost which will apply based on the duration of utilization. The cost may apply once, or repeatedly on some interval, to account for the total utilization. If the duration expressed by range_start_seconds and range_end_seconds do not cover the entire duration of the utilization (i.e. from 0 to some time greater than the total utilization time), this must be combined with other DurationBasedRateProtos such that the entire duration of the utilization is accounted for. See go/rate-schema for more details.",
      "id": "GeostoreDurationBasedRateProto",
      "properties": {
        "isFree": {
          "description": "If true, represents that the rate is free; i.e. the price is 0 in any currency. If this is true, price must be empty.",
          "type": "boolean"
        },
        "periodicitySeconds": {
          "description": "The billable unit of the rate; i.e. after having utilized the service for exactly periodicity_seconds, the total cost should increase by \u2018price\u2019. For example, if the rate expresses a price per hour, then periodicity_seconds should be set to 3600. If this is unset, then the rate does not vary based on duration, and price represents a flat cost. May only be set if price is nonempty.",
          "format": "int32",
          "type": "integer"
        },
        "price": {
          "description": "The total price, in each applicable currency, of utilizing the service for periodicity_seconds, or for the entire duration expressed by range_start_seconds and range_end_seconds if periodicity_seconds is 0. Each entry should have an ID of /measurement_unit/money_value and consist of two properties: one with an ID of /measurement_unit/money_value/amount and a float value with the amount, and another with the ID /measurement_unit/money_value/currency and an ID value with the MID of the proper currency. May only be set if is_free is false.",
          "items": {
            "$ref": "FreebaseTopic"
          },
          "type": "array"
        },
        "rangeEndSeconds": {
          "description": "Upper bound for durations to match, exclusive. Unset implies indefinite.",
          "format": "int32",
          "type": "integer"
        },
        "rangeStartSeconds": {
          "description": "Lower bound for durations to match, inclusive. Required; a value of 0 expresses that the price applies from the start of the utilization period.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreElevationModelProto": {
      "description": "Represents raster digital elevation model data.",
      "id": "GeostoreElevationModelProto",
      "properties": {
        "blendOrder": {
          "description": "Defines the relative order in which terrain data should be rendered. Features with higher blend_order should be blended on top of features with lower blend_order. NOTE: this is backwards from the way BlendRank works in Magrathean.",
          "format": "int32",
          "type": "integer"
        },
        "dataLevel": {
          "description": "The zoom level at which this data is defined. Level 0 is world level data, and each increase in zoom level corresponds to a factor of 2 increase in scale.",
          "format": "int32",
          "type": "integer"
        },
        "dataMaxlevel": {
          "description": "The maximum (finest) level at which this terrain data has sufficient resolution to be displayed.",
          "format": "int32",
          "type": "integer"
        },
        "elevationData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place to store an elevation data protocol buffer. Currently, this must be a keyhole::AssetTileCompressed (see google3/keyhole/common/proto/magrathean.protodevel)."
        },
        "fullChildDataAvailable": {
          "description": "If true, all of the data contained in this feature is available at the next highest (more detailed) level. If this is true, partial_child_data_available should also be true.",
          "type": "boolean"
        },
        "partialChildDataAvailable": {
          "description": "If true, at least part of the data contained in this feature is available at the next highest (more detailed) level.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GeostoreElevationProto": {
      "description": "This protocol buffer holds elevation and related data.",
      "id": "GeostoreElevationProto",
      "properties": {
        "averageElevationMeters": {
          "description": "The average elevation of the feature in meters above the local mean sea level.",
          "format": "double",
          "type": "number"
        },
        "peak": {
          "$ref": "GeostorePeakProto",
          "description": "Additional details for TYPE_PEAK and TYPE_VOLCANO features."
        }
      },
      "type": "object"
    },
    "GeostoreEntranceProto": {
      "description": "This protocol buffer holds entrance-specific attributes for features of type TYPE_ENTRANCE.",
      "id": "GeostoreEntranceProto",
      "properties": {
        "allowance": {
          "enum": [
            "ENTER_AND_EXIT",
            "ENTER_ONLY",
            "EXIT_ONLY"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "canEnter": {
          "description": "DEPRECATED. Please use enter_or_exit instead.",
          "type": "boolean"
        },
        "canExit": {
          "description": "Whether the target can be entered through this entrance. Whether the target can be exited through this entrance.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GeostoreEntranceReferenceProto": {
      "description": "Models a relationship between a feature and its entrance or exit.",
      "id": "GeostoreEntranceReferenceProto",
      "properties": {
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Feature ID of the related entrance. References should refer to TYPE_ENTRANCE or TYPE_COMPOUND features that are entrances or exits of the referencing feature."
        }
      },
      "type": "object"
    },
    "GeostoreEstablishmentProto": {
      "description": "This protocol buffer holds establishment-specific attributes for features of type TYPE_ESTABLISHMENT.",
      "id": "GeostoreEstablishmentProto",
      "properties": {
        "bizbuilderReference": {
          "$ref": "GeostoreBizBuilderReferenceProto",
          "description": "Reference to BizBuilder data for this establishment. The bizbuilder_reference field indicates that a feature is claimed in CBDB (with the canonical state in MapFacts). The bizbuilder_reference is different from the social_reference's claimed_gaia_id because some BizBuilder clients will not have +Pages. All claimed businesses should have a bizbuilder_reference."
        },
        "hours": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "Regular opening hours for the establishment (weekly schedule)."
        },
        "openingHours": {
          "$ref": "GeostoreOpeningHoursProto",
          "description": "Opening hours for this establishment, including regular weekly hours and exceptional hours (e.g. on holidays). NOTE: in practice, only the exceptional hours are filled in this message. A schema migration for regular weekly hours was planned back in 2015 (see b/23105782) but was not completed and is (as of May 2018) not prioritized. Clients should continue getting regular opening hours from the `hours` field above. In openinghours.h there is a utility function `GetOpeningHoursFromFeature` that merges `EstablishmentProto.hours` into this proto."
        },
        "priceInfo": {
          "$ref": "GeostorePriceInfoProto",
          "description": "Pricing for products and services offered. Example: menus for restaurants."
        },
        "serviceArea": {
          "$ref": "GeostoreServiceAreaProto"
        },
        "telephone": {
          "description": "Telephone number and related information.",
          "items": {
            "$ref": "GeostoreTelephoneProto"
          },
          "type": "array"
        },
        "type": {
          "description": "** DEPRECATED ** This is deprecated in favor of the top-level (in FeatureProto) set of GConcepts. The type of establishment -- see comments above.",
          "enum": [
            "TYPE_ANY",
            "TYPE_UNDEFINED",
            "TYPE_DEPRECATED_AVIATION",
            "TYPE_BUSINESS",
            "TYPE_TRAVEL_SERVICE",
            "TYPE_LODGING",
            "TYPE_HOTEL",
            "TYPE_RESORT",
            "TYPE_MOTEL",
            "TYPE_HOSTEL",
            "TYPE_GUESTHOUSE",
            "TYPE_VACATION_RENTAL",
            "TYPE_GAS_STATION",
            "TYPE_REST_AREA",
            "TYPE_CASH_MACHINE",
            "TYPE_CAR_RENTAL",
            "TYPE_CAR_REPAIR",
            "TYPE_TAXI_STAND",
            "TYPE_TRAVEL_AGENT",
            "TYPE_BICYCLE_RENTAL_POINT",
            "TYPE_ELECTRIC_VEHICLE_CHARGING_STATION",
            "TYPE_SHOPPING",
            "TYPE_GROCERY",
            "TYPE_ANTIQUES",
            "TYPE_APPAREL",
            "TYPE_GIFTS",
            "TYPE_JEWELRY",
            "TYPE_SPORTING_GOODS",
            "TYPE_VEHICLE",
            "TYPE_SHOPPING_CENTER",
            "TYPE_SUPERMARKET",
            "TYPE_FAIRGROUNDS",
            "TYPE_MARKET",
            "TYPE_PRODUCE_MARKET",
            "TYPE_FARMERS_MARKET",
            "TYPE_LIQUOR_STORE",
            "TYPE_SOUVENIR_SHOP",
            "TYPE_INDUSTRIAL",
            "TYPE_CONSTRUCTION",
            "TYPE_BUILDING_MATERIAL",
            "TYPE_SECURITY_PRODUCTS",
            "TYPE_MECHANICAL",
            "TYPE_TEXTILE",
            "TYPE_CHEMICAL",
            "TYPE_METAL",
            "TYPE_TRANSPORTATION",
            "TYPE_FREIGHT",
            "TYPE_AVIATION",
            "TYPE_COURIER",
            "TYPE_MOVING",
            "TYPE_PACKAGING",
            "TYPE_RAIL",
            "TYPE_PUBLIC_TRANSIT",
            "TYPE_WAREHOUSE",
            "TYPE_DEFENSE",
            "TYPE_AGRICULTURE",
            "TYPE_PLANTATION",
            "TYPE_PLANT_NURSERY",
            "TYPE_DESIGN",
            "TYPE_UTILITIES",
            "TYPE_POWER_PLANT",
            "TYPE_SEWAGE_TREATMENT_PLANT",
            "TYPE_WATER_TREATMENT_PLANT",
            "TYPE_SUBSTATION",
            "TYPE_MANUFACTURING",
            "TYPE_BIOTECH",
            "TYPE_MATERIALS",
            "TYPE_MINING",
            "TYPE_QUARRY",
            "TYPE_TANNERY",
            "TYPE_OIL_REFINERY",
            "TYPE_ADVERTISING_MARKETING",
            "TYPE_LEGAL",
            "TYPE_FAMILY_LAW",
            "TYPE_IP_LAW",
            "TYPE_LABOR_LAW",
            "TYPE_PERSONAL_INJURY_LAW",
            "TYPE_CRIMINAL_LAW",
            "TYPE_PERSONAL_FINANCE",
            "TYPE_LIFE_INSURANCE",
            "TYPE_LENDING",
            "TYPE_ACCOUNTING",
            "TYPE_INVESTING",
            "TYPE_BANKING",
            "TYPE_HEALTH",
            "TYPE_HEALTH_EQUIPMENT",
            "TYPE_NURSING",
            "TYPE_HEALTH_INSURANCE",
            "TYPE_HEALTH_FACILITY",
            "TYPE_DIAGNOSTIC_CENTER",
            "TYPE_HEALTH_RESOURCES",
            "TYPE_NUTRITION",
            "TYPE_VISION",
            "TYPE_COUNSELING",
            "TYPE_MASSAGE",
            "TYPE_BLOOD_BANK",
            "TYPE_HEARING",
            "TYPE_HOME_GARDEN",
            "TYPE_INTERIOR_DECOR",
            "TYPE_DOMESTIC_SERVICES",
            "TYPE_APPLIANCES",
            "TYPE_PEST_CONTROL",
            "TYPE_GARDENING",
            "TYPE_ELECTRONICS",
            "TYPE_COMPUTER",
            "TYPE_COMPUTER_HARDWARE",
            "TYPE_COMPUTER_SECURITY",
            "TYPE_COMPUTER_SOFTWARE",
            "TYPE_COMPUTER_SUPPORT",
            "TYPE_AUDIO_DEVICES",
            "TYPE_VIDEO_DEVICES",
            "TYPE_REAL_ESTATE",
            "TYPE_OFFICE_SERVICES",
            "TYPE_ENTERTAINMENT",
            "TYPE_GAMES",
            "TYPE_CASINO",
            "TYPE_LOTTO",
            "TYPE_VIDEO",
            "TYPE_CLUBS",
            "TYPE_DISCOTHEQUE",
            "TYPE_ANIMATION",
            "TYPE_MODELING",
            "TYPE_HUMOR",
            "TYPE_MOVIES",
            "TYPE_MOVIE_RENTAL",
            "TYPE_MOVIE_THEATER",
            "TYPE_MUSIC",
            "TYPE_RADIO",
            "TYPE_TV",
            "TYPE_BAR",
            "TYPE_PRINT_MEDIA",
            "TYPE_ADULT",
            "TYPE_SEXUAL_SERVICES",
            "TYPE_ANIMALS",
            "TYPE_PETS",
            "TYPE_FISHERY",
            "TYPE_ARTS",
            "TYPE_BOOKS",
            "TYPE_PERFORMING_ARTS",
            "TYPE_GALLERY",
            "TYPE_AUTOMOTIVE",
            "TYPE_PARTS",
            "TYPE_AUTO_FINANCE",
            "TYPE_AUTO_INSURANCE",
            "TYPE_RV",
            "TYPE_MOTORCYCLES",
            "TYPE_CARS",
            "TYPE_TRUCKS_SUVS",
            "TYPE_LICENSING",
            "TYPE_MAINTENANCE",
            "TYPE_PERSONAL_CARE",
            "TYPE_BODY_ART",
            "TYPE_COSMETICS",
            "TYPE_FITNESS",
            "TYPE_YOGA_CENTER",
            "TYPE_GYM",
            "TYPE_HAIR_CARE",
            "TYPE_SPA",
            "TYPE_BEAUTY_SALON",
            "TYPE_CORPORATE_EVENTS",
            "TYPE_HUMAN_RESOURCES",
            "TYPE_FOOD_AND_DRINK",
            "TYPE_BEVERAGE",
            "TYPE_RECIPES",
            "TYPE_COOKWARE",
            "TYPE_CULINARY",
            "TYPE_RETAIL",
            "TYPE_RESTAURANT",
            "TYPE_COFFEE",
            "TYPE_BAKERY",
            "TYPE_FOOD_CENTER",
            "TYPE_TEA",
            "TYPE_CAFE",
            "TYPE_WINERY",
            "TYPE_BREWERY",
            "TYPE_FAST_FOOD",
            "TYPE_FOOD_DELIVERY",
            "TYPE_INTERNET",
            "TYPE_WEB_DESIGN",
            "TYPE_WEB_HOSTING",
            "TYPE_WEB_SERVICES",
            "TYPE_LIFESTYLE",
            "TYPE_PHOTO_VIDEO",
            "TYPE_ACTIVITIES",
            "TYPE_BOATING",
            "TYPE_CYCLING",
            "TYPE_EQUESTRIAN",
            "TYPE_FISHING",
            "TYPE_HIKING",
            "TYPE_HUNTING",
            "TYPE_SWIMMING",
            "TYPE_GOLF",
            "TYPE_GOLF_COURSE",
            "TYPE_BASEBALL",
            "TYPE_BASKETBALL",
            "TYPE_HOCKEY",
            "TYPE_MOTOR_SPORTS",
            "TYPE_WINTER_SPORTS",
            "TYPE_FOOTBALL",
            "TYPE_SOCCER",
            "TYPE_ICE_SKATING",
            "TYPE_BOXING",
            "TYPE_CRICKET",
            "TYPE_ROWING",
            "TYPE_RUGBY",
            "TYPE_RACQUET_SPORTS",
            "TYPE_ROCK_CLIMBING",
            "TYPE_REFERENCES",
            "TYPE_MAPS",
            "TYPE_TIME",
            "TYPE_SCIENTIFIC_EQUIPMENT",
            "TYPE_TELECOMMUNICATIONS",
            "TYPE_EVENT_VENUE",
            "TYPE_BANQUET_HALL",
            "TYPE_CONFERENCE_HALL",
            "TYPE_WEDDING_HALL",
            "TYPE_EXHIBITION_HALL",
            "TYPE_COMMUNITY_CENTER",
            "TYPE_AUDITORIUM",
            "TYPE_FUNCTION_HALL",
            "TYPE_CONCERT_HALL",
            "TYPE_AMPHITHEATER",
            "TYPE_LAUNDRY",
            "TYPE_LAUNDROMAT",
            "TYPE_DRY_CLEANER",
            "TYPE_MORTUARY",
            "TYPE_REPAIR_AND_MAINTENANCE",
            "TYPE_GOVERNMENT",
            "TYPE_BORDER_CROSSING",
            "TYPE_CITY_HALL",
            "TYPE_COURTHOUSE",
            "TYPE_EMBASSY",
            "TYPE_LIBRARY",
            "TYPE_PRISON",
            "TYPE_TAX_OFFICE",
            "TYPE_PROSECUTORS_OFFICE",
            "TYPE_CONGRESS",
            "TYPE_TOWN_COUNCIL",
            "TYPE_CAPITOL_BUILDING",
            "TYPE_VOTING_FACILITY",
            "TYPE_CHECKPOINT",
            "TYPE_SCHOOL",
            "TYPE_UNIVERSITY",
            "TYPE_ORPHANAGE",
            "TYPE_KINDERGARTEN",
            "TYPE_DAYCARE",
            "TYPE_ACADEMY",
            "TYPE_TRADE_SCHOOL",
            "TYPE_SKILL_INSTRUCTION",
            "TYPE_EMERGENCY",
            "TYPE_HOSPITAL",
            "TYPE_PHARMACY",
            "TYPE_POLICE",
            "TYPE_FIRE",
            "TYPE_DOCTOR",
            "TYPE_DENTIST",
            "TYPE_VETERINARIAN",
            "TYPE_FIRST_AID",
            "TYPE_CIVIL_DEFENSE",
            "TYPE_TOURIST_DESTINATION",
            "TYPE_ECO_TOURIST_DESTINATION",
            "TYPE_BIRD_WATCHING",
            "TYPE_NATURE_RESERVE",
            "TYPE_MUSEUM",
            "TYPE_VISITOR_CENTER",
            "TYPE_OBSERVATION_DECK",
            "TYPE_OBSERVATORY",
            "TYPE_SCENIC_POINT",
            "TYPE_ZOO",
            "TYPE_AQUARIUM",
            "TYPE_AMUSEMENT_PARK",
            "TYPE_MONUMENT",
            "TYPE_PALACE",
            "TYPE_FORT",
            "TYPE_TOWER",
            "TYPE_LIGHTHOUSE",
            "TYPE_TEMPLE",
            "TYPE_CHURCH",
            "TYPE_GURUDWARA",
            "TYPE_HINDU_TEMPLE",
            "TYPE_MOSQUE",
            "TYPE_SYNAGOGUE",
            "TYPE_BUDDHIST_TEMPLE",
            "TYPE_JAIN_TEMPLE",
            "TYPE_BAHAI_TEMPLE",
            "TYPE_SHINTO_TEMPLE",
            "TYPE_MORMON_TEMPLE",
            "TYPE_SPORTS_COMPLEX",
            "TYPE_STADIUM",
            "TYPE_BOWLING",
            "TYPE_BADMINTON",
            "TYPE_TENNIS",
            "TYPE_TABLE_TENNIS",
            "TYPE_PARK",
            "TYPE_LOCAL_PARK",
            "TYPE_NATIONAL_PARK",
            "TYPE_US_NATIONAL_PARK",
            "TYPE_US_NATIONAL_MONUMENT",
            "TYPE_NATIONAL_FOREST",
            "TYPE_NATIONAL_GRASSLAND",
            "TYPE_NATIONAL_PRESERVE",
            "TYPE_NATIONAL_RECREATION_AREA",
            "TYPE_NATIONAL_MONUMENT",
            "TYPE_NATIONAL_HISTORIC_AREA",
            "TYPE_NATIONAL_SCENIC_AREA",
            "TYPE_NATIONAL_SCENIC_ROADWAY_AREA",
            "TYPE_NATIONAL_SCENIC_RIVER_AREA",
            "TYPE_PROVINCIAL_PARK",
            "TYPE_PROVINCIAL_FOREST",
            "TYPE_CAMPGROUNDS",
            "TYPE_WILDERNESS_AREA",
            "TYPE_WILDLIFE_AREA",
            "TYPE_BOTANICAL_GARDEN",
            "TYPE_GARDEN",
            "TYPE_ARBORETUM",
            "TYPE_MARINE_PROTECTED_AREA",
            "TYPE_AIRPORT",
            "TYPE_TARMAC",
            "TYPE_HELIPORT",
            "TYPE_SEAPLANE_BASE",
            "TYPE_MILITARY_AIRBASE",
            "TYPE_CEMETERY",
            "TYPE_MILITARY",
            "TYPE_ENCLOSED_TRAFFIC_AREA",
            "TYPE_PARKING",
            "TYPE_OFF_ROAD_AREA",
            "TYPE_POST_OFFICE",
            "TYPE_HOUSING_DEVELOPMENT",
            "TYPE_BRIDGE",
            "TYPE_ARCHAEOLOGICAL",
            "TYPE_HISTORICAL",
            "TYPE_RUINS",
            "TYPE_TUNNEL",
            "TYPE_RESIDENTIAL_DWELLING",
            "TYPE_DETACHED_DWELLING",
            "TYPE_ATTACHED_DWELLING",
            "TYPE_APARTMENT",
            "TYPE_GATED_COMMUNITY",
            "TYPE_RETIREMENT_HOME",
            "TYPE_TOLL_BOOTH",
            "TYPE_CULTURAL",
            "TYPE_CULTURAL_CENTER",
            "TYPE_OVERPASS",
            "TYPE_REST_ROOM",
            "TYPE_PUBLIC_PHONE",
            "TYPE_PHONE_BOOTH",
            "TYPE_MANNED_PCO",
            "TYPE_RESEARCH_INSTITUTE",
            "TYPE_NON_GOVERNMENTAL_ORGANIZATION",
            "TYPE_OFFICE_PARK",
            "TYPE_MEDITATION_CENTER",
            "TYPE_RELIGIOUS",
            "TYPE_MONASTERY",
            "TYPE_ASHRAM",
            "TYPE_PAGODA",
            "TYPE_MISSION",
            "TYPE_PILGRIM_DESTINATION",
            "TYPE_SOCIAL_SERVICE",
            "TYPE_RANGER_STATION",
            "TYPE_TRANSIT_STATION",
            "TYPE_BUS_STATION",
            "TYPE_TRAMWAY_STATION",
            "TYPE_TRAIN_STATION",
            "TYPE_SUBWAY_STATION",
            "TYPE_FERRY_TERMINAL",
            "TYPE_CABLE_CAR_STATION",
            "TYPE_GONDOLA_LIFT_STATION",
            "TYPE_FUNICULAR_STATION",
            "TYPE_HORSE_CARRIAGE_STATION",
            "TYPE_MONORAIL_STATION",
            "TYPE_SEAPORT",
            "TYPE_NATURAL_FEATURE",
            "TYPE_ELEVATED",
            "TYPE_PEAK"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "Can be used for features where no establishment information is available. For example, if an importer generates a TYPE_ESTABLISHMENT_BUILDING feature, but source data does not have any information on the actual purpose of the building, the importer should use TYPE_UNDEFINED for establishment type.",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: 0xF213F is reserved to extend TYPE_INDUSTRIAL",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "0xF6F is reserved and any new types should start with 0xF6F1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "State parks, county parks, city parks, wilderness areas. This also includes underwater preserves, wild and scenic rivers, etc. Should we have things like baseball diamonds?",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Wildlife management area. This includes preservation areas for fish, game, and birds.",
            "",
            "",
            "",
            "",
            "",
            "An airport is a location where aircraft such as fixed-wing aircraft, helicopters, and blimps takeoff and land. NOTE: TYPE_TARMAC establishment type has been deprecated in favor of TYPE_TARMAC feature type. Once all data is modeled using the new feature type, the entry below should be removed.",
            "DEPRECATED",
            "A heliport is a small airport suitable only for use by helicopters.",
            "A seaplane base is a special airport suitable for seaplanes.",
            "An airbase (sometimes referred to correctly as an airfield, military airport, or Royal Air Force Station or Air Force Station) is a military airfield that provides basing and support of military aircraft.",
            "",
            "",
            "The term \"enclosed traffic area\" is used extensively in Europe. It generally refers to a parking lot or other similar area through which traffic passes but are not generally considered to be a road. Another example is a piazza in an Italian town.",
            "Establishment TYPE_PARKING is used for parking lots or garages. The actual feature type can be TYPE_ESTABLISHMENT_GROUNDS or TYPE_ESTABLISHMENT_BUILDING to distinguish between those.",
            "",
            "",
            "In some country (like China), there will have a small area of housing development. Normally covers one or more city blocks.",
            "In the Australian data we get bridges as POIs effectively. We'd like to include them so we can mapsearch for \"Sydney Harbour Bridge\" and others. Many other data sets have bridges modeled directly as segments, and so don't require this.",
            "",
            "In some countries historical objects are well known and important.",
            "",
            "Feature must be TYPE_ESTABLISHMENT_GROUNDS.",
            "These types, when used with appropriate feature type (TYPE_ESTABLISHMENT_BUILDING, TYPE_ESTABLISHMENT_GROUNDS) can refer to a single building or a residential area (respectively).",
            "",
            "",
            "All multi-unit housing such as duplex, condominium, apartment belongs to this.",
            "",
            "",
            "In Korea most toll booths have their own names, and are often used as reference points. If an importer generates TYPE_TOLL_BOOTH establishment features with exact positions and names, then mapsearch will index them. Also this can be used to render them.",
            "",
            "",
            "An overpass, or flyover is a structure that passes over another road or railway.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Hierarchy of transit station types. See go/transit-schema for more details.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreExceptionalHoursProto": {
      "description": "An ExceptionalHoursProto holds information about exceptional (non-regular) hours for a business, such as holiday hours.",
      "id": "GeostoreExceptionalHoursProto",
      "properties": {
        "hours": {
          "$ref": "GeostoreBusinessHoursProto",
          "description": "The weekly schedule to be applied for the dates that fall within the range. The schedule may contain hours only for days of the week that occur during the date range specified in the range field."
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this exception."
        },
        "range": {
          "$ref": "GeostoreTimeIntervalProto",
          "description": "The dates for which this exception applies, expressed as a half open interval. For example, an exception that applies for the entire month of December 2015 should have a range December 1, 2015 to January 1, 2016. Any regular hours that start on days in this range are ignored and replaced by the exceptional hours for that day. The TimeIntervalProto for the range must be a fully specified, non-empty, and non-inverted range of dates. Concretely, the requirements are: * the range must be a TYPE_RANGE interval * the interval may not be inverted * the endpoints of the interval must specify a year, month, and day * the day_type of each endpoint must be type DAY_OF_MONTH * the endpoints may not specify hour, minute, second, week, or week_type * the begin endpoint must predate the end endpoint"
        }
      },
      "type": "object"
    },
    "GeostoreExistenceProto": {
      "id": "GeostoreExistenceProto",
      "properties": {
        "closeReason": {
          "description": "Structured reason for the permanent closure (if any).",
          "enum": [
            "CLOSED",
            "MOVED",
            "REBRANDED"
          ],
          "enumDescriptions": [
            "The establishment is permanently closed.",
            "The establishment moved to another location. There may be a new feature representing the \"same\" establishment at its new location and if so, this feature should have a RELATION_BUSINESS_MOVED relation to that other feature.",
            "The establishment was rebranded. There may be a new feature representing the \"same\" establishment with its new branding and if so, this feature should have a RELATION_BUSINESS_REBRANDED relation to that other feature."
          ],
          "type": "string"
        },
        "closed": {
          "description": "Indicates whether the place is closed (permanently or temporarily), i.e., not operational in the present, but was at in the past and/or will be in the future. WARNING: New code should use Geo Schema's libraries instead, specifically the OpeningStatus APIs, available in: * C++ (cs/f:google3/geostore/base/public/feature.h%20function:ExistenceState) * Java (cs/f:google3/java/com/google/geostore/base/Existence.java%20function:OpeningStatus) * Python (cs/f:google3/geostore/base/public/python/feature.clif%20existence_state)",
          "type": "boolean"
        },
        "endAsOfDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "RESERVED"
        },
        "endDate": {
          "$ref": "GeostoreDateTimeProto"
        },
        "featureBirthTimestampSeconds": {
          "description": "** DEPRECATED ** This field is now deprecated (see b/22878252). Please use the Geo Schema GetFeatureBirthTimestamp() API to extract the birth timestamp of a feature. The timestamp in seconds since the UNIX epoch (January 1, 1970) when this feature becomes live in the Geo repository. Different from start_date in that this is the birth date of Google's representation of the place whereas start_date is the birth date of the place in the physical world.",
          "format": "int64",
          "type": "string"
        },
        "removed": {
          "description": "Indicates whether the feature is marked as removed in the Geo repository. Removed features are still present in the Geo repository but are considered to be in an inactive state (not valid for lint purposes, not retrievable except explicitly by feature ID, etc.). NOTE: If you have access to a complete FeatureProto, do NOT read this bit directly to find out whether a feature is removed. Instead, rely on the IsFeatureRemoved() API, available in C++ (geostore/base/public/feature.h) and Java (geostore/base/Feature.java).",
          "type": "boolean"
        },
        "removedReason": {
          "description": "Structured reason why the feature is marked as removed. Relevant only when removed == true.",
          "enum": [
            "UNKNOWN",
            "BOGUS",
            "PRIVATE",
            "PRIVATE_MUST_PURGE",
            "SPAM",
            "UNSUPPORTED",
            "PENDING",
            "DUPLICATE",
            "OLD_SCHEMA",
            "REPLACED",
            "ROLLED_BACK"
          ],
          "enumDescriptions": [
            "Reason unknown or not captured by one of the other values.",
            "Bogus data - doesn't represent a real world geographic place or is just largely bad/incorrect data.",
            "Considered \"private\" data. We do not want to display this data to users, but we allow it to remain in MapFacts indefinitely.",
            "Considered \"private\" data, which has been or will soon be fully removed from MapFacts and related systems (other than feature id and existence metadata).",
            "Bad data that was intentionally/maliciously contributed.",
            "Not enough data to support the existence of the feature. Different from the BOGUS case in that there is no positive evidence that place is/was incorrect. NOTE: This removal reason can only be set/unset by PROVIDER_GOOGLE_LOCAL_ALCHEMY and PROVIDER_GOOGLE_OYSTER_AUTO_EDITS.",
            "Indicates that the existence of the place is yet to be justified.",
            "Place has been identified as duplicate of and merged to another place. NOTE: This removal reason cannot be set for TYPE_SEGMENT. NOTE: If you have access to a complete FeatureProto, do NOT read this bit directly to find out whether a feature is a duplicate. Instead, rely on the IsDuplicateFeature() API, available in C++ (geostore/base/public/feature.h) and Java (geostore/base/Feature.java).",
            "The feature uses an old version of the Geo Schema (e.g. it has a deprecated feature type).",
            "Feature has been replaced by one or more other features. E.g. a segment got split and is now replaced by 2 segments. This is different than DUPLICATE because the feature is not a duplicate (in the identity sense) of the feature(s) that replace it. NOTE: this removal reason is currently allowed to be set only on TYPE_SEGMENT features.",
            "The edit that created the feature has been rolled back."
          ],
          "type": "string"
        },
        "startDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "(Initial) opening and (permanent) closing dates of the establishment, such that start_date is the first day open and end_date is the first day closed. The only allowed precisions are PRECISION_DAY, PRECISION_MONTH, PRECISION_YEAR. DateTimeProto.seconds should have the lowest legal value for the desired date/time and precision. E.g. for PRECISION_MONTH, 2019-02-15 21:10:30 is not valid, it should be 2019-02-01 00:00:00 instead. NOTE: The start_date and end_date are stored in UTC but should be interpreted as being in the local timezone. So clients should convert the DateTimeProto to local (civil) time using UTC+0, and then treat the result as local to the feature."
        }
      },
      "type": "object"
    },
    "GeostoreFeatureFieldMetadataProto": {
      "description": "Provenance information for sub-fields of this feature.",
      "id": "GeostoreFeatureFieldMetadataProto",
      "properties": {
        "fieldProvenance": {
          "items": {
            "$ref": "GeostoreFeatureFieldMetadataProtoFieldProvenance"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreFeatureFieldMetadataProtoFieldProvenance": {
      "id": "GeostoreFeatureFieldMetadataProtoFieldProvenance",
      "properties": {
        "fieldPath": {
          "description": "Represents all fields for which this SourceInfo is valid. NOTE: Field paths are rooted at FeatureProto level.",
          "items": {
            "$ref": "GeostoreStableFieldPathProto"
          },
          "type": "array"
        },
        "provenance": {
          "$ref": "GeostoreProvenanceProto"
        }
      },
      "type": "object"
    },
    "GeostoreFeatureHistoryMetadataProto": {
      "description": "Metadata related to the history of a given feature in the Geo repository.",
      "id": "GeostoreFeatureHistoryMetadataProto",
      "properties": {
        "featureBirthTimestampUs": {
          "description": "The timestamp (in microseconds since the UNIX epoch) when this feature first went live in the Geo repository. Note that this has no relation to the birth data of that geographical entity in the real world.",
          "format": "int64",
          "type": "string"
        },
        "lastModificationTimestampUs": {
          "description": "The timestamp (in microseconds since the UNIX epoch) of the last modification to the feature. Note this includes attachment modifications. The feature's initial creation is also considered as a modification. This is useful for those that consume features via both listening to notifications and reading from repository snapshots. This timestamp can be used to decide whether a feature in the snapshot was already seen in a more recent state through the notifications.",
          "format": "int64",
          "type": "string"
        },
        "removalTimestampUs": {
          "description": "The timestamp (in microseconds since the UNIX epoch) of the deletion time of the feature. If the feature is currently removed, this field gets populated with the timestamp the feature first became removed after being live (or being removed from beginning). This field won't be set if the feature is live.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreFeatureIdForwardingsProto": {
      "description": "Feature ID forwardings. There are many different types of ID forwardings, some of which are attached to live features, others to removed features. This information is available in multiple forms (with different completeness guarantees): (1) in RPC responses to read requests to the live Geo repository; (2) on disk, as part of the metadata section of features found in the (inactive) features snapshots; (3) on disk, as part of a separate feature_id_forwardings side table.",
      "id": "GeostoreFeatureIdForwardingsProto",
      "properties": {
        "duplicateOf": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "If the feature has been marked as a DUPLICATE of another feature, this is the feature ID of that other feature. Note that the other feature may itself be removed. This field is NOT set in (1)."
        },
        "forwardedId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The feature ID of the forwarded feature. This field is only set in case (3)."
        },
        "inactiveDuplicate": {
          "description": "If other features have been marked as DUPLICATE of this feature, this is the set of all such feature IDs. All feature IDs in this set should be for removed (aka inactive) features. Note that in the context of historical read requests against MapFacts (when ReadRequest.version_selection.timestamp is set), this field won't be set.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "replacedBy": {
          "$ref": "GeostoreFeatureIdListProto",
          "description": "DEPRECATED - Use feature.metadata.feature_replacement_info instead. This field was never populated."
        },
        "transitivelyDuplicateOf": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "If the feature has been transitively marked as a DUPLICATE of another feature (via a chain of size >= 1), this is the feature ID of that other feature which is the end of the chain. The field is always set even if the chain is of size 1. Note that the other feature may itself be removed. This field is only set in case (3)."
        }
      },
      "type": "object"
    },
    "GeostoreFeatureIdListProto": {
      "description": "A simple list of feature IDs.",
      "id": "GeostoreFeatureIdListProto",
      "properties": {
        "id": {
          "description": "The list of feature IDs. While the exact semantics of these IDs are usage-dependent, the list should never be empty or contain duplicates.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreFeatureIdProto": {
      "description": "A globally unique identifier associated with each feature. We use 128-bit identifiers so that we have lots of bits available to distinguish between features. The feature id currently consists of a 64-bit \"cell id\" that **sometimes** corresponds to the approximate centroid of the feature, plus a 64-bit fingerprint of other identifying information. See more on each respective field in its comments. Feature ids are first assigned when the data is created in MapFacts. After initial creation of the feature, they are immutable. This means that the only properties that you should rely on are that they are unique, and that cell_ids often - but not always - preserve spatial locality. The degree of locality varies as the feature undergoes geometry changes, and should not in general be considered a firm guarantee of the location of any particular feature. In fact, some locationless features have randomized cell IDs! Consumers of FeatureProtos from Mapfacts are guaranteed that fprints in the id field of features will be globally unique. Using the fprint allows consumers who don't need the spatial benefit of cell ids to uniquely identify features in a 64-bit address space. This property is not guaranteed for other sources of FeatureProtos.",
      "id": "GeostoreFeatureIdProto",
      "properties": {
        "cellId": {
          "description": "The S2CellId corresponding to the approximate location of this feature as of when it was first created. This can be of variable accuracy, ranging from the exact centroid of the feature at creation, a very large S2 Cell, or even being completely randomized for locationless features. Cell ids have the nice property that they follow a space-filling curve over the surface of the earth. (See s2cellid.h for details.) WARNING: Clients should only use cell IDs to perform spatial locality optimizations. There is no strict guarantee that the cell ID of a feature is related to the current geometry of the feature in any way.",
          "format": "uint64",
          "type": "string"
        },
        "fprint": {
          "description": "A 64-bit fingerprint used to identify features. Most clients should rely on MapFacts or OneRing to choose fingerprints. If creating new fprints, the strategy should be chosen so that the chance of collision is remote or non-existent, and the distribution should be reasonably uniform. For example, if the source data assigns unique ids to features, then a fingerprint of the provider name, version, and source id is sufficient.",
          "format": "uint64",
          "type": "string"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a feature ID. Never set in MapFacts."
        }
      },
      "type": "object"
    },
    "GeostoreFeatureMetadataProto": {
      "description": "General metadata related to a given feature in the Geo repository.",
      "id": "GeostoreFeatureMetadataProto",
      "properties": {
        "bulkUpdatable": {
          "description": "This field indicates whether the feature is subject to bulk updates. Caution must be exercised while editing such features since the changes made by the edits will be overwritten by the bulk update (if the feature is bulk updated). See go/mapfacts-abu for more information.",
          "enum": [
            "NOT_BULK_UPDATABLE",
            "BULK_UPDATABLE"
          ],
          "enumDescriptions": [
            "The feature will not be bulk updated.",
            "The feature has been bulk updated, and may be bulk updated again in the future. Note that this refers specifically to the atomic bulk-upload process, not methods of applying large sets of (independent) edits (e.g. with BEST)."
          ],
          "type": "string"
        },
        "coreVersionToken": {
          "description": "core_version_token is an opaque token representing the version of the core fields of the feature. This field is not updated when attachments are changed.",
          "format": "byte",
          "type": "string"
        },
        "featureReplacementInfo": {
          "$ref": "GeostoreFeatureReplacementInfoProto",
          "description": "Metadata for tracking when a feature is derived from or replaced by another feature or set of features."
        },
        "fieldMetadata": {
          "$ref": "GeostoreFeatureFieldMetadataProto",
          "description": "Metadata about certain repeated fields and their subfields, for which field type is not granular enough."
        },
        "forwardings": {
          "$ref": "GeostoreFeatureIdForwardingsProto",
          "description": "Feature ID forwardings, if applicable."
        },
        "history": {
          "$ref": "GeostoreFeatureHistoryMetadataProto",
          "description": "Metadata related to the history."
        },
        "versionToken": {
          "description": "version_token is an opaque token representing the version of this feature. It can be used as a concurrency token when sending edits.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreFeaturePropertyIdProto": {
      "description": "Message to represent a \"feature property\" as an abstract construct. Most feature properties are mapped one to one with the EditProto field types. However in some cases the EditProto field type granularity is too coarse to support use-cases that rely on feature properties (such as per-value rights tracking). When that is the case, the feature property is augmented with a secondary field.",
      "id": "GeostoreFeaturePropertyIdProto",
      "properties": {
        "attachmentTypeId": {
          "description": "Required when field_type == ATTACHMENT.",
          "format": "uint64",
          "type": "string"
        },
        "attributeId": {
          "description": "Required when field_type == FEATURE_ATTRIBUTE.",
          "type": "string"
        },
        "fieldType": {
          "enum": [
            "NONE",
            "ACCESS_POINT",
            "ADDRESS",
            "ANCHORED_GEOMETRY_GEOMETRY_ID",
            "ATTACHMENT",
            "BIZBUILDER_REFERENCE",
            "BORDER_FEATURE_ID_LEFT",
            "BORDER_FEATURE_ID_RIGHT",
            "BORDER_OVERRIDE_STATUS",
            "BORDER_STATUS",
            "BORDER_TYPE",
            "BORDER_LOGICAL_BORDER",
            "BOUND",
            "BUILDING_BASE_HEIGHT_METERS_AGL",
            "BUILDING_DEFAULT_DISPLAY_LEVEL",
            "BUILDING_FLOORS",
            "BUILDING_HEIGHT_METERS",
            "BUILDING_LEVEL",
            "BUILDING_STRUCTURE",
            "BUSINESS_CHAIN_CANONICAL_GCONCEPT",
            "BUSINESS_HOURS",
            "DATA_SOURCE",
            "DISPLAY_DATA",
            "ENTRANCE_ALLOWANCE",
            "ESTABLISHMENT_OPENING_HOURS_EXCEPTION",
            "ESTABLISHMENT_OPENING_HOURS_REGULAR_HOURS",
            "ESTABLISHMENT_PRICE_INFO",
            "ESTABLISHMENT_SERVICE_AREA_SERVED_FEATURE",
            "EXISTENCE_STATUS",
            "FEATURE_AVERAGE_ELEVATION",
            "FEATURE_BEST_LOCALE",
            "FEATURE_CELL_COVERING",
            "FEATURE_CENTER",
            "FEATURE_CHILD",
            "FEATURE_EXEMPT_REGULATED_AREA",
            "FEATURE_INTERIOR_CELL_COVERING",
            "FEATURE_NAME",
            "FEATURE_PARENT",
            "FEATURE_POSE",
            "FEATURE_PREFERRED_VIEWPORT",
            "FEATURE_TRACK",
            "FEATURE_TYPE",
            "FEATURE_WEBSITE",
            "FIELD_RIGHTS",
            "FUTURE_GEOMETRY",
            "FUTURE_GEOMETRY_FOR",
            "GCONCEPT",
            "GEOMETRY_PRECISION_METERS",
            "GEOPOLITICAL_GEOMETRY_REST_OF_WORLD_POLYGON",
            "GEOPOLITICAL_GEOMETRY_SELF_POLYGON",
            "INFERRED_GEOMETRY_GEOMETRY_COMPOSITION",
            "INFERRED_GEOMETRY_DEFINES_GEOMETRY_FOR",
            "INTERSECTION",
            "INTERSECTION_GROUP",
            "INTERSECTION_GROUP_CHILD_GROUP",
            "INTERSECTION_GROUP_GROUP_TYPE",
            "INTERSECTION_GROUP_PARENT_GROUP",
            "INTERSECTION_IN_GROUP",
            "INTERSECTION_TOLL_CLUSTER",
            "IN_SEGMENT",
            "KNOWLEDGE_GRAPH_PROPERTY",
            "LABEL_BACKGROUND_COLOR",
            "LABEL_TEXT_COLOR",
            "LANE_MARKER_BARRIER_MATERIALS",
            "LANE_MARKER_CROSSING_PATTERN",
            "LANE_MARKER_LINEAR_PATTERN",
            "LEVEL_BUILDING",
            "LEVEL_NUMBER",
            "LOCALE_LANGUAGE",
            "LOCALE_LOCALIZATION_POLICY_ID",
            "LOGICAL_BORDER_BORDER_SEGMENT",
            "LOGICAL_BORDER_STATUS",
            "OPERATIONS_TEMPORARY_CLOSURE",
            "PARKING_ALLOWANCE",
            "PARKING_AVAILABLE",
            "PARKING_OPENING_HOURS_EXCEPTION",
            "PARKING_OPENING_HOURS_REGULAR_HOURS",
            "PARKING_PROVIDER_FEATURE",
            "PARKING_RESTRICTION",
            "PEAK_PROMINENCE",
            "PHONE_NUMBER",
            "POINT",
            "POLYGON",
            "POLYGON_FOR_DISPLAY",
            "POLYLINE",
            "RANK",
            "RANK_SIGNAL",
            "REGULATED_AREA_RESTRICTION",
            "RELATED_BORDER",
            "RELATED_ENTRANCE",
            "RELATED_FEATURE",
            "RELATED_TERMINAL_POINT",
            "RELATED_TIMEZONE",
            "RESTRICTION_GROUP_SEGMENT",
            "ROAD_MONITOR_MONITORED_ROAD",
            "ROUTE_CHILD_TYPE",
            "SCHOOL_DISTRICT_TYPE",
            "SEGMENT_ADVISORY_MAXIMUM_SPEED",
            "SEGMENT_AVERAGE_SPEED",
            "SEGMENT_BARRIER",
            "SEGMENT_BICYCLE_FACILITY",
            "SEGMENT_BICYCLE_SAFETY",
            "SEGMENT_CONDITION",
            "SEGMENT_CONSTRUCTION_BEGIN_DATE",
            "SEGMENT_CONSTRUCTION_END_DATE",
            "SEGMENT_CONSTRUCTION_STATUS",
            "SEGMENT_COVERED",
            "SEGMENT_DISTANCE_TO_EDGE",
            "SEGMENT_EDGE_FOLLOWS_SEGMENT_BEGIN_FRACTION",
            "SEGMENT_EDGE_FOLLOWS_SEGMENT_END_FRACTION",
            "SEGMENT_ELEVATION",
            "SEGMENT_ENDPOINT",
            "SEGMENT_GRADE_LEVEL_LIST",
            "SEGMENT_INTERNAL_TRAVEL_ALLOWANCE",
            "SEGMENT_INTERPOLATION_OFFSET_METERS",
            "SEGMENT_IS_MAX_PERMITTED_SPEED_DERIVED",
            "SEGMENT_LANE",
            "SEGMENT_LEGAL_MAXIMUM_SPEED",
            "SEGMENT_LEGAL_MINIMUM_SPEED",
            "SEGMENT_MAX_SPEED",
            "SEGMENT_ON_RIGHT",
            "SEGMENT_PATH",
            "SEGMENT_PEDESTRIAN_CROSSING",
            "SEGMENT_PEDESTRIAN_FACILITY",
            "SEGMENT_PEDESTRIAN_GRADE",
            "SEGMENT_PRIORITY",
            "SEGMENT_RESTRICTION",
            "SEGMENT_ROAD_CAMERA",
            "SEGMENT_ROAD_SIGN",
            "SEGMENT_ROUTE",
            "SEGMENT_ROUTE_ASSOCIATION",
            "SEGMENT_SEPARATED_ROADWAYS",
            "SEGMENT_SLOPE",
            "SEGMENT_SURFACE",
            "SEGMENT_SWEEP",
            "SEGMENT_TOLL_ROAD",
            "SEGMENT_USAGE",
            "SEGMENT_VISIBLE_LANDMARK",
            "SIGN_COMPONENT",
            "SOCIAL_REFERENCE_CLAIMED_GAIA_ID",
            "SOURCE_INFO",
            "STATUS_CLOSED",
            "STATUS_CLOSE_REASON",
            "STATUS_END_AS_OF_DATE",
            "STATUS_END_DATE",
            "STATUS_REMOVED",
            "STATUS_REMOVED_REASON",
            "STATUS_START_DATE",
            "STOREFRONT_GEOMETRY",
            "SYNTHETIC_GEOMETRY",
            "THREE_DIMENSIONAL_MODEL",
            "TOLL_CLUSTER_INTERSECTION",
            "TRANSIT_LINE_AGENCY",
            "TRANSIT_LINE_STATION",
            "TRANSIT_LINE_VARIANT_LINE_CONCEPT",
            "TRANSIT_LINE_VARIANT_STOP",
            "TRANSIT_LINE_VEHICLE_TYPE",
            "TRANSIT_STATION_AGENCY",
            "VERTICAL_ORDERING_LEVEL",
            "WATER_REMOVED_POLYGON",
            "DEPRECATED_DO_NOT_USE_EMAIL_ADDRESS",
            "DEPRECATED_DO_NOT_USE_RANK_GEOMETRY",
            "DEPRECATED_DO_NOT_USE_SEGMENT_INFO",
            "DEPRECATED_DO_NOT_USE_SEGMENT_LANE_LIST",
            "DEPRECATED_DO_NOT_USE_SEGMENT_WRONG_WAY",
            "DEPRECATED_DO_NOT_USE_WEBSITE",
            "FEATURE_ATTRIBUTE",
            "SOCIAL_REFERENCE",
            "CATEGORY",
            "DEPRECATED_DO_NOT_USE_CAPITAL",
            "DEPRECATED_DO_NOT_USE_DESCRIPTION",
            "DEPRECATED_DO_NOT_USE_DISTINCT",
            "DEPRECATED_DO_NOT_USE_DUPLICATE",
            "EDIT_PRECEDENCE",
            "DEPRECATED_DO_NOT_USE_EDIT_PRECEDENCE",
            "DEPRECATED_DO_NOT_USE_ENTRANCE_TARGET",
            "DEPRECATED_DO_NOT_USE_ESTABLISHMENT_PLACE_ACTION_PAGE",
            "DEPRECATED_DO_NOT_USE_ESTABLISHMENT_TYPE",
            "DEPRECATED_DO_NOT_USE_EVENT",
            "DEPRECATED_DO_NOT_USE_GEOMETRIC_ACCURACY",
            "DEPRECATED_DO_NOT_USE_HIGHEST_GRADE",
            "DEPRECATED_DO_NOT_USE_ID_TO_OVERRIDE",
            "DEPRECATED_DO_NOT_USE_ISSUE_HISTORY",
            "DEPRECATED_DO_NOT_USE_ISSUE_METADATA",
            "DEPRECATED_DO_NOT_USE_KNOWLEDGE_GRAPH_ID",
            "DEPRECATED_DO_NOT_USE_LOWEST_GRADE",
            "DEPRECATED_DO_NOT_USE_PAYMENT_TYPES",
            "DEPRECATED_DO_NOT_USE_PHOTO",
            "DEPRECATED_DO_NOT_USE_PHOTO_URL",
            "DEPRECATED_DO_NOT_USE_PLACE_CLOSED",
            "DEPRECATED_DO_NOT_USE_POPULATION",
            "DEPRECATED_DO_NOT_USE_RANK_USER",
            "DEPRECATED_DO_NOT_USE_REMOVE_DUPLICATE",
            "DEPRECATED_DO_NOT_USE_REMOVE_PLACE",
            "DEPRECATED_DO_NOT_USE_SCHOOL_TYPE",
            "DEPRECATED_DO_NOT_USE_SEGMENT_ELEVATION_BEGIN",
            "DEPRECATED_DO_NOT_USE_SEGMENT_ELEVATION_END",
            "DEPRECATED_DO_NOT_USE_SEGMENT_ELEVATION_MIDDLE",
            "DEPRECATED_DO_NOT_USE_SYLLABUS",
            "DEPRECATED_DO_NOT_USE_TRACK_CLASS",
            "DEPRECATED_DO_NOT_USE_VIEWCODE_INFO",
            "DEPRECATED_DO_NOT_USE_WORKAREA",
            "DEPRECATED_DO_NOT_USE_INFERRED_GEOMETRY_INCLUDES_GEOMETRY_OF",
            "DEPRECATED_DO_NOT_USE_INFERRED_GEOMETRY_EXCLUDES_GEOMETRY_OF"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "kgPropertyId": {
          "description": "Required when field_type == KNOWLEDGE_GRAPH_PROPERTY.",
          "type": "string"
        },
        "nameLanguage": {
          "description": "RESERVED",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreFeatureProto": {
      "description": "Every entry in the GeoStore database is called a \"feature\". A feature is represented as a discriminated union of all the different feature types, where the actual feature type is specified by the \"type\" field. There are also various fields that are meaningful for most or all feature types, such as bounding regions and names. Every feature has a globally unique id that can be used to refer to it from other features.",
      "id": "GeostoreFeatureProto",
      "properties": {
        "accessPoint": {
          "description": "Optional access point information. Access points hold detailed information about routing endpoints. For example, the main Google office is at \"1600 Amphitheatre Parkway\". The feature representing that office has a polygon, a center, and an address with components for the street number, route, locality, etc. The access point information, on the other hand, identifies the specific segment, the latitude/longitude of the driveway, and so forth.",
          "items": {
            "$ref": "GeostoreAccessPointProto"
          },
          "type": "array"
        },
        "address": {
          "description": "Address for this feature. A Geo Schema address is designed to model a mailing address, so only features that have mailing addresses in the real world may have addresses. Each feature should have only one address. If you want to describe the geographic location of a feature which does not have a mailing address with respect to other well-known features, some other schema constructs should be used. Note that the field is defined as repeated though features that use this field with its intended semantics are constrained to have a single address even if they may have multiple mailing addresses in the real world. The \u201csingle address\u201d rule is enforced by lint. Current exceptions to the single address rule and mailing address rule are described in the g3doc. Bear note that the schema team is actively working on eliminating these exceptions. http://go/geo-addresses Note the following conventions: - Addresses follow the postal hierarchy, not the political hierarchy. Addresses may have components that refer to political entities when those entities also appear in the postal hierarchy. - As stated previously, but it bears repeating, addresses on features are mailing addresses. In many cases the physical address and the mailing address are the same but the address stored on a feature represents the mailing address of the feature. An example of a non-physical mailing address would be a PO Box. - These addresses are commonly defined and verifiable by a governmental authority (e.g. the United States Postal Service in the United States, Royal Mail in the United Kingdom, Correios in Brazil, etc.) and should follow conventions and rules defined by those authorities.",
          "items": {
            "$ref": "GeostoreAddressProto"
          },
          "type": "array"
        },
        "anchoredGeometry": {
          "$ref": "GeostoreAnchoredGeometryProto",
          "description": "Represents information about the feature\u2019s anchored geometry."
        },
        "attachment": {
          "description": "The collection of attachments for this feature. Documentation: http://go/geo-attachments",
          "items": {
            "$ref": "GeostoreAttachmentsAttachmentProto"
          },
          "type": "array"
        },
        "attribute": {
          "description": "** DEPRECATED ** A list of attributes that describe defined aspects of this feature. An attribute must be a concrete, high quality, and editable piece of information about a feature, and must be used on some general consumer facing Google property. The data types used for attributes must be primitive types or reusable in a generic manner.",
          "items": {
            "$ref": "GeostoreAttributeProto"
          },
          "type": "array"
        },
        "bestLocale": {
          "$ref": "GeostoreBestLocaleProto",
          "description": "Describes the best-match locale for this feature."
        },
        "border": {
          "$ref": "GeostoreBorderProto"
        },
        "bound": {
          "$ref": "GeostoreRectProto",
          "description": "A latitude-longitude rectangle used by bucketing MapReduces. See the documentation on bucketing MapReduce for details. This field can be a source of confusion. Because it is called \"bound\", it is often assumed that it is a tight bound on the geometry but it can be (and often is) much larger. If a tight bound is needed then use the standard GetFeatureGeometryBound() function instead. To be more explicit, if you are using this field for *anything* else than a bucketing MapReduce, you are doing the wrong thing. Not all features are required to have bounding boxes. See geostore::IsBoundRequiredForFeatureType() for the list of feature types required to have a bounding box. This bound field will be updated when a feature changes in MapFacts to include its geometry. Also, a GeoSchema pipeline, go/geo-schema-pipelines-docs#expand-bounds runs periodically to update the field for strong references from other features. Therefore, most editors don't need to edit this field explicitly. See go/geo-changes:no-edit-for-feature-bound for the details."
        },
        "building": {
          "$ref": "GeostoreBuildingProto"
        },
        "businessChain": {
          "$ref": "GeostoreBusinessChainProto",
          "description": "Data specific to business chain features, e.g., Canonical GConcepts."
        },
        "center": {
          "$ref": "GeostorePointProto",
          "description": "The conceptual center of the feature, used for routing. For cities, this would be the center of the downtown, or maybe the location of city hall. For states and countries it might be the capital city. Most feature types will not have a conceptual center - by default, routing will use the centroid of the feature's geometry. If you need a feature center point consider using GetFeatureGeometryCenter() function from geostore/base/public/feature.h rather than reading from this field directly."
        },
        "child": {
          "description": "Features can define themselves as a collection of other features. For example, a route is a collection of road segments, and a feature for the \"Great Lakes\" could be defined as lakes Superior, Michigan, Huron, Erie, and Ontario. It is not recommended to design a multi level tree using the child field to build up a feature because it requires fetching many features to see the details of the feature. In practice this is used to model archipelago, route, transit (agencies, lines, trips, departures), and river features. The geometry of a feature is implicitly defined by its children, so if a feature has children then it should not have any points, polylines, or polygons. In general, this field should not be used to represent political or postal hierarchies. For example, a county would not list its cities as children, because the county is not defined in terms of its cities (it also contains unincorporated areas, etc.).",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "covering": {
          "$ref": "GeostoreCellCoveringProto",
          "description": "S2 cell coverings for this feature. See util/geometry/s2cell_union.h for more information about S2 cells. Coverings are useful for quick containment or intersection tests. S2 covering that consists of cells that intersect with the feature."
        },
        "dataSource": {
          "$ref": "GeostoreDataSourceProto"
        },
        "displayData": {
          "$ref": "GeostoreDisplayDataProto",
          "description": "Data used to render this feature on a map."
        },
        "doodle": {
          "$ref": "GeostoreDoodleProto",
          "description": "** DEPRECATED **"
        },
        "elevation": {
          "$ref": "GeostoreElevationProto"
        },
        "elevationModel": {
          "$ref": "GeostoreElevationModelProto",
          "description": "Captures elevation data used on TYPE_DIGITAL_ELEVATION_MODEL features."
        },
        "entrance": {
          "$ref": "GeostoreEntranceProto"
        },
        "establishment": {
          "$ref": "GeostoreEstablishmentProto",
          "description": "Also allowed on TYPE_BUSINESS_CHAIN and TYPE_TRANSIT_AGENCY features, to model the feature's phone number(s). Other fields within EstablishmentProto are not permitted on non-TYPE_ESTABLISHMENT features."
        },
        "exemptRegulatedArea": {
          "description": "A list of feature ids of polygon based restrictions that do not apply to this feature. This may only include features of TYPE_REGULATED_AREA that also have a feature.regulated_area.restriction field defined. Setting this field opts the feature out of all restrictions set on that regulated area.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "futureGeometry": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Specifies the TYPE_FUTURE_GEOMETRY whose geometry will replace this feature's geometry. If this field is populated, the referenced future geometry must have a future_geometry_for referencing this feature."
        },
        "futureGeometryFor": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Specifies the feature that this feature's geometry will replace. If this field is populated, the referenced feature must have a future_geometry reference back to this feature. This field is only allowed (and required) for TYPE_FUTURE_GEOMETRY features."
        },
        "geometryPrecisionMeters": {
          "description": "If set, the feature's actual location can be assumed to be somewhere within a circle of this radius, centered on the feature's location. More information on this field at go/gpm-definition-update. NOTE: Only applicable to features with 'point' geometry. Please contact geo-schema-team@ if you have non-point use cases for which this field would be useful.",
          "format": "double",
          "type": "number"
        },
        "geopoliticalGeometry": {
          "$ref": "GeostoreGeopoliticalGeometryProto",
          "description": "Geopolitical (unsimplified) polygons for a feature for different geopolitical use cases."
        },
        "htmlText": {
          "description": "** DEPRECATED ** Features can have zero or more HTML texts associated with them. These might be HTML balloons used by Google Earth, for example.",
          "items": {
            "$ref": "GeostoreHtmlTextProto"
          },
          "type": "array"
        },
        "id": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The globally unique id for this feature."
        },
        "inferredGeometry": {
          "$ref": "GeostoreInferredGeometryProto"
        },
        "interiorCovering": {
          "$ref": "GeostoreCellCoveringProto",
          "description": "S2 interior covering that consists of cells completely enclosed within the feature's geometry (for features with polygonal geometry)."
        },
        "internal": {
          "$ref": "GeostoreInternalFeatureProto",
          "description": "Additional internal feature-level attributes that may be set by data providers to be used inside the Geo Data infrastructure. This field should never be present in the output of the Geo Data infrastructure that read-only clients consume."
        },
        "intersection": {
          "$ref": "GeostoreIntersectionProto"
        },
        "intersectionGroup": {
          "$ref": "GeostoreIntersectionGroupProto"
        },
        "kgProperty": {
          "description": "Properties that apply to this feature whose schema is defined in the Knowledge Graph schema (see https://hume.google.com/graph/schema). Not all properties that exist in the KG schema can be asserted via this mechanism. The set of properties that are allowed to be set on a feature depends on the feature's GConcepts (and feature type). For instance, only gcid:country features may have the /geo/type/country/president property (made up example, since that property doesn't actually exist in the KG schema). GConcept hierarchy is taken into account for deciding the set of allowed properties. Additionally, the specific properties allowed are further constrained by the list specified at go/kg-property-allowlist. NOTE: not all types of properties are allowed to appear in the Geo Schema. For now, we limit ourselves to properties whose value type is TYPE_BOOL, TYPE_COMPOUND, TYPE_DATETIME, TYPE_FLOAT, TYPE_ID, TYPE_INT, TYPE_NESTED_STRUCT, TYPE_TEXT, or TYPE_URI. NOTE(b/35039936): We are in the process of changing how a KG property with multiple values is stored in this field. Currently, such a KG property is stored in a single instance of the kg_property field. However, we will be changing this so that each value will be stored in its own instance of kg_property. Any client that wants to read from this field should be prepared to read data represented in either format. See b/35039936 or the announcement at http://g/geo-schema-announce/7IXR3Fex8to/7yFyT5UoAwAJ for an example and more details. The mechanism to assert that a KG property has no value is via the property_value_status field below. freebase.PropertyValue.value_status is not allowed be set here for consistency reason.",
          "items": {
            "$ref": "FreebasePropertyValue"
          },
          "type": "array"
        },
        "knowledgeGraphReference": {
          "$ref": "GeostoreKnowledgeGraphReferenceProto",
          "description": "RESERVED"
        },
        "laneMarker": {
          "$ref": "GeostoreLaneMarkerProto"
        },
        "level": {
          "$ref": "GeostoreLevelProto",
          "description": "Represents information about TYPE_LEVEL features."
        },
        "locale": {
          "$ref": "GeostoreLocaleProto"
        },
        "logicalBorder": {
          "$ref": "GeostoreLogicalBorderProto"
        },
        "metadata": {
          "$ref": "GeostoreFeatureMetadataProto",
          "description": "Metadata about this particular feature. Metadata is managed internally by the Geo Data Infrastructure and in general should not be set by clients. Features that don't ultimately come from the Geo repository (MapFacts) won't have any metadata set."
        },
        "name": {
          "description": "The name(s) of this feature. A feature may have different names in different languages, colloquial or \"vanity\" names, etc.",
          "items": {
            "$ref": "GeostoreNameProto"
          },
          "type": "array"
        },
        "operations": {
          "$ref": "GeostoreOperationsProto",
          "description": "Information about this feature's operations, e.g. when this feature is temporarily closed. NOTE: for legacy reasons, some closure-specifc information (e.g. permanent closure reason) lives in ExistenceProto instead. In the future, such information should move here in OperationsProto."
        },
        "originalId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "This field is used internally by the pipeline for id stability. It should not be set by individual importers, nor should it be read by consumer clients. In particular, this field will not be present in features read or snapshotted from the Mapfacts Repository."
        },
        "parent": {
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "parking": {
          "$ref": "GeostoreParkingProto",
          "description": "Describes parking details for the feature."
        },
        "point": {
          "description": "Defines the geometry of the feature. The geometry may be specified as an arbitrary union of points, poses, polylines, tracks, and polygons. Points, poses, polylines, and tracks are assumed to represent regions of unspecified size or width rather than regions of zero area. Most features should have some sort of geometry. Geometry may be synthesized if none is available (e.g., polygons for postal codes). The synthetic_geometry flag should be set in that case. Point is currently enforced as a non-repeating field for all feature types, though it is defined as repeating in case future modeling requires multiple points. The number of allowed polylines, tracks, or polygons vary based on feature type. A feature can have at most one pose (it is an optional field).",
          "items": {
            "$ref": "GeostorePointProto"
          },
          "type": "array"
        },
        "political": {
          "$ref": "GeostorePoliticalProto",
          "description": "** DEPRECATED ** Detail discussion could be found at b/18611003."
        },
        "polygon": {
          "items": {
            "$ref": "GeostorePolygonProto"
          },
          "type": "array"
        },
        "polygonForDisplay": {
          "$ref": "GeostorePolygonProto",
          "description": "Provide version of the geometry suitable for display. This has been subject to water removal and (possibly) moderate simplification."
        },
        "polyline": {
          "items": {
            "$ref": "GeostorePolyLineProto"
          },
          "type": "array"
        },
        "pose": {
          "$ref": "GeostorePoseProto",
          "description": "Defines the geometry of a feature as a 6D pose, including lat, lng, altitude, roll, pitch, and yaw along the WGS-84 ellipsoid. Only the lat and lng are strictly required."
        },
        "preferredViewport": {
          "$ref": "GeostoreRectProto",
          "description": "The preferred viewport for this feature. If present, this latitude-longitude rectangle holds the preferred viewport for the feature. For example, it might hold the bounds of the \"central\" portion of a large city. There are no aspect ratio requirements. This is an optional field: if no viewport is supplied, interested clients can use heuristics to determine a viewport. Calling the standard GetFeatureGeometryBound() function would be a good way to start but note that it can return an empty bounding box (e.g., if the feature has no geometry). The preferred viewport is not necessarily fully contained by the above bounding box."
        },
        "propertyValueStatus": {
          "description": "The value status of properties on this feature. For example, this specifies whether the feature is known to have no name (this is the value status of the 'FEATURE_NAME' property). Only property IDs which have no specific value are allowed to have a value status. Note: not all field types will be supported, please contact geo schema team if you want to enable this field for a field type that is not currently supported.",
          "items": {
            "$ref": "GeostorePropertyValueStatusProto"
          },
          "type": "array"
        },
        "rank": {
          "description": "WARNING: Please do NOT introduce new uses of this field; treat it as if it were deprecated. For appropriate ranking contacts, see g3doc/company/teams/gdeng/geo-schema-reference/home/feature-properties/rank.md. A floating-point number between 0.0 and 1.0 indicating how \"important\" we think this feature is. This can be used to decide which features to render on maps, and how to rank results when the user does a search. The rank can depend on any number of factors such as the number of references to this feature in web pages, geographic size, population, number of referring geographic entities, \"priority\" information encoded in the source data, etc.",
          "format": "float",
          "type": "number"
        },
        "rankDetails": {
          "$ref": "GeostoreRankDetailsProto",
          "description": "The rank field is computed as a weighted sum of several signals. This field contains a protocol buffer whose fields give those signals and their weights. Clients should try very hard not to depend on these individual signals and use the single rank field instead. At some point in the future, this field will not be exposed anymore."
        },
        "rawGconceptInstanceContainer": {
          "$ref": "GeostoreOntologyRawGConceptInstanceContainerProto",
          "description": "Geo Ontology GConcept Instances - Design doc linked off http://go/geo-ontology - In order to shield clients from changes in GConcept representation we provide an accessor library: geostore/base/public/gconcept_instance.h"
        },
        "regulatedArea": {
          "$ref": "GeostoreRegulatedAreaProto"
        },
        "relatedBorder": {
          "description": "For TYPE_COUNTRY or TYPE_ADMINISTRATIVE_AREA1 features, this field defines the associated TYPE_BORDERs which reference this feature. The linked TYPE_BORDERs must have the feature.border set, pointing to this feature. TYPE_COUNTRY or TYPE_ADMINISTRATIVE_AREA1 features must have this field set for each TYPE_BORDER referencing them.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "relatedEntrance": {
          "description": "Logical relationship to other features that are entrances or exits to this feature.",
          "items": {
            "$ref": "GeostoreEntranceReferenceProto"
          },
          "type": "array"
        },
        "relatedFeature": {
          "description": "Geographic or logical relationships to other features. Importers don't need to fill a geographic relationship in - it is handled by related feature processing by a standalone pipeline. Adding \"contained by\" country relations is however encouraged (and required for TYPE_ROUTE features). WARNING: Updates to this field handled by standalone pipelines are NOT atomic with regard to updates to the features being referenced; we do not guarantee that a given MapFacts snapshot will be consistent between this field and the related features.",
          "items": {
            "$ref": "GeostoreRelationProto"
          },
          "type": "array"
        },
        "relatedTerminalPoint": {
          "description": "Terminal points associated with this feature. For instance, an airport terminal may have specifically designated pickup and drop-off points.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "relatedTimezone": {
          "description": "Contains time zones known to be associated with a feature. Most features are associated with the single time zone that contains them. However, some larger features (countries, continents, etc.) are associated with all of the time zones they contain. Most features can have any number of related time zones, but TYPE_SEGMENT and TYPE_ESTABLISHMENT_POI features can have at most 1.",
          "items": {
            "$ref": "GeostoreTimezoneProto"
          },
          "type": "array"
        },
        "restrictionGroup": {
          "$ref": "GeostoreRestrictionGroupProto"
        },
        "roadMonitor": {
          "$ref": "GeostoreRoadMonitorProto"
        },
        "route": {
          "$ref": "GeostoreRouteProto",
          "description": "Additional details on the feature types below can be found in the individual protocol buffer definitions. These extensions capture data that is specific to a set of feature types and which makes no sense for other feature types."
        },
        "schoolDistrict": {
          "$ref": "GeostoreSchoolDistrictProto"
        },
        "segment": {
          "$ref": "GeostoreSegmentProto"
        },
        "segmentPath": {
          "$ref": "GeostoreSegmentPathProto"
        },
        "sign": {
          "$ref": "GeostoreRoadSignProto"
        },
        "skiBoundary": {
          "$ref": "GeostoreSkiBoundaryProto"
        },
        "skiLift": {
          "$ref": "GeostoreSkiLiftProto"
        },
        "skiTrail": {
          "$ref": "GeostoreSkiTrailProto"
        },
        "socialReference": {
          "$ref": "GeostoreSocialReferenceProto",
          "description": "All establishments must have a social reference. WARNING: Aside from creating new establishments, please do NOT introduce new uses; treat social references as if they were deprecated. For alternatives and more, see g3doc/company/teams/gdeng/geo-schema-reference/home/feature-types/establishments/social-reference.md."
        },
        "sourceInfo": {
          "description": "A list of the data sources that were used to construct this feature, together with optional \"raw data\" in the provider's format. Raw data should not be used by production clients but may be useful for exploring data that is not currently converted to a canonical form.",
          "items": {
            "$ref": "GeostoreSourceInfoProto"
          },
          "type": "array"
        },
        "status": {
          "$ref": "GeostoreExistenceProto",
          "description": "All features can have \"existence\" information associated with them."
        },
        "storefrontGeometry": {
          "description": "Represents information about the store front geometry. Only TYPE_ESTABLISHMENT_POI should have this field set.",
          "items": {
            "$ref": "GeostoreAnchoredGeometryProto"
          },
          "type": "array"
        },
        "syntheticGeometry": {
          "description": "We prefer features that have geometry over those that do not. In some cases we synthesize geometry (e.g., polygons for postal codes). This flag is set to indicate features that have such synthetic geometry.",
          "type": "boolean"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a feature. Never set in MapFacts."
        },
        "threeDimModel": {
          "$ref": "GeostoreThreeDimensionalModelProto",
          "description": "Captures full model representing the feature's 3D geometry. Should only be found on TYPE_COMPOUND_BUILDING features for now, but not part of the BuildingProto extension for possible future extensions."
        },
        "tollCluster": {
          "$ref": "GeostoreTollClusterProto",
          "description": "Represents information about TYPE_TOLL_CLUSTER features."
        },
        "track": {
          "description": "Defines the geometry of a feature as a sequence of 6D poses, including lat, lng, altitude, roll, pitch, and yaw. Only lat and lng are typically required. Each track has an index so that they can be viewed in a stable order.",
          "items": {
            "$ref": "GeostoreTrackProto"
          },
          "type": "array"
        },
        "transitLine": {
          "$ref": "GeostoreTransitLineProto"
        },
        "transitLineVariant": {
          "$ref": "GeostoreTransitLineVariantProto",
          "description": "RESERVED"
        },
        "transitStation": {
          "$ref": "GeostoreTransitStationProto",
          "description": "RESERVED"
        },
        "type": {
          "description": "The type of this feature -- see comments above.",
          "enum": [
            "TYPE_ANY",
            "TYPE_TRANSPORTATION",
            "TYPE_ROUTE",
            "TYPE_DEPRECATED_HIGHWAY_DO_NOT_USE",
            "TYPE_HIGHWAY",
            "TYPE_HIGHWAY_1",
            "TYPE_HIGHWAY_2",
            "TYPE_HIGHWAY_3",
            "TYPE_HIGHWAY_4",
            "TYPE_HIGHWAY_5",
            "TYPE_HIGHWAY_6",
            "TYPE_HIGHWAY_7",
            "TYPE_HIGHWAY_8",
            "TYPE_HIGHWAY_9",
            "TYPE_BICYCLE_ROUTE",
            "TYPE_TRAIL",
            "TYPE_SEGMENT",
            "TYPE_ROAD",
            "TYPE_RAILWAY",
            "TYPE_STANDARD_TRACK",
            "TYPE_JR_TRACK",
            "TYPE_NARROW_TRACK",
            "TYPE_MONORAIL_TRACK",
            "TYPE_SUBWAY_TRACK",
            "TYPE_LIGHT_RAIL_TRACK",
            "TYPE_BROAD_TRACK",
            "TYPE_HIGH_SPEED_RAIL",
            "TYPE_TROLLEY_TRACK",
            "TYPE_FERRY",
            "TYPE_FERRY_BOAT",
            "TYPE_FERRY_TRAIN",
            "TYPE_VIRTUAL_SEGMENT",
            "TYPE_INTERSECTION",
            "TYPE_TRANSIT",
            "TYPE_TRANSIT_STATION",
            "TYPE_BUS_STATION",
            "TYPE_TRAMWAY_STATION",
            "TYPE_TRAIN_STATION",
            "TYPE_SUBWAY_STATION",
            "TYPE_FERRY_TERMINAL",
            "TYPE_AIRPORT",
            "TYPE_AIRPORT_CIVIL",
            "TYPE_AIRPORT_MILITARY",
            "TYPE_AIRPORT_MIXED",
            "TYPE_HELIPORT",
            "TYPE_SEAPLANE_BASE",
            "TYPE_AIRSTRIP",
            "TYPE_CABLE_CAR_STATION",
            "TYPE_GONDOLA_LIFT_STATION",
            "TYPE_FUNICULAR_STATION",
            "TYPE_SPECIAL_STATION",
            "TYPE_HORSE_CARRIAGE_STATION",
            "TYPE_MONORAIL_STATION",
            "TYPE_SEAPORT",
            "TYPE_TRANSIT_STOP",
            "TYPE_TRANSIT_TRIP",
            "TYPE_TRANSIT_DEPARTURE",
            "TYPE_TRANSIT_LEG",
            "TYPE_TRANSIT_LINE",
            "TYPE_TRANSIT_AGENCY_DEPRECATED_VALUE",
            "TYPE_TRANSIT_TRANSFER",
            "TYPE_SEGMENT_PATH",
            "TYPE_ROAD_SIGN",
            "TYPE_INTERSECTION_GROUP",
            "TYPE_PATHWAY",
            "TYPE_RESTRICTION_GROUP",
            "TYPE_TOLL_CLUSTER",
            "TYPE_POLITICAL",
            "TYPE_COUNTRY",
            "TYPE_ADMINISTRATIVE_AREA",
            "TYPE_ADMINISTRATIVE_AREA1",
            "TYPE_US_STATE",
            "TYPE_GB_COUNTRY",
            "TYPE_JP_TODOUFUKEN",
            "TYPE_ADMINISTRATIVE_AREA2",
            "TYPE_GB_FORMER_POSTAL_COUNTY",
            "TYPE_GB_TRADITIONAL_COUNTY",
            "TYPE_ADMINISTRATIVE_AREA3",
            "TYPE_ADMINISTRATIVE_AREA4",
            "TYPE_ADMINISTRATIVE_AREA5",
            "TYPE_ADMINISTRATIVE_AREA6",
            "TYPE_ADMINISTRATIVE_AREA7",
            "TYPE_ADMINISTRATIVE_AREA8",
            "TYPE_ADMINISTRATIVE_AREA9",
            "TYPE_COLLOQUIAL_AREA",
            "TYPE_RESERVATION",
            "TYPE_LOCALITY",
            "TYPE_GB_POST_TOWN",
            "TYPE_JP_GUN",
            "TYPE_JP_SHIKUCHOUSON",
            "TYPE_JP_SUB_SHIKUCHOUSON",
            "TYPE_COLLOQUIAL_CITY",
            "TYPE_SUBLOCALITY",
            "TYPE_US_BOROUGH",
            "TYPE_GB_DEPENDENT_LOCALITY",
            "TYPE_JP_OOAZA",
            "TYPE_JP_KOAZA",
            "TYPE_JP_GAIKU",
            "TYPE_GB_DOUBLE_DEPENDENT_LOCALITY",
            "TYPE_JP_CHIBAN",
            "TYPE_JP_EDABAN",
            "TYPE_SUBLOCALITY1",
            "TYPE_SUBLOCALITY2",
            "TYPE_SUBLOCALITY3",
            "TYPE_SUBLOCALITY4",
            "TYPE_SUBLOCALITY5",
            "TYPE_NEIGHBORHOOD",
            "TYPE_CONSTITUENCY",
            "TYPE_DESIGNATED_MARKET_AREA",
            "TYPE_SCHOOL_DISTRICT",
            "TYPE_LAND_PARCEL",
            "TYPE_DISPUTED_AREA",
            "TYPE_POLICE_JURISDICTION",
            "TYPE_STATISTICAL_AREA",
            "TYPE_CONSTITUENCY_FUTURE",
            "TYPE_PARK",
            "TYPE_GOLF_COURSE",
            "TYPE_LOCAL_PARK",
            "TYPE_NATIONAL_PARK",
            "TYPE_US_NATIONAL_PARK",
            "TYPE_US_NATIONAL_MONUMENT",
            "TYPE_NATIONAL_FOREST",
            "TYPE_PROVINCIAL_PARK",
            "TYPE_PROVINCIAL_FOREST",
            "TYPE_CAMPGROUNDS",
            "TYPE_HIKING_AREA",
            "TYPE_BUSINESS",
            "TYPE_GOVERNMENT",
            "TYPE_BORDER_CROSSING",
            "TYPE_CITY_HALL",
            "TYPE_COURTHOUSE",
            "TYPE_EMBASSY",
            "TYPE_LIBRARY",
            "TYPE_SCHOOL",
            "TYPE_UNIVERSITY",
            "TYPE_EMERGENCY",
            "TYPE_HOSPITAL",
            "TYPE_PHARMACY",
            "TYPE_POLICE",
            "TYPE_FIRE",
            "TYPE_DOCTOR",
            "TYPE_DENTIST",
            "TYPE_VETERINARIAN",
            "TYPE_TRAVEL_SERVICE",
            "TYPE_LODGING",
            "TYPE_RESTAURANT",
            "TYPE_GAS_STATION",
            "TYPE_PARKING",
            "TYPE_POST_OFFICE",
            "TYPE_REST_AREA",
            "TYPE_CASH_MACHINE",
            "TYPE_CAR_RENTAL",
            "TYPE_CAR_REPAIR",
            "TYPE_SHOPPING",
            "TYPE_GROCERY",
            "TYPE_TOURIST_DESTINATION",
            "TYPE_ECO_TOURIST_DESTINATION",
            "TYPE_BIRD_WATCHING",
            "TYPE_FISHING",
            "TYPE_HUNTING",
            "TYPE_NATURE_RESERVE",
            "TYPE_TEMPLE",
            "TYPE_CHURCH",
            "TYPE_GURUDWARA",
            "TYPE_HINDU_TEMPLE",
            "TYPE_MOSQUE",
            "TYPE_SYNAGOGUE",
            "TYPE_STADIUM",
            "TYPE_BAR",
            "TYPE_MOVIE_RENTAL",
            "TYPE_COFFEE",
            "TYPE_GOLF",
            "TYPE_BANK",
            "TYPE_DOODLE",
            "TYPE_GROUNDS",
            "TYPE_AIRPORT_GROUNDS",
            "TYPE_BUILDING_GROUNDS",
            "TYPE_CEMETERY",
            "TYPE_HOSPITAL_GROUNDS",
            "TYPE_INDUSTRIAL",
            "TYPE_MILITARY",
            "TYPE_SHOPPING_CENTER",
            "TYPE_SPORTS_COMPLEX",
            "TYPE_UNIVERSITY_GROUNDS",
            "TYPE_DEPRECATED_TARMAC",
            "TYPE_ENCLOSED_TRAFFIC_AREA",
            "TYPE_PARKING_LOT",
            "TYPE_PARKING_GARAGE",
            "TYPE_OFF_ROAD_AREA",
            "TYPE_BORDER",
            "TYPE_BUILDING",
            "TYPE_GEOCODED_ADDRESS",
            "TYPE_NATURAL_FEATURE",
            "TYPE_TERRAIN",
            "TYPE_SAND",
            "TYPE_BEACH",
            "TYPE_DUNE",
            "TYPE_ROCKY",
            "TYPE_ICE",
            "TYPE_GLACIER",
            "TYPE_BUILT_UP_AREA",
            "TYPE_VEGETATION",
            "TYPE_SHRUBBERY",
            "TYPE_WOODS",
            "TYPE_AGRICULTURAL",
            "TYPE_GRASSLAND",
            "TYPE_TUNDRA",
            "TYPE_DESERT",
            "TYPE_SALT_FLAT",
            "TYPE_WATER",
            "TYPE_OCEAN",
            "TYPE_BAY",
            "TYPE_BIGHT",
            "TYPE_LAGOON",
            "TYPE_SEA",
            "TYPE_STRAIT",
            "TYPE_INLET",
            "TYPE_FJORD",
            "TYPE_LAKE",
            "TYPE_SEASONAL_LAKE",
            "TYPE_RESERVOIR",
            "TYPE_POND",
            "TYPE_RIVER",
            "TYPE_RAPIDS",
            "TYPE_DISTRIBUTARY",
            "TYPE_CONFLUENCE",
            "TYPE_WATERFALL",
            "TYPE_SPRING",
            "TYPE_GEYSER",
            "TYPE_HOT_SPRING",
            "TYPE_SEASONAL_RIVER",
            "TYPE_WADI",
            "TYPE_ESTUARY",
            "TYPE_WETLAND",
            "TYPE_WATER_NAVIGATION",
            "TYPE_FORD",
            "TYPE_CANAL",
            "TYPE_HARBOR",
            "TYPE_CHANNEL",
            "TYPE_REEF",
            "TYPE_REEF_FLAT",
            "TYPE_REEF_GROWTH",
            "TYPE_REEF_EXTENT",
            "TYPE_REEF_ROCK_SUBMERGED",
            "TYPE_IRRIGATION",
            "TYPE_DAM",
            "TYPE_DRINKING_WATER",
            "TYPE_CURRENT",
            "TYPE_WATERING_HOLE",
            "TYPE_TECTONIC",
            "TYPE_WATERING_HOLE_DEPRECATED",
            "TYPE_VOLCANO",
            "TYPE_LAVA_FIELD",
            "TYPE_FISSURE",
            "TYPE_FAULT",
            "TYPE_LAND_MASS",
            "TYPE_CONTINENT",
            "TYPE_ISLAND",
            "TYPE_ATOLL",
            "TYPE_OCEAN_ROCK_EXPOSED",
            "TYPE_CAY",
            "TYPE_PENINSULA",
            "TYPE_ISTHMUS",
            "TYPE_ELEVATED",
            "TYPE_PEAK",
            "TYPE_NUNATAK",
            "TYPE_SPUR",
            "TYPE_PASS",
            "TYPE_PLATEAU",
            "TYPE_RIDGE",
            "TYPE_RAVINE",
            "TYPE_CRATER",
            "TYPE_KARST",
            "TYPE_CLIFF",
            "TYPE_VISTA",
            "TYPE_DIGITAL_ELEVATION_MODEL",
            "TYPE_UPLAND",
            "TYPE_TERRACE",
            "TYPE_SLOPE",
            "TYPE_CONTOUR_LINE",
            "TYPE_PAN",
            "TYPE_UNSTABLE_HILLSIDE",
            "TYPE_MOUNTAIN_RANGE",
            "TYPE_UNDERSEA",
            "TYPE_SUBMARINE_SEAMOUNT",
            "TYPE_SUBMARINE_RIDGE",
            "TYPE_SUBMARINE_GAP",
            "TYPE_SUBMARINE_PLATEAU",
            "TYPE_SUBMARINE_DEEP",
            "TYPE_SUBMARINE_VALLEY",
            "TYPE_SUBMARINE_BASIN",
            "TYPE_SUBMARINE_SLOPE",
            "TYPE_SUBMARINE_CLIFF",
            "TYPE_SUBMARINE_PLAIN",
            "TYPE_SUBMARINE_FRACTURE_ZONE",
            "TYPE_CAVE",
            "TYPE_ROCK",
            "TYPE_ARCHIPELAGO",
            "TYPE_POSTAL",
            "TYPE_POSTAL_CODE",
            "TYPE_POSTAL_CODE_PREFIX",
            "TYPE_PREMISE",
            "TYPE_SUB_PREMISE",
            "TYPE_SUITE",
            "TYPE_POST_TOWN",
            "TYPE_POSTAL_ROUND",
            "TYPE_META_FEATURE",
            "TYPE_DATA_SOURCE",
            "TYPE_LOCALE",
            "TYPE_TIMEZONE",
            "TYPE_BUSINESS_CHAIN",
            "TYPE_PHONE_NUMBER_PREFIX",
            "TYPE_PHONE_NUMBER_AREA_CODE",
            "TYPE_BUSINESS_CORRIDOR",
            "TYPE_ADDRESS_TEMPLATE",
            "TYPE_TRANSIT_AGENCY",
            "TYPE_FUTURE_GEOMETRY",
            "TYPE_EVENT",
            "TYPE_EARTHQUAKE",
            "TYPE_HURRICANE",
            "TYPE_WEATHER_CONDITION",
            "TYPE_TRANSIENT",
            "TYPE_ENTRANCE",
            "TYPE_CARTOGRAPHIC",
            "TYPE_HIGH_TENSION",
            "TYPE_SKI_TRAIL",
            "TYPE_SKI_LIFT",
            "TYPE_SKI_BOUNDARY",
            "TYPE_WATERSHED_BOUNDARY",
            "TYPE_TARMAC",
            "TYPE_WALL",
            "TYPE_PICNIC_AREA",
            "TYPE_PLAY_GROUND",
            "TYPE_TRAIL_HEAD",
            "TYPE_GOLF_TEEING_GROUND",
            "TYPE_GOLF_PUTTING_GREEN",
            "TYPE_GOLF_ROUGH",
            "TYPE_GOLF_SAND_BUNKER",
            "TYPE_GOLF_FAIRWAY",
            "TYPE_GOLF_HOLE",
            "TYPE_DEPRECATED_GOLF_SHOP",
            "TYPE_CAMPING_SITE",
            "TYPE_DESIGNATED_BARBECUE_PIT",
            "TYPE_DESIGNATED_COOKING_AREA",
            "TYPE_CAMPFIRE_PIT",
            "TYPE_WATER_FOUNTAIN",
            "TYPE_LITTER_RECEPTACLE",
            "TYPE_LOCKER_AREA",
            "TYPE_ANIMAL_ENCLOSURE",
            "TYPE_CARTOGRAPHIC_LINE",
            "TYPE_ESTABLISHMENT",
            "TYPE_ESTABLISHMENT_GROUNDS",
            "TYPE_ESTABLISHMENT_BUILDING",
            "TYPE_ESTABLISHMENT_POI",
            "TYPE_ESTABLISHMENT_SERVICE",
            "TYPE_CELESTIAL",
            "TYPE_ROAD_MONITOR",
            "TYPE_PUBLIC_SPACES_AND_MONUMENTS",
            "TYPE_STATUE",
            "TYPE_TOWN_SQUARE",
            "TYPE_LEVEL",
            "TYPE_COMPOUND",
            "TYPE_COMPOUND_GROUNDS",
            "TYPE_COMPOUND_BUILDING",
            "TYPE_COMPOUND_SECTION",
            "TYPE_TERMINAL_POINT",
            "TYPE_REGULATED_AREA",
            "TYPE_LOGICAL_BORDER",
            "TYPE_DO_NOT_USE_RESERVED_TO_CATCH_GENERATED_FILES",
            "TYPE_UNKNOWN"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "ABSTRACT",
            "A route is any section of road (or rails, etc.) that has a name. This includes city streets as well as highways. Road segments can belong to multiple routes (e.g. El Camino, CA-82).",
            "DEPRECATED",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "A designated bicycle route, whose segments may consist of any combination of bicycle paths, bicycle lanes, or city streets.",
            "A designated trail, which may consist of paved walkways, dirt paths, fire road, streets or highways, etc.",
            "ABSTRACT",
            "",
            "Railroads use several different incompatible track types.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Tracks for streetcars, cable-cars, etc. Ferries are services that are part of the road network but are not roads. They typically involve fares and scheduled departure times.",
            "ABSTRACT",
            "The vast majority of ferries are ferry boats.",
            "Also called a \"car transport\", a ferry train is a rail service that carries passengers and their vehicles across undrivable terrain. The Channel Tunnel (\"Chunnel\") is the most famous example, but they are also common in the Alps where they connect neighboring valleys otherwise separated by impassable mountains.",
            "Any plausible 1-dimensional path through a 2+ dimensional space, for the purposes of making graph-search-based routing possible. Such segments can be used to model paths through parking lots, squares, floors of buildings and other areas.",
            "An intersection consists of a collection of segments that terminate at the same location. This is topological definition: it may not match what a typical user would think of as an \"intersection\". See TYPE_INTERSECTION_GROUP, below, for more information. Each segment terminating at an intersection has an \"endpoint type\" that specifies how that segment is terminated: stop sign, yield sign, three-way light, etc.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A transit line is a collection of transit legs, associated with some invariant properties of the trips that run over the legs. See also transitline.proto",
            "TYPE_TRANSIT_AGENCY was moved to 0xC91. This deprecated enum value still exists for debugging purposes only.",
            "DEPRECATED",
            "ABSTRACT",
            "Road sign features have names, point geometry, etc. They also have segment_path data (see below) which lists the segments that refer to the sign. See segment.proto for the reference from the segment to the road sign.",
            "Our TYPE_INTERSECTION feature, above, models the point where one or more segments terminate. This is topological definition: it may not match what a typical user would think of as an \"intersection\". Consider the intersections where Hayes, Market, Larkin, and 9th Street meet near (37.77765, -122.41638) in San Francisco. Most people would probably consider this a single feature, even though we model it as four separate TYPE_INTERSECTION features. This TYPE_INTERSECTION_GROUP is used to model the user's concept of a complex intersection.",
            "RESERVED",
            "A restriction group describes a set of segment restrictions that belong together and have a name or an associated event. See also restriction_group.proto",
            "A toll cluster is either a single point on a segment (represented as a point at the end of the segment that has ENDPOINT_TOLL_BOOTH set) or a group of points on various road segments in MapFacts that represents one or more lanes passing through a toll fixture that all go to the same routing destination. Each toll cluster should have at most a single price per payment method. E.g. {CASH = $5, PASS = $1}. Note: If a toll fixture has different prices for multiple routing destinations, drivers need to be in the correct lane before passing through the toll fixture and hence such a fixture is represented by multiple toll clusters. A toll cluster does not necessarily represent a real-world entity, e.g. a particular plaza/structure as perceived by humans. This is because a plaza can be represented by more than one toll cluster. We require toll clusters to have names, but they might be non-unique. For example, a plaza might be represented by multiple toll clusters that may have the same plaza name. For further details, please see go/toll-cluster-schema.",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "e.g. Silicon Valley",
            "A reservation is a region collectively held or governed by indigenous people and officially recognized by the country\u2019s government at the federal or state level. A reservation may be fully contained within an administrative feature or partially contained within two or more. These regions are referred to by different categorical names depending on country and even by state, including but not limited to: \u201cIndian Reservations\u201d, \u201cIndian Reserves\u201d, \u201cLand Claim Settlement Lands\u201d, \u201cIndian Lands\u201d, \u201cTreaty Lands\u201d, \u201cIndigenous Territories\u201d, etc. A reservation is not a historic indigenous territory boundary or a region which has applied for land rights but has not yet received official recognition.",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "An entity widely considered to be a city, that may itself be made up of smaller political entities, some of which are cities/towns/villages themselves. For example, the colloquial view of Sydney, Australia actually comprises many smaller cities, but is regarded as a city itself. This type is not suitable for modeling official metro-/micropolitan or other statistical areas.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Designated Market Areas (or DMAs) are used by marketing and ratings companies (such as the Nielsen Media Research company) to describe geographical regions (such as the greater New York metropolitan area) that are covered by a set of television stations. (See http://www.schooldata.com/pdfs/DMA.pdf) In the United States, DMAs should have a DMA numeric ID name, tagged with the FLAG_DESIGNATED_MARKET_AREA_ID flag.",
            "",
            "",
            "Eventually we'll have more data for disputed areas (e.g., who makes claims on the area, who has de facto control, etc.). For the moment, we just define a type so we can simply mark areas as disputed.",
            "Boundaries representing the jurisdiction of a particular police station.",
            "An area used for aggregating statistical data, eg, a census region. Note that TYPE_STATISTICAL_AREA has a third nibble so we can add an abstract parent above it later if need be at 0x2E1 (and rename TYPE_STATISTICAL_AREA as TYPE_STATISTICAL_AREA1).",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A line representing the boundary between two features. See border.proto for details.",
            "DEPRECATED",
            "An association of a point with an address, with no other information.",
            "ABSTRACT",
            "Expanses of land that share common surface attributes. These areas would look more or less uniform from a high altitude.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Terrain that looks populated.",
            "Terrain that is covered in vegetation.",
            "",
            "",
            "",
            "",
            "",
            "",
            "A flat expanse of salt left by the evaporation of a body of salt water.",
            "Features can be TYPE_WATER if we don't have enough information to properly type the body of water. TYPE_WATER is also used as the type for child features that compose a TYPE_RIVER feature.",
            "One of the large salt-water bodies that covers most of the globe.",
            "An ocean subdivision formed by a coastal indentation. Includes coves and gulfs.",
            "An open body of water formed by a slight coastal indentation.",
            "",
            "An ocean subdivision more or less confined by land and islands.",
            "A long narrow ocean subdivision. Includes sounds.",
            "",
            "",
            "An inland body of standing water.",
            "A lake that dries up part of the year.",
            "An artificial body of water, possibly created by a dam, often used for irrigation or house use.",
            "",
            "An inland body of moving water, or parts associated with it in which there is little or no current (backwater).",
            "",
            "A branch which flows away from the main river. Includes deltas.",
            "A place where two or more rivers join.",
            "",
            "A place where ground water flows naturally out of the ground.",
            "",
            "",
            "A river that dries up part of the year.",
            "A dry riverbed that occasionally receives flashfloods.",
            "A place at the end of a river where fresh and salt water mix. Includes tidal creeks and limans.",
            "Land that is usually flooded. Includes bogs, marshes, flats, moors, and swamps.",
            "",
            "A shallow place where water may be waded through.",
            "A narrow passage used by boats. Normally artificial.",
            "A deep place near a shore where ships commonly drop anchor.",
            "A deep part in a body of water that is suitable for navigation. Includes narrows.",
            "Rocks, coral, sandbars, or other features beneath the surface of the water that pose a hazard to passing ships. Includes shoals.",
            "A relatively shallow zone of the back reef located closest to the shore, that may be exposed at low tide.",
            "A small section of rocks, coral, sandbars, or other features beneath the surface of the water that forms part of a reef.",
            "The full extent of the reef complex.",
            "A submerged rock in the water.",
            "Man-made (and sometimes natural) channels used to move water. This type was used for both dam structures and water that is hold back by dams. We should use TYPE_COMPOUND_BUILDING for dam structures and TYPE_RESERVOIR for water.",
            "DEPRECATED",
            "",
            "Includes overfalls.",
            "A natural depression filled with water where animals come to drink.",
            "ABSTRACT This type is incorrectly under TYPE_TECTONIC instead of TYPE_WATER. This was a mistake and is now fixed. See TYPE_WATERING_HOLE for the replacement.",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "An exposed rock in the water.",
            "A small, low-elevation, sandy island formed on the surface of coral reefs",
            "A stretch of land projecting into water. Includes capes and spits.",
            "A strip of land connecting two larger land masses, such as continents.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "Elevations that have a distinctive peak.",
            "A peak or ridge of a mountain that extends through a glacier.",
            "A subsidiary peak of a mountain.",
            "A route over an otherwise difficult to traverse feature. Includes saddle.",
            "Elevations that are flat on top. Includes mesas and buttes.",
            "A ridge is a geographical feature consisting of a chain of mountains or hills that form a continuous elevated crest with a single ridgeline for some distance.",
            "Steep declines usually carved by erosion. Includes valleys, canyons, ditches, and gorges.",
            "Depressions causes by impact, explosion, and sometimes sink-holes.",
            "Topography formed on limestone and gypsum by dissolution with sinkholes, caves, etc.",
            "A vertical or nearly vertical slope. Includes escarpments.",
            "An elevated place that is notable for having a good view. Raster digital elevation data. This is not a type to be used by providers or consumed by clients.",
            "RESERVED",
            "Land along streams higher than the alluvial plain or stream terrace.",
            "",
            "Land not so steep as a cliff, but changing elevation. Includes slides.",
            "All the points on the polygon are at the same elevation.",
            "A near-level shallow, natural depression or basin, usually containing an intermittent lake, pond, or pool.",
            "",
            "A series of mountains or hills ranged in a line and connected by high ground. Mountain ranges usually consist of many smaller ridges. For example, the Himalayas, the Andes. the Alps, etc.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "includes peaks, ranges, and spurs",
            "",
            "includes saddles",
            "",
            "",
            "includes trenches and troughs",
            "",
            "",
            "",
            "",
            "",
            "Don't use 0xA7. Use 8 bits for additional types under TYPE_NATURAL_FEATURE, so we don't run out of space. The following are miscellaneous natural features that don't fit any of the categories above.",
            "",
            "A feature representing a group or chain of islands. ",
            "ABSTRACT",
            "This is the type for postal codes which are complete and independent enough that there should be a feature for them (e.g. US 5-digit ZIP codes). For even more detailed suffixes that further subdivide a postal code (such as the +4 component in US ZIP codes), store the information in a TYPE_POSTAL_CODE_SUFFIX address component. When a range or set of postal codes share the same geographical area, e.g. because a precise subdivision does not exist or this subdivision is unknown, this type is used for each individual postal code.",
            "A prefix portion of a postal code which does not meet the requirements for TYPE_POSTAL_CODE, but which is useful to search for, for example UK outcodes.",
            "DEPRECATED",
            "DEPRECATED This is deprecated and we want to use TYPE_COMPOUND_SECTION instead.",
            "DEPRECATED",
            "The term \"post town\" is used for a locality-like-entity that is only used for postal addresses.",
            "DEPRECATED",
            "ABSTRACT",
            "Every data source used in constructing a data repository has a corresponding feature that provides more information about that data source. The extra information is stored in the optional data_source field below.",
            "A locale feature provides region specific conventions such as preferred language and formatting details for time, date, and currency values. Locales aren't necessary defined by physical geographic features, so they are classified as meta-features.",
            "A timezone feature is used to specify the region covering an international timezone. When a point is covered by multiple timezone features, the most specific one can be used to compute the local time at this point. Most specific implies a much smaller region or the one that is closer to the center. A feature's timezone can be specified in the repeated related_timezone field.",
            "A business chain feature is used to represent a chain, e.g. Starbucks, McDonald's, etc. Other features representing specific stores/franchises of this chain may refer to one such feature via RELATION_MEMBER_OF_CHAIN. This is not strictly reserved to commercial chains but can also be used to model organizations such as the Red Cross or the United Nations.",
            "A phone number prefix feature is used to specify the region where phone numbers (typically fixed-line numbers) must begin with a certain prefix. Any phone number prefix down to any level of granularity could be represented by this type.",
            "A phone number area code is a prefix which also coincides with the area code, or national destination code, of a particular region.",
            "A Business Corridor is a dense cluster of semantically similar establishments. TYPE_BUSINESS_CORRIDOR features are distinguished from TYPE_COLLOQUIAL_AREA features because the corridors are not under the political hierarchy, are allowed to be nameless, and may not correspond to well-known real world locations. For more details, see go/geo-corridors-schema.",
            "An address template feature provides region-specific conventions for structuring addresses. These features aren't necessarily defined by physical geographic features, so they are classified as meta-features.",
            "A transit agency operates a number of lines, typically all in the same city, region or country. See also transitagency.proto",
            "A feature whose geometry is planned to replace the geometry on another feature.",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "RESERVED",
            "A portal of entry or exit to another feature. Examples: - Subway station entrance. - Parking lot entrance.",
            "Cartographic features are used to capture real-world objects for which there is no current desire to model any specific attributes. These are only useful to make the map tiles look pretty.",
            "DEPRECATED",
            "Also see skitrail.proto",
            "Also see skilift.proto",
            "Also see skiboundary.proto",
            "",
            "Starting with TYPE_TARMAC, we use longer IDs, so that we can expand the number of feature types under TYPE_CARTOGRAPHIC.",
            "Use TYPE_COMPOUND_GROUND and appropriate gcids for the next two.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "Sub-types within a golf course.",
            "",
            "",
            "",
            "",
            "Use TYPE_ESTABLISHMENT_POI and gcid:golf_shop for golf shops instead.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "Subtype within a zoo - a cage or fenced-off or otherwise delineated area containing animals.",
            "A line for a cartographic detail. For example the international date line. Such features should have polyline geometry.",
            "ABSTRACT This type is being replaced by TYPE_COMPOUND_GROUNDS. For further details, see go/compounds-v2",
            "DEPRECATED This type has been replaced by TYPE_COMPOUND_BUILDING. For further details, see go/oyster-compounds",
            "DEPRECATED",
            "An establishment which has a address (a.k.a. location or storefront). Note that it *may* also have a service area (e.g. a restaurant that offers both dine-in and delivery). This type of business is also known as a \"hybrid\" Service Area Business. Establishment POIs can be referenced by TYPE_COMPOUND features using the RELATION_PRIMARILY_OCCUPIED_BY. This is the reciprocal relation of the RELATION_OCCUPIES.",
            "A business without a storefront, e.g. a plumber. It would normally not have a place that a customer could visit to receive service, but it would have an area served by the business. Also known as a \"pure\" Service Area Business. NOTE(tcain): Using value 0xD441, since we could find ourselves with a need to differentiate service areas from online-only at this level in the future, but still benefit from being able to group those under a common parent, disjoint from TYPE_ESTABLISHMENT_POI.",
            "The root of types of features that are in the sky, rather than on the earth. There will eventually be a hierarchy of types here.",
            "Features responsible for monitoring traffic on roads (usually for speed). Includes cameras at particular points as well as monitors that cover larger spans. Features of this type should have a corresponding gcid that specifies the correct subtype (e.g. gcid:road_camera or gcid:speed_camera_zone). This type was originally named as TYPE_ROAD_CAMERA.",
            "ABSTRACT",
            "Note that this type does not distinguish the nature of the statue (religious, historical, memorial, tourist, ...).",
            "Open space used for events, gathering, or as market-place.",
            "A feature used to represent a logical level, e.g. floor.",
            "ABSTRACT",
            "e.g. campus, compound, parcel.",
            "e.g. single family dwelling, office building.",
            "e.g. suite, room, hallway, cubicle.",
            "A terminal point represents a good location for a user to meet a taxi, ridesharing vehicle, or general driver.",
            "An area controlled in some way by an authoritative source, such as a government-designated COVID containment zone or an area under government sanctions. Features of this type should have one or more gcids corresponding to their specific regulation, and client handling of these features may vary based on the type of regulation.",
            "A grouping of TYPE_BORDER features (\"border segments\"), which together represent a border between two features of the same type.",
            "DEPRECATED",
            "A feature of completely unknown type. This should only be used when absolutely necessary. One example in which this type is useful is in the Chinese importer, which must heuristically segment addresses into components - it often does not know what types to make those components. Please note that the Oyster address formatter does not currently support address components of TYPE_UNKNOWN well."
          ],
          "type": "string"
        },
        "verticalOrdering": {
          "$ref": "GeostoreVerticalOrderingProto",
          "description": "Represents vertical ordering for this feature relative to other geometrically-overlaping features. See go/aboutgrades for more information about distinction among different levels."
        },
        "waterRemovedPolygon": {
          "$ref": "GeostorePolygonProto",
          "description": "A version of the geometry which has water removed but is not simplified (thus having equal or more vertices than polygon_for_display)."
        },
        "website": {
          "description": "The official website of this feature. Stored as a repeated field to allow for multilingual official websites (see comments in url.proto).",
          "items": {
            "$ref": "GeostoreUrlProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreFeatureReplacementInfoProto": {
      "description": "Metadata to track feature derivations and replacements. This is used to track feature provenance (particularly for road segments).",
      "id": "GeostoreFeatureReplacementInfoProto",
      "properties": {
        "derivedFrom": {
          "description": "This feature was created to replace other features that are referenced by this field.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "replacedBy": {
          "description": "This feature was replaced by other features that are referenced by this this field.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreFieldMetadataProto": {
      "description": "Internal field metadata. This part is not exposed to downstream consumers of the repository (read-only clients) but is available to upstream providers to the repository (read-write clients).",
      "id": "GeostoreFieldMetadataProto",
      "properties": {
        "internal": {
          "$ref": "GeostoreInternalFieldMetadataProto"
        }
      },
      "type": "object"
    },
    "GeostoreFieldWithRightsProto": {
      "description": "Proto used to represent rights for a field type. See go/geo-rights for more details. NOTE: Use google3/geostore/provenance/public/rights.h or google3/java/com/google/geostore/provenance/rights/Rights.java instead of accessing this proto directly.",
      "id": "GeostoreFieldWithRightsProto",
      "properties": {
        "attributeId": {
          "description": "** DEPRECATED ** If field_type is set to FEATURE_ATTRIBUTE or KNOWLEDGE_GRAPH_PROPERTY, the attribute ID / KG property ID that makes this field with rights complete.",
          "type": "string"
        },
        "featurePropertyId": {
          "$ref": "GeostoreFeaturePropertyIdProto"
        },
        "fieldType": {
          "description": "The field type for which the rights level are tracked on. The default value here has to match the value of fieldtype::NONE.",
          "format": "int32",
          "type": "integer"
        },
        "minRightsLevel": {
          "description": "The minimum rights level for all the current values on the field type.",
          "enum": [
            "UNKNOWN_RIGHTS",
            "GT_RIGHTS",
            "FULL_RIGHTS"
          ],
          "enumDescriptions": [
            "Indicates that the rights level is unknown. This should always be the default value of any RightsLevel field in any proto.",
            "GT-rights or GT-level rights is a level of data ownership that Google has retained as defined by the Ground Truth project. GT rights include but may not be limited to: - Data may be used perpetually in any Google product or service - No requirement for any on-screen attribution requirements (although we may have softer attribution requirements, like display on a legal notices page) - No display, distribution, or storage restrictions - other than that the content may not be redistributed on a standalone basis, independent of a Google product or service.",
            "Full rights refers to data for which Google has no usage restrictions. We can do whatever we want with it."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreFlowLineProto": {
      "description": "Wrapper to hold data related to a lane\u2019s track, extendable for future data.",
      "id": "GeostoreFlowLineProto",
      "properties": {
        "track": {
          "$ref": "GeostoreTrackProto"
        }
      },
      "type": "object"
    },
    "GeostoreFoodMenuItemOptionProto": {
      "description": "Example: the choice of chicken, beef, or tofu for the Thai Basil dish. Each option would have its own name, price, allergen info, etc. Note: This proto stores both food and service items despite the name.",
      "id": "GeostoreFoodMenuItemOptionProto",
      "properties": {
        "allergenAbsent": {
          "items": {
            "enum": [
              "ALLERGEN_DAIRY",
              "ALLERGEN_EGG",
              "ALLERGEN_FISH",
              "ALLERGEN_PEANUT",
              "ALLERGEN_SHELLFISH",
              "ALLERGEN_SOY",
              "ALLERGEN_TREE_NUT",
              "ALLERGEN_WHEAT"
            ],
            "enumDescriptions": [
              "A list of types of allergens for food and drinks.",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "allergenPresent": {
          "items": {
            "enum": [
              "ALLERGEN_DAIRY",
              "ALLERGEN_EGG",
              "ALLERGEN_FISH",
              "ALLERGEN_PEANUT",
              "ALLERGEN_SHELLFISH",
              "ALLERGEN_SOY",
              "ALLERGEN_TREE_NUT",
              "ALLERGEN_WHEAT"
            ],
            "enumDescriptions": [
              "A list of types of allergens for food and drinks.",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "calories": {
          "format": "int32",
          "type": "integer"
        },
        "ingredients": {
          "description": "Ingredients of the food dish option.",
          "items": {
            "$ref": "GeostoreFoodMenuItemOptionProtoIngredient"
          },
          "type": "array"
        },
        "media": {
          "description": "Photos of the food dish option.",
          "items": {
            "$ref": "GeostoreMediaItemProto"
          },
          "type": "array"
        },
        "nameInfo": {
          "description": "The repeated name_info field here is for item options with names or descriptions listed in multiple languages. When an item option has no names or descriptions, the size of the repeated field name_info may be 0. For example, when a food menu item does not have multiple options, the item option proto is used only to specify price and nutritional information, so it will not have a name_info field. There should be at most one name_info for any given language.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        },
        "nutritionFacts": {
          "$ref": "GeostorePriceInfoFoodNutritionFacts",
          "description": "Nutrition facts of the food dish option. Note that it also includes calories information with a finer defined unit information."
        },
        "portionSize": {
          "$ref": "GeostoreFoodMenuItemOptionProtoPortionSize",
          "description": "Size of the order, represented in units of items. (e.g. 4 \"skewers\u201d, 6 \"pieces\u201d)"
        },
        "preparationMethods": {
          "description": "Methods on how the food dish option is prepared.",
          "items": {
            "enum": [
              "METHOD_UNDEFINED",
              "BAKED",
              "BOILED",
              "BLANCHED",
              "BRAISED",
              "CODDLED",
              "PRESSURE_COOKED",
              "SIMMERED",
              "STEAMED",
              "STEEPED",
              "GRILLED",
              "FRIED",
              "PAN_FRIED",
              "STIR_FRIED",
              "SAUTEED",
              "ROASTED",
              "BARBECUED",
              "SEARED",
              "SMOKED",
              "FERMENTED",
              "MARINATED",
              "PICKLED",
              "BASTED",
              "KNEADED",
              "OTHER_METHOD"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "price": {
          "$ref": "GeostorePriceRangeProto",
          "description": "We use PriceRangeProto here but we expect the lower_price and upper_price to be both set to equal numbers because an option should have a single price. This field is not required because food item prices may be variable depending on season."
        },
        "restriction": {
          "items": {
            "enum": [
              "DIET_HALAL",
              "DIET_KOSHER",
              "DIET_ORGANIC",
              "DIET_VEGAN",
              "DIET_VEGETARIAN"
            ],
            "enumDescriptions": [
              "A list of types of restrictions adhered to during food preparation.",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "servesNumPeople": {
          "description": "Number of people can be served by this food dish option.",
          "format": "int32",
          "type": "integer"
        },
        "spiciness": {
          "enum": [
            "SPICINESS_NONE",
            "SPICINESS_MILD",
            "SPICINESS_MEDIUM",
            "SPICINESS_HOT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreFoodMenuItemOptionProtoIngredient": {
      "description": "This message denotes an ingredient information of a food dish.",
      "id": "GeostoreFoodMenuItemOptionProtoIngredient",
      "properties": {
        "nameInfo": {
          "description": "The repeated name_info field is for the ingredient in multiple languages.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreFoodMenuItemOptionProtoPortionSize": {
      "description": "This message denotes the serving portion size of a food dish.",
      "id": "GeostoreFoodMenuItemOptionProtoPortionSize",
      "properties": {
        "quantity": {
          "description": "Required.",
          "format": "int32",
          "type": "integer"
        },
        "unit": {
          "description": "Required. The repeated name_info field is for the unit in multiple languages.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreFoodMenuItemProto": {
      "description": "A food menu item must have a name although it can have multiple names in different languages. Example: Thai Basil. Price for this item is specified in the item_option field. Since the price of an item may be unknown, e.g. seasonal price, there is nothing that requires an item_option to be present in the FoodMenuItemProto.",
      "id": "GeostoreFoodMenuItemProto",
      "properties": {
        "itemOption": {
          "items": {
            "$ref": "GeostoreFoodMenuItemOptionProto"
          },
          "type": "array"
        },
        "nameInfo": {
          "description": "The repeated name_info field is for items listed in multiple languages.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreGConceptInstanceProto": {
      "description": "A GConceptInstanceProto contains a GConceptID (which is the unique identifier of a GConcept, a category in the Geo Ontology).",
      "id": "GeostoreGConceptInstanceProto",
      "properties": {
        "gconceptId": {
          "description": "The unique identifier of a GConcept (e.g. \"gcid:railway\").",
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this GConcept."
        },
        "prominence": {
          "description": "The relative prominence of this category to this feature according to the data provider, as one of the values from the enum above. Prominence is a measure of how well the given GConcept describes the feature. An example is a gas station with convenience store and ATM. All three GConcepts are very relevant, but the gas_station GConcept is the most prominent. If the prominence of this GConcept is unknown, this field should not be set.",
          "enum": [
            "NON_PRIMARY",
            "PRIMARY"
          ],
          "enumDescriptions": [
            "not a prominent GConcept",
            "the most prominent GConcept"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreGeometryComposition": {
      "description": "Encapsulates all the features which, together, define the geometry of a feature. This happens by: 1. taking the union of all polygons of features referenced in includes_geometry_of 2. subtracting the polygons of all the features referenced in excludes_geometry_of",
      "id": "GeostoreGeometryComposition",
      "properties": {
        "excludesGeometryOf": {
          "description": "Features whose geometry to exclude while composing the geometry of this feature.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "includesGeometryOf": {
          "description": "Features whose geometry to include while composing the geometry of this feature.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreGeopoliticalGeometryProto": {
      "description": "Geopolitical (unsimplified) polygons for a feature for different geopolitical use cases. See go/unsimplified-poly.",
      "id": "GeostoreGeopoliticalGeometryProto",
      "properties": {
        "restOfWorldPolygon": {
          "$ref": "GeostorePolygonProto",
          "description": "The unsimplified, water-subtracted polygon representing the feature's geometry as viewed by the rest of the world, which may differ from its default polygon, for example by excluding certain regions."
        },
        "selfPolygon": {
          "$ref": "GeostorePolygonProto",
          "description": "The unsimplified, water-subtracted polygon representing the feature's geometry as viewed by the country that administers it, which may differ from its default polygon, for example by including disputed areas."
        }
      },
      "type": "object"
    },
    "GeostoreGradeLevelProto": {
      "description": "The grade level of a segment represents the relative altitude of the segment at a particular point along the segment. This level is in relation to other segments at the same point. For example, you might have a freeway at level = 0 and an overpass at level = 2. Vertical segments are represented by a polyline containing only 1 vertex and exactly two grade_level in segment.proto whose indices are 0. grade_level(0) represents the relative height at the start point of the segments, and grade_level(1) represents the one at the end point.",
      "id": "GeostoreGradeLevelProto",
      "properties": {
        "index": {
          "description": "The index of the point along the segment, where 0 is the starting point. This means that the index of a point along a segment and its sibling will be different.",
          "format": "int32",
          "type": "integer"
        },
        "level": {
          "description": "The grade level of the indexed point. The grade level can be thought of as a relative vertical ordering with respect to other segments at the same point, where larger/more positive numbers are \"higher\". Negative grade level values are allowed and are typically used for points below grade level (0 is a common choice to represent the level of points at the ground level). For vertical segments, the height, i.e. the vertical length, is represented by difference of levels in millimeters. For example, feature.segment().grade_level(0).level() == 0 and feature.segment().grade_level(1).level() == 5000, then the length of the vertical segment feature is 5000 millimeters (5 meters).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreHtmlTextProto": {
      "description": "Represents HTML text associated with a feature.",
      "id": "GeostoreHtmlTextProto",
      "properties": {
        "text": {
          "description": "Zero or more texts of the specified type, in various languages. If this is a HTML_DESCRIPTION blob then these texts would hold the description in English, German, and so forth. The text is an HTML fragment, not a full page. The fragment should be suitable for including in a DIV. It must have balanced HTML tags. It may use HTML's \"class\" attributes to assign classes to HTML elements. This allows the HTML to be formatted by an (external) style sheet. The HTML should not have embedded style sheet definitions, nor should it have embedded JavaScript.",
          "items": {
            "$ref": "GeostoreLanguageTaggedTextProto"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "HTML_DESCRIPTION"
          ],
          "enumDescriptions": [
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreInferredGeometryProto": {
      "description": "Inferred geometry defines the geometry of a feature through the geometry of other features. For instance, the geometry of a timezone can be specified as the union of all the countries it applies to. See: go/inferred-geometry and go/geo-schema:composite-geometry-editor for more details.",
      "id": "GeostoreInferredGeometryProto",
      "properties": {
        "definesGeometryFor": {
          "description": "Features whose geometry depends on this feature's geometry.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "geometryComposition": {
          "$ref": "GeostoreGeometryComposition",
          "description": "Features whose geometry defines the geometry of this feature."
        }
      },
      "type": "object"
    },
    "GeostoreInternalFeatureProto": {
      "description": "Main proto for all internal fields to be stored at the feature level.",
      "id": "GeostoreInternalFeatureProto",
      "properties": {
        "polygonShapeId": {
          "description": "A unique identifier for this feature's polygon data which is being held externally in Shapestore (see go/shapestore).",
          "type": "string"
        },
        "restOfWorldPolygonShapeId": {
          "description": "A unique identifier for this feature's rest-of-world view polygon data which is being held externally in Shapestore (see go/shapestore). This is part of the feature's geopolitical geometry.",
          "type": "string"
        },
        "rightsStatus": {
          "$ref": "GeostoreRightsStatusProto",
          "description": "Per-field rights for this feature. See http://g3doc/geostore/g3doc/developers-guide/inputs/rights-tracking for more information."
        },
        "selfPolygonShapeId": {
          "description": "A unique identifier for this feature's self view polygon data which is being held externally in Shapestore (see go/shapestore). This is part of the feature's geopolitical geometry.",
          "type": "string"
        },
        "trust": {
          "$ref": "GeostoreTrustSignalsProto",
          "description": "Trust signals/annotations for the feature. In an input feature, these signals are computed at the beginning of the pipeline and are immutable during the processing. In output features, this proto may define the rules/criteria that a newer edit should meet, in order to be applied."
        },
        "waterRemovedPolygonShapeId": {
          "description": "A unique identifier for this feature's water-removed polygon data which is being held externally in Shapestore (see go/shapestore).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreInternalFieldMetadataProto": {
      "id": "GeostoreInternalFieldMetadataProto",
      "properties": {
        "isAuto": {
          "description": "Whether or not the piece of data has been generated automatically (i.e., by a bot/automated process based on heuristics/algorithms rather than coming as a fact set by some human user or data provider based on their knowledge). Note that this does NOT imply that the value was set as a result of a bot operation on the repository, since it is conceivable to use a bot/automated process simply as a way of convenience to ingest large amount of canonical/ground truth data.",
          "type": "boolean"
        },
        "sourceSummary": {
          "$ref": "GeostoreInternalSourceSummaryProto",
          "description": "Information about the source providing the piece of data this metadata is attached to."
        }
      },
      "type": "object"
    },
    "GeostoreInternalSegmentProto": {
      "description": "Internal-only proto used to express additional information about segments. This is intended for communicating extra information between editing clients and the repository, and should not be used by or visible to clients. WARNING - if you add new fields to InternalSegmentProto, make sure that geostore/tools/internal/mr-mergesegments_test.cc is aware of them.",
      "id": "GeostoreInternalSegmentProto",
      "properties": {
        "travelAllowance": {
          "description": "The set of restrictions that apply to this segment; these are actually *POSITIVE* restrictions, i.e. they are known to be allowed.",
          "items": {
            "$ref": "GeostoreRestrictionProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreInternalSourceSummaryProto": {
      "id": "GeostoreInternalSourceSummaryProto",
      "properties": {
        "dataset": {
          "description": "Within the above provider, the dataset from which this piece of data was generated. For fields that are auto-generated the \"dataset\" is likely to be some algorithm's or program's name. Similar to SourceInfoProto.dataset but with the difference that it is required to always be set. Providers that don't have a concept of dataset may use \"default\".",
          "type": "string"
        },
        "provider": {
          "description": "The data provider from which this piece of data was generated. Equivalent to SourceInfoProto.provider in the public schema.",
          "enum": [
            "PROVIDER_ANY",
            "PROVIDER_UNKNOWN",
            "PROVIDER_NAVTEQ",
            "PROVIDER_TELE_ATLAS",
            "PROVIDER_TELE_ATLAS_MULTINET",
            "PROVIDER_TELE_ATLAS_CODEPOINT",
            "PROVIDER_TELE_ATLAS_GEOPOST",
            "PROVIDER_TELE_ATLAS_DATAGEO",
            "PROVIDER_TELE_ATLAS_ADDRESS_POINTS",
            "PROVIDER_TELCONTAR",
            "PROVIDER_EUROPA",
            "PROVIDER_ROYAL_MAIL",
            "PROVIDER_GOOGLE",
            "PROVIDER_GOOGLE_HAND_EDIT",
            "PROVIDER_GOOGLE_BORDERS",
            "PROVIDER_GOOGLE_SUBRANGE",
            "PROVIDER_GOOGLE_GT_FUSION",
            "PROVIDER_GOOGLE_ZAGAT_CMS",
            "PROVIDER_GOOGLE_PLACE_NAVBOOST",
            "PROVIDER_GOOGLE_FOOTPRINT",
            "PROVIDER_GOOGLE_PRODUCT_TERMS",
            "PROVIDER_GOOGLE_POINTCARDS",
            "PROVIDER_GOOGLE_BUSINESS_CHAINS",
            "PROVIDER_GOOGLE_LOCAL_SUMMARIZATION",
            "PROVIDER_GOOGLE_PRONUNCIATIONS",
            "PROVIDER_GOOGLE_DUMPLING",
            "PROVIDER_GOOGLE_DISTILLERY",
            "PROVIDER_GOOGLE_LOCAL_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_RELATION_MINER",
            "PROVIDER_GOOGLE_MAPSPAM",
            "PROVIDER_GOOGLE_ROSE",
            "PROVIDER_GOOGLE_LOCAL_PLACE_RATINGS",
            "PROVIDER_GOOGLE_WIPEOUT",
            "PROVIDER_GOOGLE_KNOWLEDGE_GRAPH",
            "PROVIDER_GOOGLE_BEEGEES",
            "PROVIDER_GOOGLE_REVIEW_SUMMARIZATION",
            "PROVIDER_GOOGLE_OFFLINE_NON_CORE_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_GEO_WORLDMAPS",
            "PROVIDER_GOOGLE_GEO_MODERATION",
            "PROVIDER_GOOGLE_OYSTER_AUTO_EDITS",
            "PROVIDER_GOOGLE_LOCAL_ALCHEMY",
            "PROVIDER_GOOGLE_KEROUAC",
            "PROVIDER_GOOGLE_MOBRANK",
            "PROVIDER_GOOGLE_RAPTURE",
            "PROVIDER_GOOGLE_CULTURAL_INSTITUTE",
            "PROVIDER_GOOGLE_GEOCODES_FROM_LOCAL_FEEDS",
            "PROVIDER_GOOGLE_ATTRIBUTES_FROM_CRAWLED_CHAINS",
            "PROVIDER_GOOGLE_TACTILE_MAPS",
            "PROVIDER_GOOGLE_MAPS_FOR_MOBILE",
            "PROVIDER_GOOGLE_GEO_REALTIME",
            "PROVIDER_GOOGLE_PROMINENT_PLACES",
            "PROVIDER_GOOGLE_PLACE_ACTIONS",
            "PROVIDER_GOOGLE_GT_AUTO_EDITS",
            "PROVIDER_GOOGLE_WAZE",
            "PROVIDER_GOOGLE_ONTHEGO",
            "PROVIDER_GOOGLE_GT_IMPORT",
            "PROVIDER_GOOGLE_STRUCTURED_DATA",
            "PROVIDER_GOOGLE_HELICOPTER",
            "PROVIDER_GOOGLE_ROLLBACK",
            "PROVIDER_GOOGLE_RIGHTS_REPAIR",
            "PROVIDER_GOOGLE_PERFUME",
            "PROVIDER_GOOGLE_MAPS_TRANSLATION",
            "PROVIDER_GOOGLE_CALL_ME_MAYBE",
            "PROVIDER_GOOGLE_LOCAL_UNIVERSAL",
            "PROVIDER_GOOGLE_CROUPIER",
            "PROVIDER_GOOGLE_SKYSMART",
            "PROVIDER_GOOGLE_RIDDLER",
            "PROVIDER_GOOGLE_ROADCLOSURES",
            "PROVIDER_GOOGLE_SPORE",
            "PROVIDER_GOOGLE_LOCALIZATION",
            "PROVIDER_GOOGLE_CATTERMS",
            "PROVIDER_GOOGLE_GT_FIELD_OPS",
            "PROVIDER_GOOGLE_MATCHMAKER",
            "PROVIDER_GOOGLE_ARBITRATION",
            "PROVIDER_GOOGLE_BIZBUILDER_OPS",
            "PROVIDER_GOOGLE_LOCAL_INVENTORY_ADS",
            "PROVIDER_GOOGLE_GT_DRAFTY",
            "PROVIDER_GOOGLE_HOTELADS_OPS",
            "PROVIDER_GOOGLE_MARKERS",
            "PROVIDER_GOOGLE_STATE_MACHINE",
            "PROVIDER_GOOGLE_ATTRIBUTES_INFERENCE",
            "PROVIDER_GOOGLE_BIKESHARE",
            "PROVIDER_GOOGLE_GHOSTWRITER",
            "PROVIDER_GOOGLE_EDIT_PLATFORM",
            "PROVIDER_GOOGLE_BLUE_GINGER",
            "PROVIDER_GOOGLE_GEO_TIGER",
            "PROVIDER_GOOGLE_HYADES",
            "PROVIDER_GOOGLE_WEBQUARRY",
            "PROVIDER_GOOGLE_GEO_MADDEN",
            "PROVIDER_GOOGLE_ANDROID_PAY",
            "PROVIDER_GOOGLE_OPENING_HOURS_TEAM",
            "PROVIDER_GOOGLE_LOCAL_DISCOVERY",
            "PROVIDER_GOOGLE_LOCAL_HEALTH",
            "PROVIDER_GOOGLE_UGC_MAPS",
            "PROVIDER_GOOGLE_FIBER",
            "PROVIDER_GOOGLE_REVGEO",
            "PROVIDER_GOOGLE_HOTELADS_PARTNER_FRONT_END",
            "PROVIDER_GOOGLE_GEO_UGC_TASKS",
            "PROVIDER_GOOGLE_GEOCODING",
            "PROVIDER_GOOGLE_SPYGLASS",
            "PROVIDER_GOOGLE_PLUS_CODES_AS_ADDRESSES",
            "PROVIDER_GOOGLE_GEO_CHANGES",
            "PROVIDER_GOOGLE_HUME",
            "PROVIDER_GOOGLE_MEGAMIND",
            "PROVIDER_GOOGLE_GT_ROADSYNTH",
            "PROVIDER_GOOGLE_FIREBOLT",
            "PROVIDER_GOOGLE_LOCAL_PLACE_OFFERINGS",
            "PROVIDER_GOOGLE_UGC_SERVICES",
            "PROVIDER_GOOGLE_GEOALIGN",
            "PROVIDER_GOOGLE_GT_COMPOUNDS",
            "PROVIDER_GOOGLE_FOOD_ORDERING",
            "PROVIDER_GOOGLE_HOTEL_KNOWLEDGE_OPS",
            "PROVIDER_GOOGLE_URAW",
            "PROVIDER_GOOGLE_FLYEYE",
            "PROVIDER_GOOGLE_YOUKE",
            "PROVIDER_GOOGLE_GT_ZEPHYR",
            "PROVIDER_GOOGLE_USER_SAFETY",
            "PROVIDER_GOOGLE_ADDRESS_MAKER",
            "PROVIDER_GOOGLE_UGC_PHOTOS",
            "PROVIDER_GOOGLE_GT_WINDCHIME",
            "PROVIDER_GOOGLE_SNAG_FIXER",
            "PROVIDER_GOOGLE_GEO_DEALS",
            "PROVIDER_GOOGLE_LOCAL_PLACE_TOPICS",
            "PROVIDER_GOOGLE_PROPERTY_INSIGHTS",
            "PROVIDER_GOOGLE_GEO_CONSUMER_MERCHANT_EXPERIMENTS",
            "PROVIDER_GOOGLE_GEO_PORTKEY",
            "PROVIDER_GOOGLE_ROAD_MAPPER",
            "PROVIDER_GOOGLE_LOCATION_PLATFORM",
            "PROVIDER_GOOGLE_POSTTRIP",
            "PROVIDER_GOOGLE_TRAVEL_DESTINATION",
            "PROVIDER_GOOGLE_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_BIZBUILDER_CLEANUP",
            "PROVIDER_GOOGLE_USER",
            "PROVIDER_GOOGLE_STATION",
            "PROVIDER_GOOGLE_GEO_FOOD",
            "PROVIDER_GOOGLE_GEO_AR",
            "PROVIDER_GOOGLE_GEO_TEMPORAL",
            "PROVIDER_GOOGLE_SERVICES_MARKETPLACE",
            "PROVIDER_GOOGLE_IMT_CLEANUP",
            "PROVIDER_GOOGLE_GEO_FOOD_MENU",
            "PROVIDER_GOOGLE_CARENAV",
            "PROVIDER_GOOGLE_DRIVING_FEEDS",
            "PROVIDER_GOOGLE_DRIVING_UGC",
            "PROVIDER_GOOGLE_POLAR",
            "PROVIDER_GOOGLE_TRIWILD",
            "PROVIDER_GOOGLE_CROWD_COMPUTE_OPS",
            "PROVIDER_GOOGLE_SA_FROM_WEB",
            "PROVIDER_GOOGLE_POI_ALIGNMENT",
            "PROVIDER_GOOGLE_SA_FROM_HULK",
            "PROVIDER_GOOGLE_SERVICES_INTERACTIONS",
            "PROVIDER_GOOGLE_ROADS_UGC_EDITOR",
            "PROVIDER_GOOGLE_SA_FROM_NG_INFERENCE",
            "PROVIDER_GOOGLE_GEO_DRIVING_VIZ",
            "PROVIDER_GOOGLE_GEO_TASKING",
            "PROVIDER_GOOGLE_CROWDTASK_DATACOMPUTE",
            "PROVIDER_GOOGLE_CROWDTASK_TASKADS",
            "PROVIDER_GOOGLE_CROWDTASK_TASKMATE",
            "PROVIDER_GOOGLE_CROWDTASK_FURBALL",
            "PROVIDER_GOOGLE_CROWDTASK_ADAP",
            "PROVIDER_GOOGLE_GPAY",
            "PROVIDER_GOOGLE_GEO_UGC_TRUSTED_USERS",
            "PROVIDER_GOOGLE_THIRD_PARTY_DATA_PRODUCTION",
            "PROVIDER_GOOGLE_GEOTRACKER",
            "PROVIDER_GOOGLE_LOCAL_LANDMARK_INFERENCE",
            "PROVIDER_GOOGLE_GEO_CLOSED_LOOP",
            "PROVIDER_GOOGLE_SA_FROM_MERCHANT_POSTS",
            "PROVIDER_GOOGLE_CORE_DATA_RIGHTS",
            "PROVIDER_GOOGLE_SA_FROM_USER_REVIEWS",
            "PROVIDER_GOOGLE_GEO_CONTENT_FIXER",
            "PROVIDER_GOOGLE_POLYGON_REFINEMENT",
            "PROVIDER_GOOGLE_HANASU",
            "PROVIDER_GOOGLE_FULLRIGHTS_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_FULLRIGHTS_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_ATTRIBUTION_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_SA_FROM_FOOD_MENUS",
            "PROVIDER_GOOGLE_GT_CONSISTENCY_EDITS",
            "PROVIDER_GOOGLE_SA_QUALITY",
            "PROVIDER_GOOGLE_GDCE_CLEANUP",
            "PROVIDER_GOOGLE_UGC_QUALITY_CHAINS",
            "PROVIDER_GOOGLE_ATTRIBUTES_DISCOVERY",
            "PROVIDER_GOOGLE_GEO_LDE",
            "PROVIDER_GOOGLE_GEO_SIGNAL_TRACKING",
            "PROVIDER_GOOGLE_UGC_AGGREGATION",
            "PROVIDER_GOOGLE_3D_BASEMAP",
            "PROVIDER_GOOGLE_MAPFACTS_PRIVACY",
            "PROVIDER_GOOGLE_GT_ALF",
            "PROVIDER_GOOGLE_GT_OPERATOR_PROVENANCE",
            "PROVIDER_GOOGLE_LOCAL_SERVICES_ADS",
            "PROVIDER_GOOGLE_LOCALSEARCH",
            "PROVIDER_GOOGLE_TRANSIT",
            "PROVIDER_GOOGLE_GEOWIKI",
            "PROVIDER_GOOGLE_CHINA_LOCAL_TEAM",
            "PROVIDER_GOOGLE_SYNTHESIZED",
            "PROVIDER_GOOGLE_INTERNAL_TEST",
            "PROVIDER_GOOGLE_DISPUTED_AREAS",
            "PROVIDER_GOOGLE_3DWAREHOUSE",
            "PROVIDER_GOOGLE_GROUNDS_BUILDER",
            "PROVIDER_GOOGLE_SESAME",
            "PROVIDER_GOOGLE_GT",
            "PROVIDER_GOOGLE_GT_BASEMAP_UPLOAD",
            "PROVIDER_GOOGLE_ADSDB",
            "PROVIDER_GOOGLE_MACHINE_TRANSLITERATION",
            "PROVIDER_GOOGLE_TRAVELSEARCH",
            "PROVIDER_GOOGLE_PANORAMIO",
            "PROVIDER_GOOGLE_YOUTUBE",
            "PROVIDER_GOOGLE_OLD",
            "PROVIDER_GOOGLE_STREETVIEW",
            "PROVIDER_GOOGLE_STREETVIEW_BIZVIEW",
            "PROVIDER_GOOGLE_ZIPIT",
            "PROVIDER_GOOGLE_OYSTER_CONNECT_ROUTES",
            "PROVIDER_GOOGLE_GOLDEN",
            "PROVIDER_GOOGLE_INNERSPACE",
            "PROVIDER_GOOGLE_MAPSEARCH",
            "PROVIDER_GOOGLE_CATEGORIES_TEAM",
            "PROVIDER_GOOGLE_CROWDSENSUS",
            "PROVIDER_GOOGLE_LOCAL_ALGORITHMIC_IDENTITY",
            "PROVIDER_GOOGLE_FREEBASE",
            "PROVIDER_GOOGLE_HOTELADS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGES",
            "PROVIDER_GOOGLE_PLACES_API",
            "PROVIDER_GOOGLE_NAMEHEATMAP",
            "PROVIDER_GOOGLE_MAPMAKER",
            "PROVIDER_GOOGLE_MAPMAKER_MOBILE",
            "PROVIDER_GOOGLE_MAPMAKER_PANCAKE",
            "PROVIDER_GOOGLE_MAPMAKER_V2",
            "PROVIDER_GOOGLE_LOCAL_CLUSTERING_OPERATOR_OVERRIDE",
            "PROVIDER_GOOGLE_SERVED_ON_MAPMAKER",
            "PROVIDER_GOOGLE_GT_LOCAL",
            "PROVIDER_GOOGLE_GT_LOCAL_WITH_RIGHTS",
            "PROVIDER_GOOGLE_LOGS_RANKING_SIGNALS",
            "PROVIDER_GOOGLE_ENTITY_NAVBOOST",
            "PROVIDER_GOOGLE_RELATED_PLACES",
            "PROVIDER_GOOGLE_KNOWN_FOR_TERMS",
            "PROVIDER_GOOGLE_SYNTHETIC_AREAS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGE_PHOTOS",
            "PROVIDER_GOOGLE_CROSS_STREETS",
            "PROVIDER_GOOGLE_CORRIDORS",
            "PROVIDER_GOOGLE_BICYCLE_RENTAL",
            "PROVIDER_GOOGLE_CONCRETE_URLS",
            "PROVIDER_GOOGLE_LEANBACK",
            "PROVIDER_GOOGLE_LOCKED_LISTINGS",
            "PROVIDER_GOOGLE_MONITORING",
            "PROVIDER_GOOGLE_SPROUT",
            "PROVIDER_GOOGLE_LOCAL_SEARCH_QUALITY",
            "PROVIDER_GOOGLE_GOBY",
            "PROVIDER_GOOGLE_PROBLEM_REPORT",
            "PROVIDER_GOOGLE_CANDID",
            "PROVIDER_GOOGLE_BIZBUILDER",
            "PROVIDER_AUTOMOTIVE_NAVIGATION_DATA",
            "PROVIDER_MAPDATA_SCIENCES",
            "PROVIDER_MAPONICS",
            "PROVIDER_SKI_RESORTS",
            "PROVIDER_ZENRIN",
            "PROVIDER_SANBORN",
            "PROVIDER_URBAN_MAPPING",
            "PROVIDER_US_GOVERNMENT",
            "PROVIDER_US_CENSUS",
            "PROVIDER_US_POSTAL_SERVICE",
            "PROVIDER_US_GEOLOGICAL_SURVEY",
            "PROVIDER_US_GNIS",
            "PROVIDER_US_LANDSAT",
            "PROVIDER_US_NATIONAL_GEOSPATIAL_INTELLIGENCE_AGENCY",
            "PROVIDER_US_NGA_GNS",
            "PROVIDER_US_SSIBL",
            "PROVIDER_US_BUREAU_OF_TRANSPORTATION_STATISTICS",
            "PROVIDER_US_NATIONAL_OCEANIC_AND_ATMOSPHERIC_ADMINISTRATION",
            "PROVIDER_US_POLAR_GEOSPATIAL_CENTER",
            "PROVIDER_US_DEPARTMENT_OF_AGRICULTURE",
            "PROVIDER_US_NPI_REGISTRY",
            "PROVIDER_US_BUREAU_OF_INDIAN_AFFAIRS",
            "PROVIDER_DMTI_SPATIAL",
            "PROVIDER_INTERNATIONAL_HYDROGRAPHIC_ORGANIZATION",
            "PROVIDER_MAPLINK",
            "PROVIDER_KINGWAY",
            "PROVIDER_GEOCENTRE",
            "PROVIDER_CN_NATIONAL_FOUNDAMENTAL_GIS",
            "PROVIDER_CN_MAPABC",
            "PROVIDER_SMITHSONIAN_INSTITUTE",
            "PROVIDER_TRACKS_FOR_AFRICA",
            "PROVIDER_PPWK",
            "PROVIDER_LEADDOG",
            "PROVIDER_CENTRE_DONNEES_ASTRONOMIQUES_STRASBOURG",
            "PROVIDER_GISRAEL",
            "PROVIDER_BASARSOFT",
            "PROVIDER_MAPINFO",
            "PROVIDER_MAPIT",
            "PROVIDER_GEOBASE",
            "PROVIDER_ORION",
            "PROVIDER_CENTRAL_EUROPEAN_DATA_AGENCY",
            "PROVIDER_ANASAT",
            "PROVIDER_MINED_POSTCODES",
            "PROVIDER_DMAPAS",
            "PROVIDER_COMMON_LOCALE_DATA_REPOSITORY",
            "PROVIDER_CH_SBB",
            "PROVIDER_SKENERGY",
            "PROVIDER_GBRMPA",
            "PROVIDER_KOREA_POST",
            "PROVIDER_CN_AUTONAVI",
            "PROVIDER_MINED_POI",
            "PROVIDER_ML_INFOMAP",
            "PROVIDER_SNOOPER",
            "PROVIDER_GEOSISTEMAS",
            "PROVIDER_AFRIGIS",
            "PROVIDER_TRANSNAVICOM",
            "PROVIDER_EASYCONNECT",
            "PROVIDER_LANTMATERIET",
            "PROVIDER_LOGICA",
            "PROVIDER_MAPKING",
            "PROVIDER_DIANPING",
            "PROVIDER_GEONAV",
            "PROVIDER_HEIBONSHA",
            "PROVIDER_DEUTSCHE_TELEKOM",
            "PROVIDER_LINGUISTIC_DATA_CONSORTIUM",
            "PROVIDER_ACXIOM",
            "PROVIDER_DUN_AND_BRADSTREET",
            "PROVIDER_FEDERAL_AVIATION_ADMINISTRATION",
            "PROVIDER_INFOUSA",
            "PROVIDER_INFOUSA_NIXIE",
            "PROVIDER_THOMSON_LOCAL",
            "PROVIDER_TELEFONICA_PUBLICIDAD_E_INFORMACION",
            "PROVIDER_WIKIPEDIA",
            "PROVIDER_INFOBEL",
            "PROVIDER_MX_GOVERNMENT",
            "PROVIDER_MX_NATIONAL_INSTITUTE_STATISTICS_GEOGRAPHY",
            "PROVIDER_MX_SERVICIO_POSTAL_MEXICANO",
            "PROVIDER_TELEGATE",
            "PROVIDER_TELELISTAS",
            "PROVIDER_MAPCITY",
            "PROVIDER_EXPLAINER_DC",
            "PROVIDER_DAIKEI",
            "PROVIDER_NL_CHAMBER_OF_COMMERCE",
            "PROVIDER_KOREA_INFO_SERVICE",
            "PROVIDER_WIKITRAVEL",
            "PROVIDER_FLICKR",
            "PROVIDER_DIANCO",
            "PROVIDER_VOLT_DELTA",
            "PROVIDER_SG_GOVERNMENT",
            "PROVIDER_SG_LAND_TRANSPORT_AUTHORITY",
            "PROVIDER_MAPBAR",
            "PROVIDER_LONGTU",
            "PROVIDER_SA_GOVERNMENT",
            "PROVIDER_SA_SAUDI_POST",
            "PROVIDER_PEAKLIST",
            "PROVIDER_LOCAL_BUSINESS_CENTER",
            "PROVIDER_LOCAL_FEED_XML",
            "PROVIDER_WEB",
            "PROVIDER_RAILS_TO_TRAILS",
            "PROVIDER_INDIACOM",
            "PROVIDER_INFOMEDIA",
            "PROVIDER_PICASA",
            "PROVIDER_AT_GOVERNMENT",
            "PROVIDER_AT_BUNDESAMT_FUR_EICH_UND_VERMESSUNGSWESEN",
            "PROVIDER_AT_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_AT_AUSTRIA_POST",
            "PROVIDER_NO_GOVERNMENT",
            "PROVIDER_NO_NORSK_EIENDOMSINFORMASJON",
            "PROVIDER_NO_POSTEN_NORGE_AS",
            "PROVIDER_CH_GOVERNMENT",
            "PROVIDER_CH_SWISS_POST",
            "PROVIDER_CH_SWISSTOPO",
            "PROVIDER_CH_SWISS_NATIONAL_PARK",
            "PROVIDER_NAVIT",
            "PROVIDER_GEOSEARCH",
            "PROVIDER_DE_GOVERNMENT",
            "PROVIDER_BUNDESAMT_KARTOGRAPHIE_UND_GEODASIE",
            "PROVIDER_BUNDESNETZAGENTUR",
            "PROVIDER_SCHOBER_GROUP",
            "PROVIDER_MIREO",
            "PROVIDER_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WEBSTER_TEXAS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_AMHERST_MASSACHUSETTS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BLOOMINGTON_INDIANA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PASADENA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_CHULA_VISTA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_TEMPE_ARIZONA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_COLUMBUS_OHIO",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PORTAGE_MICHIGAN",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GEORGETOWN_KENTUCKY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GREENVILLE_SOUTH_CAROLINA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_NASHVILLE_TENNESSEE",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WASHINGTON_DISTRICT_OF_COLUMBIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BOULDER_COLORADO",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY_ENVIRONMENT_BAY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY_BIELSKO_BIALA",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_FRANKFURT",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_HAMBURG",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_KARLSRUHE",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY_SANTA_CRUZ",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_KLAGENFURT",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_LINZ",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_AZKOITIA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_BEASAIN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_GIRONA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_SAN_SEBASTIAN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_CATALUNYA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_HONDARRIBIA",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY_LAUNCESTON_TASMANIA",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY_REYKJAVIK",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY_AMELSTEVEEN",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY_ANTWERPEN",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_FREDERICTON_NEW_BRUNSWICK",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_KAMLOOPS_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_NANAIMO_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_BANFF_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_CALGARY_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_TORONTO_ONTARIO",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY_UMEA",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY_KHARKIV",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY_AQUA_CALIENTE_CAHUILLA_INDIANS",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_PONT_AUDEMER",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_BORDEAUX",
            "PROVIDER_SG_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY_RIO_DE_JANEIRO",
            "PROVIDER_MAPCUBE",
            "PROVIDER_3D_REALITYMAPS",
            "PROVIDER_DEUTSCHES_ZENTRUM_FUR_LUFT_UND_RAUMFAHRT",
            "PROVIDER_3D_CITIES_SOCIEDADE_ANONIMA",
            "PROVIDER_DISNEY",
            "PROVIDER_CYBERCITY",
            "PROVIDER_PRECISION_LIGHTWORKS_MODELWORKS",
            "PROVIDER_VIRTUAL_HUNGARY_LIMITED",
            "PROVIDER_VIRTUEL_CITY",
            "PROVIDER_SCREAMPOINT_INTERNATIONAL",
            "PROVIDER_AGENTSCHAP_VOOR_GEOGRAFISCHE_INFORMATIE_VLAANDEREN",
            "PROVIDER_FR_GOVERNMENT",
            "PROVIDER_FR_INSTITUT_GEOGRAPHIQUE_NATIONAL",
            "PROVIDER_FR_CADASTRE",
            "PROVIDER_DIADIEM",
            "PROVIDER_THE_WEATHER_CHANNEL",
            "PROVIDER_COWI",
            "PROVIDER_FALKPLAN_ANDES",
            "PROVIDER_NL_GOVERNMENT",
            "PROVIDER_NL_KADASTER",
            "PROVIDER_NL_BOARD_OF_TOURISM_AND_CONVENTIONS",
            "PROVIDER_DIGITAL_MAP_PRODUCTS",
            "PROVIDER_SILICE_DIGITAL",
            "PROVIDER_TYDAC",
            "PROVIDER_ALBRECHT_GOLF",
            "PROVIDER_HEALTH_CH",
            "PROVIDER_VISITDENMARK",
            "PROVIDER_FLYHERE",
            "PROVIDER_DIGITAL_DATA_SERVICES",
            "PROVIDER_MECOMO",
            "PROVIDER_ZA_GOVERNMENT",
            "PROVIDER_ZA_RURAL_DEVELOPMENT_LAND_REFORM",
            "PROVIDER_SENSIS",
            "PROVIDER_JJCONNECT",
            "PROVIDER_OPPLYSNINGEN",
            "PROVIDER_TELLUS",
            "PROVIDER_IQONIA",
            "PROVIDER_BE_GOVERNMENT",
            "PROVIDER_BE_NATIONAAL_GEOGRAFISCH_INSTITUUT",
            "PROVIDER_BE_BRUSSELS_MOBILITY",
            "PROVIDER_YELLOWMAP_AG",
            "PROVIDER_STIFTUNG_GESUNDHEIT",
            "PROVIDER_GIATA",
            "PROVIDER_SANPARKS",
            "PROVIDER_CENTRE_DINFORMATIQUE_POUR_LA_REGION_BRUXELLOISE",
            "PROVIDER_INFOPORTUGAL",
            "PROVIDER_NEGOCIOS_DE_TELECOMUNICACOES_E_SISTEMAS_DE_INFORMACAO",
            "PROVIDER_COLLINS_BARTHOLOMEW",
            "PROVIDER_PROTECT_PLANET_OCEAN",
            "PROVIDER_KARTTAKESKUS",
            "PROVIDER_FI_GOVERNMENT",
            "PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION",
            "PROVIDER_FI_NATIONAL_LAND_SURVEY",
            "PROVIDER_FI_STATISTICS_FINLAND",
            "PROVIDER_GB_GOVERNMENT",
            "PROVIDER_GB_ORDNANCE_SURVEY",
            "PROVIDER_NATURAL_ENGLAND",
            "PROVIDER_WELSH_GOVERNMENT",
            "PROVIDER_GB_OFFICE_FOR_NATIONAL_STATISTICS",
            "PROVIDER_EPSILON",
            "PROVIDER_PARTNER_FRONT_END",
            "PROVIDER_CARTESIA",
            "PROVIDER_SE_GOVERNMENT",
            "PROVIDER_SE_TRAFIKVERKET",
            "PROVIDER_SE_NATURVARDSVERKET",
            "PROVIDER_IE_GOVERNMENT",
            "PROVIDER_IE_ORDNANCE_SURVEY_IRELAND",
            "PROVIDER_LU_GOVERNMENT",
            "PROVIDER_LU_P_AND_T_LUXEMBOURG",
            "PROVIDER_LU_ADMINISTRATION_DU_CADASTRE_ET_DE_LA_TOPOGRAPHIE",
            "PROVIDER_LU_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_MAPFLOW",
            "PROVIDER_TKARTOR",
            "PROVIDER_JUMPSTART",
            "PROVIDER_EPTISA",
            "PROVIDER_MC_GOVERNMENT",
            "PROVIDER_MC_PRINCIPAUTE_DE_MONACO",
            "PROVIDER_MONOLIT",
            "PROVIDER_ENVIRONMENTAL_SYSTEMS_RESEARCH_INSTITUTE",
            "PROVIDER_MODIS",
            "PROVIDER_GEOX",
            "PROVIDER_GEODIRECTORY",
            "PROVIDER_GEOPLAN",
            "PROVIDER_INFODIREKT",
            "PROVIDER_GEOGLOBAL",
            "PROVIDER_DEUTSCHE_POST",
            "PROVIDER_TRACASA",
            "PROVIDER_CORREOS",
            "PROVIDER_ES_GOVERNMENT",
            "PROVIDER_ES_CENTRO_NACIONAL_DE_INFORMACION_GEOGRAFICA",
            "PROVIDER_EDIMAP",
            "PROVIDER_VERIZON",
            "PROVIDER_NATIONAL_GEOGRAPHIC_MAPS",
            "PROVIDER_PROMAPS",
            "PROVIDER_CONSODATA",
            "PROVIDER_DE_AGOSTINI",
            "PROVIDER_FEDERPARCHI",
            "PROVIDER_NAVIGO",
            "PROVIDER_ITALIAMAPPE",
            "PROVIDER_CZECOT",
            "PROVIDER_NATURAL_EARTH",
            "PROVIDER_REGIO",
            "PROVIDER_SHIPWRECK_CENTRAL",
            "PROVIDER_RUTGERS_STATE_UNIVERSITY",
            "PROVIDER_TWINICE",
            "PROVIDER_NORTHERN_IRELAND_TOURIST_BOARD",
            "PROVIDER_INFOGROUP",
            "PROVIDER_TNET",
            "PROVIDER_CTT_CORREIOS_DE_PORTUGAL",
            "PROVIDER_EUROPARC",
            "PROVIDER_IUPPITER",
            "PROVIDER_MICHAEL_BAUER_INTERNATIONAL",
            "PROVIDER_LEPTON",
            "PROVIDER_MAPPOINT",
            "PROVIDER_GEODATA",
            "PROVIDER_RU_GOVERNMENT",
            "PROVIDER_RU_FNS_KLADR",
            "PROVIDER_BR_GOVERNMENT",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DO_MEIO_AMBIENTE_E_DOS_RECURSOS_NATURAIS_RENOVAVEIS",
            "PROVIDER_BR_MINISTERIO_DO_MEIO_AMBIENTE",
            "PROVIDER_BR_AGENCIA_NACIONAL_DE_AGUAS",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DE_GEOGRAFIA_E_ESTATISTICA",
            "PROVIDER_BR_FUNDACAO_NACIONAL_DO_INDIO",
            "PROVIDER_BR_DEPARTAMENTO_NACIONAL_DE_INFRAESTRUTURA_DE_TRANSPORTES",
            "PROVIDER_AZAVEA",
            "PROVIDER_NORTHSTAR",
            "PROVIDER_COMMEDI",
            "PROVIDER_NEXUS_GEOGRAFICS",
            "PROVIDER_INFOERA",
            "PROVIDER_AD_GOVERNMENT",
            "PROVIDER_AD_AREA_DE_CARTOGRAFIA",
            "PROVIDER_MAXXIMA",
            "PROVIDER_SI_GOVERNMENT",
            "PROVIDER_SI_AGENCY_FOR_ENVIRONMENT",
            "PROVIDER_TRANSPORT_HI_TECH_CONSULTANTS",
            "PROVIDER_L1_TECHNOLOGIES",
            "PROVIDER_TELEMEDIA",
            "PROVIDER_CDCOM_PROGOROD",
            "PROVIDER_MIT_CITYGUIDE",
            "PROVIDER_SUNCART",
            "PROVIDER_MICROMAPPER",
            "PROVIDER_RICHI",
            "PROVIDER_FORUM44",
            "PROVIDER_SEAT",
            "PROVIDER_VALASSIS",
            "PROVIDER_NAVICOM",
            "PROVIDER_COLTRACK",
            "PROVIDER_PSMA_AUSTRALIA",
            "PROVIDER_PT_DUTA_ASTAKONA_GIRINDA",
            "PROVIDER_CA_GOVERNMENT",
            "PROVIDER_STATISTICS_CANADA",
            "PROVIDER_TOCTOC",
            "PROVIDER_RMSI",
            "PROVIDER_TRUE_TECHNOLOGY",
            "PROVIDER_INCREMENT_P_CORPORATION",
            "PROVIDER_GOJAVAS",
            "PROVIDER_GEOINFORMATION_GROUP",
            "PROVIDER_CYBERSOFT",
            "PROVIDER_TSENTR_EFFEKTIVNYKH_TEKHNOLOGIY",
            "PROVIDER_EE_GOVERNMENT",
            "PROVIDER_EE_MAA_AMET",
            "PROVIDER_GASBUDDY",
            "PROVIDER_DK_GOVERNMENT",
            "PROVIDER_DK_GEODATASTYRELSEN",
            "PROVIDER_MURCIA_REGION_GOVERNMENT",
            "PROVIDER_CORREIOS",
            "PROVIDER_WEST_WORLD_MEDIA",
            "PROVIDER_INTERNATIONAL_MAPPING_ASSOCIATION",
            "PROVIDER_MEDICARE",
            "PROVIDER_POLARIS",
            "PROVIDER_TW_GOVERNMENT",
            "PROVIDER_TW_MINISTRY_OF_THE_INTERIOR_SURVEYING_AND_MAPPING_CENTER",
            "PROVIDER_NORDECA",
            "PROVIDER_AFRIMAPPING",
            "PROVIDER_OVERDRIVE",
            "PROVIDER_PROVIDER_NETWORK_DIRECTORIES",
            "PROVIDER_BR_MINISTERIO_DA_SAUDE",
            "PROVIDER_DIGITAL_EGYPT",
            "PROVIDER_INRIX",
            "PROVIDER_ARPINDO",
            "PROVIDER_IT_GOVERNMENT",
            "PROVIDER_ISTITUTO_GEOGRAFICO_MILITARE",
            "PROVIDER_EAST_END_GROUP",
            "PROVIDER_INGEOLAN",
            "PROVIDER_SEMACONNECT",
            "PROVIDER_BLINK",
            "PROVIDER_EVGO",
            "PROVIDER_CHARGEPOINT",
            "PROVIDER_TPL_TRAKKER",
            "PROVIDER_OI",
            "PROVIDER_MAPARADAR",
            "PROVIDER_SINGAPORE_POST",
            "PROVIDER_CHARGEMASTER",
            "PROVIDER_TESLA",
            "PROVIDER_VISICOM",
            "PROVIDER_GEOLYSIS",
            "PROVIDER_ZEPHEIRA",
            "PROVIDER_HUBJECT",
            "PROVIDER_PODPOINT",
            "PROVIDER_CHARGEFOX",
            "PROVIDER_KR_GOVERNMENT",
            "PROVIDER_KR_MOLIT",
            "PROVIDER_KR_MINISTRY_OF_THE_INTERIOR_AND_SAFETY",
            "PROVIDER_CRITCHLOW",
            "PROVIDER_EIFRIG",
            "PROVIDER_GIREVE",
            "PROVIDER_CN_NAVINFO",
            "PROVIDER_JAPAN_CHARGE_NETWORK",
            "PROVIDER_NOBIL",
            "PROVIDER_INDIA_BANKS",
            "PROVIDER_INDONESIA_ELECTION_KPU",
            "PROVIDER_CAREERS360",
            "PROVIDER_SOURCE_LONDON",
            "PROVIDER_EVBOX",
            "PROVIDER_JP_GOVERNMENT",
            "PROVIDER_JP_MINISTRY_OF_THE_ENVIRONMENT",
            "PROVIDER_YUMYUM",
            "PROVIDER_HWW_AUSTRALIA",
            "PROVIDER_CINERGY",
            "PROVIDER_MTIME",
            "PROVIDER_KULTUNAUT",
            "PROVIDER_BLITZ",
            "PROVIDER_PIA",
            "PROVIDER_INTERPARK",
            "PROVIDER_CINEMA_ONLINE",
            "PROVIDER_BELBIOS",
            "PROVIDER_MOVIESEER",
            "PROVIDER_SODAMEDYA",
            "PROVIDER_ATMOVIES",
            "PROVIDER_HOTELBEDS",
            "PROVIDER_VERICRED",
            "PROVIDER_CIRRANTIC",
            "PROVIDER_GOGO_LABS",
            "PROVIDER_ELECTRIFY_AMERICA",
            "PROVIDER_CMS_MPPUF",
            "PROVIDER_DIGIROAD",
            "PROVIDER_KONTEX_GEOMATICS",
            "PROVIDER_NZ_GOVERNMENT",
            "PROVIDER_NZ_LINZ",
            "PROVIDER_NZ_DOC",
            "PROVIDER_FASTNED",
            "PROVIDER_DESTINY_CS",
            "PROVIDER_IONITY",
            "PROVIDER_EV_CONNECT",
            "PROVIDER_PANPAGES",
            "PROVIDER_ETECNIC",
            "PROVIDER_VOLTA",
            "PROVIDER_NISSAN_MEXICO",
            "PROVIDER_BMW_GROUP_LATIN_AMERICA",
            "PROVIDER_FEDERAL_ELECTRICITY_COMMISSION_MEXICO",
            "PROVIDER_VOLVO_CARS_BRASIL",
            "PROVIDER_CHARGE_AND_PARKING",
            "PROVIDER_DEDUCE_TECHNOLOGIES",
            "PROVIDER_SK_TELECOM",
            "PROVIDER_ECO_MOVEMENT",
            "PROVIDER_GOOGLE_GMS",
            "PROVIDER_EASYWAY",
            "PROVIDER_PHYSICIAN_COMPARE",
            "PROVIDER_HOSPITAL_COMPARE",
            "PROVIDER_ENDOLLA_BARCELONA",
            "PROVIDER_BE_CHARGE",
            "PROVIDER_ONE_NETWORK",
            "PROVIDER_CARENAV_DUPLEX",
            "PROVIDER_CARENAV_POI",
            "PROVIDER_IN_GOVERNMENT",
            "PROVIDER_SURVEY_OF_INDIA",
            "PROVIDER_E_ON",
            "PROVIDER_ELECTRIFY_CANADA",
            "PROVIDER_GRIDCARS",
            "PROVIDER_DRIVECO",
            "PROVIDER_GREEN_ACTION_STUDIOS",
            "PROVIDER_GREEN_ACTION_STUDIO",
            "PROVIDER_EVINY",
            "PROVIDER_MASTERCARD",
            "PROVIDER_VATTENFALL",
            "PROVIDER_VIETGIS",
            "PROVIDER_UNITE",
            "PROVIDER_NEOGY",
            "PROVIDER_AMPUP",
            "PROVIDER_LOOP",
            "PROVIDER_ZEST",
            "PROVIDER_EZVOLT"
          ],
          "enumDescriptions": [
            "ABSTRACT The root of all provider types. This should never be present on an actual feature, but can be useful when calling InCategory.",
            "not actually a legal value, used as sentinel",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "All new \"Google\" provider entries must be full ints. The next available ID is: 0x111730B1",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This is an internal *only* provider meant for sending wipeout requests to mapfacts.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Never rely on source infos with this provider to identify whether or not a feature is a Prominent Place! Instead, use the proper API, localsearch_clustering::QualityTierHelper::IsProminentPlace().",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Shopping Attributes Discovery",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The next new \"Google\" provider entries should be placed above.",
            "UMBRELLA",
            "",
            "",
            "",
            "This is a testing provider for teams that wish to integrate with components of the Geo Data Infrastructure that require a valid provider. No production data should ever be sent using this provider.",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "UMBRELLA",
            "0x1117F must not be used, since its range extends the PROVIDER_GOOGLE hierarchy.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated in favor of PROVIDER_GOOGLE_STRUCTURED_DATA (for attributes) and PROVIDER_GOOGLE_GEO_TIGER (for categories).",
            "",
            "0x1117FF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. aka Local AI.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "No data is obtained from this provider. It is only used to identify features that must be served on MapMaker.",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x1117FFF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. Synthetically generated areas (sublocalities/neighborhoods/ postal codes/etc) based on dropped terms from approximate geocoding. More info on go/syntheticareas.",
            "",
            "",
            "",
            "Similar to Google Transit, a provider that aggregates positions of bicycle rental points that we have agreements with to show on maps",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This range has been depleted. For new Ids see PROVIDER_GOOGLE_SUBRANGE above.",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Small Scale International Boundary Lines",
            "",
            "NOAA",
            "PGC",
            "USDA",
            "National Provider Identifier Registry",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "old name for PROVIDER_NAVIGO",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "See b/33687395",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "IBAMA",
            "MMA",
            "ANA",
            "IBGE",
            "FUNAI",
            "DNIT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Department of Cartography",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x12 and 0x120 are not to be used. OOO CET",
            "ABSTRACT",
            "Estonian Land Board",
            "",
            "ABSTRACT",
            "Danish Geodata Agency",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Ministry of land, infrastructure and transport, \uad6d\ud1a0\uad50\ud1b5\ubd80, Guktogyotongbu",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Use PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION.",
            "",
            "ABSTRACT",
            "Land Information New Zealand",
            "NZ Department of Conservation",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: Next available value is 0x1270C."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreIntersectionGroupProto": {
      "description": "Our TYPE_INTERSECTION features model the point where one or more segments terminate. This is topological definition: it may not match what a typical user would think of as an \"intersection\". Consider the intersections where Hayes, Market, Larkin, and 9th Street meet near (37.77765, -122.41638) in San Francisco. Most people would probably consider this a single feature, even though we model it as four separate TYPE_INTERSECTION features. The TYPE_INTERSECTION_GROUP is used to model the user's concept of a real-world intersection, which also includes turn lanes or a whole roundabout (a logical intersection). For the purposes of modeling turn restrictions and lane connections, a smaller grouping is needed to model the \"core\" part of the intersection where there are no lane markings. This is called a core or artifact group. An intersection group must contain at least two intersections or add some information (e.g. a name or a polygon) compared to the intersection itself, or else must not exist. The standard feature properties are interpreted as follows: name - Can be used to specify any \"special\" names associated with this intersection (e.g. Reads Corner intersection, PEI, Canada). Intersections that are named according to their cross streets do not need to specify this field, since this can be determined by looking at the routes associated with each segment. address - This should always be empty. point - Specifies the center of the intersection. This is basically the point where the intersection name should be rendered. Can be omitted in favor of a polygon. polyline - This should always be empty. polygon - Specifies the two-dimensional extent of the intersection. This may substitute to the point field, though having a center set is desirable in this case. child - This should always be empty.",
      "id": "GeostoreIntersectionGroupProto",
      "properties": {
        "childGroup": {
          "description": "All artifact intersection groups that are in this logical group.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "groupType": {
          "enum": [
            "GROUP_ARTIFACT",
            "GROUP_LOGICAL"
          ],
          "enumDescriptions": [
            "Groups intersections that bound segment artifacts of centerline digitization. These segment artifacts do not represent the geometry of actual vehicle travel through an intersection group. This grouping is typically in the core or shared area of an intersection where there are no lane markings (with the exception of raised reflective white dots demarkating multiple turn lanes through the real-world intersection). This is also the typical grouping used for modeling STYLE_IN_OUT turn restrictions.",
            "Groups all intersections that form the logical connection of roads. Also known as a cross road intersection group. This group is usually larger than just the artifact grouping, since it includes external turn lanes and roundabout external bypasses."
          ],
          "type": "string"
        },
        "intersection": {
          "description": "The list of TYPE_INTERSECTION features that form this intersection group, but are NOT in any of this group's child groups. This could be an empty list, though that is sub-optimal. Even an empty list would allow the paint team to draw a label for a named intersection, but a non-empty list would, for example, enable PathFinder to generate better directions. Each of the TYPE_INTERSECTION feature referred here must refer back to this feature in its IntersectionProto.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "parentGroup": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Parent logical intersection group. An artifact group that does not have an associated parent logical group is assumed to be both an artifact and logical group."
        }
      },
      "type": "object"
    },
    "GeostoreIntersectionProto": {
      "description": "A TYPE_INTERSECTION feature represents a common endpoint of one or more segments in a transportation network at which the segments are connected. An intersection in the real world may be more complicated than that (e.g., comprise multiple segment endpoints or have extra attributes), which can be modeled with an additional TYPE_INTERSECTION_GROUP feature, if needed (see intersectiongroup.proto). The standard feature properties are interpreted as follows: name - This should always be empty. Intersections that have a \"special\" name (e.g. Reads Corner intersection, PEI, Canada) should point to a separate TYPE_INTERSECTION_GROUP feature that captures it. Intersections which are named according to their cross streets do not need this requirement, since their name can be determined by looking at the routes associated with each segment. address - This should always be empty. point - Specifies the center of the intersection. This should be the last vertex of all the segments which terminate at this intersection. polyline - This should always be empty. polygon - This should always be empty. child - This should always be empty.",
      "id": "GeostoreIntersectionProto",
      "properties": {
        "intersectionGroup": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The artifact or logical intersection group to which this intersection belongs. If present, the intersection group must also refer back to the intersection. If an intersection is within both the artifact and logical group, then this reference should be to the artifact group."
        },
        "outSegment": {
          "description": "RESERVED",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "segment": {
          "description": "The list of segments that terminate at this intersection, in any order. Note that all segments are directed towards the intersection, i.e. their endpoints indicate what sort of intersection this is. This should not be empty because an intersection with no associated segment is meaningless.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "tollClusterId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The toll cluster to which this intersection belongs. If present, the toll cluster must also refer back to the intersection."
        }
      },
      "type": "object"
    },
    "GeostoreJobMetadata": {
      "id": "GeostoreJobMetadata",
      "properties": {
        "duration": {
          "description": "Describes how much time the service is going to take, e.g. how long it takes to do a haircut. Value of seconds must be from +60 (1 min) to +31,536,000 (365 days) inclusive. Value of nanos must be zero.",
          "format": "google-duration",
          "type": "string"
        },
        "jobRelatedCategories": {
          "description": "Represents the name of a potential grouping of items. For TYPE_JOB, this is the category names of the categories that a user picked this job type from at the time of input.",
          "items": {
            "$ref": "GeostoreJobRelatedCategory"
          },
          "type": "array"
        },
        "jobTypeId": {
          "description": "Unique identifier for a job. This is required for standard jobs and blank for free-form jobs. Job type ids are prefixed with \"job_type_id:\". Notice this is a unique string representation of a job across languages. E.g., \u201cjob_type_id:air_duct_repair\u201d. The existence of a job_type_id means the job type is a standard one, and has a corresponding entry in the Standard Jobs Taxonomy.",
          "type": "string"
        },
        "jobTypeMid": {
          "description": "Represents the MID corresponding to the job_category entity in the Knowledge Graph. For example, job_type_id=\"job_type_id:install_faucet\", job_type_mid=\"/g/11hzzxjv3f\". ",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreJobRelatedCategory": {
      "description": "This is the category that a user picked this job type from at the time of input. The field serves two purposes: 1) The name is used in consumer surface similar to the heading name today (i.e., grouping jobs under the category. 2) The gcid is needed mainly for free-formed entries, for which GMB needs to map them to corresponding categories in the frontend, if applicable. Notice that the name and the id are both not expected to be in sync with gcid deprecation or location category change per product decision. In other words, they are not guaranteed to stay in sync, only guaranteed true at time of creation.",
      "id": "GeostoreJobRelatedCategory",
      "properties": {
        "gcid": {
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "name": {
          "description": "Category name in the primary language of the feature. Generally intended to be used as a fallback when we are unable to fetch the name in the user's language.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreKnowledgeGraphReferenceProto": {
      "description": "The reference to an entity in the KnowledgeGraph. For details on the KnowledgeGraph see http://goto/kg.",
      "id": "GeostoreKnowledgeGraphReferenceProto",
      "properties": {
        "id": {
          "description": "KG Identifier (MID). For details, see http://go/ke-bg-knowledge-graph#mids.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreLandmarkReferenceProto": {
      "description": "This protocol buffer represents the association between a segment and a landmark feature. Notes: - References to TYPE_SEGMENT features should always point to the even sibling. - Self-references are allowed but the referencing segment's sibling is required to have a self-reference as well (the above requirement to always reference the even sibling still applies).",
      "id": "GeostoreLandmarkReferenceProto",
      "properties": {
        "featureType": {
          "description": "The type of the landmark feature. Allowed types: - TYPE_CARTOGRAPHIC e.g. a putting green or water hazard - TYPE_COMPOUND e.g. - the Empire state building (TYPE_COMPOUND_BUILDING) - a park (TYPE_COMPOUND_GROUNDS) - a section of a retail store (TYPE_COMPOUND_SECTION) - TYPE_ESTABLISHMENT e.g. - the Eiffel Tower (TYPE_ESTABLISHMENT_BUILDING) - a sports field (TYPE_ESTABLISHMENT_GROUNDS) - Starbucks (TYPE_ESTABLISHMENT_POI) - TYPE_INTERSECTION_GROUP e.g. a major intersection - TYPE_NATURAL_FEATURE e.g. a river - TYPE_SEGMENT e.g. a bike trail or train tracks",
          "format": "int32",
          "type": "integer"
        },
        "landmark": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The feature ID of the landmark feature."
        },
        "travelMode": {
          "description": "The mode(s) of travel for which this landmark is useful.",
          "items": {
            "enum": [
              "UNKNOWN",
              "TRAVEL_MOTOR_VEHICLE",
              "TRAVEL_AUTO",
              "TRAVEL_TWO_WHEELER",
              "TRAVEL_BICYCLE",
              "TRAVEL_PEDESTRIAN"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreLaneMarkerProto": {
      "description": "This proto contains attributes relevant to physical lane markers.",
      "id": "GeostoreLaneMarkerProto",
      "properties": {
        "barrierMaterials": {
          "$ref": "GeostoreBarrierLogicalMaterialProto",
          "description": "If this is a physical barrier marker, represent materials found on the marker."
        },
        "crossingPattern": {
          "$ref": "GeostoreCrossingStripePatternProto",
          "description": "Pattern border and color for crossing markers. These include crosswalks, stop, and yield lines."
        },
        "linearPattern": {
          "$ref": "GeostoreLinearStripePatternProto",
          "description": "Stripe pattern, spacing, and color for longitudinal markers."
        }
      },
      "type": "object"
    },
    "GeostoreLaneProto": {
      "description": "Describes an individual road lane. Not only driving lanes, but also parking and biking lanes are covered by this. Note that we may eventually add curbs and walking to this schema. MOTIVATION/DESIGN DISCUSSION The intent of this schema is to model a schematic representation of the road for a bunch of use cases within GMM, navigation, map tiles. For rendering, we do not want to represent the geometry of each lane exactly, but do want to model types/width/gaps/lane markings so that a schematic rendering can be made. For navigation, we model lane connectivity and restrictions per lane, so that Pathfinder can potentially pick routes based on lanes, and definitely use the lanes to better describe the path to the driver. This schema is driven by the GT team, which is likely to be the only provider of this data. It is based on compromises that we are working out with other teams, based on what our operators can reasonably collect and what is useful. See docs here: https://docs.google.com/a/google.com/document/d/11XJ1WvqS5Sm7MxWXzzc3tnsk49VhrR3BYFjiRMAzYm0/edit?hl=en_US https://docs.google.com/a/google.com/document/d/1nzdupynTUKE8xY8JcfvQbU-KWtCJ6IwHiTaCxuq40EM/edit?hl=en_US Note: Some lane information (width, surface type, etc) may duplicate or contradict information stored at the segment level.",
      "id": "GeostoreLaneProto",
      "properties": {
        "boundingMarker": {
          "description": "References to any gcid:physical_lane_marker features that bound this lane.",
          "items": {
            "$ref": "GeostoreBoundingMarkerProto"
          },
          "type": "array"
        },
        "conjoinedCategory": {
          "description": "If the current lane is part of a merge/split area, indicates the type (split or merge) and whether the current lane is on the left or right or in the middle of the merge/split area, as seen in the direction of traffic. See go/lane-split-merge-schema",
          "enum": [
            "CONJOINED_NONE",
            "CONJOINED_SPLIT_LEFT",
            "CONJOINED_SPLIT_MIDDLE",
            "CONJOINED_SPLIT_RIGHT",
            "CONJOINED_MERGE_LEFT",
            "CONJOINED_MERGE_MIDDLE",
            "CONJOINED_MERGE_RIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "distanceToNextLane": {
          "description": "Gap between this lane and the next in meters. This is relevant when the divider is physical, or a wide painted area. For regular painted single or double lines, there is no gap. This distance is duplicated between the innermost lanes for each side. Note that this is not used to describe smallish islands - this is only for long-running gaps. In particular, this models the median width, the gap between HOV lanes/regular lanes on freeways, and the road verge between a curb and sidewalk. Note on split roads: We can model any split road with a median as a single sibling pair with this distance set to the width of the median, or as two one-way sibling pairs.",
          "format": "float",
          "type": "number"
        },
        "flow": {
          "$ref": "GeostoreFlowLineProto",
          "description": "The most logical path for the center of an object to travel along within the lane. Typically, this is the lane's center line, but doesn't have to be."
        },
        "laneConnection": {
          "description": "Connections to lanes of other segments at the end of this segment. These connections model the connectivity where you don't have to do a lane change maneuver. If any lane connection is present, assume that all others are forbidden. Also note that segment level restrictions do apply if present, and can disallow some turn even if the lanes are connected. For instance, this can happen with timed or vehicle type based restrictions on the segment. If lane connectivity implies a segment-level restriction (can't transition to some target segment), that restriction will also exist as a segment level restriction. In effect - PathFinder does not have to look at lane connectivity to figure out segment connectivity. Example: Typically, lanes are just connected to one other lane. Example: A splitting lane is connected to the two resulting lanes. Example: At an intersection, a lane is connected to crossing lanes according to how lanes are painted across the intersection. In the common case, the target segment will be connected to the same intersection as this segment. That will however NOT be true for complex intersections where there is an intersection group. The connections will be across the whole group, connecting to one of the outgoing segments from the group. This is analogous to how we do turn restrictions around intersection groups.",
          "items": {
            "$ref": "GeostoreLaneProtoLaneConnection"
          },
          "type": "array"
        },
        "laneDividerCrossing": {
          "description": "clang-format on Whether the divider to the inside of this lane can be crossed. Note that we assume this is symmetric, and that this also describes whether someone in the next inside lane can cross to this one. The \"inside\" lane is the one with a lower lane_number. Note on lane markers: We do not model the painting, but only the resulting legality. There are many painted marker styles and colors that lead to the same legality. We expect Paint or Driveabout to render lanes stylized, with solid meaning \"can't cross\", and dashed meaning \"can cross\". Note on varying legality along segment: ALLOWED takes precedence - even if some small portion has a restriction (such as right before an intersection) , the lane change will be ALLOWED.",
          "enum": [
            "CROSSING_ALLOWED",
            "CROSSING_DISALLOWED",
            "CROSSING_LEGALLY_DISALLOWED",
            "CROSSING_PHYSICALLY_IMPOSSIBLE"
          ],
          "enumDescriptions": [
            "Cross at will.",
            "",
            "This is usually some painted barrier",
            "This is either a patch of dirt, or some barrier"
          ],
          "type": "string"
        },
        "laneFollowsSegmentBeginFraction": {
          "description": "These indicate for what portion of the segment the lane's flowline exactly follows the segment, and the lane is of constant width. This will be set to not include the whole segment where there is a split/turn/merge at either end of the lane. The painting of the lane should completely synthesize the lane geometry outside of this portion, connecting it to neighboring lanes to make graphical nice.",
          "format": "float",
          "type": "number"
        },
        "laneFollowsSegmentEndFraction": {
          "format": "float",
          "type": "number"
        },
        "laneNumber": {
          "description": "Lanes are numbered from inside of the road outward, i.e. the lane next to the center line is lane 0. The lanes then stack outwards, towards the side that one drives on this segment (right or left). NOTE: do NOT use the lane_number as index for lookup. Lane_number is not guaranteed to match the segment.lane repeated field index.",
          "format": "int32",
          "type": "integer"
        },
        "laneToken": {
          "description": "A token that can be used to identify the version of the data about this lane.",
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this lane."
        },
        "restriction": {
          "description": "Restrictions that apply to this lane only. Examples include HOV lanes. If a lane restriction implies a segment-level restriction (can't route on the segment at all), that restriction will also exist as a segment level restriction. In effect - PathFinder does not have to look at lane restrictions to figure out segment restrictions.",
          "items": {
            "$ref": "GeostoreRestrictionProto"
          },
          "type": "array"
        },
        "shared": {
          "description": "True if this lane is usable in both directions (left-turn lane, reversing lane, one-lane road, etc). To get the total number of lanes for a road, add up the lanes in each direction counting 0.5 for each shared lane.",
          "type": "boolean"
        },
        "stopLine": {
          "description": "References to any gcid:physical_lane_marker features that intersect this lane, with the implication that a moving vehicle should stop there.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "surface": {
          "description": "clang-format on LINT.ThenChange(//depot/google3/geostore/base/proto/segment.proto) Unlike the surface in SegmentProto, this field does not have a default value. This is because the lane-level surface overrides the segment-level surface. The lane's surface should be unset unless explicitly overriding the segment's surface.",
          "enum": [
            "SURFACE_UNKNOWN",
            "SURFACE_PAVED",
            "SURFACE_ASPHALT",
            "SURFACE_CONCRETE",
            "SURFACE_CHIPSEAL",
            "SURFACE_BRICK",
            "SURFACE_SETT",
            "SURFACE_COBBLESTONE",
            "SURFACE_UNPAVED",
            "SURFACE_GRAVEL",
            "SURFACE_DIRT",
            "SURFACE_SAND"
          ],
          "enumDescriptions": [
            "RESERVED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "type": {
          "description": "clang-format on",
          "enum": [
            "TYPE_UNKNOWN",
            "TYPE_NORMAL",
            "TYPE_PASSING",
            "TYPE_LEFT_TURN",
            "TYPE_LEFT_TURN_OFF",
            "TYPE_LEFT_TURN_ON_OFF",
            "TYPE_RIGHT_TURN",
            "TYPE_RIGHT_TURN_OFF",
            "TYPE_RIGHT_TURN_ON_OFF",
            "TYPE_BICYCLE",
            "TYPE_PARKING",
            "TYPE_PARKING_IMPLIED",
            "TYPE_PARKING_MARKED",
            "TYPE_EXIT_ENTRANCE",
            "TYPE_EXIT_LANE",
            "TYPE_ENTRANCE_LANE",
            "TYPE_PEDESTRIAN",
            "TYPE_SIDEWALK_SHOULDER",
            "TYPE_VEHICLE_SHOULDER",
            "TYPE_OFFSET"
          ],
          "enumDescriptions": [
            "",
            "",
            "These are usually shared lanes, usable for passing by either direction.",
            "",
            "Typical left turn at intersection.",
            "Lane used both for cars turning left to a side street, and for cars from side streets turning left onto the larger road.",
            "",
            "Typical right turn at intersection.",
            "Lane used both for cars turning right to a side street, and for cars from side streets turning right onto the larger road (in left-side driving countries).",
            "",
            "",
            "This lane represents the common case of parking along the curb. It is generally not a drivable lane.",
            "Parking with marked stalls.",
            "Lanes that are temporary, for acceleration/deceleration, or that will split off.",
            "A lane that is used for exiting the core road.",
            "An acceleration/merging lane.",
            "A bidirectional walking lane, such as a sidewalk. The walking lane is implied to be on the side of the road as specified by the segment's \"on_right\" flag. The pedestrian lane should therefore be on the outside of a road's traffic lanes. Presence of a pedestrian lane implies that we have a sidewalk or other facility away from the road surface where pedestrians walk. If a road does not have a pedestrian lane, this means there is no space or facility for pedestrians to walk, or that pedestrians walk on the wide shoulder. The pedestrian lane, width, and distance_to_next_lane controls where Pathfinder draws the pedestrian polyline. As described in go/hdwalking++, the polyline is computed as (pl = pedestrian lane, s = segment): offset = s.distance_to_edge + pl.distance_to_next_lane + pl.width / 2",
            "A special shoulder lane present on narrow roads in Japan that may double as a sidewalk. This isn\u2019t a subset of TYPE_PEDESTRIAN since it may have either uses and is not separated by a curb.",
            "Represents a lane that is wide enough to park or drive slowly on and is physically accessible from the main roadway. This is part of road surface that\u2019s not used for normal flow of traffic but can be used for emergency purposes, such as emergency stopping and parking or by emergency vehicles. These are often known as emergency use lanes. This should generally be either first or last lane on the road (not counting pedestrian lanes if present). NOTE: In may cases, this may be colloquially called a \u201cshoulder\u201d, but road shoulders may include other areas that are not readily accessible, especially at speed.",
            "This represents an \u201coffset\u201d lane that doesn\u2019t really carry useful semantics but can be used to fill in \u201cgaps\u201d between the sum total of lane widths and the road as represented by distance_to_edge."
          ],
          "type": "string"
        },
        "width": {
          "description": "Width of this lane in meters. In many cases, we will collect this data by dividing the total road width by the number of lanes. On accuracy: This is a rough average width along this segment. If and when we wanted to be more accurate, we'd extend this schema to have full polygons for segments/lanes rather than just this average width.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreLaneProtoLaneConnection": {
      "id": "GeostoreLaneProtoLaneConnection",
      "properties": {
        "boundingMarker": {
          "description": "References to any gcid:physical_lane_marker features that bound this lane connection.",
          "items": {
            "$ref": "GeostoreBoundingMarkerProto"
          },
          "type": "array"
        },
        "connectionToken": {
          "description": "A token that can be used to identify the version of the data about this lane connection.",
          "type": "string"
        },
        "curve": {
          "$ref": "GeostoreCurveConnectionProto",
          "description": "Specifies how the flowline should be synthesized in this connection region. If unspecified, heuristics may be used to pick a sweep shape based on retraction values or neighboring curves."
        },
        "flow": {
          "$ref": "GeostoreFlowLineProto",
          "description": "The most logical path for the center of an object to travel along within the lane connection. Typically, this is the lane connection's center line, but doesn't have to be."
        },
        "laneNumber": {
          "description": "This is the lane number on the target segment. This field is not set if the target segment doesn't have lanes, or we don't know the exact connectivity.",
          "format": "int32",
          "type": "integer"
        },
        "primaryConnection": {
          "description": "True if this connects to the unique, natural continuation of the current lane. At most one LaneConnection per lane can have this field set true. This attribute is of interest to ADAS providers as a hint to which lane a vehicle is likely to follow, in the absence of other information about the vehicle's planned path.",
          "type": "boolean"
        },
        "segment": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "This reference to the other segment is weak, since strong would blow up bounds of all segments."
        }
      },
      "type": "object"
    },
    "GeostoreLanguageTaggedTextProto": {
      "description": "Represents a piece of text with an associated language.",
      "id": "GeostoreLanguageTaggedTextProto",
      "properties": {
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. We place extra restrictions on languages in addition to what the III library requires. See http://go/geo-schema-reference/feature-properties/languages.md",
          "type": "string"
        },
        "text": {
          "description": "The text (UTF-8 encoding).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreLevelProto": {
      "description": "A feature used to represent a logical level, e.g. floor. A feature belonging to a given level should point to the level feature using relation RELATION_ON_LEVEL. The standard feature properties are interpreted as follows: name - Levels should have names according to the following: * Short, elevator-style names, such as \"L\" for \"Lobby\" and \"2\" for \"Second floor\", must be included and must be tagged with FLAG_ABBREVIATED. There must be an unambiguous \"best\" abbreviated name. * Longer names such as \"Ticketing\" or \"Upper Level\" may be present when the level has a specific name. * Non-abbreviated names should only be added if they are known to meaningfully expand upon the abbreviated name. For example, the long name \"Observation Deck 2\" for the abbreviated name \"OD2\" is a good additional name. In contrast, the name \"Level 2\" for the abbreviated name \"2\" is not desired. address - This should always be empty. point, polyline, polygon, center - These should never be set (since we are representing a logical entity). preferred_viewport - This should be the approximate extent of the level. child - This should always be empty.",
      "id": "GeostoreLevelProto",
      "properties": {
        "building": {
          "description": "The building(s) to which this level belongs. A level will typically belong to a single building, but it is valid for a single level to be shared by multiple buildings (for example, a large underground parking lot). These buildings refer back to the level via another strong reference (the BuildingProto.level field).",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "number": {
          "description": "The elevation of this level relative to the ground level, in levels. 0 = ground floor (even in locales that call the ground floor \"1st floor\"); 0.5 = between ground and first floor, eg mezzanine; 1 = first floor (one level above ground floor); -3 = three levels below ground floor.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreLinearStripePatternProto": {
      "id": "GeostoreLinearStripePatternProto",
      "properties": {
        "line": {
          "description": "A linear marker may consist of one or more parallel physical lines. These are ordered left to right along the direction of the marker core polyline.",
          "items": {
            "$ref": "GeostorePhysicalLineProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreLocaleLanguageProto": {
      "description": "This message describes the details of a single language within a locale.",
      "id": "GeostoreLocaleLanguageProto",
      "properties": {
        "language": {
          "description": "The language associated with this preference. The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. We place extra restrictions on languages in addition to what the III library requires. See http://go/geo-schema-reference/feature-properties/languages.md",
          "type": "string"
        },
        "official": {
          "description": "Flag to indicate if the associated language is \"official\" within a locale.",
          "type": "boolean"
        },
        "preference": {
          "description": "This value represents the preference of the associated language within a locale. It must be between 0.0 and 1.0.",
          "format": "float",
          "type": "number"
        },
        "speakingPercent": {
          "description": "Percentage of population that can speak the associated language within a locale. It must be between 0 and 100.",
          "format": "float",
          "type": "number"
        },
        "writingPercent": {
          "description": "Percentage of population that can write the associated language within a locale. It must be between 0 and 100.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreLocaleProto": {
      "description": "A locale is a meta-feature that describes the geographic extent of localization preferences such as the local language, and formatting conventions for numbers, dates and monetary values. Multilingual areas may be contained by multiple locales. We try to model locales fine-grained enough for deciding which languages are typically used within a city. For example, while French is an official language for all of Switzerland, we would prefer to have Zurich contained by a separate (more fine-grained) Swiss-German locale indicating that German, not French, is the predominantly spoken language in this city. Note that language borders are frequently considered a political question and often don't have clearly defined extents. For example, California has a significant Spanish-speaking population, but Spanish is not an official language of California.",
      "id": "GeostoreLocaleProto",
      "properties": {
        "language": {
          "description": "This holds the list of languages spoken within a locale.",
          "items": {
            "$ref": "GeostoreLocaleLanguageProto"
          },
          "type": "array"
        },
        "localizationPolicyId": {
          "description": "The ID of the localization policy (from googledata/geostore/localization/localization_policies.textpb) to apply to features that have this locale as their best match locale. Localization policy IDs are arbitrary identifiers that uniquely distinguish a set of language-selection rules.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreLogicalBorderProto": {
      "description": "A logical border is a grouping of border features, which together model a divide between two regions. The borders within this grouping share common attributes, such as the regions they divide, and may represent a conceptual group of borders, of which may be wholly disputed, wholly undisputed, or a mixture of disputed and undisputed. Note that any borders within this group may be part of multiple logical borders. A logical border is required to have a name describing what the grouping represents (e.g. \"US - Mexico Border\", \"Kosovo - Serbia Border (Disputed)\").",
      "id": "GeostoreLogicalBorderProto",
      "properties": {
        "borderSegment": {
          "description": "All the border segments which make up this logical border. Border segments must be TYPE_BORDER features which have the same left/right features. This is a many-to-many bidirectional relationship, so any border segment within this list might be part of another logical border.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "status": {
          "description": "The logical border status identifies its legal status. This is similar to the BorderStatus present within border segments, but applies to the group as a whole.",
          "enum": [
            "STATUS_UNSPECIFIED",
            "STATUS_NORMAL",
            "STATUS_DISPUTED"
          ],
          "enumDescriptions": [
            "The logical border is neither entirely composed of either normal nor disputed border segments. There are no guarantees about the BorderStatus of its border segments.",
            "This status should be used when both parties agree on the location of the border. These might be called \"de jure\" borders. Most borders will have this status. This status requires that all border segments that make up this logical border have normal border segments.",
            "This status should be used when the two parties disagree on the location of the border. This status requires that all border segments are themselves disputed."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreMediaItemProto": {
      "description": "Media item attached to an element of price list.",
      "id": "GeostoreMediaItemProto",
      "properties": {
        "googleUrl": {
          "description": "The FIFE url associated with the media. NOTE: This FIFE URL must be PII-free, see go/product-catalogue-photo-storage",
          "type": "string"
        },
        "mediaFormat": {
          "enum": [
            "MEDIA_FORMAT_UNSPECIFIED",
            "MEDIA_FORMAT_PHOTO"
          ],
          "enumDescriptions": [
            "Format unspecified.",
            "Media item is a photo."
          ],
          "type": "string"
        },
        "mediaKey": {
          "description": "The mediaKey associated with the media. NOTE: This media key must be PII-free, see go/product-catalogue-photo-storage",
          "type": "string"
        },
        "mediaSize": {
          "$ref": "GeostoreMediaItemProtoMediaSize"
        }
      },
      "type": "object"
    },
    "GeostoreMediaItemProtoMediaSize": {
      "description": "Width and height of the original photo in pixels.",
      "id": "GeostoreMediaItemProtoMediaSize",
      "properties": {
        "originalHeightPx": {
          "format": "int32",
          "type": "integer"
        },
        "originalWidthPx": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreNameProto": {
      "description": "A name for a Feature (street name, point of interest, city, building, etc). We currently use NameProto for two essentially disjoint purposes: 1. Common names, which can be language-specific, or have other kinds of variations. 2. Opaque IDs, such as postal codes, which only have the `text` field set, and potentially some flags. This includes internal-only features like template ids. Each NameProto representing a common name corresponds to an assertion that a fluent speaker or writer of a language would recognize NameProto.text to name the given feature in that language. As such, NameProtos are stored in a repeated field, often having: 1. multiple names with the same text and varying languages, and 2. multiple names with the same language and varying texts.",
      "id": "GeostoreNameProto",
      "properties": {
        "flag": {
          "description": "clang-format on The set of flags that apply to this name.",
          "items": {
            "enum": [
              "FLAG_ANY",
              "FLAG_IN_LOCAL_LANGUAGE",
              "FLAG_PREFERRED",
              "FLAG_OFFICIAL",
              "FLAG_OBSCURE",
              "FLAG_ON_SIGNS",
              "FLAG_EXIT_NAME_NUMBER",
              "FLAG_EXIT_NAME",
              "FLAG_INTERCHANGE_NAME",
              "FLAG_EXIT_NUMBER",
              "FLAG_INTERCHANGE_NUMBER",
              "FLAG_TRANSIT_HEADSIGN",
              "FLAG_CONNECTS_DIRECTLY",
              "FLAG_CONNECTS_INDIRECTLY",
              "FLAG_INTERSECTION_NAME",
              "FLAG_VANITY",
              "FLAG_ROUTE_NUMBER",
              "FLAG_COUNTRY_CODE_2",
              "FLAG_ABBREVIATED",
              "FLAG_ID",
              "FLAG_DESIGNATED_MARKET_AREA_ID",
              "FLAG_IATA_ID",
              "FLAG_ICAO_ID",
              "FLAG_ISO_3166_2",
              "FLAG_COUNTRY_SPECIFIC_ID",
              "FLAG_LANGUAGE_CODE",
              "FLAG_TIMEZONE_ID",
              "FLAG_PHONE_NUMBER_PREFIX",
              "FLAG_PHONE_NUMBER_AREA_CODE",
              "FLAG_TRANSLITERATED",
              "FLAG_NOT_ON_SIGNS",
              "FLAG_NOT_IN_LOCAL_LANGUAGE",
              "FLAG_ROUNDABOUT_ROUTE",
              "FLAG_NEVER_DISPLAY",
              "FLAG_BICYCLE_ROUTE",
              "FLAG_MACHINE_GENERATED",
              "FLAG_SUSPICIOUS"
            ],
            "enumDescriptions": [
              "ABSTRACT",
              "This name is in one of the local languages. A local language is one readable by local people, where all language/script/region subtags in the language field are local. E.g. \"ru\" is local in Russia, but \"ru-Latn\" (transliterated in Latin script) is not local. This is the opposite of FLAG_NOT_IN_LOCAL_LANGUAGE. In general, a given name should have either FLAG_IN_LOCAL_LANGUAGE or FLAG_NOT_IN_LOCAL_LANGUAGE specified. Importers that are unsure should not set either flag. It doesn't make sense to set this flag unless you also specify a language. NOTE: unlike most other flags in this enumeration, this flag has to do with the language field, NOT to the text (and {raw,short}_text fields).",
              "This is the most commonly recognized name for this feature (for a given language, when languages apply). This flag is not compatible with the following flags: - FLAG_NEVER_DISPLAY - FLAG_OBSCURE",
              "This name is officially recognized by the government. This flag is not compatible with FLAG_SUSPICIOUS.",
              "This name is not commonly known. This flag is used on names that are not commonly known, or not \"standard\", but which we wish to have so clients can search on them. An example would be \"Philly\" instead of \"Philadelphia\".",
              "ABSTRACT",
              "This name is an exit name/number found on signs.",
              "This flag is used to differentiate exit names from exit numbers on signs that have both.",
              "The highway sign is labeling a highway interchange instead of an exit. In several European countries interchanges are differentiated from highway exits.",
              "This flag is used to differentiate exit numbers from exit names on signs that have both. This flag is not compatible with FLAG_ROUTE_NUMBER.",
              "The highway sign is labeling a highway interchange the same manner as FLAG_INTERCHANGE_NAME.",
              "The headsign of a transit vehicle, often the name of the destination.",
              "The road sign target is directly connected (e.g., at end of ramp).",
              "The road sign target is not directly connected (e.g., must travel some additional distance).",
              "This name is an intersection name found on signs. Usually we can just use the name of a TYPE_INTERSECTION_GROUP feature. However, there are road signs on some intersections in Japan, especially in Hokkaido region where the intersection name is considered \"directional\" (i.e. an intersection could have multiple names depending on directions drivers or pedestrians approach from). Many people think of them as \"intersection names\", but that's not really what they are. We want to model them as road signs, because that's really what they are. This flag is supposed to be used by Pathfinder to generate the appropriate maneuver texts where such a named intersection is involved.",
              "This is a vanity name (usually an alternate name for a section of road in honor of some person).",
              "This name is a route number from an official numbering system for highways or similar routes (like bicycle routes). Street names (even numbered ones like in Manhattan) are excluded. The name (both text and short_text) should follow a strictly-defined format determined by the official numbering system. Route numbers may be assigned to segments on city streets as well as highways. (US-101 passing through San Francisco is an example that has both.) Historic route names that are no longer part of an official numbering system (like the former US-66) are not route numbers. This flag is not compatible with FLAG_EXIT_NUMBER.",
              "This name is a two-letter ISO 3166-1 country code. It has code 0x81 instead of 0x8 for historical reasons (FLAG_COUNTRY_CODE and FLAG_COUNTRY_CODE_3 were removed in the belief that we only want one way to represent a country code in the Geo Schema).",
              "An abbreviated version of the name, for example \"CA\" for California. This flag should be used for postal abbreviations that one would expect to see in an address. It should also be used for names where one of the component words is abbreviated (e.g. \"Mass.\" for Massachusetts, \"NWFP\" for the North-West Frontier Province in Pakistan, or \"L\" for the Lobby level in a building). Shortened forms of names (e.g. \"Kingston\" rather than \"Kingston-upon-Hull\") should be marked obscure rather than abbreviated. This flag should be used for names that are feature specific abbreviations. For shortened name versions based on regular, per-term transformations (ex: '1st Street' -> '1st St'), use the short_text field instead.",
              "ABSTRACT",
              "This name is a Designated Market Area ID number (ex: 501)",
              "This name is a three-letter IATA airport code (ex SFO, ZRH).",
              "This name is a four-letter ICAO airport code (ex KSFO, LSZH).",
              "This name is the ISO 3166-2 country subdivision code.",
              "This name is the country specific ID. For example, China government specifies an admin code for each administrative area (province, city and district).",
              "This name is an IETF BCP 47 language code, for example \"fr-CA\". Previously used for names of locales. See locale.proto for new way of defining this information.",
              "This name is a timezone identifier in the Olson database, for example \"Europe/Zurich\". All timezones have an Olson identifier, understood by POSIX and Google's i18n/identifiers libraries. This flag applies only to features of TYPE_TIMEZONE type and at most one name should have this flag set",
              "This name is the prefix for a phone number, starting with + and followed by a country code. This flag applies only to features of TYPE_PHONE_NUMBER_PREFIX type and at most one name should have this flag set.",
              "This name is the commonly used name for the area code of a phone number, including the national prefix if applicable. This flag applies only to features of TYPE_PHONE_NUMBER_AREA_CODE type and at most one name should have this flag set.",
              "The flag used to indicate the name was transliterated from some other character set. For example, this flag would be set on names transliterated from the Cyrillic or Greek alphabets to a Latin alphabet. The correct approach is to use the Google III language code to specify the appropriate language. For example, Greek transliterated into a Latin alphabet should have a language code of \"el-Latn\".",
              "There are two kinds of street signs: \"location signs\" and \"guidance signs\". Location signs are the ones you see that tell you where you are. \"Ah, I'm on 85th Street and I'm crossing 6th Avenue.\" Guidance signs are the ones that give you hints about how to get where you want to go. \"Ah, I should go that way to get on I-5 to Seattle.\" This flag is talking about location signs. You'll find this flag on route names when then name is never posted on location signs. This flag is not compatible with flags in the FLAG_ON_SIGNS category.",
              "This name is not in one of the local languages. A local language is one readable by local people, where all language/script/region subtags in the language field are local. E.g. \"ru\" is local in Russia, but \"ru-Latn\" (transliterated in Latin script) is not local. This is the opposite of FLAG_IN_LOCAL_LANGUAGE. In general, a given name should have either FLAG_IN_LOCAL_LANGUAGE or FLAG_NOT_IN_LOCAL_LANGUAGE specified. Importers that are unsure should not set either flag. It doesn't make sense to set this flag unless you also specify a language. NOTE: unlike most other flags in this enumeration, this flag has to do with the language field, NOT to the text (and {raw,short}_text fields).",
              "This flag is set on routes attached to roundabout segments if and only if this name does not appear on any of the segments incident on the roundabout. This flag can be used by clients to determine which names on roundabouts are more useful than others when displaying to users.",
              "Never display this name to a user. This flag is typically used for politically sensitive names such as \"Taiwan, Province of China\". Any feature which has a name with this flag should have another name without it so we have something to display to the user.",
              "Routes with these names are common bicycle routes. This includes bicycle trails and routes along shared roadways to popular destinations for cyclists. Unnamed bicycle routes along named shared roadways should not have names of this type. This flag exists so that we can avoid showing bicycle route names in driving directions, while still showing them in bicycling directions.",
              "This name is generated automatically by the transliteration pipeline based on an existing name in a different language. Contact Maps Translation team (go/maps-translation) for details.",
              "This name may not be a correct name for a feature. It communicates to clients that the name may not be trustworthy. Examples are names of features that are too general (\"swimming pool\", \"hardware store\" etc) or those that incorrectly match names of prominent political features (businesses, transit stations etc named after sublocalities). This flag is not compatible with FLAG_OFFICIAL."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. These strings should be treated as opaque blobs. You can use LanguageCodeConverter::FromOther to convert the string to a LanguageCode reference. You can then call methods on the LanguageCode class to extract language/script/region subtags (if any). See also http://g3doc/i18n/identifiers/g3doc/using-iii. We place extra restrictions on languages in addition to what the III library requires. See go/geo-schema-reference/feature-properties/languages. This field may be missing if the name does not have a concept of language but should be set if the language is unknown.",
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this name. NOTE: there are multiple NameProto fields in the Geo Schema. Metadata here is only expected to be present on FeatureProto.name[]."
        },
        "rawText": {
          "description": "** DEPRECATED ** The name text provided in the original source data (UTF-8 encoding). This is the text provided in the source data unmodified with the exception of being converted to UTF-8 and stripping extra leading, trailing and duplicate whitespaces (if necessary).",
          "type": "string"
        },
        "shortText": {
          "description": "The short name text (UTF-8 encoding). Acronyms/abbreviations should be consistently used, for example \"NE 57th St\" rather than \"Northeast 57th Street\", \"N.E 57th St.\" or some other variant. This field should be populated with the chosen canonical version of the shortened name, based on per-term transformations. For feature specific abbreviations (such as 'CA' for 'California'), one should define a separate name with FLAG_ABBREVIATED set. For other variants of the shortened name that are not the canonical one, devise client based logic (ex: query rewriting rules).",
          "type": "string"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a name. Never set in MapFacts."
        },
        "text": {
          "description": "The name text (UTF-8 encoding). Acronyms/abbreviations should be fully expanded, for example \"Northeast 57th Street\" rather than \"NE 57th St\". They can be shortened at display or geocode time. This decision prevents ambiguity over such issues as whether \"St\" represents \"Street\" or \"Saint\". However, it pushes language-specific knowledge into code. We will have libraries and data files to contract acronyms/abbreviations at run-time.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreOntologyRawGConceptInstanceContainerProto": {
      "description": "The container for all GConceptInstances associated with a feature.",
      "id": "GeostoreOntologyRawGConceptInstanceContainerProto",
      "properties": {
        "instance": {
          "items": {
            "$ref": "GeostoreOntologyRawGConceptInstanceProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreOntologyRawGConceptInstanceProto": {
      "description": "A RawGConceptInstanceProto contains all data required by both internal and external clients. We store the 'public' data in a GConceptInstanceProto and the 'private' data inside of RawGConceptInstanceProto. NOTE: this doesn't really match the design we want anymore. Please talk to the Geo Schema team if you are planning to make use of the \"private\" fields below.",
      "id": "GeostoreOntologyRawGConceptInstanceProto",
      "properties": {
        "instance": {
          "$ref": "GeostoreGConceptInstanceProto",
          "description": "This is the 'public' section of the GConceptInstance."
        },
        "isAddedByEdit": {
          "description": "** DEPRECATED ** Was this GConcept explicitly added by an edit? Examples of gconcepts not added by edits include those inferred through geo ontology and those mapped from legacy category forms by the feature updater. Note that it is possible for both is_added_by_edit and is_inferred to be true - it means this gconcept is added by an edit and there is also another more fine-grained gconcept added by an edit.",
          "type": "boolean"
        },
        "isInferred": {
          "description": "RESERVED",
          "type": "boolean"
        },
        "provider": {
          "description": "** DEPRECATED ** These two fields combined describe the source of a GConceptInstance. They are based on geostore/base/proto/datasourceprovider.proto. Their use has been deprecated. Use the FieldMetadataProto inside instance instead.",
          "enum": [
            "PROVIDER_ANY",
            "PROVIDER_UNKNOWN",
            "PROVIDER_NAVTEQ",
            "PROVIDER_TELE_ATLAS",
            "PROVIDER_TELE_ATLAS_MULTINET",
            "PROVIDER_TELE_ATLAS_CODEPOINT",
            "PROVIDER_TELE_ATLAS_GEOPOST",
            "PROVIDER_TELE_ATLAS_DATAGEO",
            "PROVIDER_TELE_ATLAS_ADDRESS_POINTS",
            "PROVIDER_TELCONTAR",
            "PROVIDER_EUROPA",
            "PROVIDER_ROYAL_MAIL",
            "PROVIDER_GOOGLE",
            "PROVIDER_GOOGLE_HAND_EDIT",
            "PROVIDER_GOOGLE_BORDERS",
            "PROVIDER_GOOGLE_SUBRANGE",
            "PROVIDER_GOOGLE_GT_FUSION",
            "PROVIDER_GOOGLE_ZAGAT_CMS",
            "PROVIDER_GOOGLE_PLACE_NAVBOOST",
            "PROVIDER_GOOGLE_FOOTPRINT",
            "PROVIDER_GOOGLE_PRODUCT_TERMS",
            "PROVIDER_GOOGLE_POINTCARDS",
            "PROVIDER_GOOGLE_BUSINESS_CHAINS",
            "PROVIDER_GOOGLE_LOCAL_SUMMARIZATION",
            "PROVIDER_GOOGLE_PRONUNCIATIONS",
            "PROVIDER_GOOGLE_DUMPLING",
            "PROVIDER_GOOGLE_DISTILLERY",
            "PROVIDER_GOOGLE_LOCAL_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_RELATION_MINER",
            "PROVIDER_GOOGLE_MAPSPAM",
            "PROVIDER_GOOGLE_ROSE",
            "PROVIDER_GOOGLE_LOCAL_PLACE_RATINGS",
            "PROVIDER_GOOGLE_WIPEOUT",
            "PROVIDER_GOOGLE_KNOWLEDGE_GRAPH",
            "PROVIDER_GOOGLE_BEEGEES",
            "PROVIDER_GOOGLE_REVIEW_SUMMARIZATION",
            "PROVIDER_GOOGLE_OFFLINE_NON_CORE_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_GEO_WORLDMAPS",
            "PROVIDER_GOOGLE_GEO_MODERATION",
            "PROVIDER_GOOGLE_OYSTER_AUTO_EDITS",
            "PROVIDER_GOOGLE_LOCAL_ALCHEMY",
            "PROVIDER_GOOGLE_KEROUAC",
            "PROVIDER_GOOGLE_MOBRANK",
            "PROVIDER_GOOGLE_RAPTURE",
            "PROVIDER_GOOGLE_CULTURAL_INSTITUTE",
            "PROVIDER_GOOGLE_GEOCODES_FROM_LOCAL_FEEDS",
            "PROVIDER_GOOGLE_ATTRIBUTES_FROM_CRAWLED_CHAINS",
            "PROVIDER_GOOGLE_TACTILE_MAPS",
            "PROVIDER_GOOGLE_MAPS_FOR_MOBILE",
            "PROVIDER_GOOGLE_GEO_REALTIME",
            "PROVIDER_GOOGLE_PROMINENT_PLACES",
            "PROVIDER_GOOGLE_PLACE_ACTIONS",
            "PROVIDER_GOOGLE_GT_AUTO_EDITS",
            "PROVIDER_GOOGLE_WAZE",
            "PROVIDER_GOOGLE_ONTHEGO",
            "PROVIDER_GOOGLE_GT_IMPORT",
            "PROVIDER_GOOGLE_STRUCTURED_DATA",
            "PROVIDER_GOOGLE_HELICOPTER",
            "PROVIDER_GOOGLE_ROLLBACK",
            "PROVIDER_GOOGLE_RIGHTS_REPAIR",
            "PROVIDER_GOOGLE_PERFUME",
            "PROVIDER_GOOGLE_MAPS_TRANSLATION",
            "PROVIDER_GOOGLE_CALL_ME_MAYBE",
            "PROVIDER_GOOGLE_LOCAL_UNIVERSAL",
            "PROVIDER_GOOGLE_CROUPIER",
            "PROVIDER_GOOGLE_SKYSMART",
            "PROVIDER_GOOGLE_RIDDLER",
            "PROVIDER_GOOGLE_ROADCLOSURES",
            "PROVIDER_GOOGLE_SPORE",
            "PROVIDER_GOOGLE_LOCALIZATION",
            "PROVIDER_GOOGLE_CATTERMS",
            "PROVIDER_GOOGLE_GT_FIELD_OPS",
            "PROVIDER_GOOGLE_MATCHMAKER",
            "PROVIDER_GOOGLE_ARBITRATION",
            "PROVIDER_GOOGLE_BIZBUILDER_OPS",
            "PROVIDER_GOOGLE_LOCAL_INVENTORY_ADS",
            "PROVIDER_GOOGLE_GT_DRAFTY",
            "PROVIDER_GOOGLE_HOTELADS_OPS",
            "PROVIDER_GOOGLE_MARKERS",
            "PROVIDER_GOOGLE_STATE_MACHINE",
            "PROVIDER_GOOGLE_ATTRIBUTES_INFERENCE",
            "PROVIDER_GOOGLE_BIKESHARE",
            "PROVIDER_GOOGLE_GHOSTWRITER",
            "PROVIDER_GOOGLE_EDIT_PLATFORM",
            "PROVIDER_GOOGLE_BLUE_GINGER",
            "PROVIDER_GOOGLE_GEO_TIGER",
            "PROVIDER_GOOGLE_HYADES",
            "PROVIDER_GOOGLE_WEBQUARRY",
            "PROVIDER_GOOGLE_GEO_MADDEN",
            "PROVIDER_GOOGLE_ANDROID_PAY",
            "PROVIDER_GOOGLE_OPENING_HOURS_TEAM",
            "PROVIDER_GOOGLE_LOCAL_DISCOVERY",
            "PROVIDER_GOOGLE_LOCAL_HEALTH",
            "PROVIDER_GOOGLE_UGC_MAPS",
            "PROVIDER_GOOGLE_FIBER",
            "PROVIDER_GOOGLE_REVGEO",
            "PROVIDER_GOOGLE_HOTELADS_PARTNER_FRONT_END",
            "PROVIDER_GOOGLE_GEO_UGC_TASKS",
            "PROVIDER_GOOGLE_GEOCODING",
            "PROVIDER_GOOGLE_SPYGLASS",
            "PROVIDER_GOOGLE_PLUS_CODES_AS_ADDRESSES",
            "PROVIDER_GOOGLE_GEO_CHANGES",
            "PROVIDER_GOOGLE_HUME",
            "PROVIDER_GOOGLE_MEGAMIND",
            "PROVIDER_GOOGLE_GT_ROADSYNTH",
            "PROVIDER_GOOGLE_FIREBOLT",
            "PROVIDER_GOOGLE_LOCAL_PLACE_OFFERINGS",
            "PROVIDER_GOOGLE_UGC_SERVICES",
            "PROVIDER_GOOGLE_GEOALIGN",
            "PROVIDER_GOOGLE_GT_COMPOUNDS",
            "PROVIDER_GOOGLE_FOOD_ORDERING",
            "PROVIDER_GOOGLE_HOTEL_KNOWLEDGE_OPS",
            "PROVIDER_GOOGLE_URAW",
            "PROVIDER_GOOGLE_FLYEYE",
            "PROVIDER_GOOGLE_YOUKE",
            "PROVIDER_GOOGLE_GT_ZEPHYR",
            "PROVIDER_GOOGLE_USER_SAFETY",
            "PROVIDER_GOOGLE_ADDRESS_MAKER",
            "PROVIDER_GOOGLE_UGC_PHOTOS",
            "PROVIDER_GOOGLE_GT_WINDCHIME",
            "PROVIDER_GOOGLE_SNAG_FIXER",
            "PROVIDER_GOOGLE_GEO_DEALS",
            "PROVIDER_GOOGLE_LOCAL_PLACE_TOPICS",
            "PROVIDER_GOOGLE_PROPERTY_INSIGHTS",
            "PROVIDER_GOOGLE_GEO_CONSUMER_MERCHANT_EXPERIMENTS",
            "PROVIDER_GOOGLE_GEO_PORTKEY",
            "PROVIDER_GOOGLE_ROAD_MAPPER",
            "PROVIDER_GOOGLE_LOCATION_PLATFORM",
            "PROVIDER_GOOGLE_POSTTRIP",
            "PROVIDER_GOOGLE_TRAVEL_DESTINATION",
            "PROVIDER_GOOGLE_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_BIZBUILDER_CLEANUP",
            "PROVIDER_GOOGLE_USER",
            "PROVIDER_GOOGLE_STATION",
            "PROVIDER_GOOGLE_GEO_FOOD",
            "PROVIDER_GOOGLE_GEO_AR",
            "PROVIDER_GOOGLE_GEO_TEMPORAL",
            "PROVIDER_GOOGLE_SERVICES_MARKETPLACE",
            "PROVIDER_GOOGLE_IMT_CLEANUP",
            "PROVIDER_GOOGLE_GEO_FOOD_MENU",
            "PROVIDER_GOOGLE_CARENAV",
            "PROVIDER_GOOGLE_DRIVING_FEEDS",
            "PROVIDER_GOOGLE_DRIVING_UGC",
            "PROVIDER_GOOGLE_POLAR",
            "PROVIDER_GOOGLE_TRIWILD",
            "PROVIDER_GOOGLE_CROWD_COMPUTE_OPS",
            "PROVIDER_GOOGLE_SA_FROM_WEB",
            "PROVIDER_GOOGLE_POI_ALIGNMENT",
            "PROVIDER_GOOGLE_SA_FROM_HULK",
            "PROVIDER_GOOGLE_SERVICES_INTERACTIONS",
            "PROVIDER_GOOGLE_ROADS_UGC_EDITOR",
            "PROVIDER_GOOGLE_SA_FROM_NG_INFERENCE",
            "PROVIDER_GOOGLE_GEO_DRIVING_VIZ",
            "PROVIDER_GOOGLE_GEO_TASKING",
            "PROVIDER_GOOGLE_CROWDTASK_DATACOMPUTE",
            "PROVIDER_GOOGLE_CROWDTASK_TASKADS",
            "PROVIDER_GOOGLE_CROWDTASK_TASKMATE",
            "PROVIDER_GOOGLE_CROWDTASK_FURBALL",
            "PROVIDER_GOOGLE_CROWDTASK_ADAP",
            "PROVIDER_GOOGLE_GPAY",
            "PROVIDER_GOOGLE_GEO_UGC_TRUSTED_USERS",
            "PROVIDER_GOOGLE_THIRD_PARTY_DATA_PRODUCTION",
            "PROVIDER_GOOGLE_GEOTRACKER",
            "PROVIDER_GOOGLE_LOCAL_LANDMARK_INFERENCE",
            "PROVIDER_GOOGLE_GEO_CLOSED_LOOP",
            "PROVIDER_GOOGLE_SA_FROM_MERCHANT_POSTS",
            "PROVIDER_GOOGLE_CORE_DATA_RIGHTS",
            "PROVIDER_GOOGLE_SA_FROM_USER_REVIEWS",
            "PROVIDER_GOOGLE_GEO_CONTENT_FIXER",
            "PROVIDER_GOOGLE_POLYGON_REFINEMENT",
            "PROVIDER_GOOGLE_HANASU",
            "PROVIDER_GOOGLE_FULLRIGHTS_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_FULLRIGHTS_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_ATTRIBUTION_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_SA_FROM_FOOD_MENUS",
            "PROVIDER_GOOGLE_GT_CONSISTENCY_EDITS",
            "PROVIDER_GOOGLE_SA_QUALITY",
            "PROVIDER_GOOGLE_GDCE_CLEANUP",
            "PROVIDER_GOOGLE_UGC_QUALITY_CHAINS",
            "PROVIDER_GOOGLE_ATTRIBUTES_DISCOVERY",
            "PROVIDER_GOOGLE_GEO_LDE",
            "PROVIDER_GOOGLE_GEO_SIGNAL_TRACKING",
            "PROVIDER_GOOGLE_UGC_AGGREGATION",
            "PROVIDER_GOOGLE_3D_BASEMAP",
            "PROVIDER_GOOGLE_MAPFACTS_PRIVACY",
            "PROVIDER_GOOGLE_GT_ALF",
            "PROVIDER_GOOGLE_GT_OPERATOR_PROVENANCE",
            "PROVIDER_GOOGLE_LOCAL_SERVICES_ADS",
            "PROVIDER_GOOGLE_LOCALSEARCH",
            "PROVIDER_GOOGLE_TRANSIT",
            "PROVIDER_GOOGLE_GEOWIKI",
            "PROVIDER_GOOGLE_CHINA_LOCAL_TEAM",
            "PROVIDER_GOOGLE_SYNTHESIZED",
            "PROVIDER_GOOGLE_INTERNAL_TEST",
            "PROVIDER_GOOGLE_DISPUTED_AREAS",
            "PROVIDER_GOOGLE_3DWAREHOUSE",
            "PROVIDER_GOOGLE_GROUNDS_BUILDER",
            "PROVIDER_GOOGLE_SESAME",
            "PROVIDER_GOOGLE_GT",
            "PROVIDER_GOOGLE_GT_BASEMAP_UPLOAD",
            "PROVIDER_GOOGLE_ADSDB",
            "PROVIDER_GOOGLE_MACHINE_TRANSLITERATION",
            "PROVIDER_GOOGLE_TRAVELSEARCH",
            "PROVIDER_GOOGLE_PANORAMIO",
            "PROVIDER_GOOGLE_YOUTUBE",
            "PROVIDER_GOOGLE_OLD",
            "PROVIDER_GOOGLE_STREETVIEW",
            "PROVIDER_GOOGLE_STREETVIEW_BIZVIEW",
            "PROVIDER_GOOGLE_ZIPIT",
            "PROVIDER_GOOGLE_OYSTER_CONNECT_ROUTES",
            "PROVIDER_GOOGLE_GOLDEN",
            "PROVIDER_GOOGLE_INNERSPACE",
            "PROVIDER_GOOGLE_MAPSEARCH",
            "PROVIDER_GOOGLE_CATEGORIES_TEAM",
            "PROVIDER_GOOGLE_CROWDSENSUS",
            "PROVIDER_GOOGLE_LOCAL_ALGORITHMIC_IDENTITY",
            "PROVIDER_GOOGLE_FREEBASE",
            "PROVIDER_GOOGLE_HOTELADS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGES",
            "PROVIDER_GOOGLE_PLACES_API",
            "PROVIDER_GOOGLE_NAMEHEATMAP",
            "PROVIDER_GOOGLE_MAPMAKER",
            "PROVIDER_GOOGLE_MAPMAKER_MOBILE",
            "PROVIDER_GOOGLE_MAPMAKER_PANCAKE",
            "PROVIDER_GOOGLE_MAPMAKER_V2",
            "PROVIDER_GOOGLE_LOCAL_CLUSTERING_OPERATOR_OVERRIDE",
            "PROVIDER_GOOGLE_SERVED_ON_MAPMAKER",
            "PROVIDER_GOOGLE_GT_LOCAL",
            "PROVIDER_GOOGLE_GT_LOCAL_WITH_RIGHTS",
            "PROVIDER_GOOGLE_LOGS_RANKING_SIGNALS",
            "PROVIDER_GOOGLE_ENTITY_NAVBOOST",
            "PROVIDER_GOOGLE_RELATED_PLACES",
            "PROVIDER_GOOGLE_KNOWN_FOR_TERMS",
            "PROVIDER_GOOGLE_SYNTHETIC_AREAS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGE_PHOTOS",
            "PROVIDER_GOOGLE_CROSS_STREETS",
            "PROVIDER_GOOGLE_CORRIDORS",
            "PROVIDER_GOOGLE_BICYCLE_RENTAL",
            "PROVIDER_GOOGLE_CONCRETE_URLS",
            "PROVIDER_GOOGLE_LEANBACK",
            "PROVIDER_GOOGLE_LOCKED_LISTINGS",
            "PROVIDER_GOOGLE_MONITORING",
            "PROVIDER_GOOGLE_SPROUT",
            "PROVIDER_GOOGLE_LOCAL_SEARCH_QUALITY",
            "PROVIDER_GOOGLE_GOBY",
            "PROVIDER_GOOGLE_PROBLEM_REPORT",
            "PROVIDER_GOOGLE_CANDID",
            "PROVIDER_GOOGLE_BIZBUILDER",
            "PROVIDER_AUTOMOTIVE_NAVIGATION_DATA",
            "PROVIDER_MAPDATA_SCIENCES",
            "PROVIDER_MAPONICS",
            "PROVIDER_SKI_RESORTS",
            "PROVIDER_ZENRIN",
            "PROVIDER_SANBORN",
            "PROVIDER_URBAN_MAPPING",
            "PROVIDER_US_GOVERNMENT",
            "PROVIDER_US_CENSUS",
            "PROVIDER_US_POSTAL_SERVICE",
            "PROVIDER_US_GEOLOGICAL_SURVEY",
            "PROVIDER_US_GNIS",
            "PROVIDER_US_LANDSAT",
            "PROVIDER_US_NATIONAL_GEOSPATIAL_INTELLIGENCE_AGENCY",
            "PROVIDER_US_NGA_GNS",
            "PROVIDER_US_SSIBL",
            "PROVIDER_US_BUREAU_OF_TRANSPORTATION_STATISTICS",
            "PROVIDER_US_NATIONAL_OCEANIC_AND_ATMOSPHERIC_ADMINISTRATION",
            "PROVIDER_US_POLAR_GEOSPATIAL_CENTER",
            "PROVIDER_US_DEPARTMENT_OF_AGRICULTURE",
            "PROVIDER_US_NPI_REGISTRY",
            "PROVIDER_US_BUREAU_OF_INDIAN_AFFAIRS",
            "PROVIDER_DMTI_SPATIAL",
            "PROVIDER_INTERNATIONAL_HYDROGRAPHIC_ORGANIZATION",
            "PROVIDER_MAPLINK",
            "PROVIDER_KINGWAY",
            "PROVIDER_GEOCENTRE",
            "PROVIDER_CN_NATIONAL_FOUNDAMENTAL_GIS",
            "PROVIDER_CN_MAPABC",
            "PROVIDER_SMITHSONIAN_INSTITUTE",
            "PROVIDER_TRACKS_FOR_AFRICA",
            "PROVIDER_PPWK",
            "PROVIDER_LEADDOG",
            "PROVIDER_CENTRE_DONNEES_ASTRONOMIQUES_STRASBOURG",
            "PROVIDER_GISRAEL",
            "PROVIDER_BASARSOFT",
            "PROVIDER_MAPINFO",
            "PROVIDER_MAPIT",
            "PROVIDER_GEOBASE",
            "PROVIDER_ORION",
            "PROVIDER_CENTRAL_EUROPEAN_DATA_AGENCY",
            "PROVIDER_ANASAT",
            "PROVIDER_MINED_POSTCODES",
            "PROVIDER_DMAPAS",
            "PROVIDER_COMMON_LOCALE_DATA_REPOSITORY",
            "PROVIDER_CH_SBB",
            "PROVIDER_SKENERGY",
            "PROVIDER_GBRMPA",
            "PROVIDER_KOREA_POST",
            "PROVIDER_CN_AUTONAVI",
            "PROVIDER_MINED_POI",
            "PROVIDER_ML_INFOMAP",
            "PROVIDER_SNOOPER",
            "PROVIDER_GEOSISTEMAS",
            "PROVIDER_AFRIGIS",
            "PROVIDER_TRANSNAVICOM",
            "PROVIDER_EASYCONNECT",
            "PROVIDER_LANTMATERIET",
            "PROVIDER_LOGICA",
            "PROVIDER_MAPKING",
            "PROVIDER_DIANPING",
            "PROVIDER_GEONAV",
            "PROVIDER_HEIBONSHA",
            "PROVIDER_DEUTSCHE_TELEKOM",
            "PROVIDER_LINGUISTIC_DATA_CONSORTIUM",
            "PROVIDER_ACXIOM",
            "PROVIDER_DUN_AND_BRADSTREET",
            "PROVIDER_FEDERAL_AVIATION_ADMINISTRATION",
            "PROVIDER_INFOUSA",
            "PROVIDER_INFOUSA_NIXIE",
            "PROVIDER_THOMSON_LOCAL",
            "PROVIDER_TELEFONICA_PUBLICIDAD_E_INFORMACION",
            "PROVIDER_WIKIPEDIA",
            "PROVIDER_INFOBEL",
            "PROVIDER_MX_GOVERNMENT",
            "PROVIDER_MX_NATIONAL_INSTITUTE_STATISTICS_GEOGRAPHY",
            "PROVIDER_MX_SERVICIO_POSTAL_MEXICANO",
            "PROVIDER_TELEGATE",
            "PROVIDER_TELELISTAS",
            "PROVIDER_MAPCITY",
            "PROVIDER_EXPLAINER_DC",
            "PROVIDER_DAIKEI",
            "PROVIDER_NL_CHAMBER_OF_COMMERCE",
            "PROVIDER_KOREA_INFO_SERVICE",
            "PROVIDER_WIKITRAVEL",
            "PROVIDER_FLICKR",
            "PROVIDER_DIANCO",
            "PROVIDER_VOLT_DELTA",
            "PROVIDER_SG_GOVERNMENT",
            "PROVIDER_SG_LAND_TRANSPORT_AUTHORITY",
            "PROVIDER_MAPBAR",
            "PROVIDER_LONGTU",
            "PROVIDER_SA_GOVERNMENT",
            "PROVIDER_SA_SAUDI_POST",
            "PROVIDER_PEAKLIST",
            "PROVIDER_LOCAL_BUSINESS_CENTER",
            "PROVIDER_LOCAL_FEED_XML",
            "PROVIDER_WEB",
            "PROVIDER_RAILS_TO_TRAILS",
            "PROVIDER_INDIACOM",
            "PROVIDER_INFOMEDIA",
            "PROVIDER_PICASA",
            "PROVIDER_AT_GOVERNMENT",
            "PROVIDER_AT_BUNDESAMT_FUR_EICH_UND_VERMESSUNGSWESEN",
            "PROVIDER_AT_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_AT_AUSTRIA_POST",
            "PROVIDER_NO_GOVERNMENT",
            "PROVIDER_NO_NORSK_EIENDOMSINFORMASJON",
            "PROVIDER_NO_POSTEN_NORGE_AS",
            "PROVIDER_CH_GOVERNMENT",
            "PROVIDER_CH_SWISS_POST",
            "PROVIDER_CH_SWISSTOPO",
            "PROVIDER_CH_SWISS_NATIONAL_PARK",
            "PROVIDER_NAVIT",
            "PROVIDER_GEOSEARCH",
            "PROVIDER_DE_GOVERNMENT",
            "PROVIDER_BUNDESAMT_KARTOGRAPHIE_UND_GEODASIE",
            "PROVIDER_BUNDESNETZAGENTUR",
            "PROVIDER_SCHOBER_GROUP",
            "PROVIDER_MIREO",
            "PROVIDER_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WEBSTER_TEXAS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_AMHERST_MASSACHUSETTS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BLOOMINGTON_INDIANA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PASADENA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_CHULA_VISTA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_TEMPE_ARIZONA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_COLUMBUS_OHIO",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PORTAGE_MICHIGAN",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GEORGETOWN_KENTUCKY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GREENVILLE_SOUTH_CAROLINA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_NASHVILLE_TENNESSEE",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WASHINGTON_DISTRICT_OF_COLUMBIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BOULDER_COLORADO",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY_ENVIRONMENT_BAY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY_BIELSKO_BIALA",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_FRANKFURT",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_HAMBURG",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_KARLSRUHE",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY_SANTA_CRUZ",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_KLAGENFURT",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_LINZ",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_AZKOITIA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_BEASAIN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_GIRONA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_SAN_SEBASTIAN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_CATALUNYA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_HONDARRIBIA",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY_LAUNCESTON_TASMANIA",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY_REYKJAVIK",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY_AMELSTEVEEN",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY_ANTWERPEN",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_FREDERICTON_NEW_BRUNSWICK",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_KAMLOOPS_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_NANAIMO_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_BANFF_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_CALGARY_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_TORONTO_ONTARIO",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY_UMEA",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY_KHARKIV",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY_AQUA_CALIENTE_CAHUILLA_INDIANS",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_PONT_AUDEMER",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_BORDEAUX",
            "PROVIDER_SG_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY_RIO_DE_JANEIRO",
            "PROVIDER_MAPCUBE",
            "PROVIDER_3D_REALITYMAPS",
            "PROVIDER_DEUTSCHES_ZENTRUM_FUR_LUFT_UND_RAUMFAHRT",
            "PROVIDER_3D_CITIES_SOCIEDADE_ANONIMA",
            "PROVIDER_DISNEY",
            "PROVIDER_CYBERCITY",
            "PROVIDER_PRECISION_LIGHTWORKS_MODELWORKS",
            "PROVIDER_VIRTUAL_HUNGARY_LIMITED",
            "PROVIDER_VIRTUEL_CITY",
            "PROVIDER_SCREAMPOINT_INTERNATIONAL",
            "PROVIDER_AGENTSCHAP_VOOR_GEOGRAFISCHE_INFORMATIE_VLAANDEREN",
            "PROVIDER_FR_GOVERNMENT",
            "PROVIDER_FR_INSTITUT_GEOGRAPHIQUE_NATIONAL",
            "PROVIDER_FR_CADASTRE",
            "PROVIDER_DIADIEM",
            "PROVIDER_THE_WEATHER_CHANNEL",
            "PROVIDER_COWI",
            "PROVIDER_FALKPLAN_ANDES",
            "PROVIDER_NL_GOVERNMENT",
            "PROVIDER_NL_KADASTER",
            "PROVIDER_NL_BOARD_OF_TOURISM_AND_CONVENTIONS",
            "PROVIDER_DIGITAL_MAP_PRODUCTS",
            "PROVIDER_SILICE_DIGITAL",
            "PROVIDER_TYDAC",
            "PROVIDER_ALBRECHT_GOLF",
            "PROVIDER_HEALTH_CH",
            "PROVIDER_VISITDENMARK",
            "PROVIDER_FLYHERE",
            "PROVIDER_DIGITAL_DATA_SERVICES",
            "PROVIDER_MECOMO",
            "PROVIDER_ZA_GOVERNMENT",
            "PROVIDER_ZA_RURAL_DEVELOPMENT_LAND_REFORM",
            "PROVIDER_SENSIS",
            "PROVIDER_JJCONNECT",
            "PROVIDER_OPPLYSNINGEN",
            "PROVIDER_TELLUS",
            "PROVIDER_IQONIA",
            "PROVIDER_BE_GOVERNMENT",
            "PROVIDER_BE_NATIONAAL_GEOGRAFISCH_INSTITUUT",
            "PROVIDER_BE_BRUSSELS_MOBILITY",
            "PROVIDER_YELLOWMAP_AG",
            "PROVIDER_STIFTUNG_GESUNDHEIT",
            "PROVIDER_GIATA",
            "PROVIDER_SANPARKS",
            "PROVIDER_CENTRE_DINFORMATIQUE_POUR_LA_REGION_BRUXELLOISE",
            "PROVIDER_INFOPORTUGAL",
            "PROVIDER_NEGOCIOS_DE_TELECOMUNICACOES_E_SISTEMAS_DE_INFORMACAO",
            "PROVIDER_COLLINS_BARTHOLOMEW",
            "PROVIDER_PROTECT_PLANET_OCEAN",
            "PROVIDER_KARTTAKESKUS",
            "PROVIDER_FI_GOVERNMENT",
            "PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION",
            "PROVIDER_FI_NATIONAL_LAND_SURVEY",
            "PROVIDER_FI_STATISTICS_FINLAND",
            "PROVIDER_GB_GOVERNMENT",
            "PROVIDER_GB_ORDNANCE_SURVEY",
            "PROVIDER_NATURAL_ENGLAND",
            "PROVIDER_WELSH_GOVERNMENT",
            "PROVIDER_GB_OFFICE_FOR_NATIONAL_STATISTICS",
            "PROVIDER_EPSILON",
            "PROVIDER_PARTNER_FRONT_END",
            "PROVIDER_CARTESIA",
            "PROVIDER_SE_GOVERNMENT",
            "PROVIDER_SE_TRAFIKVERKET",
            "PROVIDER_SE_NATURVARDSVERKET",
            "PROVIDER_IE_GOVERNMENT",
            "PROVIDER_IE_ORDNANCE_SURVEY_IRELAND",
            "PROVIDER_LU_GOVERNMENT",
            "PROVIDER_LU_P_AND_T_LUXEMBOURG",
            "PROVIDER_LU_ADMINISTRATION_DU_CADASTRE_ET_DE_LA_TOPOGRAPHIE",
            "PROVIDER_LU_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_MAPFLOW",
            "PROVIDER_TKARTOR",
            "PROVIDER_JUMPSTART",
            "PROVIDER_EPTISA",
            "PROVIDER_MC_GOVERNMENT",
            "PROVIDER_MC_PRINCIPAUTE_DE_MONACO",
            "PROVIDER_MONOLIT",
            "PROVIDER_ENVIRONMENTAL_SYSTEMS_RESEARCH_INSTITUTE",
            "PROVIDER_MODIS",
            "PROVIDER_GEOX",
            "PROVIDER_GEODIRECTORY",
            "PROVIDER_GEOPLAN",
            "PROVIDER_INFODIREKT",
            "PROVIDER_GEOGLOBAL",
            "PROVIDER_DEUTSCHE_POST",
            "PROVIDER_TRACASA",
            "PROVIDER_CORREOS",
            "PROVIDER_ES_GOVERNMENT",
            "PROVIDER_ES_CENTRO_NACIONAL_DE_INFORMACION_GEOGRAFICA",
            "PROVIDER_EDIMAP",
            "PROVIDER_VERIZON",
            "PROVIDER_NATIONAL_GEOGRAPHIC_MAPS",
            "PROVIDER_PROMAPS",
            "PROVIDER_CONSODATA",
            "PROVIDER_DE_AGOSTINI",
            "PROVIDER_FEDERPARCHI",
            "PROVIDER_NAVIGO",
            "PROVIDER_ITALIAMAPPE",
            "PROVIDER_CZECOT",
            "PROVIDER_NATURAL_EARTH",
            "PROVIDER_REGIO",
            "PROVIDER_SHIPWRECK_CENTRAL",
            "PROVIDER_RUTGERS_STATE_UNIVERSITY",
            "PROVIDER_TWINICE",
            "PROVIDER_NORTHERN_IRELAND_TOURIST_BOARD",
            "PROVIDER_INFOGROUP",
            "PROVIDER_TNET",
            "PROVIDER_CTT_CORREIOS_DE_PORTUGAL",
            "PROVIDER_EUROPARC",
            "PROVIDER_IUPPITER",
            "PROVIDER_MICHAEL_BAUER_INTERNATIONAL",
            "PROVIDER_LEPTON",
            "PROVIDER_MAPPOINT",
            "PROVIDER_GEODATA",
            "PROVIDER_RU_GOVERNMENT",
            "PROVIDER_RU_FNS_KLADR",
            "PROVIDER_BR_GOVERNMENT",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DO_MEIO_AMBIENTE_E_DOS_RECURSOS_NATURAIS_RENOVAVEIS",
            "PROVIDER_BR_MINISTERIO_DO_MEIO_AMBIENTE",
            "PROVIDER_BR_AGENCIA_NACIONAL_DE_AGUAS",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DE_GEOGRAFIA_E_ESTATISTICA",
            "PROVIDER_BR_FUNDACAO_NACIONAL_DO_INDIO",
            "PROVIDER_BR_DEPARTAMENTO_NACIONAL_DE_INFRAESTRUTURA_DE_TRANSPORTES",
            "PROVIDER_AZAVEA",
            "PROVIDER_NORTHSTAR",
            "PROVIDER_COMMEDI",
            "PROVIDER_NEXUS_GEOGRAFICS",
            "PROVIDER_INFOERA",
            "PROVIDER_AD_GOVERNMENT",
            "PROVIDER_AD_AREA_DE_CARTOGRAFIA",
            "PROVIDER_MAXXIMA",
            "PROVIDER_SI_GOVERNMENT",
            "PROVIDER_SI_AGENCY_FOR_ENVIRONMENT",
            "PROVIDER_TRANSPORT_HI_TECH_CONSULTANTS",
            "PROVIDER_L1_TECHNOLOGIES",
            "PROVIDER_TELEMEDIA",
            "PROVIDER_CDCOM_PROGOROD",
            "PROVIDER_MIT_CITYGUIDE",
            "PROVIDER_SUNCART",
            "PROVIDER_MICROMAPPER",
            "PROVIDER_RICHI",
            "PROVIDER_FORUM44",
            "PROVIDER_SEAT",
            "PROVIDER_VALASSIS",
            "PROVIDER_NAVICOM",
            "PROVIDER_COLTRACK",
            "PROVIDER_PSMA_AUSTRALIA",
            "PROVIDER_PT_DUTA_ASTAKONA_GIRINDA",
            "PROVIDER_CA_GOVERNMENT",
            "PROVIDER_STATISTICS_CANADA",
            "PROVIDER_TOCTOC",
            "PROVIDER_RMSI",
            "PROVIDER_TRUE_TECHNOLOGY",
            "PROVIDER_INCREMENT_P_CORPORATION",
            "PROVIDER_GOJAVAS",
            "PROVIDER_GEOINFORMATION_GROUP",
            "PROVIDER_CYBERSOFT",
            "PROVIDER_TSENTR_EFFEKTIVNYKH_TEKHNOLOGIY",
            "PROVIDER_EE_GOVERNMENT",
            "PROVIDER_EE_MAA_AMET",
            "PROVIDER_GASBUDDY",
            "PROVIDER_DK_GOVERNMENT",
            "PROVIDER_DK_GEODATASTYRELSEN",
            "PROVIDER_MURCIA_REGION_GOVERNMENT",
            "PROVIDER_CORREIOS",
            "PROVIDER_WEST_WORLD_MEDIA",
            "PROVIDER_INTERNATIONAL_MAPPING_ASSOCIATION",
            "PROVIDER_MEDICARE",
            "PROVIDER_POLARIS",
            "PROVIDER_TW_GOVERNMENT",
            "PROVIDER_TW_MINISTRY_OF_THE_INTERIOR_SURVEYING_AND_MAPPING_CENTER",
            "PROVIDER_NORDECA",
            "PROVIDER_AFRIMAPPING",
            "PROVIDER_OVERDRIVE",
            "PROVIDER_PROVIDER_NETWORK_DIRECTORIES",
            "PROVIDER_BR_MINISTERIO_DA_SAUDE",
            "PROVIDER_DIGITAL_EGYPT",
            "PROVIDER_INRIX",
            "PROVIDER_ARPINDO",
            "PROVIDER_IT_GOVERNMENT",
            "PROVIDER_ISTITUTO_GEOGRAFICO_MILITARE",
            "PROVIDER_EAST_END_GROUP",
            "PROVIDER_INGEOLAN",
            "PROVIDER_SEMACONNECT",
            "PROVIDER_BLINK",
            "PROVIDER_EVGO",
            "PROVIDER_CHARGEPOINT",
            "PROVIDER_TPL_TRAKKER",
            "PROVIDER_OI",
            "PROVIDER_MAPARADAR",
            "PROVIDER_SINGAPORE_POST",
            "PROVIDER_CHARGEMASTER",
            "PROVIDER_TESLA",
            "PROVIDER_VISICOM",
            "PROVIDER_GEOLYSIS",
            "PROVIDER_ZEPHEIRA",
            "PROVIDER_HUBJECT",
            "PROVIDER_PODPOINT",
            "PROVIDER_CHARGEFOX",
            "PROVIDER_KR_GOVERNMENT",
            "PROVIDER_KR_MOLIT",
            "PROVIDER_KR_MINISTRY_OF_THE_INTERIOR_AND_SAFETY",
            "PROVIDER_CRITCHLOW",
            "PROVIDER_EIFRIG",
            "PROVIDER_GIREVE",
            "PROVIDER_CN_NAVINFO",
            "PROVIDER_JAPAN_CHARGE_NETWORK",
            "PROVIDER_NOBIL",
            "PROVIDER_INDIA_BANKS",
            "PROVIDER_INDONESIA_ELECTION_KPU",
            "PROVIDER_CAREERS360",
            "PROVIDER_SOURCE_LONDON",
            "PROVIDER_EVBOX",
            "PROVIDER_JP_GOVERNMENT",
            "PROVIDER_JP_MINISTRY_OF_THE_ENVIRONMENT",
            "PROVIDER_YUMYUM",
            "PROVIDER_HWW_AUSTRALIA",
            "PROVIDER_CINERGY",
            "PROVIDER_MTIME",
            "PROVIDER_KULTUNAUT",
            "PROVIDER_BLITZ",
            "PROVIDER_PIA",
            "PROVIDER_INTERPARK",
            "PROVIDER_CINEMA_ONLINE",
            "PROVIDER_BELBIOS",
            "PROVIDER_MOVIESEER",
            "PROVIDER_SODAMEDYA",
            "PROVIDER_ATMOVIES",
            "PROVIDER_HOTELBEDS",
            "PROVIDER_VERICRED",
            "PROVIDER_CIRRANTIC",
            "PROVIDER_GOGO_LABS",
            "PROVIDER_ELECTRIFY_AMERICA",
            "PROVIDER_CMS_MPPUF",
            "PROVIDER_DIGIROAD",
            "PROVIDER_KONTEX_GEOMATICS",
            "PROVIDER_NZ_GOVERNMENT",
            "PROVIDER_NZ_LINZ",
            "PROVIDER_NZ_DOC",
            "PROVIDER_FASTNED",
            "PROVIDER_DESTINY_CS",
            "PROVIDER_IONITY",
            "PROVIDER_EV_CONNECT",
            "PROVIDER_PANPAGES",
            "PROVIDER_ETECNIC",
            "PROVIDER_VOLTA",
            "PROVIDER_NISSAN_MEXICO",
            "PROVIDER_BMW_GROUP_LATIN_AMERICA",
            "PROVIDER_FEDERAL_ELECTRICITY_COMMISSION_MEXICO",
            "PROVIDER_VOLVO_CARS_BRASIL",
            "PROVIDER_CHARGE_AND_PARKING",
            "PROVIDER_DEDUCE_TECHNOLOGIES",
            "PROVIDER_SK_TELECOM",
            "PROVIDER_ECO_MOVEMENT",
            "PROVIDER_GOOGLE_GMS",
            "PROVIDER_EASYWAY",
            "PROVIDER_PHYSICIAN_COMPARE",
            "PROVIDER_HOSPITAL_COMPARE",
            "PROVIDER_ENDOLLA_BARCELONA",
            "PROVIDER_BE_CHARGE",
            "PROVIDER_ONE_NETWORK",
            "PROVIDER_CARENAV_DUPLEX",
            "PROVIDER_CARENAV_POI",
            "PROVIDER_IN_GOVERNMENT",
            "PROVIDER_SURVEY_OF_INDIA",
            "PROVIDER_E_ON",
            "PROVIDER_ELECTRIFY_CANADA",
            "PROVIDER_GRIDCARS",
            "PROVIDER_DRIVECO",
            "PROVIDER_GREEN_ACTION_STUDIOS",
            "PROVIDER_GREEN_ACTION_STUDIO",
            "PROVIDER_EVINY",
            "PROVIDER_MASTERCARD",
            "PROVIDER_VATTENFALL",
            "PROVIDER_VIETGIS",
            "PROVIDER_UNITE",
            "PROVIDER_NEOGY",
            "PROVIDER_AMPUP",
            "PROVIDER_LOOP",
            "PROVIDER_ZEST",
            "PROVIDER_EZVOLT"
          ],
          "enumDescriptions": [
            "ABSTRACT The root of all provider types. This should never be present on an actual feature, but can be useful when calling InCategory.",
            "not actually a legal value, used as sentinel",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "All new \"Google\" provider entries must be full ints. The next available ID is: 0x111730B1",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This is an internal *only* provider meant for sending wipeout requests to mapfacts.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Never rely on source infos with this provider to identify whether or not a feature is a Prominent Place! Instead, use the proper API, localsearch_clustering::QualityTierHelper::IsProminentPlace().",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Shopping Attributes Discovery",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The next new \"Google\" provider entries should be placed above.",
            "UMBRELLA",
            "",
            "",
            "",
            "This is a testing provider for teams that wish to integrate with components of the Geo Data Infrastructure that require a valid provider. No production data should ever be sent using this provider.",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "UMBRELLA",
            "0x1117F must not be used, since its range extends the PROVIDER_GOOGLE hierarchy.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated in favor of PROVIDER_GOOGLE_STRUCTURED_DATA (for attributes) and PROVIDER_GOOGLE_GEO_TIGER (for categories).",
            "",
            "0x1117FF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. aka Local AI.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "No data is obtained from this provider. It is only used to identify features that must be served on MapMaker.",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x1117FFF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. Synthetically generated areas (sublocalities/neighborhoods/ postal codes/etc) based on dropped terms from approximate geocoding. More info on go/syntheticareas.",
            "",
            "",
            "",
            "Similar to Google Transit, a provider that aggregates positions of bicycle rental points that we have agreements with to show on maps",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This range has been depleted. For new Ids see PROVIDER_GOOGLE_SUBRANGE above.",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Small Scale International Boundary Lines",
            "",
            "NOAA",
            "PGC",
            "USDA",
            "National Provider Identifier Registry",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "old name for PROVIDER_NAVIGO",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "See b/33687395",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "IBAMA",
            "MMA",
            "ANA",
            "IBGE",
            "FUNAI",
            "DNIT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Department of Cartography",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x12 and 0x120 are not to be used. OOO CET",
            "ABSTRACT",
            "Estonian Land Board",
            "",
            "ABSTRACT",
            "Danish Geodata Agency",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Ministry of land, infrastructure and transport, \uad6d\ud1a0\uad50\ud1b5\ubd80, Guktogyotongbu",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Use PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION.",
            "",
            "ABSTRACT",
            "Land Information New Zealand",
            "NZ Department of Conservation",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: Next available value is 0x1270C."
          ],
          "type": "string"
        },
        "sourceDataset": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreOpeningHoursProto": {
      "description": "Message to represent opening hours including regular weekly hours and a set of exceptions.",
      "id": "GeostoreOpeningHoursProto",
      "properties": {
        "exception": {
          "description": "Date delimited exceptions to the typical recurring opening hours. May only be present if regular weekly hours are also specified.",
          "items": {
            "$ref": "GeostoreExceptionalHoursProto"
          },
          "type": "array"
        },
        "regularHours": {
          "$ref": "GeostoreBusinessHoursProto",
          "description": "Typical recurring opening hours, expressed as a weekly schedule. NOTE: this field was introduced to have a more client-friendly format for representing weekly hours but, as of November 2018, it's not used for the main opening hours of TYPE_ESTABLISHMENT features (instead, the data is stored in the `EstablishmentProto.hours` field, see b/23105782 tracking the possible schema migration). It is however used in other contexts where `OpeningHoursProto` appears in the Geo Schema. In openinghours.h there is a utility function `GetOpeningHoursFromFeature` that merges `EstablishmentProto.hours` into this proto."
        }
      },
      "type": "object"
    },
    "GeostoreOperationsProto": {
      "description": "Information about a feature's operations, e.g. when the feature is temporarily closed.",
      "id": "GeostoreOperationsProto",
      "properties": {
        "temporaryClosure": {
          "description": "Records temporary status change of the feature, such as remodel, vacation, etc.: the feature is temporarily (but not permanently) unavailable. This prevents users from going to the feature. Supports an arbitrary number of past, present, and future temporary closures, with the feature's data owner choosing which range of past and future closures to permit or guarantee to keep. All start and end dates must be unique from each other. If two consecutive dates are a start and an end of a TemporaryClosureProto, then the two dates must be from the same TemporaryClosureProto. Otherwise, exact dates may be missing so long as there exist a possible sequence of temporary closures with both exact start_date and end_date that keeps any known exact start_date and end_date. The earliest temporary closure must begin after whenever initial operations begin. Likewise, the latest temporary closure must end before whenever the permanent closure begins. NOTE: does *not* guarantee chronological order.",
          "items": {
            "$ref": "GeostoreTemporaryClosureProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreOverrideBorderStatusProto": {
      "description": "This message captures a border status override. For instance, if the TYPE_BORDER feature between China and Hong Kong must be hidden on ditu.google.cn (the Chinese domain for Google Maps) but may be displayed on other domains, we will have a country override border status for \"CN\" set to STATUS_NEVER_DISPLAY. At least one override restriction must be defined. Currently the only supported restriction is by country code.",
      "id": "GeostoreOverrideBorderStatusProto",
      "properties": {
        "countryCode": {
          "description": "The two-letter ISO 3166-1 country code corresponding to the domain this status override applies to, when rendering the border polyline.",
          "type": "string"
        },
        "status": {
          "description": "The override status, from the BorderStatus enumeration. The value here must be different from the main status (otherwise there's no point in providing the override).",
          "enum": [
            "STATUS_NORMAL",
            "STATUS_DISPUTED",
            "STATUS_UNSURVEYED",
            "STATUS_INTERNATIONAL_WATER",
            "STATUS_NEVER_DISPLAY",
            "STATUS_TREATY",
            "STATUS_PROVISIONAL",
            "STATUS_NO_LABEL"
          ],
          "enumDescriptions": [
            "Most border lines have this status, which typically means both parties agree on the location of the line. These might be called \"de jure\" borders.",
            "This status is used when the two parties disagree on the location of the line. There can be multiple border lines in a given disputed area. One might be the line proposed by country \"A\" and another the line proposed by country \"B\". A third line might mark the de facto line of control. Other border lines might indicate historical borders, e.g., \"1949 Armistice Line\".",
            "This is used for one section of border between Argentina and Chile. Both parties agree that a border line exists somewhere on the glacier, but the exact location has not been determined.",
            "This is a border line between a country and international water.",
            "This status is only used for the borders that should never display to users. Typically it is for the borders that we don't want to represent but that we would still like to use to model country boundaries, e.g. Hong Kong and Macau.",
            "This is used for borders that refer to well-defined boundaries which have been established by a specific treaty, agreement, armistice or other such agreement between two or more parties, yet the position and/or status is not considered to be legal and final (e.g., the final demarcation of the exact position has not occurred or the final political status is not resolved).",
            "This is used for borders for which a formal agreement has not been established between the parties involved, yet the existing line acts as a de facto functional border without existence of any dispute.",
            "This is used for borders which should not have country labels to either side, but should otherwise be styled the same as a border with STATUS_NORMAL. This is typically for borders which are not themselves disputed but still form part of the boundary around a disputed area that is not otherwise modeled or labeled as a country, or as an override where we are obligated to remove labels for region specific versions of Maps."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostorePaintedElementLogicalColorProto": {
      "description": "Painted element logical color. Most legal definitions only specify a color category (like \"yellow\") and don't specify an exact hue, rather stating that the colors must be distinguishable from each other. We refer to this as the \"logical\" color.",
      "id": "GeostorePaintedElementLogicalColorProto",
      "properties": {
        "color": {
          "enum": [
            "UNKNOWN_LOGICAL_COLOR",
            "WHITE",
            "YELLOW",
            "RED",
            "GREEN",
            "BLUE",
            "BLACK",
            "GREY",
            "ORANGE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreParkingAllowanceProto": {
      "description": "Describes the parking allowances for a feature, or the situations and requirements under which one may be permitted to park, such as certain vehicle types, valet parking, and permit parking. Also describes the cost of parking, which may vary based on the time and duration parked. Includes vehicle type, any other conditions for eligibility, and the cost of parking, which may vary based on the time and duration parked. If is_discount is set to true on a given allowance, that allowance represents a discount that can be applied to lower the cost of non-discount allowances specified on feature via parking_provider_feature. In this way, allowances can be 'layered,' i.e. appended, onto each other when denormalizing references via parking_provider_feature.",
      "id": "GeostoreParkingAllowanceProto",
      "properties": {
        "allowanceType": {
          "description": "The type of parking for this allowance. Allowance details only apply to the type of parking specified.",
          "enum": [
            "STANDARD",
            "VALET",
            "PERMIT",
            "PICKUP_GOODS",
            "PICKUP_PASSENGERS"
          ],
          "enumDescriptions": [
            "Standard parking without qualifications. This is a long-term allowance.",
            "This is a long-term allowance that only applies for valet parking.",
            "The is a long-term allowance that applies to permit-holders. See permit_type for details.",
            "This is a short-term allowance that only applies to picking up goods.",
            "This is a short-term allowance that only applies to picking up passengers."
          ],
          "type": "string"
        },
        "isDiscount": {
          "description": "If true, this allowance represents a discount rather than an individual rate; any rate values specified in this allowance describe a discount to be applied to the non-discount allowances in the ParkingProto.",
          "type": "boolean"
        },
        "minPurchaseForValidation": {
          "description": "If this rate requires validation, this expresses the minimum purchase required for validation in each applicable currency. Should have an ID of /measurement_unit/money_value and consist of two properties: one with an ID of /measurement_unit/money_value/amount and a float value with the amount, and another with the ID /measurement_unit/money_value/currency and an ID value with the MID of the proper currency (from the /finance/currency type). A value of 0 suggests that no purchase is required. If empty, this suggests that no validation is required for this rate.",
          "items": {
            "$ref": "FreebaseTopic"
          },
          "type": "array"
        },
        "permitType": {
          "description": "Any additional details about the permit type; e.g. \u201cZone A\u201d. In any local languages. Should only be set if allowance_type is PERMIT.",
          "items": {
            "$ref": "GeostoreLanguageTaggedTextProto"
          },
          "type": "array"
        },
        "serviceType": {
          "description": "The types of services that this parking allowance applies to. For instance, some cities have streets that only allow traditional taxis to pick up passengers.",
          "items": {
            "enum": [
              "SERVICE_ALL",
              "SERVICE_GENERAL_DRIVER",
              "SERVICE_RIDESHARE",
              "SERVICE_TAXI",
              "SERVICE_COMMERCIAL"
            ],
            "enumDescriptions": [
              "Signifies that this restriction is always applicable, regardless of the service type.",
              "Signifies that this restriction is applicable to a general driver.",
              "Signifies that this restriction is applicable to a ridesharing driver.",
              "Signifies that this restriction is applicable to a traditional taxi driver.",
              "Signifies that this restriction is applicable to a commercial vehicle. This generally applies to vehicles used for carrying goods or fare-paying passengers. However, the exact definition of a commercial vehicle can vary by locality."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "timeBasedRate": {
          "description": "Describes the rate structures. Each TimeBasedRateProto defines a rate which may apply based on a particular arrival, departure or utilization time; for example, one rate might apply if arriving before 9am, and another might apply regardless of arrival or departure time.",
          "items": {
            "$ref": "GeostoreTimeBasedRateProto"
          },
          "type": "array"
        },
        "vehicleType": {
          "description": "Restrictions on which vehicle type(s) the allowance applies to. By default, the allowance applies to any vehicle types.",
          "enum": [
            "ANY",
            "CAR",
            "MOTORCYCLE",
            "TRUCK"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Note: The exact definition of a truck varies by city, but it usually refers to vehicles with three or more axles. This value does not necessarily apply to all commercial vehicles or vehicles colloquially referred to as trucks (eg. pickup trucks)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreParkingProto": {
      "description": "Used to describe the parking facilities provided by or available to a feature. Features of TYPE_ROAD or TYPE_COMPOUND can have a ParkingProto (with parking_provider_feature unset) that describes the parking facilities provided by that feature. Features of TYPE_COMPOUND or TYPE_ESTABLISHMENT_POI can have a ParkingProto (with parking_provider_feature set) to indicate that the feature has dedicated parking and provide details about it, and defer some details of the parking facilities to the referent feature(s). ParkingProto is maintained by the Harbor Pilot team (go/harbor-pilot). Detailed modeling information is described at go/parking-schema.",
      "id": "GeostoreParkingProto",
      "properties": {
        "allowance": {
          "description": "Describes the parking allowances for the feature, which are the situations and requirements under which one is permitted to park at the feature\u2019s parking facilities, or discounts that a user may be eligible for.",
          "items": {
            "$ref": "GeostoreParkingAllowanceProto"
          },
          "type": "array"
        },
        "openingHours": {
          "$ref": "GeostoreOpeningHoursProto",
          "description": "Hours in which the parking facility is open; that is, permits both arrivals and departures of the facility. Should only be set on compounds (i.e. parking lots or garages); roads are considered to always be \u201copen,\u201d though parking at certain times may be prohibited via restrictions. If unset on a compound, this suggests we don\u2019t know the opening hours, or they are the same as the hours of the entity for which this feature offers parking facilities."
        },
        "parkingAvailable": {
          "description": "Indicates whether long-term parking is available at the feature; if true, long-term parking is available at the feature and parking allowances may be present on this feature, or parking_provider_feature may indicate defered parking feature(s). If false, this is an explicit statement that there is no long-term parking associated with this feature. If unset, we don't know whether there is long-term parking associated with this feature. If false or unset, only additional restrictions or short-term allowances will be populated.",
          "type": "boolean"
        },
        "parkingProviderFeature": {
          "description": "If empty, indicates that the feature containing this ParkingProto provides parking facilities, which are described by this proto. If nonempty, indicates that the feature with this ParkingProto does not contain parking facilities itself, but visitors of this feature may use the parking available to the referent feature(s). The referent feature(s) may themselves contain parking facilities or defer to other features. A ParkingProto may defer parking details to another feature, but still include its own data. This suggests that a visitor of the referrer feature is eligible for different rates or discounts. The data in these fields applies transitively, and any fields in a referrer may be applied to the referent (for a visitor of the referrer).",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "restriction": {
          "description": "Describes any parking restrictions that apply to this feature. Should only be set on road segments for which parking is explicitly prohibited for some or all times; for roads which do not prohibit parking and for all other facilities, the ability to park should be expressed using allowances. In the instance that both a restriction and an allowance applies at a given time, restrictions always have precedence over the same parking allowances. However, explicit short-term allowances (PICKUP_GOODS, PICKUP_PASSENGERS) take precedence over general NO_PARKING, NO_STANDING, or NO_STOPPING restrictions.",
          "items": {
            "$ref": "GeostoreParkingRestrictionProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreParkingRestrictionProto": {
      "description": "Expresses a parking restriction on a road; i.e. times at which parking on the road is prohibited.",
      "id": "GeostoreParkingRestrictionProto",
      "properties": {
        "restrictedHours": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "Times at which parking is prohibited."
        },
        "restrictionType": {
          "description": "clang-format on The type of restriction that applies at this time.",
          "enum": [
            "RESTRICTION_UNKNOWN",
            "RESTRICTION_PARKING",
            "RESTRICTION_STANDING",
            "RESTRICTION_STOPPING",
            "RESTRICTION_PICKUP_GOODS",
            "RESTRICTION_PICKUP_PASSENGERS"
          ],
          "enumDescriptions": [
            "Default value. Should never be set in practice.",
            "Parking is not allowed. This is a long-term restriction.",
            "No standing is allowed. This means a vehicle cannot wait or stop to load/unload packages. A vehicle may stop to drop-off passengers or to pick up passengers already waiting at the location. This is a short-term restriction.",
            "A vehicle may not stop at this location at any time. This is a short-term restriction.",
            "A vehicle may not stop here to pick up goods. This is a short-term restriction.",
            "A vehicle may not stop here to pick up passengers. This is a short-term restriction."
          ],
          "type": "string"
        },
        "serviceType": {
          "description": "The types of services that this parking restriction applies to. We expect most parking restrictions to apply to all services, but some airports have specific rideshare parking or taxi parking zones.",
          "items": {
            "enum": [
              "SERVICE_ALL",
              "SERVICE_GENERAL_DRIVER",
              "SERVICE_RIDESHARE",
              "SERVICE_TAXI",
              "SERVICE_COMMERCIAL"
            ],
            "enumDescriptions": [
              "Signifies that this restriction is always applicable, regardless of the service type.",
              "Signifies that this restriction is applicable to a general driver.",
              "Signifies that this restriction is applicable to a ridesharing driver.",
              "Signifies that this restriction is applicable to a traditional taxi driver.",
              "Signifies that this restriction is applicable to a commercial vehicle. This generally applies to vehicles used for carrying goods or fare-paying passengers. However, the exact definition of a commercial vehicle can vary by locality."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "vehicleType": {
          "description": "The types of vehicles that this parking restriction applies to. For instance, some streets may allow motorcycles to park but not automobiles or trucks.",
          "items": {
            "enum": [
              "ANY",
              "CAR",
              "MOTORCYCLE",
              "TRUCK"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "Note: The exact definition of a truck varies by city, but it usually refers to vehicles with three or more axles. This value does not necessarily apply to all commercial vehicles or vehicles colloquially referred to as trucks (eg. pickup trucks)."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostorePeakProto": {
      "description": "This protocol buffer holds related data for features of type TYPE_PEAK and TYPE_VOLCANO.",
      "id": "GeostorePeakProto",
      "properties": {
        "prominenceMeters": {
          "description": "Topographic prominence in meters: the height of the peak\u2019s summit above the lowest contour line encircling it and no higher summit.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostorePedestrianCrossingProto": {
      "description": "A crossing describes a path from the end point of a segment to the start point of its sibling. Each individual crossing should uniquely represent a physically distinct crossing in the real world. Pedestrian crossings are bidirectional. This proto represents \"simple\" crossings. More complicated crossings (such as the diagonal crosswalk at Shibuya Station in Tokyo) will be represented using a separate pedestrian network. Example 1: Standard four way crossing. Assume each road (A/B/C) has a crosswalk (denoted by a '-') right before intersection X. Assume crossing at D is prohibited (denoted by a '%'). Assume \"prime\" roads (A',B',...) are OUT segments relative to X. A\\\\A' B//B' \\\\ // \\\\ // - - X - % // \\\\ // \\\\ C'//C D'\\\\D * A CROSSABLE PedestrianCrossing should be added to A, B and C. * An UNCROSSABLE PedestrianCrossing should be added to D. Example 2: Simple intersection with one crossing. Assume intersection X was added to accommodate the crosswalk (through X, denoted by '-'). Assume \"prime\" roads (A',B',...) are OUT segments relative to X. A\\\\A' \\\\ \\\\ -X- \\\\ \\\\ B'\\\\B * A CROSSABLE PedestrianCrossing must be added to either A or B, but not both because each real-world crossing should be represented exactly once. Duplicative crossings may be arbitrarily removed.",
      "id": "GeostorePedestrianCrossingProto",
      "properties": {
        "angleDegrees": {
          "description": "This value specifies the angle of the crosswalk. Zero degrees represents a crosswalk perpendicular to the direction of travel, towards the right side of the segment. The crosswalk angle, winds clockwise. Range [-90, 90]. The following crosswalk would have a 15 degree angle: / / <--/-------------------------------- / /",
          "format": "double",
          "type": "number"
        },
        "crossAnywhere": {
          "description": "This value enables crossing anywhere (not just at the segment\u2019s endpoint), typically used on long, low-traffic residential streets. This attribute is only respected for trivial segment -> sibling routes. All other routes can cross at a MapFacts intersection.",
          "type": "boolean"
        },
        "crossingType": {
          "description": "Crossing type is used as a restriction and can also be used for rendering.",
          "enum": [
            "UNKNOWN",
            "CROSSABLE",
            "UNMARKED_CROSSING",
            "MARKED_CROSSING",
            "UNCROSSABLE"
          ],
          "enumDescriptions": [
            "RESERVED",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "offset": {
          "description": "The crossing offset defines a fraction between the distance from the segment endpoint to the centerline of the crosswalk and the length of the segment. For example, the segment length is 20 meters and the distance from segment end to center of crosswalk is 2 meters, the value of offset will be 0.1.",
          "format": "float",
          "type": "number"
        },
        "restriction": {
          "description": "Restrictions for this crossing (such as constructions on the crosswalk). They must not have subpath or travel_mode.",
          "items": {
            "$ref": "GeostoreRestrictionProto"
          },
          "type": "array"
        },
        "width": {
          "description": "This value defines the full width of the crossing in the direction perpendicular to the direction which pedestrians walk on the crossing (in meters). The crossing is allowed to \"spill\" into the next segment (0.5 * width can be greater than the offset). Cannot be a negative value.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostorePhysicalLineProto": {
      "description": "Describes a single physical marker line.",
      "id": "GeostorePhysicalLineProto",
      "properties": {
        "dashLengthMeters": {
          "description": "Applicable for DASHED and DOTTED_DASHED lines.",
          "format": "float",
          "type": "number"
        },
        "gapColor": {
          "$ref": "GeostorePaintedElementLogicalColorProto",
          "description": "This should be rarely needed, but can represent patterns of alternating colors."
        },
        "gapLengthMeters": {
          "description": "Applicable for DASHED, DOTTED, and DOTTED_DASHED lines.",
          "format": "float",
          "type": "number"
        },
        "material": {
          "items": {
            "enum": [
              "UNKNOWN_STRIPE_MATERIAL",
              "PAINT_STRIPE",
              "ROUND_DOT",
              "SQUARE_DOT"
            ],
            "enumDescriptions": [
              "",
              "Solid paint stripe.",
              "Round dot, typically nonreflective.",
              "Square dot, typically reflective."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "paintColor": {
          "$ref": "GeostorePaintedElementLogicalColorProto",
          "description": "Color for the painted elements. Applicable to all types."
        },
        "pattern": {
          "enum": [
            "UNKNOWN_DASH_PATTERN",
            "SOLID",
            "DASHED",
            "DOTTED",
            "DOTTED_DASHED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "physicalLineToken": {
          "description": "A token that can be used to identify the version of the data about this marker line.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostorePointProto": {
      "id": "GeostorePointProto",
      "properties": {
        "latE7": {
          "format": "uint32",
          "type": "integer"
        },
        "lngE7": {
          "format": "uint32",
          "type": "integer"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "NOTE: If removing metadata, remove 'option objc_class_prefix = \"GS\";' together. See cl/189921100. Field-level metadata for this point. NOTE: there are multiple PointProto fields in the Geo Schema. Metadata here is only expected to be present on FeatureProto.point[] and FeatureProto.center."
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a point. Never set in MapFacts."
        }
      },
      "type": "object"
    },
    "GeostorePointWithHeightProto": {
      "description": "PointWithHeightProto encodes lat/lng through PointProto and contains altitude information.",
      "id": "GeostorePointWithHeightProto",
      "properties": {
        "altitudeMeters": {
          "description": "Altitude of this point is assumed to be relative to the ground level.",
          "format": "float",
          "type": "number"
        },
        "point": {
          "$ref": "GeostorePointProto"
        }
      },
      "type": "object"
    },
    "GeostorePoliticalProto": {
      "description": "This protocol buffer is included from feature.proto as an optional message. Political features represent the different ways that people are divided into geographical regions.",
      "id": "GeostorePoliticalProto",
      "properties": {
        "capital": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Many political regions have a conceptual center (capitals of a country or a top-level division are examples). If set, the target feature must be a TYPE_LOCALITY feature."
        },
        "grossDomesticProductUsdMillions": {
          "description": "The Gross Domestic Product of the political region measured in millions of current United States dollars. It must not be negative.",
          "format": "double",
          "type": "number"
        },
        "literacyPercent": {
          "description": "Percentage of population that are literate within a political region. It must be between 0 and 100.",
          "format": "float",
          "type": "number"
        },
        "population": {
          "description": "The number of people in this political region. This field is intended to store accurate population, not an estimation such as representative value for population range. It must not be negative.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostorePolyLineProto": {
      "id": "GeostorePolyLineProto",
      "properties": {
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this polyline. NOTE: there are multiple PolyLineProto fields in the Geo Schema. Metadata here is only expected to be present on FeatureProto.polyline[]."
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a polyline. Never set in MapFacts."
        },
        "vertex": {
          "description": "A sequence of vertices connected by geodesics (the equivalent of straight lines on the sphere). Adjacent vertices are connected by the shorter of the two geodesics that connect them, i.e. all edges are 180 degrees or less. Note that the edge definition becomes numerically unstable as the arc length approaches 180 degrees. Polylines are generally expected to be non-self-intersecting, but any such restriction is imposed by the user of the polyline rather than the polyline itself.",
          "items": {
            "$ref": "GeostorePointProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostorePolygonProto": {
      "description": "A general non-self-intersecting spherical polygon, consisting of one or more loops defining multiple disconnected regions possibly with holes. All loops should be oriented CCW around the region they define. This applies to the exterior loop(s) as well as any holes. Within MapFacts (and underlying infrastructure) the data fields may be replaced by a single shape_id stored in internal_feature. Any such PolygonProtos shouldn't be expected to work with public functions in //geostore/base/public/polygon.h.",
      "id": "GeostorePolygonProto",
      "properties": {
        "baseMeters": {
          "description": "The polygon loops above are basically flat: each point has a latitude and a longitude but no altitude. We don't want to build real 3D models here, but we do want to be able to generate 2.5D models. A 2.5D model is built by translating the flat polygon upward some distance (base) then extruding it upward some additional distance (height). The elevation of the bottom of the extruded polygon (above ground level).",
          "format": "float",
          "type": "number"
        },
        "cellId": {
          "description": "** DEPRECATED ** This is part of a splitting strategy for large polygons, which was never fully launched and we decided not to pursue. For features with very complex polygonal geometry, we break up the polygon into pieces that align with S2 cells at various levels. We do this for performance reasons as some geometry operations have quadratic complexity with regards to the total number of vertices. In these cases, we store the S2 cell ID corresponding to the piece of the overall polygon that is described by this specific PolygonProto message. Each polygon piece is expected to be fully contained by the S2 cell corresponding to this cell ID. However, note that the S2 cell ID is not required to correspond to the smallest S2 cell that fully contains the polygon (and often won't be). In addition, polygon pieces are required to not have any overlap (which translates to having entirely disjoint S2 cell IDs, i.e. one can not be parent (or grand parent, etc.) of another).",
          "format": "uint64",
          "type": "string"
        },
        "encoded": {
          "description": "Encoding of the polygon using S2Polygon::Encode()'s compressed representation.",
          "format": "byte",
          "type": "string"
        },
        "heightMeters": {
          "description": "The distance from the bottom of the extruded polygon to the top.",
          "format": "float",
          "type": "number"
        },
        "loop": {
          "description": "** DEPRECATED ** We have switched to using exclusively the encoded form in the wire format to and from MapFacts, so this field should never be populated there. See go/encoded-polygons for more info. \"Classic\" polygon representation, defined by one or more loops. The last vertex of each polyline is implicitly connected to the first vertex. All loops should be specified in CCW order.",
          "items": {
            "$ref": "GeostorePolyLineProto"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this polygon."
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a polygon. Never set in MapFacts."
        },
        "unsuitableForDisplay": {
          "description": "Some polygons are known to be rough proxies for a feature's \"real\" polygonal representation. Such polygons are generally unsuitable for display. Rendering clients should not show these in most cases. Polygons unsuitable for display do have other uses, such as user location or containment analysis, or as an input to learning algorithms. This is an orthogonal concept to FeatureProto.synthetic_geometry, which only pertains to the method by which a polygon was created, rather than its fidelity to ground truth. For features that have multiple polygons, this bit should be consistently set to the same value on all polygons.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GeostorePoseProto": {
      "description": "A pose is an object's position in space, as well as its orientation. All fields except lat and lng are optional. All fields are in the WGS-84 ellipsoid, and rotations are right-hand rule (i.e. if the right hand thumb points along a vector, curled fingers indicate positive rotation direction). An un-rotated pose would be pointing due North, along the surface of the ellipsoid. Rotations are applied in the order: yaw, pitch, roll. Note that the rotation axes are rotated along with the model for each rotation step. WARNING: This proto is not meant to be used directly. Please use the provided libraries: //geostore/base/public/pose.h //java/com/google/geostore/base/Pose.java",
      "id": "GeostorePoseProto",
      "properties": {
        "altitude": {
          "description": "The height of the pose. A positive height is above the WGS-84 ellipsoid in meters; negative is below.",
          "format": "double",
          "type": "number"
        },
        "index": {
          "description": "The index of the PoseProto in a list of PoseProtos.",
          "format": "int32",
          "type": "integer"
        },
        "lat": {
          "description": "The latitude of the pose in degrees [-90, 90].",
          "format": "double",
          "type": "number"
        },
        "lng": {
          "description": "The longitude of the pose in degrees (-180,180].",
          "format": "double",
          "type": "number"
        },
        "pitch": {
          "description": "The rotation around the longitude line East tangent in degrees [-90, 90].",
          "format": "double",
          "type": "number"
        },
        "roll": {
          "description": "The rotation around the latitude line North tangent in degrees (-180, 180].",
          "format": "double",
          "type": "number"
        },
        "yaw": {
          "description": "The rotation around the Up vector, from North, in degrees (-180, 180].",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostorePriceInfoFoodNutritionFacts": {
      "description": "This message represents nutrition facts for a food dish.",
      "id": "GeostorePriceInfoFoodNutritionFacts",
      "properties": {
        "calories": {
          "$ref": "GeostorePriceInfoFoodNutritionFactsCaloriesFact"
        },
        "cholesterol": {
          "$ref": "GeostorePriceInfoFoodNutritionFactsNutritionFact",
          "description": "Cholesterol information for a given food dish."
        },
        "protein": {
          "$ref": "GeostorePriceInfoFoodNutritionFactsNutritionFact",
          "description": "Protein information for a given food dish."
        },
        "sodium": {
          "$ref": "GeostorePriceInfoFoodNutritionFactsNutritionFact",
          "description": "Sodium information for a given food dish."
        },
        "totalCarbohydrate": {
          "$ref": "GeostorePriceInfoFoodNutritionFactsNutritionFact",
          "description": "Carbohydrate information for a given food dish."
        },
        "totalFat": {
          "$ref": "GeostorePriceInfoFoodNutritionFactsNutritionFact",
          "description": "Fat information for a given food dish."
        }
      },
      "type": "object"
    },
    "GeostorePriceInfoFoodNutritionFactsCaloriesFact": {
      "description": "This message denotes calories information with an upper bound and lower bound range.",
      "id": "GeostorePriceInfoFoodNutritionFactsCaloriesFact",
      "properties": {
        "lowerAmount": {
          "format": "int32",
          "type": "integer"
        },
        "unit": {
          "description": "Unit of the given calories information.",
          "enum": [
            "UNDEFINED_ENERGY_UNIT",
            "CALORIE",
            "JOULE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "upperAmount": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostorePriceInfoFoodNutritionFactsNutritionFact": {
      "description": "This message denotes nutrition information with an upper bound and lower bound range and can be represented by mass unit.",
      "id": "GeostorePriceInfoFoodNutritionFactsNutritionFact",
      "properties": {
        "lowerAmount": {
          "format": "double",
          "type": "number"
        },
        "unit": {
          "description": "Unit of the given nutrition information.",
          "enum": [
            "UNDEFINED_MASS_UNIT",
            "GRAM",
            "MILLIGRAM"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "upperAmount": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostorePriceInfoProto": {
      "id": "GeostorePriceInfoProto",
      "properties": {
        "priceList": {
          "description": "The actual food menus. This is a repeated field because a restaurant may offer multiple menus, e.g. for different language or for different available time, such as holidays vs non-holidays.",
          "items": {
            "$ref": "GeostorePriceListProto"
          },
          "type": "array"
        },
        "priceListUrl": {
          "description": "All URLs that give price list information for this establishment. For food menus, this would represent menu_urls. Note that this field is a repeated list of UrlListProtos. Each UrlListProto instance in the list is intended to hold lists of URLs that are translations of the same URL.",
          "items": {
            "$ref": "GeostoreUrlListProto"
          },
          "type": "array"
        },
        "status": {
          "$ref": "GeostorePriceInfoStatus",
          "description": "Message containing metadata about the verified status of the PriceInfo. Only verified listings should be displayed."
        }
      },
      "type": "object"
    },
    "GeostorePriceInfoStatus": {
      "description": "Providers of PriceInfo (e.g. SinglePlatform, YEXT) send verified and unverified listings. PriceInfoStatus is used to encapsulate this information.",
      "id": "GeostorePriceInfoStatus",
      "properties": {
        "isVerified": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GeostorePriceListNameInfoProto": {
      "description": "A PriceListNameInfoProto is used by PriceListProto and fields and messages contained in it for storing names, descriptions, languages, and IDs. The name field and the description field must be in the same language, as specified by the language field. None of the fields in this proto is required, although it is not expected to have the language field set unless there is a name or description. When the language field is not set, it is understood to be the preferred language of the locale where the establishment is located. An empty string for any of the fields is not allowed (as enforced by lints).",
      "id": "GeostorePriceListNameInfoProto",
      "properties": {
        "description": {
          "type": "string"
        },
        "id": {
          "description": "IDs are intended to be unique identifiers of PriceInfoLists, Sections, and Menu items. This is enforced by the ID_DUPLICATE_PRICE_LIST_ID lint.",
          "type": "string"
        },
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. We place extra restrictions on languages in addition to what the III library requires. See go/geo-schema-reference/feature-properties/languages.",
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostorePriceListProto": {
      "description": "A PriceListProto can be used to represent any type of price lists, one of which is a menu of food and drinks. It contains names and descriptions, together with its source URL list if it is extracted or attributed to that URL. The names and descriptions are represented using repeated PriceListNameInfo fields to allow versions in different languages. A PriceListProto may contain multiple sections; in the context of a food menu, this would be multiple menu sections, e.g. for breakfast, lunch, dinner, prix fixe, or dinner for two, etc. At least one menu section must be present. Each section contains a number of items; for food menus, it may be FoodMenuItems defined below. At least one item must be present in each section.",
      "id": "GeostorePriceListProto",
      "properties": {
        "aggregatorId": {
          "description": "For third party lists, represents the ID of the aggregator which provided this data. Optional.",
          "format": "uint64",
          "type": "string"
        },
        "availableTime": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "The time period when this price list is available. Establishments are not required to give available_time for any given price list, however, when this field is not set, the price list is understood as available any time the establishment is open."
        },
        "cuisines": {
          "description": "Cuisine information if the location the price lists attached to is an eligible feature for a food menu price list. Cuisine information should also only show up in a food price list.",
          "items": {
            "enum": [
              "CUISINE_UNDEFINED",
              "FAST_FOOD",
              "AMERICAN",
              "JAPANESE",
              "BREAK_FAST",
              "PIZZA",
              "HAMBURGER",
              "ITALIAN",
              "SEAFOOD",
              "FAMILY",
              "MEXICAN",
              "CHINESE",
              "VEGETARIAN",
              "SUSHI",
              "CHICKEN",
              "INDIAN",
              "ASIAN",
              "MEDITERRANEAN",
              "FRENCH",
              "BRUNCH",
              "KOREAN",
              "THAI",
              "SPANISH",
              "VIETNAMESE",
              "LATIN_AMERICAN",
              "INDONESIAN",
              "GREEK",
              "GERMAN",
              "TURKISH",
              "BRAZILIAN",
              "PAKISTANI",
              "OTHER_CUISINE"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "nameInfo": {
          "description": "The repeated name_info field is for price lists listed in multiple languages. When a price list has no names or descriptions, the size of the repeated field name_info may be 0. There should be at most one name_info for any given language.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        },
        "section": {
          "description": "Each price list may have multiple sections. Note that these sections within the same price list should most times contain only the same type of items for sale, e.g. all sections should usually contain only food items if the enclosing price list is representing food menu. However, sometimes such a requirement may be wrong, for example, McDonald's may sell burgers as well as toys, and the toys may be in its own section. Thus we don't enforce any requirement that all sections contain only the same type of items.",
          "items": {
            "$ref": "GeostorePriceListSectionProto"
          },
          "type": "array"
        },
        "sourceUrl": {
          "$ref": "GeostoreUrlListProto",
          "description": "Where this price list comes from. If set, this must also be a member of the price_list_url field, and represents translations of a single URL."
        }
      },
      "type": "object"
    },
    "GeostorePriceListSectionProto": {
      "description": "A PriceListSectionProto is used to store a section of a PriceListProto. For example, for a PriceListProto representing a food menu, a PriceListSectionProto represents a menu section. Each PriceListSectionProto contains a repeated list of items for sale; these items can be products or services. Right now every section should contain items of one type.",
      "id": "GeostorePriceListSectionProto",
      "properties": {
        "callToAction": {
          "$ref": "GeostoreCallToActionProto",
          "description": "Call to action for the section."
        },
        "foodItem": {
          "description": "To store food and drink items when the containing PriceListSectionProto is a food menu section.",
          "items": {
            "$ref": "GeostoreFoodMenuItemProto"
          },
          "type": "array"
        },
        "item": {
          "description": "To store any items when the containing PriceListSectionProto is not food / legacy services.",
          "items": {
            "$ref": "GeostoreComposableItemProto"
          },
          "type": "array"
        },
        "itemType": {
          "description": "This has to have at most one value.",
          "items": {
            "enum": [
              "TYPE_ANY",
              "TYPE_FOOD",
              "TYPE_SERVICE",
              "TYPE_PRODUCT",
              "TYPE_JOB",
              "TYPE_3P_JOB"
            ],
            "enumDescriptions": [
              "Abstract type, and the root of all types. Not a meaningful type and likewise should never be present in a geostore repository.",
              "For food and drink items, stored in FoodMenuItemProto.",
              "For service items (stored in FoodMenuItemProto). TYPE_SERVICE is being deprecated. Please use TYPE_JOB for the new services See b/147253790 for more information. data.",
              "For product items (stored in ComposableItemProto).",
              "For \"1P\" jobs data (stored in ComposableItemProto), summarized from a variety of sources such as GMB/NMX, web crawling, and Structured Reviews.",
              "For third party jobs data sourced from 3P partner feeds, which need to remain separate from the TYPE_JOB list."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. We place extra restrictions on languages in addition to what the III library requires. See go/geo-schema-reference/feature-properties/languages. When set, represents the language of the section and its items. Any section and item level name infos must match this language. Optional.",
          "type": "string"
        },
        "media": {
          "description": "One or more media items (photos, videos, etc.) describing this section / category.",
          "items": {
            "$ref": "GeostoreMediaItemProto"
          },
          "type": "array"
        },
        "nameInfo": {
          "description": "The repeated name_info field is for price list sections listed in multiple languages. When a price list section has no names or descriptions, the size of the repeated field name_info may be 0. There should be at most one name_info for any given language.",
          "items": {
            "$ref": "GeostorePriceListNameInfoProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostorePriceRangeProto": {
      "description": "This message represents a price range of an attribute. The meaning of the price bounds is domain specific. But mainly they are soft bounds for a normal usage. E.g. \"restaurant prices\" are subject to an higher level of \"soft\" bounds than \"museum admission price\"",
      "id": "GeostorePriceRangeProto",
      "properties": {
        "currency": {
          "description": "Currency code for the price range: a valid currency code from i18n/identifiers/currencycode.h. Lower and upper price are both assumed to use the same currency.",
          "type": "string"
        },
        "lowerPrice": {
          "description": "This message allows unbounded price ranges. e.g. Lower_price is undefined. At least one of the two prices must be set for the price range to be meaningful.",
          "format": "double",
          "type": "number"
        },
        "units": {
          "description": "clang-format on",
          "enum": [
            "ANY_UNITS",
            "PER_USE",
            "PER_PHONE_CALL",
            "PER_RIDE",
            "PER_TIME_UNIT",
            "PER_SECOND",
            "PER_MINUTE",
            "PER_HOUR",
            "PER_DAY",
            "PER_NIGHT",
            "PER_WEEK",
            "PER_MONTH",
            "PER_YEAR",
            "PER_VOLUME_UNIT",
            "PER_LITER",
            "PER_GLASS",
            "PER_BOTTLE",
            "PER_POT",
            "PER_LENGTH_UNIT",
            "PER_CENTIMETER",
            "PER_METER",
            "PER_KILOMETER",
            "PER_MASS_UNIT",
            "PER_GRAM",
            "PER_KILOGRAM",
            "PER_OUNCE",
            "PER_POUND"
          ],
          "enumDescriptions": [
            "ABSTRACT The root of the hierarchy. It's an abstract value and shouldn't be present in the repository.",
            "",
            "",
            "e.g. for the price of a ferry or aeroplane flight.",
            "",
            "",
            "",
            "",
            "",
            "e.g. for the price of a hotel room.",
            "",
            "",
            "",
            "",
            "e.g. for the price of petrol.",
            "The following units (PER_GLASS, PER_BOTTLE, and PER_POT) are intended to represent price units for restaurant menus and do not specify how much volume the unit contains. e.g. for wine sold by glass.",
            "e.g. for wine sold by bottle.",
            "e.g. for tea sold by pot",
            "",
            "",
            "",
            "e.g. for the price of a taxi.",
            "To simplify the categories for units, we put both mass and weight units under PER_MASS_UNIT, as a lot of times they are used interchangeably in real life anyway.",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "upperPrice": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostorePropertyValueStatusProto": {
      "description": "PropertyValueStatusProto specifies what we know about a field corresponding to FeaturePropertyId's value in the absence of any specific value. For now, it just indicates when we know that there is no value. Eventually it might also indicate that we know it has value, just not what it is, etc.",
      "id": "GeostorePropertyValueStatusProto",
      "properties": {
        "propertyId": {
          "$ref": "GeostoreFeaturePropertyIdProto",
          "description": "The property ID whose value status is defined by this proto."
        },
        "valueStatus": {
          "description": "`value_status` specifies whether the feature has a value for the property. This should always be set to something other than the default value (`PROPERTY_VALUE_STATUS_UNSPECIFIED`).",
          "enum": [
            "PROPERTY_VALUE_STATUS_UNSPECIFIED",
            "HAS_NO_VALUE",
            "HAS_UNKNOWN_VALUE"
          ],
          "enumDescriptions": [
            "The default value means the property's value status is encoded in the property itself: if the property has a value, it has a value. If it doesn't, it may or may not have a value. It is OK to interpret that as having no value. Note that in `PropertyValueStatusProto`, this value is not allowed. We include it and define it to match the default behavior so that it can be used in other protos.",
            "`HAS_NO_VALUE` means that we know that the property has no value.",
            "'HAS_UNKNOWN_VALUE' means that we know that the property has a value but that we don't know what that value is."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreProvenanceProto": {
      "description": "This is a minimal version of SourceInfoProto.",
      "id": "GeostoreProvenanceProto",
      "properties": {
        "dataset": {
          "description": "The dataset from which this the referenced data was created. The content of this string will be determined by the data provider, and may encode extra information, such as data confidence.",
          "type": "string"
        },
        "provider": {
          "description": "The data provider from which the referenced data was generated.",
          "enum": [
            "PROVIDER_ANY",
            "PROVIDER_UNKNOWN",
            "PROVIDER_NAVTEQ",
            "PROVIDER_TELE_ATLAS",
            "PROVIDER_TELE_ATLAS_MULTINET",
            "PROVIDER_TELE_ATLAS_CODEPOINT",
            "PROVIDER_TELE_ATLAS_GEOPOST",
            "PROVIDER_TELE_ATLAS_DATAGEO",
            "PROVIDER_TELE_ATLAS_ADDRESS_POINTS",
            "PROVIDER_TELCONTAR",
            "PROVIDER_EUROPA",
            "PROVIDER_ROYAL_MAIL",
            "PROVIDER_GOOGLE",
            "PROVIDER_GOOGLE_HAND_EDIT",
            "PROVIDER_GOOGLE_BORDERS",
            "PROVIDER_GOOGLE_SUBRANGE",
            "PROVIDER_GOOGLE_GT_FUSION",
            "PROVIDER_GOOGLE_ZAGAT_CMS",
            "PROVIDER_GOOGLE_PLACE_NAVBOOST",
            "PROVIDER_GOOGLE_FOOTPRINT",
            "PROVIDER_GOOGLE_PRODUCT_TERMS",
            "PROVIDER_GOOGLE_POINTCARDS",
            "PROVIDER_GOOGLE_BUSINESS_CHAINS",
            "PROVIDER_GOOGLE_LOCAL_SUMMARIZATION",
            "PROVIDER_GOOGLE_PRONUNCIATIONS",
            "PROVIDER_GOOGLE_DUMPLING",
            "PROVIDER_GOOGLE_DISTILLERY",
            "PROVIDER_GOOGLE_LOCAL_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_RELATION_MINER",
            "PROVIDER_GOOGLE_MAPSPAM",
            "PROVIDER_GOOGLE_ROSE",
            "PROVIDER_GOOGLE_LOCAL_PLACE_RATINGS",
            "PROVIDER_GOOGLE_WIPEOUT",
            "PROVIDER_GOOGLE_KNOWLEDGE_GRAPH",
            "PROVIDER_GOOGLE_BEEGEES",
            "PROVIDER_GOOGLE_REVIEW_SUMMARIZATION",
            "PROVIDER_GOOGLE_OFFLINE_NON_CORE_ATTRIBUTE_SUMMARIZATION",
            "PROVIDER_GOOGLE_GEO_WORLDMAPS",
            "PROVIDER_GOOGLE_GEO_MODERATION",
            "PROVIDER_GOOGLE_OYSTER_AUTO_EDITS",
            "PROVIDER_GOOGLE_LOCAL_ALCHEMY",
            "PROVIDER_GOOGLE_KEROUAC",
            "PROVIDER_GOOGLE_MOBRANK",
            "PROVIDER_GOOGLE_RAPTURE",
            "PROVIDER_GOOGLE_CULTURAL_INSTITUTE",
            "PROVIDER_GOOGLE_GEOCODES_FROM_LOCAL_FEEDS",
            "PROVIDER_GOOGLE_ATTRIBUTES_FROM_CRAWLED_CHAINS",
            "PROVIDER_GOOGLE_TACTILE_MAPS",
            "PROVIDER_GOOGLE_MAPS_FOR_MOBILE",
            "PROVIDER_GOOGLE_GEO_REALTIME",
            "PROVIDER_GOOGLE_PROMINENT_PLACES",
            "PROVIDER_GOOGLE_PLACE_ACTIONS",
            "PROVIDER_GOOGLE_GT_AUTO_EDITS",
            "PROVIDER_GOOGLE_WAZE",
            "PROVIDER_GOOGLE_ONTHEGO",
            "PROVIDER_GOOGLE_GT_IMPORT",
            "PROVIDER_GOOGLE_STRUCTURED_DATA",
            "PROVIDER_GOOGLE_HELICOPTER",
            "PROVIDER_GOOGLE_ROLLBACK",
            "PROVIDER_GOOGLE_RIGHTS_REPAIR",
            "PROVIDER_GOOGLE_PERFUME",
            "PROVIDER_GOOGLE_MAPS_TRANSLATION",
            "PROVIDER_GOOGLE_CALL_ME_MAYBE",
            "PROVIDER_GOOGLE_LOCAL_UNIVERSAL",
            "PROVIDER_GOOGLE_CROUPIER",
            "PROVIDER_GOOGLE_SKYSMART",
            "PROVIDER_GOOGLE_RIDDLER",
            "PROVIDER_GOOGLE_ROADCLOSURES",
            "PROVIDER_GOOGLE_SPORE",
            "PROVIDER_GOOGLE_LOCALIZATION",
            "PROVIDER_GOOGLE_CATTERMS",
            "PROVIDER_GOOGLE_GT_FIELD_OPS",
            "PROVIDER_GOOGLE_MATCHMAKER",
            "PROVIDER_GOOGLE_ARBITRATION",
            "PROVIDER_GOOGLE_BIZBUILDER_OPS",
            "PROVIDER_GOOGLE_LOCAL_INVENTORY_ADS",
            "PROVIDER_GOOGLE_GT_DRAFTY",
            "PROVIDER_GOOGLE_HOTELADS_OPS",
            "PROVIDER_GOOGLE_MARKERS",
            "PROVIDER_GOOGLE_STATE_MACHINE",
            "PROVIDER_GOOGLE_ATTRIBUTES_INFERENCE",
            "PROVIDER_GOOGLE_BIKESHARE",
            "PROVIDER_GOOGLE_GHOSTWRITER",
            "PROVIDER_GOOGLE_EDIT_PLATFORM",
            "PROVIDER_GOOGLE_BLUE_GINGER",
            "PROVIDER_GOOGLE_GEO_TIGER",
            "PROVIDER_GOOGLE_HYADES",
            "PROVIDER_GOOGLE_WEBQUARRY",
            "PROVIDER_GOOGLE_GEO_MADDEN",
            "PROVIDER_GOOGLE_ANDROID_PAY",
            "PROVIDER_GOOGLE_OPENING_HOURS_TEAM",
            "PROVIDER_GOOGLE_LOCAL_DISCOVERY",
            "PROVIDER_GOOGLE_LOCAL_HEALTH",
            "PROVIDER_GOOGLE_UGC_MAPS",
            "PROVIDER_GOOGLE_FIBER",
            "PROVIDER_GOOGLE_REVGEO",
            "PROVIDER_GOOGLE_HOTELADS_PARTNER_FRONT_END",
            "PROVIDER_GOOGLE_GEO_UGC_TASKS",
            "PROVIDER_GOOGLE_GEOCODING",
            "PROVIDER_GOOGLE_SPYGLASS",
            "PROVIDER_GOOGLE_PLUS_CODES_AS_ADDRESSES",
            "PROVIDER_GOOGLE_GEO_CHANGES",
            "PROVIDER_GOOGLE_HUME",
            "PROVIDER_GOOGLE_MEGAMIND",
            "PROVIDER_GOOGLE_GT_ROADSYNTH",
            "PROVIDER_GOOGLE_FIREBOLT",
            "PROVIDER_GOOGLE_LOCAL_PLACE_OFFERINGS",
            "PROVIDER_GOOGLE_UGC_SERVICES",
            "PROVIDER_GOOGLE_GEOALIGN",
            "PROVIDER_GOOGLE_GT_COMPOUNDS",
            "PROVIDER_GOOGLE_FOOD_ORDERING",
            "PROVIDER_GOOGLE_HOTEL_KNOWLEDGE_OPS",
            "PROVIDER_GOOGLE_URAW",
            "PROVIDER_GOOGLE_FLYEYE",
            "PROVIDER_GOOGLE_YOUKE",
            "PROVIDER_GOOGLE_GT_ZEPHYR",
            "PROVIDER_GOOGLE_USER_SAFETY",
            "PROVIDER_GOOGLE_ADDRESS_MAKER",
            "PROVIDER_GOOGLE_UGC_PHOTOS",
            "PROVIDER_GOOGLE_GT_WINDCHIME",
            "PROVIDER_GOOGLE_SNAG_FIXER",
            "PROVIDER_GOOGLE_GEO_DEALS",
            "PROVIDER_GOOGLE_LOCAL_PLACE_TOPICS",
            "PROVIDER_GOOGLE_PROPERTY_INSIGHTS",
            "PROVIDER_GOOGLE_GEO_CONSUMER_MERCHANT_EXPERIMENTS",
            "PROVIDER_GOOGLE_GEO_PORTKEY",
            "PROVIDER_GOOGLE_ROAD_MAPPER",
            "PROVIDER_GOOGLE_LOCATION_PLATFORM",
            "PROVIDER_GOOGLE_POSTTRIP",
            "PROVIDER_GOOGLE_TRAVEL_DESTINATION",
            "PROVIDER_GOOGLE_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_BIZBUILDER_CLEANUP",
            "PROVIDER_GOOGLE_USER",
            "PROVIDER_GOOGLE_STATION",
            "PROVIDER_GOOGLE_GEO_FOOD",
            "PROVIDER_GOOGLE_GEO_AR",
            "PROVIDER_GOOGLE_GEO_TEMPORAL",
            "PROVIDER_GOOGLE_SERVICES_MARKETPLACE",
            "PROVIDER_GOOGLE_IMT_CLEANUP",
            "PROVIDER_GOOGLE_GEO_FOOD_MENU",
            "PROVIDER_GOOGLE_CARENAV",
            "PROVIDER_GOOGLE_DRIVING_FEEDS",
            "PROVIDER_GOOGLE_DRIVING_UGC",
            "PROVIDER_GOOGLE_POLAR",
            "PROVIDER_GOOGLE_TRIWILD",
            "PROVIDER_GOOGLE_CROWD_COMPUTE_OPS",
            "PROVIDER_GOOGLE_SA_FROM_WEB",
            "PROVIDER_GOOGLE_POI_ALIGNMENT",
            "PROVIDER_GOOGLE_SA_FROM_HULK",
            "PROVIDER_GOOGLE_SERVICES_INTERACTIONS",
            "PROVIDER_GOOGLE_ROADS_UGC_EDITOR",
            "PROVIDER_GOOGLE_SA_FROM_NG_INFERENCE",
            "PROVIDER_GOOGLE_GEO_DRIVING_VIZ",
            "PROVIDER_GOOGLE_GEO_TASKING",
            "PROVIDER_GOOGLE_CROWDTASK_DATACOMPUTE",
            "PROVIDER_GOOGLE_CROWDTASK_TASKADS",
            "PROVIDER_GOOGLE_CROWDTASK_TASKMATE",
            "PROVIDER_GOOGLE_CROWDTASK_FURBALL",
            "PROVIDER_GOOGLE_CROWDTASK_ADAP",
            "PROVIDER_GOOGLE_GPAY",
            "PROVIDER_GOOGLE_GEO_UGC_TRUSTED_USERS",
            "PROVIDER_GOOGLE_THIRD_PARTY_DATA_PRODUCTION",
            "PROVIDER_GOOGLE_GEOTRACKER",
            "PROVIDER_GOOGLE_LOCAL_LANDMARK_INFERENCE",
            "PROVIDER_GOOGLE_GEO_CLOSED_LOOP",
            "PROVIDER_GOOGLE_SA_FROM_MERCHANT_POSTS",
            "PROVIDER_GOOGLE_CORE_DATA_RIGHTS",
            "PROVIDER_GOOGLE_SA_FROM_USER_REVIEWS",
            "PROVIDER_GOOGLE_GEO_CONTENT_FIXER",
            "PROVIDER_GOOGLE_POLYGON_REFINEMENT",
            "PROVIDER_GOOGLE_HANASU",
            "PROVIDER_GOOGLE_FULLRIGHTS_GEO_DATA_UPLOAD",
            "PROVIDER_GOOGLE_FULLRIGHTS_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_ATTRIBUTION_3P_OUTREACH_UPLOAD",
            "PROVIDER_GOOGLE_SA_FROM_FOOD_MENUS",
            "PROVIDER_GOOGLE_GT_CONSISTENCY_EDITS",
            "PROVIDER_GOOGLE_SA_QUALITY",
            "PROVIDER_GOOGLE_GDCE_CLEANUP",
            "PROVIDER_GOOGLE_UGC_QUALITY_CHAINS",
            "PROVIDER_GOOGLE_ATTRIBUTES_DISCOVERY",
            "PROVIDER_GOOGLE_GEO_LDE",
            "PROVIDER_GOOGLE_GEO_SIGNAL_TRACKING",
            "PROVIDER_GOOGLE_UGC_AGGREGATION",
            "PROVIDER_GOOGLE_3D_BASEMAP",
            "PROVIDER_GOOGLE_MAPFACTS_PRIVACY",
            "PROVIDER_GOOGLE_GT_ALF",
            "PROVIDER_GOOGLE_GT_OPERATOR_PROVENANCE",
            "PROVIDER_GOOGLE_LOCAL_SERVICES_ADS",
            "PROVIDER_GOOGLE_LOCALSEARCH",
            "PROVIDER_GOOGLE_TRANSIT",
            "PROVIDER_GOOGLE_GEOWIKI",
            "PROVIDER_GOOGLE_CHINA_LOCAL_TEAM",
            "PROVIDER_GOOGLE_SYNTHESIZED",
            "PROVIDER_GOOGLE_INTERNAL_TEST",
            "PROVIDER_GOOGLE_DISPUTED_AREAS",
            "PROVIDER_GOOGLE_3DWAREHOUSE",
            "PROVIDER_GOOGLE_GROUNDS_BUILDER",
            "PROVIDER_GOOGLE_SESAME",
            "PROVIDER_GOOGLE_GT",
            "PROVIDER_GOOGLE_GT_BASEMAP_UPLOAD",
            "PROVIDER_GOOGLE_ADSDB",
            "PROVIDER_GOOGLE_MACHINE_TRANSLITERATION",
            "PROVIDER_GOOGLE_TRAVELSEARCH",
            "PROVIDER_GOOGLE_PANORAMIO",
            "PROVIDER_GOOGLE_YOUTUBE",
            "PROVIDER_GOOGLE_OLD",
            "PROVIDER_GOOGLE_STREETVIEW",
            "PROVIDER_GOOGLE_STREETVIEW_BIZVIEW",
            "PROVIDER_GOOGLE_ZIPIT",
            "PROVIDER_GOOGLE_OYSTER_CONNECT_ROUTES",
            "PROVIDER_GOOGLE_GOLDEN",
            "PROVIDER_GOOGLE_INNERSPACE",
            "PROVIDER_GOOGLE_MAPSEARCH",
            "PROVIDER_GOOGLE_CATEGORIES_TEAM",
            "PROVIDER_GOOGLE_CROWDSENSUS",
            "PROVIDER_GOOGLE_LOCAL_ALGORITHMIC_IDENTITY",
            "PROVIDER_GOOGLE_FREEBASE",
            "PROVIDER_GOOGLE_HOTELADS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGES",
            "PROVIDER_GOOGLE_PLACES_API",
            "PROVIDER_GOOGLE_NAMEHEATMAP",
            "PROVIDER_GOOGLE_MAPMAKER",
            "PROVIDER_GOOGLE_MAPMAKER_MOBILE",
            "PROVIDER_GOOGLE_MAPMAKER_PANCAKE",
            "PROVIDER_GOOGLE_MAPMAKER_V2",
            "PROVIDER_GOOGLE_LOCAL_CLUSTERING_OPERATOR_OVERRIDE",
            "PROVIDER_GOOGLE_SERVED_ON_MAPMAKER",
            "PROVIDER_GOOGLE_GT_LOCAL",
            "PROVIDER_GOOGLE_GT_LOCAL_WITH_RIGHTS",
            "PROVIDER_GOOGLE_LOGS_RANKING_SIGNALS",
            "PROVIDER_GOOGLE_ENTITY_NAVBOOST",
            "PROVIDER_GOOGLE_RELATED_PLACES",
            "PROVIDER_GOOGLE_KNOWN_FOR_TERMS",
            "PROVIDER_GOOGLE_SYNTHETIC_AREAS",
            "PROVIDER_GOOGLE_AUTHORITY_PAGE_PHOTOS",
            "PROVIDER_GOOGLE_CROSS_STREETS",
            "PROVIDER_GOOGLE_CORRIDORS",
            "PROVIDER_GOOGLE_BICYCLE_RENTAL",
            "PROVIDER_GOOGLE_CONCRETE_URLS",
            "PROVIDER_GOOGLE_LEANBACK",
            "PROVIDER_GOOGLE_LOCKED_LISTINGS",
            "PROVIDER_GOOGLE_MONITORING",
            "PROVIDER_GOOGLE_SPROUT",
            "PROVIDER_GOOGLE_LOCAL_SEARCH_QUALITY",
            "PROVIDER_GOOGLE_GOBY",
            "PROVIDER_GOOGLE_PROBLEM_REPORT",
            "PROVIDER_GOOGLE_CANDID",
            "PROVIDER_GOOGLE_BIZBUILDER",
            "PROVIDER_AUTOMOTIVE_NAVIGATION_DATA",
            "PROVIDER_MAPDATA_SCIENCES",
            "PROVIDER_MAPONICS",
            "PROVIDER_SKI_RESORTS",
            "PROVIDER_ZENRIN",
            "PROVIDER_SANBORN",
            "PROVIDER_URBAN_MAPPING",
            "PROVIDER_US_GOVERNMENT",
            "PROVIDER_US_CENSUS",
            "PROVIDER_US_POSTAL_SERVICE",
            "PROVIDER_US_GEOLOGICAL_SURVEY",
            "PROVIDER_US_GNIS",
            "PROVIDER_US_LANDSAT",
            "PROVIDER_US_NATIONAL_GEOSPATIAL_INTELLIGENCE_AGENCY",
            "PROVIDER_US_NGA_GNS",
            "PROVIDER_US_SSIBL",
            "PROVIDER_US_BUREAU_OF_TRANSPORTATION_STATISTICS",
            "PROVIDER_US_NATIONAL_OCEANIC_AND_ATMOSPHERIC_ADMINISTRATION",
            "PROVIDER_US_POLAR_GEOSPATIAL_CENTER",
            "PROVIDER_US_DEPARTMENT_OF_AGRICULTURE",
            "PROVIDER_US_NPI_REGISTRY",
            "PROVIDER_US_BUREAU_OF_INDIAN_AFFAIRS",
            "PROVIDER_DMTI_SPATIAL",
            "PROVIDER_INTERNATIONAL_HYDROGRAPHIC_ORGANIZATION",
            "PROVIDER_MAPLINK",
            "PROVIDER_KINGWAY",
            "PROVIDER_GEOCENTRE",
            "PROVIDER_CN_NATIONAL_FOUNDAMENTAL_GIS",
            "PROVIDER_CN_MAPABC",
            "PROVIDER_SMITHSONIAN_INSTITUTE",
            "PROVIDER_TRACKS_FOR_AFRICA",
            "PROVIDER_PPWK",
            "PROVIDER_LEADDOG",
            "PROVIDER_CENTRE_DONNEES_ASTRONOMIQUES_STRASBOURG",
            "PROVIDER_GISRAEL",
            "PROVIDER_BASARSOFT",
            "PROVIDER_MAPINFO",
            "PROVIDER_MAPIT",
            "PROVIDER_GEOBASE",
            "PROVIDER_ORION",
            "PROVIDER_CENTRAL_EUROPEAN_DATA_AGENCY",
            "PROVIDER_ANASAT",
            "PROVIDER_MINED_POSTCODES",
            "PROVIDER_DMAPAS",
            "PROVIDER_COMMON_LOCALE_DATA_REPOSITORY",
            "PROVIDER_CH_SBB",
            "PROVIDER_SKENERGY",
            "PROVIDER_GBRMPA",
            "PROVIDER_KOREA_POST",
            "PROVIDER_CN_AUTONAVI",
            "PROVIDER_MINED_POI",
            "PROVIDER_ML_INFOMAP",
            "PROVIDER_SNOOPER",
            "PROVIDER_GEOSISTEMAS",
            "PROVIDER_AFRIGIS",
            "PROVIDER_TRANSNAVICOM",
            "PROVIDER_EASYCONNECT",
            "PROVIDER_LANTMATERIET",
            "PROVIDER_LOGICA",
            "PROVIDER_MAPKING",
            "PROVIDER_DIANPING",
            "PROVIDER_GEONAV",
            "PROVIDER_HEIBONSHA",
            "PROVIDER_DEUTSCHE_TELEKOM",
            "PROVIDER_LINGUISTIC_DATA_CONSORTIUM",
            "PROVIDER_ACXIOM",
            "PROVIDER_DUN_AND_BRADSTREET",
            "PROVIDER_FEDERAL_AVIATION_ADMINISTRATION",
            "PROVIDER_INFOUSA",
            "PROVIDER_INFOUSA_NIXIE",
            "PROVIDER_THOMSON_LOCAL",
            "PROVIDER_TELEFONICA_PUBLICIDAD_E_INFORMACION",
            "PROVIDER_WIKIPEDIA",
            "PROVIDER_INFOBEL",
            "PROVIDER_MX_GOVERNMENT",
            "PROVIDER_MX_NATIONAL_INSTITUTE_STATISTICS_GEOGRAPHY",
            "PROVIDER_MX_SERVICIO_POSTAL_MEXICANO",
            "PROVIDER_TELEGATE",
            "PROVIDER_TELELISTAS",
            "PROVIDER_MAPCITY",
            "PROVIDER_EXPLAINER_DC",
            "PROVIDER_DAIKEI",
            "PROVIDER_NL_CHAMBER_OF_COMMERCE",
            "PROVIDER_KOREA_INFO_SERVICE",
            "PROVIDER_WIKITRAVEL",
            "PROVIDER_FLICKR",
            "PROVIDER_DIANCO",
            "PROVIDER_VOLT_DELTA",
            "PROVIDER_SG_GOVERNMENT",
            "PROVIDER_SG_LAND_TRANSPORT_AUTHORITY",
            "PROVIDER_MAPBAR",
            "PROVIDER_LONGTU",
            "PROVIDER_SA_GOVERNMENT",
            "PROVIDER_SA_SAUDI_POST",
            "PROVIDER_PEAKLIST",
            "PROVIDER_LOCAL_BUSINESS_CENTER",
            "PROVIDER_LOCAL_FEED_XML",
            "PROVIDER_WEB",
            "PROVIDER_RAILS_TO_TRAILS",
            "PROVIDER_INDIACOM",
            "PROVIDER_INFOMEDIA",
            "PROVIDER_PICASA",
            "PROVIDER_AT_GOVERNMENT",
            "PROVIDER_AT_BUNDESAMT_FUR_EICH_UND_VERMESSUNGSWESEN",
            "PROVIDER_AT_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_AT_AUSTRIA_POST",
            "PROVIDER_NO_GOVERNMENT",
            "PROVIDER_NO_NORSK_EIENDOMSINFORMASJON",
            "PROVIDER_NO_POSTEN_NORGE_AS",
            "PROVIDER_CH_GOVERNMENT",
            "PROVIDER_CH_SWISS_POST",
            "PROVIDER_CH_SWISSTOPO",
            "PROVIDER_CH_SWISS_NATIONAL_PARK",
            "PROVIDER_NAVIT",
            "PROVIDER_GEOSEARCH",
            "PROVIDER_DE_GOVERNMENT",
            "PROVIDER_BUNDESAMT_KARTOGRAPHIE_UND_GEODASIE",
            "PROVIDER_BUNDESNETZAGENTUR",
            "PROVIDER_SCHOBER_GROUP",
            "PROVIDER_MIREO",
            "PROVIDER_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WEBSTER_TEXAS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_AMHERST_MASSACHUSETTS",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BLOOMINGTON_INDIANA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PASADENA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_CHULA_VISTA_CALIFORNIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_TEMPE_ARIZONA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_COLUMBUS_OHIO",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_PORTAGE_MICHIGAN",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GEORGETOWN_KENTUCKY",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_GREENVILLE_SOUTH_CAROLINA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_NASHVILLE_TENNESSEE",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_WASHINGTON_DISTRICT_OF_COLUMBIA",
            "PROVIDER_US_PUBLIC_MUNICIPALITY_BOULDER_COLORADO",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY",
            "PROVIDER_NZ_PUBLIC_MUNICIPALITY_ENVIRONMENT_BAY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY",
            "PROVIDER_PL_PUBLIC_MUNICIPALITY_BIELSKO_BIALA",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_FRANKFURT",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_HAMBURG",
            "PROVIDER_DE_PUBLIC_MUNICIPALITY_KARLSRUHE",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY",
            "PROVIDER_PT_PUBLIC_MUNICIPALITY_SANTA_CRUZ",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_KLAGENFURT",
            "PROVIDER_AT_PUBLIC_MUNICIPALITY_LINZ",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_AZKOITIA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_BEASAIN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_GIRONA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_SAN_SEBASTIAN",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_CATALUNYA",
            "PROVIDER_ES_PUBLIC_MUNICIPALITY_HONDARRIBIA",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY",
            "PROVIDER_AU_PUBLIC_MUNICIPALITY_LAUNCESTON_TASMANIA",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY",
            "PROVIDER_IS_PUBLIC_MUNICIPALITY_REYKJAVIK",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY",
            "PROVIDER_NL_PUBLIC_MUNICIPALITY_AMELSTEVEEN",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY",
            "PROVIDER_BE_PUBLIC_MUNICIPALITY_ANTWERPEN",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_FREDERICTON_NEW_BRUNSWICK",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_KAMLOOPS_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_NANAIMO_BRITISH_COLUMBIA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_BANFF_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_CALGARY_ALBERTA",
            "PROVIDER_CA_PUBLIC_MUNICIPALITY_TORONTO_ONTARIO",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY",
            "PROVIDER_SE_PUBLIC_MUNICIPALITY_UMEA",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY",
            "PROVIDER_UA_PUBLIC_MUNICIPALITY_KHARKIV",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY",
            "PROVIDER_OTHER_PUBLIC_MUNICIPALITY_AQUA_CALIENTE_CAHUILLA_INDIANS",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_PONT_AUDEMER",
            "PROVIDER_FR_PUBLIC_MUNICIPALITY_BORDEAUX",
            "PROVIDER_SG_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY",
            "PROVIDER_BR_PUBLIC_MUNICIPALITY_RIO_DE_JANEIRO",
            "PROVIDER_MAPCUBE",
            "PROVIDER_3D_REALITYMAPS",
            "PROVIDER_DEUTSCHES_ZENTRUM_FUR_LUFT_UND_RAUMFAHRT",
            "PROVIDER_3D_CITIES_SOCIEDADE_ANONIMA",
            "PROVIDER_DISNEY",
            "PROVIDER_CYBERCITY",
            "PROVIDER_PRECISION_LIGHTWORKS_MODELWORKS",
            "PROVIDER_VIRTUAL_HUNGARY_LIMITED",
            "PROVIDER_VIRTUEL_CITY",
            "PROVIDER_SCREAMPOINT_INTERNATIONAL",
            "PROVIDER_AGENTSCHAP_VOOR_GEOGRAFISCHE_INFORMATIE_VLAANDEREN",
            "PROVIDER_FR_GOVERNMENT",
            "PROVIDER_FR_INSTITUT_GEOGRAPHIQUE_NATIONAL",
            "PROVIDER_FR_CADASTRE",
            "PROVIDER_DIADIEM",
            "PROVIDER_THE_WEATHER_CHANNEL",
            "PROVIDER_COWI",
            "PROVIDER_FALKPLAN_ANDES",
            "PROVIDER_NL_GOVERNMENT",
            "PROVIDER_NL_KADASTER",
            "PROVIDER_NL_BOARD_OF_TOURISM_AND_CONVENTIONS",
            "PROVIDER_DIGITAL_MAP_PRODUCTS",
            "PROVIDER_SILICE_DIGITAL",
            "PROVIDER_TYDAC",
            "PROVIDER_ALBRECHT_GOLF",
            "PROVIDER_HEALTH_CH",
            "PROVIDER_VISITDENMARK",
            "PROVIDER_FLYHERE",
            "PROVIDER_DIGITAL_DATA_SERVICES",
            "PROVIDER_MECOMO",
            "PROVIDER_ZA_GOVERNMENT",
            "PROVIDER_ZA_RURAL_DEVELOPMENT_LAND_REFORM",
            "PROVIDER_SENSIS",
            "PROVIDER_JJCONNECT",
            "PROVIDER_OPPLYSNINGEN",
            "PROVIDER_TELLUS",
            "PROVIDER_IQONIA",
            "PROVIDER_BE_GOVERNMENT",
            "PROVIDER_BE_NATIONAAL_GEOGRAFISCH_INSTITUUT",
            "PROVIDER_BE_BRUSSELS_MOBILITY",
            "PROVIDER_YELLOWMAP_AG",
            "PROVIDER_STIFTUNG_GESUNDHEIT",
            "PROVIDER_GIATA",
            "PROVIDER_SANPARKS",
            "PROVIDER_CENTRE_DINFORMATIQUE_POUR_LA_REGION_BRUXELLOISE",
            "PROVIDER_INFOPORTUGAL",
            "PROVIDER_NEGOCIOS_DE_TELECOMUNICACOES_E_SISTEMAS_DE_INFORMACAO",
            "PROVIDER_COLLINS_BARTHOLOMEW",
            "PROVIDER_PROTECT_PLANET_OCEAN",
            "PROVIDER_KARTTAKESKUS",
            "PROVIDER_FI_GOVERNMENT",
            "PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION",
            "PROVIDER_FI_NATIONAL_LAND_SURVEY",
            "PROVIDER_FI_STATISTICS_FINLAND",
            "PROVIDER_GB_GOVERNMENT",
            "PROVIDER_GB_ORDNANCE_SURVEY",
            "PROVIDER_NATURAL_ENGLAND",
            "PROVIDER_WELSH_GOVERNMENT",
            "PROVIDER_GB_OFFICE_FOR_NATIONAL_STATISTICS",
            "PROVIDER_EPSILON",
            "PROVIDER_PARTNER_FRONT_END",
            "PROVIDER_CARTESIA",
            "PROVIDER_SE_GOVERNMENT",
            "PROVIDER_SE_TRAFIKVERKET",
            "PROVIDER_SE_NATURVARDSVERKET",
            "PROVIDER_IE_GOVERNMENT",
            "PROVIDER_IE_ORDNANCE_SURVEY_IRELAND",
            "PROVIDER_LU_GOVERNMENT",
            "PROVIDER_LU_P_AND_T_LUXEMBOURG",
            "PROVIDER_LU_ADMINISTRATION_DU_CADASTRE_ET_DE_LA_TOPOGRAPHIE",
            "PROVIDER_LU_NATIONAL_TOURIST_OFFICE",
            "PROVIDER_MAPFLOW",
            "PROVIDER_TKARTOR",
            "PROVIDER_JUMPSTART",
            "PROVIDER_EPTISA",
            "PROVIDER_MC_GOVERNMENT",
            "PROVIDER_MC_PRINCIPAUTE_DE_MONACO",
            "PROVIDER_MONOLIT",
            "PROVIDER_ENVIRONMENTAL_SYSTEMS_RESEARCH_INSTITUTE",
            "PROVIDER_MODIS",
            "PROVIDER_GEOX",
            "PROVIDER_GEODIRECTORY",
            "PROVIDER_GEOPLAN",
            "PROVIDER_INFODIREKT",
            "PROVIDER_GEOGLOBAL",
            "PROVIDER_DEUTSCHE_POST",
            "PROVIDER_TRACASA",
            "PROVIDER_CORREOS",
            "PROVIDER_ES_GOVERNMENT",
            "PROVIDER_ES_CENTRO_NACIONAL_DE_INFORMACION_GEOGRAFICA",
            "PROVIDER_EDIMAP",
            "PROVIDER_VERIZON",
            "PROVIDER_NATIONAL_GEOGRAPHIC_MAPS",
            "PROVIDER_PROMAPS",
            "PROVIDER_CONSODATA",
            "PROVIDER_DE_AGOSTINI",
            "PROVIDER_FEDERPARCHI",
            "PROVIDER_NAVIGO",
            "PROVIDER_ITALIAMAPPE",
            "PROVIDER_CZECOT",
            "PROVIDER_NATURAL_EARTH",
            "PROVIDER_REGIO",
            "PROVIDER_SHIPWRECK_CENTRAL",
            "PROVIDER_RUTGERS_STATE_UNIVERSITY",
            "PROVIDER_TWINICE",
            "PROVIDER_NORTHERN_IRELAND_TOURIST_BOARD",
            "PROVIDER_INFOGROUP",
            "PROVIDER_TNET",
            "PROVIDER_CTT_CORREIOS_DE_PORTUGAL",
            "PROVIDER_EUROPARC",
            "PROVIDER_IUPPITER",
            "PROVIDER_MICHAEL_BAUER_INTERNATIONAL",
            "PROVIDER_LEPTON",
            "PROVIDER_MAPPOINT",
            "PROVIDER_GEODATA",
            "PROVIDER_RU_GOVERNMENT",
            "PROVIDER_RU_FNS_KLADR",
            "PROVIDER_BR_GOVERNMENT",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DO_MEIO_AMBIENTE_E_DOS_RECURSOS_NATURAIS_RENOVAVEIS",
            "PROVIDER_BR_MINISTERIO_DO_MEIO_AMBIENTE",
            "PROVIDER_BR_AGENCIA_NACIONAL_DE_AGUAS",
            "PROVIDER_BR_INSTITUTO_BRASILEIRO_DE_GEOGRAFIA_E_ESTATISTICA",
            "PROVIDER_BR_FUNDACAO_NACIONAL_DO_INDIO",
            "PROVIDER_BR_DEPARTAMENTO_NACIONAL_DE_INFRAESTRUTURA_DE_TRANSPORTES",
            "PROVIDER_AZAVEA",
            "PROVIDER_NORTHSTAR",
            "PROVIDER_COMMEDI",
            "PROVIDER_NEXUS_GEOGRAFICS",
            "PROVIDER_INFOERA",
            "PROVIDER_AD_GOVERNMENT",
            "PROVIDER_AD_AREA_DE_CARTOGRAFIA",
            "PROVIDER_MAXXIMA",
            "PROVIDER_SI_GOVERNMENT",
            "PROVIDER_SI_AGENCY_FOR_ENVIRONMENT",
            "PROVIDER_TRANSPORT_HI_TECH_CONSULTANTS",
            "PROVIDER_L1_TECHNOLOGIES",
            "PROVIDER_TELEMEDIA",
            "PROVIDER_CDCOM_PROGOROD",
            "PROVIDER_MIT_CITYGUIDE",
            "PROVIDER_SUNCART",
            "PROVIDER_MICROMAPPER",
            "PROVIDER_RICHI",
            "PROVIDER_FORUM44",
            "PROVIDER_SEAT",
            "PROVIDER_VALASSIS",
            "PROVIDER_NAVICOM",
            "PROVIDER_COLTRACK",
            "PROVIDER_PSMA_AUSTRALIA",
            "PROVIDER_PT_DUTA_ASTAKONA_GIRINDA",
            "PROVIDER_CA_GOVERNMENT",
            "PROVIDER_STATISTICS_CANADA",
            "PROVIDER_TOCTOC",
            "PROVIDER_RMSI",
            "PROVIDER_TRUE_TECHNOLOGY",
            "PROVIDER_INCREMENT_P_CORPORATION",
            "PROVIDER_GOJAVAS",
            "PROVIDER_GEOINFORMATION_GROUP",
            "PROVIDER_CYBERSOFT",
            "PROVIDER_TSENTR_EFFEKTIVNYKH_TEKHNOLOGIY",
            "PROVIDER_EE_GOVERNMENT",
            "PROVIDER_EE_MAA_AMET",
            "PROVIDER_GASBUDDY",
            "PROVIDER_DK_GOVERNMENT",
            "PROVIDER_DK_GEODATASTYRELSEN",
            "PROVIDER_MURCIA_REGION_GOVERNMENT",
            "PROVIDER_CORREIOS",
            "PROVIDER_WEST_WORLD_MEDIA",
            "PROVIDER_INTERNATIONAL_MAPPING_ASSOCIATION",
            "PROVIDER_MEDICARE",
            "PROVIDER_POLARIS",
            "PROVIDER_TW_GOVERNMENT",
            "PROVIDER_TW_MINISTRY_OF_THE_INTERIOR_SURVEYING_AND_MAPPING_CENTER",
            "PROVIDER_NORDECA",
            "PROVIDER_AFRIMAPPING",
            "PROVIDER_OVERDRIVE",
            "PROVIDER_PROVIDER_NETWORK_DIRECTORIES",
            "PROVIDER_BR_MINISTERIO_DA_SAUDE",
            "PROVIDER_DIGITAL_EGYPT",
            "PROVIDER_INRIX",
            "PROVIDER_ARPINDO",
            "PROVIDER_IT_GOVERNMENT",
            "PROVIDER_ISTITUTO_GEOGRAFICO_MILITARE",
            "PROVIDER_EAST_END_GROUP",
            "PROVIDER_INGEOLAN",
            "PROVIDER_SEMACONNECT",
            "PROVIDER_BLINK",
            "PROVIDER_EVGO",
            "PROVIDER_CHARGEPOINT",
            "PROVIDER_TPL_TRAKKER",
            "PROVIDER_OI",
            "PROVIDER_MAPARADAR",
            "PROVIDER_SINGAPORE_POST",
            "PROVIDER_CHARGEMASTER",
            "PROVIDER_TESLA",
            "PROVIDER_VISICOM",
            "PROVIDER_GEOLYSIS",
            "PROVIDER_ZEPHEIRA",
            "PROVIDER_HUBJECT",
            "PROVIDER_PODPOINT",
            "PROVIDER_CHARGEFOX",
            "PROVIDER_KR_GOVERNMENT",
            "PROVIDER_KR_MOLIT",
            "PROVIDER_KR_MINISTRY_OF_THE_INTERIOR_AND_SAFETY",
            "PROVIDER_CRITCHLOW",
            "PROVIDER_EIFRIG",
            "PROVIDER_GIREVE",
            "PROVIDER_CN_NAVINFO",
            "PROVIDER_JAPAN_CHARGE_NETWORK",
            "PROVIDER_NOBIL",
            "PROVIDER_INDIA_BANKS",
            "PROVIDER_INDONESIA_ELECTION_KPU",
            "PROVIDER_CAREERS360",
            "PROVIDER_SOURCE_LONDON",
            "PROVIDER_EVBOX",
            "PROVIDER_JP_GOVERNMENT",
            "PROVIDER_JP_MINISTRY_OF_THE_ENVIRONMENT",
            "PROVIDER_YUMYUM",
            "PROVIDER_HWW_AUSTRALIA",
            "PROVIDER_CINERGY",
            "PROVIDER_MTIME",
            "PROVIDER_KULTUNAUT",
            "PROVIDER_BLITZ",
            "PROVIDER_PIA",
            "PROVIDER_INTERPARK",
            "PROVIDER_CINEMA_ONLINE",
            "PROVIDER_BELBIOS",
            "PROVIDER_MOVIESEER",
            "PROVIDER_SODAMEDYA",
            "PROVIDER_ATMOVIES",
            "PROVIDER_HOTELBEDS",
            "PROVIDER_VERICRED",
            "PROVIDER_CIRRANTIC",
            "PROVIDER_GOGO_LABS",
            "PROVIDER_ELECTRIFY_AMERICA",
            "PROVIDER_CMS_MPPUF",
            "PROVIDER_DIGIROAD",
            "PROVIDER_KONTEX_GEOMATICS",
            "PROVIDER_NZ_GOVERNMENT",
            "PROVIDER_NZ_LINZ",
            "PROVIDER_NZ_DOC",
            "PROVIDER_FASTNED",
            "PROVIDER_DESTINY_CS",
            "PROVIDER_IONITY",
            "PROVIDER_EV_CONNECT",
            "PROVIDER_PANPAGES",
            "PROVIDER_ETECNIC",
            "PROVIDER_VOLTA",
            "PROVIDER_NISSAN_MEXICO",
            "PROVIDER_BMW_GROUP_LATIN_AMERICA",
            "PROVIDER_FEDERAL_ELECTRICITY_COMMISSION_MEXICO",
            "PROVIDER_VOLVO_CARS_BRASIL",
            "PROVIDER_CHARGE_AND_PARKING",
            "PROVIDER_DEDUCE_TECHNOLOGIES",
            "PROVIDER_SK_TELECOM",
            "PROVIDER_ECO_MOVEMENT",
            "PROVIDER_GOOGLE_GMS",
            "PROVIDER_EASYWAY",
            "PROVIDER_PHYSICIAN_COMPARE",
            "PROVIDER_HOSPITAL_COMPARE",
            "PROVIDER_ENDOLLA_BARCELONA",
            "PROVIDER_BE_CHARGE",
            "PROVIDER_ONE_NETWORK",
            "PROVIDER_CARENAV_DUPLEX",
            "PROVIDER_CARENAV_POI",
            "PROVIDER_IN_GOVERNMENT",
            "PROVIDER_SURVEY_OF_INDIA",
            "PROVIDER_E_ON",
            "PROVIDER_ELECTRIFY_CANADA",
            "PROVIDER_GRIDCARS",
            "PROVIDER_DRIVECO",
            "PROVIDER_GREEN_ACTION_STUDIOS",
            "PROVIDER_GREEN_ACTION_STUDIO",
            "PROVIDER_EVINY",
            "PROVIDER_MASTERCARD",
            "PROVIDER_VATTENFALL",
            "PROVIDER_VIETGIS",
            "PROVIDER_UNITE",
            "PROVIDER_NEOGY",
            "PROVIDER_AMPUP",
            "PROVIDER_LOOP",
            "PROVIDER_ZEST",
            "PROVIDER_EZVOLT"
          ],
          "enumDescriptions": [
            "ABSTRACT The root of all provider types. This should never be present on an actual feature, but can be useful when calling InCategory.",
            "not actually a legal value, used as sentinel",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "All new \"Google\" provider entries must be full ints. The next available ID is: 0x111730B1",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This is an internal *only* provider meant for sending wipeout requests to mapfacts.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Never rely on source infos with this provider to identify whether or not a feature is a Prominent Place! Instead, use the proper API, localsearch_clustering::QualityTierHelper::IsProminentPlace().",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Shopping Attributes Discovery",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The next new \"Google\" provider entries should be placed above.",
            "UMBRELLA",
            "",
            "",
            "",
            "This is a testing provider for teams that wish to integrate with components of the Geo Data Infrastructure that require a valid provider. No production data should ever be sent using this provider.",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "UMBRELLA",
            "0x1117F must not be used, since its range extends the PROVIDER_GOOGLE hierarchy.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated in favor of PROVIDER_GOOGLE_STRUCTURED_DATA (for attributes) and PROVIDER_GOOGLE_GEO_TIGER (for categories).",
            "",
            "0x1117FF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. aka Local AI.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "No data is obtained from this provider. It is only used to identify features that must be served on MapMaker.",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x1117FFF should not be used, since its range further extends the PROVIDER_GOOGLE hierarchy. Synthetically generated areas (sublocalities/neighborhoods/ postal codes/etc) based on dropped terms from approximate geocoding. More info on go/syntheticareas.",
            "",
            "",
            "",
            "Similar to Google Transit, a provider that aggregates positions of bicycle rental points that we have agreements with to show on maps",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This range has been depleted. For new Ids see PROVIDER_GOOGLE_SUBRANGE above.",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Small Scale International Boundary Lines",
            "",
            "NOAA",
            "PGC",
            "USDA",
            "National Provider Identifier Registry",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "old name for PROVIDER_NAVIGO",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "See b/33687395",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "UMBRELLA",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "IBAMA",
            "MMA",
            "ANA",
            "IBGE",
            "FUNAI",
            "DNIT",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Department of Cartography",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "0x12 and 0x120 are not to be used. OOO CET",
            "ABSTRACT",
            "Estonian Land Board",
            "",
            "ABSTRACT",
            "Danish Geodata Agency",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "Ministry of land, infrastructure and transport, \uad6d\ud1a0\uad50\ud1b5\ubd80, Guktogyotongbu",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Use PROVIDER_FI_NATIONAL_ROAD_ADMINISTRATION.",
            "",
            "ABSTRACT",
            "Land Information New Zealand",
            "NZ Department of Conservation",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "UMBRELLA",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: Next available value is 0x1270C."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRankDetailsProto": {
      "description": "This message is embedded within a FeatureProto. It has rank calculation details such as available rank signals and rank signal mixer used to compute final rank. For more details, see the Oyster Rank wiki page: http://wiki.corp.google.com/twiki/bin/view/Main/OysterRank",
      "id": "GeostoreRankDetailsProto",
      "properties": {
        "signal": {
          "description": "A list of signals. Each one is extracted separately by a SignalExtractor.",
          "items": {
            "$ref": "GeostoreRankSignalProto"
          },
          "type": "array"
        },
        "signalMixerType": {
          "description": "The signal mixer that was used to calculate the rank.",
          "enum": [
            "MIXER_INVALID",
            "MIXER_MISSING",
            "MIXER_ADDRESS_AREA",
            "MIXER_ROUTE_SEGMENT_INTERSECTION",
            "MIXER_POLITICAL_EUROPA",
            "MIXER_POLITICAL_AREA",
            "MIXER_POLITICAL",
            "MIXER_COUNTRY_EUROPA",
            "MIXER_COUNTRY_AREA",
            "MIXER_COUNTRY",
            "MIXER_LOCALITY",
            "MIXER_LOCALITY_GEOWIKI",
            "MIXER_LOCALITY_EUROPA",
            "MIXER_LOCALITY_AREA",
            "MIXER_RIVER",
            "MIXER_LENGTH_WEBSCORE",
            "MIXER_SKENERGY",
            "MIXER_GEOCENTRE_GEOCODED_ADDRESS",
            "MIXER_PLACERANK",
            "MIXER_TRANSIT",
            "MIXER_LOCALITY_EUROPA_AREA",
            "MIXER_WEBSCORE",
            "MIXER_LOCALITY_MAPDATA_SCIENCES",
            "MIXER_SUBLOCALITY_MAPDATA_SCIENCES",
            "MIXER_PEAK",
            "MIXER_BUILDING",
            "MIXER_RESERVATION",
            "MIXER_AIRPORT",
            "MIXER_AREA",
            "MIXER_MANAGER",
            "MIXER_TEST_1",
            "MIXER_TEST_2",
            "MIXER_TEST_3",
            "MIXER_TEST_4",
            "MIXER_TEST_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "DEPRECATED",
            "",
            "",
            "DEPRECATED",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "These should never be present on a feature.",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRankSignalProto": {
      "description": "This message is embedded in the RankDetailsProto (below). It represents one rank signal, which is a floating point value estimating the Oyster Rank of the feature.",
      "id": "GeostoreRankSignalProto",
      "properties": {
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this signal."
        },
        "rank": {
          "description": "A value in the range [0, 1] estimating Oyster Rank according to this signal. Non-provider specific signals (e.g. SIGNAL_POPULATION) are interpreted by some common code in the ranking pipeline. Because of that, data providers should leave this field empty when setting such signals (so that the rank assignment can be uniform across all features regardless of contributing data providers). On the other hand, provider-specific signals (e.g. SIGNAL_ZENRIN_CITY_CATEGORY) are required to specify the rank field (it is not optional for them). That is because no code other than that of the provider itself will be able to fill in a meaningful value later on. We don't want clients to be reading from the raw_scalar / raw_string fields to interpret the data.",
          "format": "float",
          "type": "number"
        },
        "rawScalar": {
          "description": "The raw scalar value that was used to compute 'rank' above. The meaning of this attribute changes depending on the signal type.",
          "format": "float",
          "type": "number"
        },
        "rawString": {
          "description": "The raw string value that was used to compute 'rank' above. The meaning of this attribute changes depending on the signal type.",
          "type": "string"
        },
        "type": {
          "enum": [
            "SIGNAL_UNKNOWN",
            "SIGNAL_LENGTH",
            "SIGNAL_AREA",
            "SIGNAL_ADDRESS",
            "SIGNAL_LISTING",
            "SIGNAL_ROAD_PRIORITY",
            "SIGNAL_POI_COUNT",
            "SIGNAL_WEBSCORE",
            "SIGNAL_PATHRADIUS_LENGTH_METERS",
            "SIGNAL_PATHRADIUS_LENGTH_SEGMENTS",
            "SIGNAL_PATHRADIUS_POPULARITY",
            "SIGNAL_PEAK_ELEVATION_PROMINENCE",
            "SIGNAL_ROAD_SEGMENT_COUNT",
            "SIGNAL_POI_SCORE",
            "SIGNAL_ATTRACTIONS_SCORE",
            "SIGNAL_HAND_RANKED_LOCALITY_PROMINENCE",
            "SIGNAL_POPULATION",
            "SIGNAL_GDP",
            "SIGNAL_EUROPA_CLASS",
            "SIGNAL_RMF_SOURCE_RANK",
            "SIGNAL_MDS_SOURCE_RANK",
            "SIGNAL_MULTINET_SOURCE_RANK",
            "SIGNAL_LOCALXML_MANUAL_RANK",
            "SIGNAL_TRANSIT_LINE",
            "SIGNAL_TRANSIT_TRAIN_DEPARTURE_COUNT",
            "SIGNAL_TRANSIT_METRO_DEPARTURE_COUNT",
            "SIGNAL_TRANSIT_BUS_DEPARTURE_COUNT",
            "SIGNAL_TRANSIT_OTHER_DEPARTURE_COUNT",
            "SIGNAL_TRANSIT_TRAIN_LINE_COUNT",
            "SIGNAL_TRANSIT_METRO_LINE_COUNT",
            "SIGNAL_TRANSIT_BUS_LINE_COUNT",
            "SIGNAL_TRANSIT_OTHER_LINE_COUNT",
            "SIGNAL_TRANSIT_STATION_LOCAL_RANK",
            "SIGNAL_TRANSIT_STATION_GLOBAL_RANK",
            "SIGNAL_ORION_LEVEL",
            "SIGNAL_GEOCENTRE_ADDRESS_RANK",
            "SIGNAL_GOOGLE_3DWAREHOUSE_RANK",
            "SIGNAL_SKENERGY_CATEGORY",
            "SIGNAL_GOOGLE_GEOWIKI_USER_RANK",
            "SIGNAL_WIKIPEDIA_ARTICLES",
            "SIGNAL_WIKIPEDIA_ARTICLES_IN_OFFICIAL_LANGUAGE",
            "SIGNAL_KML_PLACEMARKS",
            "SIGNAL_KML_SOURCES",
            "SIGNAL_PANORAMIO_USERS",
            "SIGNAL_GOOGLE_MAPSHOP_USERS",
            "SIGNAL_GOOGLE_LOCALSEARCH_DIRECTORY_INFOS",
            "SIGNAL_GOOGLE_MAPS_NAVBOOST_CLICKS",
            "SIGNAL_GOOGLE_MAPS_NAVBOOST_CLICKTHROUGH_RATE",
            "SIGNAL_GOOGLE_RBL_CLICKS",
            "SIGNAL_GOOGLE_RBL_CLICK_FRACTION",
            "SIGNAL_GOOGLE_AUTHORITYPAGE_PAGERANK",
            "SIGNAL_GOOGLE_AUTHORITYPAGE_PAGERANK_CONFIDENCE",
            "SIGNAL_GOOGLE_REVIEWS",
            "SIGNAL_GOOGLE_WEB_QUERYVOL",
            "SIGNAL_GOOGLE_WEBPAGE_REFERENCE_DOMAINS",
            "SIGNAL_GOOGLE_LISTING_IMPRESSIONS",
            "SIGNAL_GOOGLE_INFOWINDOW_VIEWS",
            "SIGNAL_GOOGLE_DIRECTION_REQUESTS",
            "SIGNAL_GOOGLE_HOMEPAGE_CLICKS",
            "SIGNAL_GOOGLE_CHAIN_STORES",
            "SIGNAL_FLICKR_USERS",
            "SIGNAL_GOOGLE_LEANBACK_TOURS",
            "SIGNAL_GOOGLE_LOCALSEARCH_PLACERANK",
            "SIGNAL_WIKIPEDIA_WIKI_SCORE",
            "SIGNAL_ZENRIN_CITY_CATEGORY",
            "SIGNAL_ZENRIN_BUILDING_CLASS",
            "SIGNAL_ZENRIN_PEAK_CLASS",
            "SIGNAL_PLACE_INSIGHTS_LANDMARK",
            "SIGNAL_PLACE_INSIGHTS_POPULARITY",
            "SIGNAL_PLACE_INSIGHTS_PROMINENCE",
            "SIGNAL_PLACE_INSIGHTS_APPROACHABILITY",
            "SIGNAL_PLACE_INSIGHTS_TOTAL_ROAD_SEGMENT_USAGE"
          ],
          "enumDescriptions": [
            "This is reserved as a sentinel value. It should never be used. An unknown signal.",
            "Magnitude for one-dimensional features like segments.",
            "Magnitude for features with polygonal geometry. Derived from the number of other features that use this feature as an address component.",
            "DEPRECATED Derived from the number of local business listings that, once reverse-geocoded, have this feature as an address component.",
            "DEPRECATED",
            "This signal will be set on all routes and is derived by the value of the priority of all segments composing the route. It is a \"derived\" signal instead of a canonical one because it is not only about inheriting some child segment's priority. We actually take into consideration the priorities of all children segments to come up with a raw value for this signal. Derived from the number of POI that use this feature as an address component.",
            "DEPRECATED",
            "This signal derived from the number of documents in DocJoin, which contains keywords of the source feature. For each raw feature, we extract keywords from the feature's name and address. We search the keywords in DocJoin (now only 4B) to get the number of webpages which contains all the keywords of the feature, eg, for Quanjude in Beijing which is a famous restaurant in China, we consider Beijing and Quanjude as its keywords, the page containing both Beijing and Quanjude will be counted in. The number will be mapped by logarithm function into [0, 1]. This signal is based on a simple assumption: the more the name appears in webpage, the more famous it is. These signals are calculated by the Path Radius algorithm, using Pathfinder to figure out in how big a neighborhood this segment is used as a thoroughfare. The popularity is simply the fraction of all paths that use this segment.",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "Signal based on elevation and prominence values of peaks.",
            "Signal based on the number of road segments referring a feature. The number could be obtained by either looking RELATION_CONTAINED_BY relation or counting children of the feature.",
            "Signal based on placerank values of establishments that use this feature as an address or located within it (as determined by relations).",
            "Signal based on placerank values of (tourist) attraction establishments that are related to this feature through containment.",
            "Signal indicating a city of particular prominence independent of its other attributes. Currently only implemented for Japanese localities, primarily based on official government city statuses.",
            "",
            "",
            "NOTE(jdkim): All rank signals below are provider specific ones, so we use this enum value to identify the enum range for provider specific signals.",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Score of a particular station in relation to the stations near it. E.g., when displaying list of nearby stations we could prioritize the higher ranked ones.",
            "Score of a particular station in relation to all the stations globally. This is valuable for data cleanups, modeling, and proactive checks that could be targeted at the \"Top Stations\" to ensure high impact.",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "Rank derived from feature popularity asserted by users. Higher rank values are almost always moderated to verify accuracy, hence reliable.",
            "DEPRECATED",
            "These are primarily used for computing Placerank, which is now signal 3200.",
            "DEPRECATED",
            "",
            "",
            "DEPRECATED",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "DEPRECATED",
            "",
            "",
            "",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "DEPRECATED",
            "",
            "",
            "Signal based on WIKI_SCORE, which is brought by DataSourceProvider::PROVIDER_WIKIPEDIA.",
            "DEPRECATED Signal for buildings in Japan. This signal is a scale of the map this building label should be rendered.",
            "DEPRECATED Signal for peaks in Japan. This signal is a scale of the map this peak label should be rendered.",
            "DEPRECATED",
            "Place Insights landmarkiness fundamental aspect. This score combines the popularity and prominence aspects below with the Kerouac tourist score. Details: go/plank-landmark",
            "Place Insights popularity fundamental aspect. This score combines physical visits (Hulk) and direction searches. Details: go/plank-popularity",
            "Place Insights prominence fundamental aspect. This score is based on WebRef and the number of photos of a place. Details: go/plank-prominence DEPRECATED: No longer populated, because the data sources were deprecated. Not yet marked as deprecated because some features might still contain the data.",
            "Place Insights approachability fundamental aspect. This score indicates whether users can interact with a place without appointment. It is computed from the GCIDs of the place. Details: go/plank-approachability",
            "Number of times a user drives the entire length of the segment according to snapped GLS tracks. This is obtained by aggregating the snapped GLS data generated by the traffic team. Design document: go/aggregated-road-traffic-mapfacts"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRawDataProto": {
      "description": "A RawDataProto is a key-value pair that represents arbitrary source data from a particular provider. Raw data can be attached to features using their source_info field.",
      "id": "GeostoreRawDataProto",
      "properties": {
        "key": {
          "description": "The key associated with this data item. For source data in shape file format, this will typically be a column name. Keys need to be unique with respect to a particular data source (see DataSourceProto), but they do not need to be globally unique. You can look up the documentation for a key (e.g. a longer label and description) by following the source_id link of the parent SourceInfoProto, which takes you to a TYPE_DATA_SOURCE feature, and then looking up the corresponding RawMetadataProto object for this key in that feature's optional data_source field.",
          "type": "string"
        },
        "valueString": {
          "description": "All data items are represented as strings, the logic being that it is easy to convert other data types to strings, and there is no need to access this data efficiently.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRawMetadataProto": {
      "id": "GeostoreRawMetadataProto",
      "properties": {
        "conflationMethod": {
          "description": "Method to use when conflating together RawDataProto values at the same key NB: If you add a new ConflationMethod, then you must add the corresponding logic to MergeRawData to conflate the RawDataProto values using this method.",
          "enum": [
            "CONFLATION_PICK_FIRST_VALUE",
            "CONFLATION_UNION_CSV",
            "CONFLATION_SUM"
          ],
          "enumDescriptions": [
            "Simply picks first value from the set of values to be conflated together. If target feature already has a value, then that is the value kept.",
            "Parses all values as a comma-separated lists and takes the union of all elements from all lists (e.g. no duplicates) to create a new comma- separated list.",
            "Parses all values as int32s and outputs their sum as the final value."
          ],
          "type": "string"
        },
        "description": {
          "description": "Self-contained documentation about what this field represents and how its values are encoded.",
          "type": "string"
        },
        "key": {
          "description": "The key being described.",
          "type": "string"
        },
        "label": {
          "description": "A longer, human-readable name associated with this key. The label might be used in a data explorer tool, for example.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRectProto": {
      "description": "A latitude-longitude rectangle, represented as two diagonally opposite points \"lo\" and \"hi\". The rectangle is considered to be a closed region, i.e. it includes its boundary. The latitude bounds must be in the range -90 to 90 degrees inclusive, and the longitude bounds must be in the range -180 to 180 degrees inclusive. Various cases include: - If lo == hi, the rectangle consists of a single point. - If lo.longitude > hi.longitude, the longitude range is \"inverted\" (the rectangle crosses the 180 degree longitude line). - If lo.longitude == -180 degrees and hi.longitude = 180 degrees, the rectangle includes all longitudes. - If lo.longitude = 180 degrees and hi.longitude = -180 degrees, the longitude range is empty. - If lo.latitude > hi.latitude, the latitude range is empty.",
      "id": "GeostoreRectProto",
      "properties": {
        "hi": {
          "$ref": "GeostorePointProto"
        },
        "lo": {
          "$ref": "GeostorePointProto"
        }
      },
      "type": "object"
    },
    "GeostoreRegulatedAreaProto": {
      "description": "A collection of information that applies to a polygonal area.",
      "id": "GeostoreRegulatedAreaProto",
      "properties": {
        "restriction": {
          "description": "The set of restrictions that apply to a zone. These restrictions may limit the routability of every segment contained within the defined feature.polygon. Repeated restrictions are treated collectively as an OR meaning that segments in the zone are only routable if none of the restrictions apply. If any segments within the defined polygon should not have these restrictions applied, they must list this regulated area's feature id in their feature.exempt_regulated_area field.",
          "items": {
            "$ref": "GeostoreRestrictionProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreRelationProto": {
      "description": "This message is embedded within a FeatureProto, and represents a geographic or logical relationship of that feature to some other feature. Note that some relation types are there purely for the purpose of grouping together other relation types. They are noted as ABSTRACT in comments. Other relation types are no longer supported / in use. They are noted as DEPRECATED in comments (and marked with the standard deprecated option, too). Other relation types are reserved for future use or just not intended for use at all, for various internal reasons. They are noted as RESERVED in comments. WARNING: Updates to this proto within a FeatureProto's related_feature field handled by standalone pipelines and are NOT atomic with regard to updates to the features being referenced; we do not guarantee that a given MapFacts snapshot will be consistent between this field and the related features.",
      "id": "GeostoreRelationProto",
      "properties": {
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this relation."
        },
        "otherFeatureCountryCode": {
          "description": "If and only if the other feature is of TYPE_COUNTRY, the 2-letter country code. This is the FLAG_COUNTRY_CODE_2 name of the country component.",
          "type": "string"
        },
        "otherFeatureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The feature ID of the feature to which we're relating. WARNING: the related feature does not necessarily have a bound that encloses this feature, so in a bucketing MapReduce, you may not be able to follow all relationships. Relations that use strong references are annotated above but you can also refer to IsRelationStrong() in geostore/base/public/relation.h."
        },
        "otherFeatureName": {
          "description": "RESERVED",
          "items": {
            "$ref": "GeostoreNameProto"
          },
          "type": "array"
        },
        "otherFeatureTerritorialAdministrator": {
          "description": "If and only if the other feature is of TYPE_DISPUTED_AREA, the territorial administrator found in its GeopoliticalAttachmentProto.administered_by field, if any. Since this string is copied exactly, it may be a 2-letter country code or another type of descriptive string.",
          "type": "string"
        },
        "otherFeatureType": {
          "description": "The type of the feature to which we're relating.",
          "format": "int32",
          "type": "integer"
        },
        "overlapFraction": {
          "description": "** DEPRECATED ** If relation is exactly RELATION_OVERLAPS but not any of its subcategories, overlap_fraction contains an estimate of the fraction of the geometry of this feature that intersects with the other feature, ranging from 0.0 to 1.0. Note that this is a rough estimate based on cell coverings, and may not be very accurate. In particular, values of 0.0 and 1.0 are possible, even though in principle they should not be.",
          "format": "float",
          "type": "number"
        },
        "relation": {
          "description": "The relationship of the feature that contains this RelationProto to the feature other_feature_id. Note the relation_is_reversed field below. Some relations imply weak references, other strong ones. Strong references are annotated above but you can also refer to IsRelationStrong() in geostore/base/public/relation.h.",
          "enum": [
            "RELATION_OVERLAPS",
            "RELATION_CONTAINED_BY",
            "RELATION_EQUAL_TO",
            "RELATION_POLITICAL_DEPRECATED",
            "RELATION_CAPITAL_OF",
            "RELATION_DISAMBIGUATED_BY",
            "RELATION_NEIGHBOR_OF",
            "RELATION_OPPOSITE_TO",
            "RELATION_NEXT_TO",
            "RELATION_RIGHT_OF",
            "RELATION_LEFT_OF",
            "RELATION_BEHIND",
            "RELATION_IN_FRONT_OF",
            "RELATION_SAME_BUILDING",
            "RELATION_ABOVE",
            "RELATION_BELOW",
            "RELATION_NEAR",
            "RELATION_ORGANIZATIONALLY_PART_OF",
            "RELATION_DEPARTMENT_OF",
            "RELATION_WORKS_AT",
            "RELATION_INDEPENDENT_ESTABLISHMENT_IN",
            "RELATION_ON_LEVEL",
            "RELATION_OCCUPIES",
            "RELATION_BUSINESS_LIFE_CYCLE",
            "RELATION_BUSINESS_MOVED",
            "RELATION_BUSINESS_REBRANDED",
            "RELATION_MEMBER_OF_CHAIN",
            "RELATION_AUTHORIZED_DEALER_FOR_CHAIN",
            "RELATION_SUBSIDIARY_OF",
            "RELATION_PRIMARILY_OCCUPIED_BY",
            "RELATION_VARIATION",
            "RELATION_HAS_VARIANT",
            "RELATION_VARIANT_OF",
            "RELATION_VARIANT_SIBLING",
            "RELATION_CLIENT_DEFINED"
          ],
          "enumDescriptions": [
            "In the real world, this feature's geographic extent intersects the other feature's, but does not contain it. Note that the presence or absence of a relation may contradict the actual geometry in the FeatureProto. In these cases, the client should assume that the geometry of the feature is imprecise. Certain pairs of features are considered disjoint even if the geometries overlap. Allowed source types: - TYPE_ANY (but with geometry or children) Allowed destination types: - TYPE_ANY (but with polygonal geometry)",
            "In the real world, the geographical extent of the feature is contained by that of the other feature. Note that this relation implies overlap. As with overlap, the frame-of-reference is the real world, not necessarily the (imprecise) geometry in the FeatureProtos. There may be other semantic rules that govern the assignment of this relation. Two features cannot contain each other - instead they will have a RELATION_EQUAL_TO relation (see below). strong reference",
            "In the real world, this feature's geographic extent is exactly equal to the other feature's geographic extent. Note that this relation implies containment and overlap.",
            "DEPRECATED",
            "This feature is the capital of the other feature. Allowed source types: - TYPE_POLITICAL Allowed destination types: - TYPE_POLITICAL (of higher political level) strong reference",
            "ABSTRACT, RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "RESERVED",
            "ABSTRACT",
            "Used primarily to list co-existing departments of businesses such as universities, hospitals, department stores, etc. This is set from feature A to feature B when A is physically located within the boundaries of the compound feature occupied by B, AND A is a subsidiary or department of B (i.e. both have the same management/ownership). e.g. department -> hospital, department -> university Allowed source types: - TYPE_ESTABLISHMENT_POI Allowed destination types: - TYPE_ESTABLISHMENT_POI",
            "Used to relate an individual practitioner (doctor, lawyer, etc.) with the business they work at (hospital, law firm, etc.) Allowed source types: - TYPE_ESTABLISHMENT_POI - TYPE_ESTABLISHMENT_SERVICE Allowed destination types: - TYPE_ESTABLISHMENT_POI",
            "Used primarily for the \"mall directory\" use-case, this is set from feature A to feature B when A is physically located within the boundaries of the compound feature occupied by B AND A as an entity is independent of B, i.e. A and B have different management/ownership. e.g. store -> mall Allowed source types: - TYPE_ESTABLISHMENT_POI Allowed destination types: - TYPE_ESTABLISHMENT_POI",
            "The feature that represents the level/floor the feature exists on. Allowed source types: - TYPE_CARTOGRAPHIC (at most 1 such relation) - TYPE_COMPOUND_SECTION (at most 1 such relation) - TYPE_ENTRANCE (at most 1 such relation) - TYPE_ESTABLISHMENT_POI - TYPE_INTERSECTION (at most 1 such relation) - TYPE_SEGMENT (at most 2 such relations) - TYPE_TERMINAL_POINT (at most 1 such relations) Allowed destination types: - TYPE_LEVEL strong reference",
            "This feature physically occupies the other feature. Allowed source types: - TYPE_ESTABLISHMENT_POI Allowed destination types: - TYPE_COMPOUND Consumers should use the geometry of the target feature instead of the geometry of this feature. strong reference",
            "ABSTRACT",
            "e.g. \u201cespn zone\" moved from Times Square to Boston. The feature representing the business at the old location, or with the old service area, will refer to the one representing the business at the new location, or with the new service area, with this relation type. If a feature has this relation, its existence should show that the feature has closed and the close reason should be set to MOVED. Allowed source types: - TYPE_ESTABLISHMENT Allowed destination types: - TYPE_ESTABLISHMENT",
            "e.g. \"Holiday Inn\" rebranded to \"Double Tree\". The feature representing \"Holiday Inn\" will refer to the feature representing \"Double Tree\" with this relation type. If a feature has this relation, its existence should show that the feature has closed and the close reason should be set to REBRANDED. Allowed source types: - TYPE_ESTABLISHMENT Allowed destination types: - TYPE_ESTABLISHMENT",
            "Used by specific chain stores/franchises to refer to their parent chain. e.g. an individual Walmart store is a member of the \"Walmart\" chain. Transit stations can be members of multiple chains (transit agencies). All other establishments can have at most one explicit RELATION_MEMBER_OF_CHAIN relation. Subtypes may have different requirements. TYPE_TRANSIT_AGENCY is a temporarily allowed destination type while we migrate transit stations <-> transit agencies to a new representation (b/197741661) Allowed source types: - TYPE_ESTABLISHMENT Allowed destination types: - TYPE_BUSINESS_CHAIN - TYPE_TRANSIT_AGENCY strong reference",
            "Indicates that a feature sells merchandise for a given brand chain (e.g. Honda vehicles). Source currently restricted to features with gcid:car_dealer. strong reference",
            "Used by specific sub chain to refer to their parent chain. e.g. \"Walmart Pharmacy\" chain is a member of the \"Walmart\" chain. Currently this is only used by transit agencies. Talk to chains-eng team before using this relation type on other chains. A business chain can have at most one such relation. Allowed source types: - TYPE_BUSINESS_CHAIN Allowed destination types: - TYPE_BUSINESS_CHAIN strong reference",
            "Indicates which logical entity is the main occupant of a compound. A compound can have at most one such relation, and the target feature for that relation must refer back to the compound via a RELATION_OCCUPIES relation. Allowed source types: - TYPE_COMPOUND Allowed destination types: - TYPE_ESTABLISHMENT_POI strong reference",
            "ABSTRACT, DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "RESERVED"
          ],
          "type": "string"
        },
        "relationIsReversed": {
          "description": "RESERVED",
          "type": "boolean"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a relation. Never set in MapFacts."
        }
      },
      "type": "object"
    },
    "GeostoreRestrictionGroupProto": {
      "description": "A restriction group represents common properties of a set of restrictions on segments that are associated with the same underlying cause across a geographic region. Every segment referenced by this restriction group should have at least one restriction that refers backs to this restriction group. The standard feature properties have the following interpretations: name - A name that represents the name for this restriction group. kg_property - A reference back to a KG event in case this restriction group belongs to an event in KG. /geo/type/restriction_group/associated_event contains a mid to the associated event.",
      "id": "GeostoreRestrictionGroupProto",
      "properties": {
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this restriction group."
        },
        "segment": {
          "description": "FeatureId of all segments that have a RestrictionProto referring back to this RestrictionGroup.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreRestrictionProto": {
      "description": "A restriction is an expression that limits when an action can be taken. Each restriction has a set of conditions. If all of the conditions are true, then the restriction applies and the action cannot be taken. For example, the restriction \"no turns 3-5pm except buses\" would have two conditions: \"time is 3-5pm\" and \"vehicle is not a bus\". If both of these conditions apply, the restriction is true, and the turn is prohibited. Multiple restrictions may apply to the same action. Clients handle this by always declaring RestrictionProto as a \"repeated\" element. The semantics of having multiple restrictions are that if any restriction applies, then the action cannot be taken. In other words, restrictions are OR-ed together. Putting all of this together, a set of RestrictionProtos can be interpreted as an bool expression in disjunctive normal form: (A and B) or (D and E and F) or (G and H) The action is prohibited if this expression is true. Note that a restriction with no conditions is always true, i.e. its action is always prohibited.",
      "id": "GeostoreRestrictionProto",
      "properties": {
        "autonomousDrivingProducts": {
          "description": "The restriction only applies in these specific autonomous driving product scenarios. NOTE: This should only be set on restrictions with TRAVEL_AUTONOMOUS_VEHICLE travel mode.",
          "items": {
            "enum": [
              "UNKNOWN",
              "HD_L4",
              "HD_L2",
              "ADAS",
              "AUTO_DRIVING_EXPERIENCE"
            ],
            "enumDescriptions": [
              "Indicates that specific product requirements are unknown. It is best to assume that this applies to all autonomous driving scenarios.",
              "HD Maps Level 4 product.",
              "HD Maps Level 2 product.",
              "General advanced driver assist scenario.",
              "Geo Auto Driving Experience products (go/dx)."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "intersectionGroup": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Actually *required* if style=STYLE_IN_OUT, otherwise forbidden. Typically the intersection group type is artifact, but either artifact or logical groups can be used for STYLE_IN_OUT restrictions."
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this restriction."
        },
        "restrictionGroup": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Restriction group this restriction belongs to."
        },
        "schedule": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "When specified, restriction applies only at particular times (operating hours or times of the year: reversing lanes, seasonal roads, no left turns from 3-5pm Mon-Fri except holidays). Otherwise, restriction is in effect at all times."
        },
        "scope": {
          "description": "The scope that the restriction applies to. - SCOPE_DIRECTION means the segment/sibling pair is restricted in the direction of the segment that contains this RestrictionProto. For segment/sibling pairs with pedestrian facilities (and thus side-of-road routing) the RestrictionProto restricts both facilities in the direction of the segment (assuming that the restriction applies to travel mode TRAVEL_PEDESTRIAN). - SCOPE_SIDE means the RestrictionProto applies only to the side of road that the containing segment represents. That sibling's pedestrian facility is restricted in both directions. Schema constraints: - SCOPE_SIDE must be set if and only if travel_mode == [TRAVEL_PEDESTRIAN] and the segment containing the restriction has PEDESTRIAN_FACILITY_PRESENT. Such restrictions must have no subpath. - All other restrictions must have this field set to SCOPE_DIRECTION (whether explicitly or implicitly). This distinction is necessary for cases such as pedestrian facility on one-way segment/sibling roads.",
          "enum": [
            "SCOPE_DIRECTION",
            "SCOPE_SIDE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "style": {
          "description": "Restriction Style defines the semantics of the subpath field, as defined above in the documentation of subpath.",
          "enum": [
            "STYLE_CONTIGUOUS",
            "STYLE_SINGLE",
            "STYLE_TURN",
            "STYLE_IN_OUT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "subpath": {
          "description": "\"subpath\" specifies the GeoStore segments that this restriction applies to, according to the restriction_style field below. Segments that are referenced by this subpath field also refer to this feature back via the same subpath field. For all styles of restriction, all segments in the subpath must have identical copies of the restriction. In other words, restrictions are duplicated along every segment in the subpath. Note that subpaths of length 1 do not have any purpose and are disallowed. Note that it is possible to represent restrictions either using STYLE_CONTIGUOUS, or depending on the length of the subpath, one of the more specific STYLE_SINGLE, STYLE_TURN, or STYLE_IN_OUT. New code should use the more specific alternatives if possible, as they support instant updates. For restriction_style == STYLE_CONTIGUOUS (the default): \"subpath\" can either be empty, for a single-segment restriction, or it specifies exactly the sequence of segments which this restriction applies to. The subpath may be used to specify a turn restriction (a subpath of length 2) or to prohibit more complex maneuvers. For example, when merging onto a road from the right-hand side it may not be possible to make an immediate left turn due to insufficient time to cross the intervening lanes or the presence of a physical barrier. This would be indicated by a subpath restriction of length 3 or more. For restriction_style == STYLE_SINGLE: The subpath field of the Restriction must be empty. The restriction applies only to the segment it is attached to. There must not be an intersection group specified. For restriction_style == STYLE_TURN: The subpath field of the Restriction must contain exactly two segments. The first is called the \"in_segment\", the second is the \"out_segment\". They must be contiguous, i.e. the end intersection of the in_segment is the start intersection of the out_segment. The restriction applies only to a direct maneuver from the in_segment to the out_segment. Other paths from the in_segment to the out_segment are not restricted. There must not be an intersection group specified. For restriction_style == STYLE_IN_OUT: The subpath field of the Restriction must contain exactly two segments. The first is called the \"in_segment\", the second is the \"out_segment\". Note that the two segments define paths, but may not actually be one. The end intersection of the in_segment must be in an intersection group which also contains the start intersection of the out_segment. The in- and out-segments are not required to be adjacent, but may be. Either way, the restriction applies to any path from the in_segment to the out_segment through the intersection group, not just direct turns. The intersection_group must be specified. Note that clients which read restrictions and need to know which paths are restricted by a given IN_OUT restriction must expand the IN_OUT restriction by finding all paths through the intersection group from the in_segment to the out_segment.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a restriction. Never set in MapFacts."
        },
        "travelMode": {
          "description": "Restriction applies only to the given travel modes. This field should always be set, but may be missing in old data. WARNING: Restrictions with no travel modes are DEPRECATED. Historically, no travel modes has meant \"all travel modes\", except they didn't really even mean that, because Pathfinder would use a complex set of heuristics to interpret the \"correct\" travel modes. Pathfinder currently (last updated August 2013) has heuristics to cope with incomplete data that reduce or extend application of the specified restrictions to pedestrians or bicycles. We are actively working to remove these heuristics and replace them with explicit, correct travel modes in the data. See b/8746491.",
          "items": {
            "enum": [
              "TRAVEL_ANY",
              "TRAVEL_MOTOR_VEHICLE",
              "TRAVEL_AUTO",
              "TRAVEL_CARPOOL",
              "TRAVEL_MOTORCYCLE",
              "TRAVEL_BUS",
              "TRAVEL_TRUCK",
              "TRAVEL_DELIVERY",
              "TRAVEL_TAXI",
              "TRAVEL_EMERGENCY",
              "TRAVEL_THROUGH_TRAFFIC",
              "TRAVEL_AUTONOMOUS_VEHICLE",
              "TRAVEL_PEDESTRIAN",
              "TRAVEL_BICYCLE"
            ],
            "enumDescriptions": [
              "ABSTRACT",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "type": {
          "description": "clang-format on The type of restriction. This is not a condition, but rather tells you what kind of restriction it is. This field should always be set.",
          "enum": [
            "RESTRICTION_TRAVEL_RESTRICTED",
            "RESTRICTION_ILLEGAL",
            "RESTRICTION_PHYSICAL",
            "RESTRICTION_LOGICAL",
            "RESTRICTION_GATE",
            "RESTRICTION_CONSTRUCTION",
            "RESTRICTION_SEASONAL_CLOSURE",
            "RESTRICTION_PRIVATE",
            "RESTRICTION_WRONG_WAY",
            "RESTRICTION_TERMINAL",
            "RESTRICTION_PAYMENT_REQUIRED",
            "RESTRICTION_TOLL_BOOTH",
            "RESTRICTION_USAGE_FEE_REQUIRED",
            "RESTRICTION_ENTRANCE_FEE_REQUIRED",
            "RESTRICTION_ADVISORY",
            "RESTRICTION_HIGH_CRIME",
            "RESTRICTION_POLITICALLY_SENSITIVE",
            "RESTRICTION_DISTURBED_BY_MAINTENANCE",
            "RESTRICTION_CHECKPOINT",
            "RESTRICTION_REGION_SPECIFIC"
          ],
          "enumDescriptions": [
            "Travel or maneuver is prohibited or extremely limited. This type's value may be used for restrictions which do not fall into a more specific subcategory, but the effect is that travel or maneuver is prohibited.",
            "Travel or maneuver is prohibited due to traffic regulations. Includes restrictions due to explicit road markings. E.g., U-turns prohibited in marked intersections. NOTE: In the event that a restriction by regulations is enforced by a physical barrier, use RESTRICTION_PHYSICAL instead.",
            "A permanent physical barrier prevents maneuver. This restriction type may not be used for restrictions with empty subpaths.",
            "Maneuver is prohibited based on logical inference from other restrictions on segments or lanes. This restriction type may not be used for restrictions with empty subpaths. DEPRECATED",
            "A gate or other moveable barrier prevents direct access. NOTE: Travel may still be allowed in certain circumstances. Use RESTRICTION_PRIVATE in lieu of RESTRICTION_GATE for segments that may still be routed on in certain circumstances. DEPRECATED",
            "Road is closed due to road maintenance (e.g. repaving, adding more lanes) and cannot be used for routing.",
            "Travel is prohibited for the duration of some season. E.g., due to ice/snow in the winter.",
            "Road has signage discouraging or prohibiting use by the general public. E.g., roads with signs that say \"Private\", or \"No trespassing.\" NOTE: Use this type if travel is still be allowed in certain circumstances (e.g., legitimate visits to a place reachable by restricted roads only). Use RESTRICTION_ILLEGAL if travel is forbidden under all circumstances. This restriction type may not be used for restrictions with non-empty subpaths.",
            "Travel over this segment is prohibited because of signage indicating one-way directionality in the opposite direction. This restriction type may not be used for restrictions with non-empty subpaths. Travel over this segment should be avoided at all costs unless the destination is on the segment. This restriction type may be used only for restrictions of STYLE_SINGLE.",
            "RESERVED",
            "",
            "This restriction type may be used only for restrictions of STYLE_TURN, or STYLE_CONTIGUOUS with a subpath of length 2. The intersection at which the turn is restricted is the place of the toll booth.",
            "Traveling on the associated subpath requires a fee to be paid.",
            "Similar to RESTRICTION_USAGE_FEE_REQUIRED but instead of a fee for the usage, the fee is required for entering a special area (e.g. an amusement park). Also in contrast to RESTRICTION_USAGE_FEE_REQUIRED this restriction is supposed to be applied only to the segments that enter into the isolated restricted area from the outer world. Therefore there are two important points to consider when modeling data this way: 1) Every path that (exactly once) enters the restricted area should have exactly one such restriction (it does not matter whether it is a segment or subpath restriction). 2) All entrances have to be modeled consistently. It is recommended that the restriction is consistently applied to paths entering the area and not applied to paths leaving the area. NOTE: The above points are important because an additive penalty is applied for each individual restriction that appear on a path.",
            "Restrictions in the RESTRICTION_ADVISORY category refer to paths where travel is permitted, but may not be prudent or is cumbersome. Since this is often a matter of opinion, clients may choose not to make use of this information or not display it directly to the user.",
            "",
            "",
            "Segments with RESTRICTION_DISTURBED_BY_MAINTENANCE indicate that the road undergoes maintenance, however (unlike RESTRICTION_CONSTRUCTION) the segment will be used for routing.",
            "An inland location where travelling is expected to be interrupted by authorities to inspect passengers and/or goods. This restriction type may only be used for restrictions with style STYLE_SINGLE.",
            "Restrictions with the RESTRICTION_REGION_SPECIFIC category signify restrictions that are unique to a particular region, cannot currently be modeled through RestrictionProto, and/or have semantics that differ if in a particular region (such as car emission restrictions). These restrictions are specified on their restriction group, a traffic zone. Evaluating applicability of these restrictions requires an additional library located in the geostore/base/internal/specialized_restriction/ directory. That library controls the application of the restriction and will generally disregard data on this RestrictionProto. For example, go/cabrio-restriction-schema specifies that this proto should set TRAVEL_MOTOR_VEHICLE because other values have no effect; likewise, TimeScheduleProto has no effect. In truth this restriction's only job is to carry a restriction_group reference."
          ],
          "type": "string"
        },
        "vehicleAttributeFilter": {
          "$ref": "GeostoreVehicleAttributeFilterProto",
          "description": "The restriction only applies to vehicles that meet all of the attributes defined here. If this is empty, it does not affect the scope of the restriction."
        }
      },
      "type": "object"
    },
    "GeostoreRightsStatusProto": {
      "description": "Proto used to represent rights for FeatureProto. See go/geo-rights for more details. NOTE: Use google3/geostore/provenance/public/rights.h or google3/java/com/google/geostore/provenance/rights/Rights.java instead of accessing this proto directly.",
      "id": "GeostoreRightsStatusProto",
      "properties": {
        "fieldWithRights": {
          "items": {
            "$ref": "GeostoreFieldWithRightsProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreRoadConditionalProto": {
      "description": "A RoadConditionalProto defines conditions that affect when the road traversal information is applicable.",
      "id": "GeostoreRoadConditionalProto",
      "properties": {
        "timeSchedule": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "Specifies what times the information is applicable. This can be specific times (3-5 PM) or days of the week (Mon - Fri), as well as more general times like school hours, dusk to dawn, etc. If no value is set, the restriction is applicable at all times."
        },
        "vehicleAttribute": {
          "$ref": "GeostoreVehicleAttributeFilterProto",
          "description": "Additional attributes that apply to the applied vehicle types."
        },
        "vehicleType": {
          "description": "Restrictions applying to specific types of vehicles.",
          "items": {
            "enum": [
              "UNKNOWN",
              "ANY",
              "CAR",
              "MOTORCYCLE",
              "TRUCK",
              "BUS"
            ],
            "enumDescriptions": [
              "Default proto value, this value will never be set in MapFacts.",
              "",
              "",
              "",
              "Note: The exact definition of a truck varies by city, but it usually refers to vehicles with three or more axles. This value does not necessarily apply to all commercial vehicles or vehicles colloquially referred to as trucks (eg. pickup trucks).",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreRoadMonitorProto": {
      "description": "A road monitor is a device that observes traffic for road violations like speeding or running a red light. These are modeled within MapFacts so that navigation services can warn users when they drive along road segments that are monitored.",
      "id": "GeostoreRoadMonitorProto",
      "properties": {
        "monitoredRoad": {
          "description": "The TYPE_ROAD segment features that this road monitor may observe.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreRoadSignComponentProto": {
      "description": "Below is some horrible ASCII art and a description of the components of a road sign. +-------------------+ | A11 E50 Paris | | Chartres | +-------------------+ This sign would be composed of four components (all of them text components, the only option we support for now). The three in the first row would all have a \"major_position\" of zero. Their \"minor_position\" values would be zero for \"A11\", one for \"E50\", and two for \"Paris\". The component in the second row would have \"major_position\" value of one. This message provides the details of a single component of a road sign. A component defines its position within a sign, its type, and its content.",
      "id": "GeostoreRoadSignComponentProto",
      "properties": {
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The id of the feature referred to by this component, typically the route or locality feature this sign points towards. In the ASCII art example above, this field would contain the id for the routes A11 and E50 and the localities Chartres and Paris in the corresponding component."
        },
        "featureType": {
          "description": "The type of the feature referred to by this component. If feature_id is specified type of that feature should be the same as this field.",
          "format": "int32",
          "type": "integer"
        },
        "majorPosition": {
          "description": "This is the \"major\" position of this component within the set of components that make up a sign. This number can be thought of as the \"row\" of the sign on which the component appears, but no guarantees are made that there is a one-to-one mapping between \"major_position\" and the rows of information on the actual sign being modeled. A \"major_position\" value of zero would indicate that the component is near the top of the sign.",
          "format": "int32",
          "type": "integer"
        },
        "minorPosition": {
          "description": "This is the position of a component within the components of a sign that share a common \"major_position\". It can be though of as the \"column\" of the component, but like \"major_position\", no guarantees are made regarding its mapping to reality. For data sources that don't provide enough information to determine a component's major and minor positions, major position should be populated and minor position should not be present. A \"minor_position\" value of zero would indicate that the component is near the \"beginning\" of the sign. In countries where signs are read from left to right, \"minor_position\" zero would be near the left side of the sign.",
          "format": "int32",
          "type": "integer"
        },
        "routeDirection": {
          "description": "The direction of traffic for the referenced TYPE_ROUTE feature.",
          "enum": [
            "DIRECTION_NONE",
            "DIRECTION_NORTH",
            "DIRECTION_EAST",
            "DIRECTION_SOUTH",
            "DIRECTION_WEST",
            "DIRECTION_NORTHEAST",
            "DIRECTION_NORTHWEST",
            "DIRECTION_SOUTHEAST",
            "DIRECTION_SOUTHWEST",
            "DIRECTION_INNER",
            "DIRECTION_OUTER"
          ],
          "enumDescriptions": [
            "DIRECTION_NONE value is reserved and only present there to avoid using a meaningful entry as the default value. RESERVED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Inner/Outer loop. Short names are not supported. The actual direction depends on the local driving rule (right-handed vs. left-handed). TODO(b/161314216) If you need an explicit loop direction or a road sign uses clockwise/counterclockwise, don't use INNER/OUTER but consider adding DIRECTION_CLOCKWISE and DIRECTION_COUNTERCLOCKWISE instead.",
            ""
          ],
          "type": "string"
        },
        "text": {
          "$ref": "GeostoreNameProto",
          "description": "If this sign component is of type \"TYPE_TEXT\", this field contains the text of the component. A NameProto is used to allow language and flags to be associated with the text."
        },
        "type": {
          "description": "This type of content represented by this sign component.",
          "enum": [
            "TYPE_TEXT"
          ],
          "enumDescriptions": [
            "This component is comprised of a single piece of text. The \"text\" field must be present on sign components of this type."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRoadSignProto": {
      "description": "A RoadSignProto holds the details of a road sign. Currently this is simply a list of the items that appear on the sign and their relative position.",
      "id": "GeostoreRoadSignProto",
      "properties": {
        "component": {
          "description": "The list of components for a single road sign. A sign may be composed of multiple components, each with its own position and content.",
          "items": {
            "$ref": "GeostoreRoadSignComponentProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreRouteAssociationProto": {
      "description": "This protocol buffer holds metadata about the association between a segment and a route.",
      "id": "GeostoreRouteAssociationProto",
      "properties": {
        "displayPreference": {
          "description": "clang-format on",
          "enum": [
            "DISPLAY_PREFERRED",
            "DISPLAY_BEST",
            "DISPLAY_OK",
            "DISPLAY_HIDE"
          ],
          "enumDescriptions": [
            "These routes should be displayed along this segment.",
            "Among the preferred routes, this is the best one to display. There can be at most one of these per segment.",
            "These are also valid route names to display, but clients should choose PREFERRED routes if available.",
            "These routes should not be displayed."
          ],
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the route association."
        },
        "route": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Identifies the route feature to which this metadata applies. This is one of the routes the segment refers to via the SegmentProto.route field."
        },
        "routeDirection": {
          "description": "The direction of the TYPE_ROUTE feature in this route association. A small number of countries (mostly just the United States, Mexico, and Canada) use directional routes. For example, in the United States highway US-1 is referred to as US-1 North or US-1 South on the sides where flow of traffic moves in those directions.",
          "enum": [
            "DIRECTION_NONE",
            "DIRECTION_NORTH",
            "DIRECTION_EAST",
            "DIRECTION_SOUTH",
            "DIRECTION_WEST",
            "DIRECTION_NORTHEAST",
            "DIRECTION_NORTHWEST",
            "DIRECTION_SOUTHEAST",
            "DIRECTION_SOUTHWEST",
            "DIRECTION_INNER",
            "DIRECTION_OUTER"
          ],
          "enumDescriptions": [
            "DIRECTION_NONE value is reserved and only present there to avoid using a meaningful entry as the default value. RESERVED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Inner/Outer loop. Short names are not supported. The actual direction depends on the local driving rule (right-handed vs. left-handed). TODO(b/161314216) If you need an explicit loop direction or a road sign uses clockwise/counterclockwise, don't use INNER/OUTER but consider adding DIRECTION_CLOCKWISE and DIRECTION_COUNTERCLOCKWISE instead.",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreRouteProto": {
      "description": "A route is a collection of segments that forms a logical group - usually a named road or highway. Segments can belong to more than one route, and the segments of one route may be a subset of the segments of another route (e.g. I-5 N is a subset of I-5). Segments in the collection that define the route do not need to constitute a single uninterrupted line, there can be disconnects. The standard feature properties are interpreted as follows: name - Routes should have one or more names. (While unnamed roads certainly exist in the real world, we choose not to create route features for such roads. Instead, the unnamed segments are merely not part of any route.) address - This should always be empty. type - Specifies a particular route subtype, see feature.proto. point - This should always be empty. polyline - This should always be empty. polygon - This should always be empty. child - The pairs of segments that belong to this route (a given route should always reference segments in both travel directions).",
      "id": "GeostoreRouteProto",
      "properties": {
        "childType": {
          "description": "The feature type of the route children. Should be set if and only if all children are of the same feature type.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreSchoolDistrictProto": {
      "description": "This protocol buffer holds school district specific attributes for features of TYPE_SCHOOL_DISTRICT.",
      "id": "GeostoreSchoolDistrictProto",
      "properties": {
        "type": {
          "enum": [
            "TYPE_UNIFIED",
            "TYPE_ELEMENTARY",
            "TYPE_SECONDARY"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSegmentPathProto": {
      "description": "A segment path describes a path through a short set of segments. The segment path can be used for any purpose. At the moment, only TYPE_ROAD_SIGN features can have associated segment paths: The segment path lists the segments that refer to the sign. These are the segments for which the sign is applicable. The sign's physical location is independent of the segments in the path.",
      "id": "GeostoreSegmentPathProto",
      "properties": {
        "subpath": {
          "description": "Specifies a sequence of feature ids of GeoStore segments. The feature ids are ordered. The path \"AB\" is not the same as the path \"BA\". The segments along the path are assumed to be connected via the appropriate intersections. The segment features that are referenced by this subpath refer to this feature back via the road_sign field in segment proto extension.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreSegmentProto": {
      "description": "--------------------------------------------------------------------------- WARNING - if you add new fields to SegmentProto (or to other protos used by SegmentProto), you need to: - ensure that the ShortSegmentsMerger class (in geostore/tools/internal/mr-mergesegments.cc) is aware of them, otherwise the new fields will be discarded randomly. - consider whether they should be cleared in the ClearFeature() function (in maps/render/process-high-priority-roads.cc) if they are irrelevant for rendering high priority roads at far-out zoom levels. - update the test cases that ensure these two packages know all the SegmentProto fields in both mr-mergesegments_test.cc and maps/render/process-high-priority-roads_test.cc or you will break the VersaTile build. ---------------------------------------------------------------------------",
      "id": "GeostoreSegmentProto",
      "properties": {
        "advisoryMaximumSpeed": {
          "items": {
            "$ref": "GeostoreAppliedSpeedLimitProto"
          },
          "type": "array"
        },
        "altitude": {
          "description": "RESERVED",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "avgSpeedKph": {
          "description": "The average speed that should be expected along this route under normal conditions, in kilometers per hour. (Hopefully we'll replace this with something a lot more sophisticated.)",
          "format": "float",
          "type": "number"
        },
        "avgSpeedKphMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the average speed."
        },
        "barrier": {
          "description": "clang-format on",
          "enum": [
            "BARRIER_NONE",
            "BARRIER_PRESENT",
            "BARRIER_LEGAL",
            "BARRIER_PHYSICAL"
          ],
          "enumDescriptions": [
            "Some barrier which prevents turns in the middle of a segment, but the details are not known (or the tester doesn't care to distinguish between legal and physical barriers).",
            "",
            "An example of this in the United States would be a pair of double-yellow lines. This pattern indicates that all turns are legally prohibited.",
            "A concrete strip, island, planter, or other physical barrier. This category is also used when we model the roadways are separated."
          ],
          "type": "string"
        },
        "barrierMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the barrier."
        },
        "bicycleFacility": {
          "description": "clang-format on",
          "enum": [
            "BICYCLE_FACILITY_SEPARATE_TRAIL",
            "BICYCLE_FACILITY_PEDESTRIAN_PATH",
            "BICYCLE_FACILITY_WIDE_PEDESTRIAN_PATH",
            "BICYCLE_FACILITY_SHARED_ROAD",
            "BICYCLE_FACILITY_BIKE_LANE",
            "BICYCLE_FACILITY_BIKE_LANE_WITH_PEDESTRIAN_PATH",
            "BICYCLE_FACILITY_WIDE_SHOULDER",
            "BICYCLE_FACILITY_SHARROW",
            "BICYCLE_FACILITY_SHARED_ROAD_WITH_PEDESTRIAN_PATH"
          ],
          "enumDescriptions": [
            "This segment has a detached trail or path running alongside it, suitable for the use of cyclists. When a segment has this attribute, there should never be a distinct segment for the trail, because the road and trail are part of the same logical segment. In other words, the trail is modeled by this attribute on its associated road, rather than by a separate segment.",
            "This segment has a sidewalk or other pedestrian pathway that permits bicycles.",
            "This segment has a wide sidewalk or other pedestrian pathway.",
            "This segment allows bicycles to share the road with motor vehicles. It may or may not provide special accommodation for cyclists.",
            "This segment has a striped bicycle lane.",
            "This segment has a striped bicycle lane, and also has a sidewalk or other pedestrian pathway that permits bicycles.",
            "This segment has a wide shoulder or curb lane.",
            "This segment has pavement markings to make motorists aware of bicycles in a shared lane.",
            "This segment allows bicycles to share the road with motor vehicles, and also has a sidewalk or other pedestrian pathway that permits bicycles."
          ],
          "type": "string"
        },
        "bicycleSafety": {
          "enum": [
            "BICYCLE_SAFETY_RECOMMENDED",
            "BICYCLE_SAFETY_NEUTRAL",
            "BICYCLE_SAFETY_CAUTION"
          ],
          "enumDescriptions": [
            "This segment is explicitly recommended as suitable for biking, for instance by a sign, by a city bike map, or by a user.",
            "This segment is similarly suitable for biking as nearby segments with the same 'bicycle_facility'.",
            "Cyclists should use extra caution on these segments, as they may be inferior in suitability for biking."
          ],
          "type": "string"
        },
        "condition": {
          "enum": [
            "CONDITION_GOOD",
            "CONDITION_POOR"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "conditionMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the condition."
        },
        "constructionBeginDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "If known, the date that construction is scheduled to begin."
        },
        "constructionEndDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "If known, the date that construction is scheduled to end."
        },
        "constructionStatus": {
          "enum": [
            "CONSTRUCTION_PLANNED",
            "CONSTRUCTION_STARTED",
            "CONSTRUCTION_COMPLETE",
            "CONSTRUCTION_CLOSED_FOR_MAINTENANCE",
            "CONSTRUCTION_DISTURBED_BY_MAINTENANCE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "constructionStatusMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the construction status."
        },
        "covered": {
          "description": "Whether the segment is covered by a roof etc. If this field is missing, the status is unknown.",
          "type": "boolean"
        },
        "distanceToEdge": {
          "description": "Average distance between the segment's polyline and edge of the road on this side in meters. It need not be equal to the sum of width of all lanes in this direction. This width includes on-street bicycle lanes but excludes off-street lanes such as sidewalks. The edge of the road is the rightmost edge for segments in right side driving countries and leftmost edge for left side driving countries. Width of the road is sum of this and sibling's distance_to_edge.",
          "format": "float",
          "type": "number"
        },
        "distanceToEdgeMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for distance_to_edge."
        },
        "edgeFollowsSegmentBeginFraction": {
          "description": "These indicate for what portion of the segment does the outer curb of the segment follow the segment polyline - i.e., where do the sweep curves connect along the outer curb. If unspecified, may be assumed to be equal to lane retraction, preferring outermost lane.",
          "format": "float",
          "type": "number"
        },
        "edgeFollowsSegmentEndFraction": {
          "format": "float",
          "type": "number"
        },
        "elevation": {
          "description": "clang-format on",
          "enum": [
            "ELEVATION_NORMAL",
            "ELEVATION_BRIDGE",
            "ELEVATION_TUNNEL",
            "ELEVATION_SKYWAY",
            "ELEVATION_STAIRWAY",
            "ELEVATION_ESCALATOR",
            "ELEVATION_ELEVATOR",
            "ELEVATION_SLOPEWAY",
            "ELEVATION_MOVING_WALKWAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "A skyway is a road that is raised on supports for an extended length.",
            "Sample path description: \"Go up/down the stairs.\" PedestrianGradeCategory provides information about \"up/down\".",
            "Sample path description: \"Go up/down the escalator.\" PedestrianGradeCategory provides information about \"up/down\".",
            "Sample path description: \"Take the elevator up/down to the xth floor.\" PedestrianGradeCategory provides information about \"up/down\".",
            "Sample path description: \"Ascend/descend the slope\" PedestrianGradeCategory provides information about \"ascend/descend\".",
            "Sample path description: \"Get on the moving walkway.\""
          ],
          "type": "string"
        },
        "elevationMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the elevation."
        },
        "endpoint": {
          "description": "clang-format on",
          "enum": [
            "ENDPOINT_UNKNOWN",
            "ENDPOINT_UNRESTRICTED",
            "ENDPOINT_UNCONTROLLED",
            "ENDPOINT_STOP_SIGN",
            "ENDPOINT_ALL_WAY_STOP",
            "ENDPOINT_TRAFFIC_LIGHT",
            "ENDPOINT_THREE_WAY",
            "ENDPOINT_FLASHING_RED",
            "ENDPOINT_FLASHING_YELLOW",
            "ENDPOINT_YIELD",
            "ENDPOINT_MERGE",
            "ENDPOINT_ROUNDABOUT",
            "ENDPOINT_RAILROAD_CROSSING",
            "ENDPOINT_NO_EXIT",
            "ENDPOINT_WRONG_WAY",
            "ENDPOINT_TOLL_BOOTH"
          ],
          "enumDescriptions": [
            "",
            "This category is used in cases where traffic on this segment always has the right-of-way (e.g. passing a side street, fork in road).",
            "",
            "",
            "",
            "",
            "Three-way in this direction",
            "Flashing red light (stop)",
            "Flashing yellow light (yield)",
            "Traffic on this segment has to give way to oncoming traffic, but does not necessarily have to come to a full stop. This category is used where there exists a physical yield sign and/or road painting (triangles), but also where circumstances and applicable local traffic laws require traffic on such segment to give way (e.g. coming from a dirt road onto a paved road).",
            "",
            "This segment leads to a roundabout entrance. Note this category is not used for segments themselves inside a roundabout. See USAGE_ROUNDABOUT for these.",
            "",
            "This category denotes a dead-end. Useful to explicitly exclude connections to other data-sets, for example at country borders and building entrances in countries where the indoor and outdoor routing networks are provided by different providers.",
            "DEPRECATED Use RESTRICTION_WRONG_WAY",
            "This segment directly ends at a toll booth. The intersection capturing these segments represents the location of the toll booth. If it has a name, this is captured in the TYPE_INTERSECTION_GROUP that contains the intersection."
          ],
          "type": "string"
        },
        "endpointMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the endpoint."
        },
        "gradeLevel": {
          "description": "Detailed information about grade levels along the segment. If a GradeLevelProto is not present for any point (index) along the segment, the default grade level is zero. In between two points (indexes), the grade level of the segment is taken to be the max of the grade levels on either side of it. See gradelevel.proto for semantics of repeated indexes.",
          "items": {
            "$ref": "GeostoreGradeLevelProto"
          },
          "type": "array"
        },
        "internal": {
          "$ref": "GeostoreInternalSegmentProto",
          "description": "Internal-only data."
        },
        "interpolationOffsetMeters": {
          "description": "If specified, the perpendicular offset in meters from a road segment to an interpolated address along that road segment. See go/synthetic-address-positions.",
          "format": "float",
          "type": "number"
        },
        "intersection": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The intersection feature corresponding to the destination of this segment. Intersections are used to represent the connectivity between segments. Each intersection stores the segment ids of all the incoming and outgoing segments that meet at that intersection. Turns can be made from this segment to any of the outgoing segments of its intersection, unless there is a restriction that explicitly disallows the turn (see below). Every segment has an intersection object, even if there are no other segments to connect to (i.e., a cul-de-sac or dead end)."
        },
        "isMaxPermittedSpeedDerived": {
          "description": "Specifies whether the max_permitted_speed_kph was derived from a heuristic as opposed to coming from an authoritative source.",
          "type": "boolean"
        },
        "lane": {
          "description": "Detailed information about each lane in this direction, if available. Lanes are numbered from inside of the road outward, i.e. the lane next to the center line is lane 0. Note that lanes that are valid for travel in both directions appear in both segments of a segment pair (left turn lanes, one-lane roads, some passing lanes, reversing lanes). Some lanes may not be usable by cars, such as bike lanes. Also, some lanes may not exist along the entire segment, e.g. left- or right-turn lanes that appear just before the intersection.",
          "items": {
            "$ref": "GeostoreLaneProto"
          },
          "type": "array"
        },
        "legalMaximumSpeed": {
          "description": "The legal maximum, legal minimum, and advisory (recommended but non-legally binding) maximum speed limits that are permitted on this segment. These should be the segment's legal limits; however, note that it may contain estimated values based on country-wide defaults and other heuristics (see 'AppliedSpeedLimitProto.trust_level'). Before exposing these fields to users as the legal speed limit please consult with Google lawyers.",
          "items": {
            "$ref": "GeostoreAppliedSpeedLimitProto"
          },
          "type": "array"
        },
        "legalMinimumSpeed": {
          "items": {
            "$ref": "GeostoreAppliedSpeedLimitProto"
          },
          "type": "array"
        },
        "maxPermittedSpeedKph": {
          "description": "The maximum speed that is permitted on this segment, in kilometers per hour. This should be the segment's legal speed limit; however, note that it may contain estimated values based on country-wide defaults and other heuristics (see 'is_max_permitted_speed_derived' below). Before exposing this field to users as the legal speed limit please consult with Google lawyers. ",
          "format": "float",
          "type": "number"
        },
        "maxPermittedSpeedKphMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the maximum permitted speed."
        },
        "onRight": {
          "description": "Specifies whether this segment carries right-hand traffic (cars keep to the right side of the road) instead of left-hand traffic (cars keep to the left side). This is true for US roads and false for UK roads, for example. See go/wikip/Left-_and_right-hand_traffic.",
          "type": "boolean"
        },
        "pedestrianCrossing": {
          "$ref": "GeostorePedestrianCrossingProto",
          "description": "Defines the pedestrian crossing(s) between the end point of this segment and the start point of this segment's sibling."
        },
        "pedestrianFacility": {
          "description": "clang-format on",
          "enum": [
            "PEDESTRIAN_FACILITY_UNKNOWN",
            "PEDESTRIAN_FACILITY_NONE",
            "PEDESTRIAN_FACILITY_PRESENT",
            "PEDESTRIAN_FACILITY_SIDEWALK",
            "PEDESTRIAN_FACILITY_WIDE_SHOULDER"
          ],
          "enumDescriptions": [
            "No data about pedestrian facility is available.",
            "No special pedestrian facilities are available on this segment.",
            "The segment has some kind of pedestrian facility, like a sidewalk or wide shoulder, that separates pedestrians from motor vehicle traffic.",
            "Deprecated. Sidewalks are represented via a TYPE_PEDESTRIAN lane.",
            "Deprecated. Wide shoulder is implied when segment.pedestrian_facility = PEDESTRIAN_FACILITY_PRESENT and segment.lane does not include a TYPE_PEDESTRIAN lane."
          ],
          "type": "string"
        },
        "pedestrianGrade": {
          "enum": [
            "PEDESTRIAN_GRADE_FLAT",
            "PEDESTRIAN_GRADE_UP",
            "PEDESTRIAN_GRADE_DOWN"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "priority": {
          "description": "LINT.ThenChange(//depot/google3/maps/pathfinder/pgraph/pgraph-segment-categories.cc)",
          "enum": [
            "PRIORITY_UNKNOWN",
            "PRIORITY_NON_TRAFFIC",
            "PRIORITY_TERMINAL",
            "PRIORITY_LOCAL",
            "PRIORITY_MINOR_ARTERIAL",
            "PRIORITY_MAJOR_ARTERIAL",
            "PRIORITY_SECONDARY_ROAD",
            "PRIORITY_PRIMARY_HIGHWAY",
            "PRIORITY_LIMITED_ACCESS",
            "PRIORITY_CONTROLLED_ACCESS"
          ],
          "enumDescriptions": [
            "The priority of the segment is unknown. This is not actually allowed to be set in MapFacts, but best-practice is to have a default 0 value for enums.",
            "A non-traffic segment is not intended for normal vehicles, e.g. a pedestrian mall. 0x10",
            "A terminal road is not intended to carry through traffic, e.g. a narrow residential street or an access road to a point of interest. 0x20",
            "A small city street, typically for travel in a residential neighborhood, or a small rural road. This is the lowest priority suitable for through traffic. 0x30",
            "A moderate-capacity \"collector\" that funnels traffic from local roads towards arterial roads or business areas. 0x40",
            "A high-capacity road that carries large volumes of traffic between different neighborhoods or towns. 0x50",
            "Roads that act as conduits a) between primary highways (and above), or b) from major/minor arterial roads to primary highways (and above). They may be state highways, for example. 0x60",
            "These highways are major preferred roads that connect between regions, but that do not have significant access restrictions. Most crossings are level grade (traffic light, stop sign) and there may be driveways and local roads that connect directly to the highway. NOTE: Where a dense network of limited/controlled access roads carries most of the traffic between regions, this priority may be infrequent. 0x70",
            "Limited access highways have some access restrictions, but are not fully access controlled. Typically driveways and local roads connect to a separate \"frontage road\" that is connected to the highway via spaced traffic lights, interchanges, or stop signs. Limited access roads are sometimes called expressways. 0x80",
            "Controlled access highways have grade-separated crossings and are accessed exclusively by ramps. They are usually called \"freeways\" or \"motorways\". 0x90"
          ],
          "type": "string"
        },
        "priorityMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the priority."
        },
        "restriction": {
          "description": "The set of restrictions that apply to this segment. Restrictions may make a single segment, turn, or more complex maneuver along a set of segments unroutable for the specified travel modes, or may only add penalties or warnings, depending on the restriction type. Turn restrictions are one example of a restriction. By default, turns are allowed onto all outgoing segments from this segment's intersection (including the sibling of this segment, i.e. U-turns are allowed by default). If any of these turns are disallowed they will be listed as \"subpath restrictions\". A subpath restriction disallows travel on given sequence of segments. In the case of a disallowed turn, the subpath simply consists of the source and destination feature ids. There may also be restrictions that apply to all travel on this segment (e.g. chains required, or closed in winter), or restrictions that just apply to certain lanes (e.g. high occupancy vehicle lanes).",
          "items": {
            "$ref": "GeostoreRestrictionProto"
          },
          "type": "array"
        },
        "roadMonitor": {
          "description": "The road monitors that monitor this segment for traffic violations.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "roadSign": {
          "description": "The road sign(s) which this segment refers to. These are features of TYPE_ROAD_SIGN that are applicable to this segment. For example, a sign that says \"TO KIRKLAND\" might apply to several segments on a freeway off-ramp (until the end of the ramp). Note that this field makes it easy to find the signs for a given road segment. The feature for the sign lists the segments that refer to it.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "route": {
          "description": "The route(s) to which this segment belongs.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "routeAssociation": {
          "description": "Holds metadata about the associations between this segment and the route features listed in the route field. This metadata need not be present; the only consistency requirement is that every feature ID that appears inside 'route_association' must also appear in the repeated 'route' field. If a route does not appear in route_association, consumers should assume that it has a default initialized RouteAssociationProto.",
          "items": {
            "$ref": "GeostoreRouteAssociationProto"
          },
          "type": "array"
        },
        "separatedRoadways": {
          "description": "Indicates whether the segment's opposing lanes of traffic are separated from this segment, and hence have been represented in a separate feature. This means that there are two pairs of siblings instead of one.",
          "type": "boolean"
        },
        "sibling": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The other segment of this segment pair (see above). The segment that is referenced by the sibling field refers to this feature back via the same sibling field. Both segment and sibling should have the same properties such as geometry, country code, elevation, level relation, priority etc. Since routes are required to have segment and sibling at the same time, the set of routes on a segment is same to that of the sibling."
        },
        "slope": {
          "description": "RESERVED",
          "items": {
            "$ref": "GeostoreSlopeProto"
          },
          "type": "array"
        },
        "surface": {
          "description": "clang-format on LINT.ThenChange(//depot/google3/geostore/base/proto/lane.proto) Specific lanes may override this segment-level surface type.",
          "enum": [
            "SURFACE_UNKNOWN",
            "SURFACE_PAVED",
            "SURFACE_ASPHALT",
            "SURFACE_CONCRETE",
            "SURFACE_CHIPSEAL",
            "SURFACE_BRICK",
            "SURFACE_SETT",
            "SURFACE_COBBLESTONE",
            "SURFACE_UNPAVED",
            "SURFACE_GRAVEL",
            "SURFACE_DIRT",
            "SURFACE_SAND"
          ],
          "enumDescriptions": [
            "RESERVED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "surfaceMetadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for the surface."
        },
        "sweep": {
          "description": "The geometric sweeps between this segment and nearby segments, used for real road width rendering. A sweep describes the surface that connects to segments.",
          "items": {
            "$ref": "GeostoreSweepProto"
          },
          "type": "array"
        },
        "tollRoad": {
          "description": "If this segment is part of a toll road. It would be nice to have data about the toll cost, locations of toll booths, and so forth. Sadly, we don't have this data at this time.",
          "type": "boolean"
        },
        "usage": {
          "description": "clang-format on LINT.ThenChange(//depot/google3/maps/pathfinder/pgraph/pgraph-segment-categories.cc)",
          "enum": [
            "USAGE_ANY",
            "USAGE_RAMP",
            "USAGE_ON_RAMP",
            "USAGE_OFF_RAMP",
            "USAGE_ON_OFF_RAMP",
            "USAGE_INTERCHANGE",
            "USAGE_SPECIAL_TRAFFIC_FIGURE",
            "USAGE_ROUNDABOUT",
            "USAGE_ROUNDABOUT_BYPASS",
            "USAGE_ROUNDABOUT_INTERNAL_BYPASS",
            "USAGE_ROUNDABOUT_EXTERNAL_BYPASS",
            "USAGE_ENCLOSED_TRAFFIC_AREA",
            "USAGE_PEDESTRIAN_MALL",
            "USAGE_MAJOR_PEDESTRIAN_MALL",
            "USAGE_MINOR_PEDESTRIAN_MALL",
            "USAGE_WALKWAY",
            "USAGE_TRAIL",
            "USAGE_STATION_PATH",
            "USAGE_ACCESS_PATH",
            "USAGE_CROSSING",
            "USAGE_MARKED_CROSSING",
            "USAGE_UNMARKED_CROSSING",
            "USAGE_OVERPASS",
            "USAGE_UNDERPASS",
            "USAGE_HALLWAY",
            "USAGE_TURN_SEGMENT",
            "USAGE_INDOOR_CONNECTION_PATH"
          ],
          "enumDescriptions": [
            "Not a true usage category--this value was added just to ease the transition from proto1 to proto2.",
            "Ramps are connecting segments to or between limited access roads. They are often called \"slip roads\" in Europe.",
            "",
            "",
            "",
            "",
            "This road segment is part of a special traffic figure, which is like a roundabout or traffic circle, but doesn't meet all of the requirements of USAGE_ROUNDABOUT. It has a round shape but, e.g., there may be higher priority roads within the interior of the figure (also known as a hamburger roundabout), or the figure doesn't complete an entire circuit.",
            "This road segment forms part of a roundabout or traffic circle (these terms don't have the exact same meaning, but the schema doesn't distinguish and captures both). Roundabouts complete one entire circuit, and are one-way through their entire circuit. Sample wording in directions: \"At the roundabout, take the 2nd exit\", or \"Go through 1 roundabout\".",
            "This road segment is part of a bypass associated with, but not part of, a roundabout or traffic circle, that shortcuts the outer ring.",
            "This road segment is part of a special traffic figure that allows traffic to go straight through the roundabout without entering the circle part of the roundabout. Divides the roundabout into two halves.",
            "Shortcut from the entrance of a roundabout to the same destination as the first exit from the roundabout relative to that entrance.",
            "A parking lot or parking structure, possibly with multiple entrances that can be significant for routing.",
            "A stretch of road closed to normal traffic (trams, buses, delivery vehicles may be allowed).",
            "",
            "",
            "\"Non-traffic\" segments that are roughly associated with the road network but that are being modeled separately from the road network, e.g., a sidewalk or wide shoulder. In contrast, walkways modeled using segments that are part of the road network should be marked with pedestrian and bicycle facilities. NOTE: Separately modeled walkways are unusual and have issues; consult with oyster-team before using this in new data.",
            "A non-road segment that can be described as a major path or a trail. A trail is often part of a dedicated network of named biking or walking trails, is not particularly short, and typically has scenic value or facilitates crossing rough terrain. USAGE_TRAIL implies that PRIORITY_NON_TRAFFIC must be set, but compared to a segment with no usage at all, is suitable for extra emphasis by clients as a more desirable segment to travel on. Minor paths, such as pedestrian shortcuts, walkways through building complexes, and short walkways through a city park should be modeled as PRIORITY_NON_TRAFFIC with no usage. Sample path description: \"Take the trail.\"",
            "Segment between toll gate and station center which represents logical location trains stop at. The segment's AddressComponent should have a route name which includes appropriate station name whenever possible. This segment should usually be restricted by RESTRICTION_USAGE_FEE_REQUIRED in order to penalize walking directions that just go through this segment. Sample path description: \"Get in Shibuya station, and take the path to the platform.\" NOTE: This attribute is unusual; it should not be set in new data.",
            "Alley in park, backyard of communal facilities such as museum, or kind of private properties open to public. The segment's AddressComponent should have a route name which includes the property's name whenever possible. This is different from trails as the purpose of the access path is more specific than trails. Sample path description: \"Go through the access path to the National Museum.\" NOTE: This attribute is unusual and not clearly defined; it should not be set in new data.",
            "A segment that connects separately modeled walkways (or other non-traffic segments) across a road. NOTE: USAGE_CROSSING segments make sense only where pedestrian segments are modeled separately. They cannot be used in the common case of sidewalks modeled as pedestrian facilities on road. Using a USAGE_CROSSING segment without connection to other non-traffic segments only to mark the location of a crossing is wrong.",
            "Crossing with mark. We assume zebra marking for now. Sample path description: \"Take the crosswalk.\"",
            "Crossing with no mark Sample path description: \"Cross the road.\"",
            "This is different from ELEVATION_SKYWAY as this implies \"non-traffic\". Sample path description: \"Take the pedestrian overpass.\"",
            "Underground crossing paths and implies \"non-traffic\". Sample path description: \"Take the pedestrian underpass.\"",
            "Sample path description: \"Go through the hallway.\" NOTE: This attribute is unusual and not clearly defined; it should not be set in new data.",
            "Turn segments are connecting segments between lower priority roads that bypass the direct intersection of the roads. They are the preferred route, or perhaps the only valid route, for turns between the roads. For example, in the US this would be a segment that would allow a vehicle to take a free right-turn without having to go through the intersection. Similarly in the UK, this would be a segment that allows a free left-turn. Also, the small segment next to the island of a channelized turn lane would fall under this category.",
            "Usage to explicitly indicate that the segment connects walking networks on indoor levels in different buildings."
          ],
          "type": "string"
        },
        "visibleLandmark": {
          "description": "A collection of landmarks that are visible when traveling along this segment and useful for wayfinding to users following routes using this segment. The landmark need not be on the segment. Each segment in a pair of siblings specifies its landmarks independently. A landmark applicable to both appears in both.",
          "items": {
            "$ref": "GeostoreLandmarkReferenceProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreServiceAreaProto": {
      "description": "This proto represents the geographic area served by an establishment. WARNING: This proto is not meant to be used directly. Please use the provided libraries. http://google3/geostore/base/public/service_area.h http://google3/java/com/google/geostore/base/ServiceArea.java",
      "id": "GeostoreServiceAreaProto",
      "properties": {
        "servedFeature": {
          "description": "The features that make up the service area for this establishment. These features are subject to the following constraints applied by editing middleware (notably, not strictly enforced by lints in storage): 1. The following feature types (and their subtypes) may be used: + TYPE_ISLAND + TYPE_POLITICAL, except the following prohibited subtypes: - TYPE_CONSTITUENCY - TYPE_LAND_PARCEL + TYPE_POSTAL 2. There is a maximum limit (currently 20) to the number of areas which may be provided. This is due to serving efficiency limitations. 3. There are no additional geometry requirements for these features beyond the requirements based on the feature types above. In practice this means that these features will either have polygonal or point-based geometries. 4. These referenced features are generally required to have names, though this is not strictly enforced.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreServicedStopProto": {
      "description": "Defines an ordered reference to a line variant\u2019s stop.",
      "id": "GeostoreServicedStopProto",
      "properties": {
        "id": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Reference to a Transit POI feature (gcid:transit_station) or platform compound section (gcid:railway_platform) serviced by the line variant."
        },
        "index": {
          "description": "An index representing the order in which the above station is serviced by the line variant.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreSkiBoundaryProto": {
      "description": "This protocol buffer holds attributes for features of TYPE_SKI_BOUNDARY.",
      "id": "GeostoreSkiBoundaryProto",
      "properties": {
        "type": {
          "enum": [
            "TYPE_ANY",
            "TYPE_DANGER",
            "TYPE_SKI_AREA",
            "TYPE_SLOW_ZONE"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "The boundary line for a danger area. This is used to mark lines that should not be crossed for reasons of safety.",
            "The boundary line for a ski area. This is generally used to specify the line at which the ski resort ends, rather than a line enclosing a single ski run.",
            "An area signposted for slow skiing only."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSkiLiftProto": {
      "description": "This protocol buffer holds attributes for features of TYPE_SKI_LIFT.",
      "id": "GeostoreSkiLiftProto",
      "properties": {
        "type": {
          "description": "clang-format on",
          "enum": [
            "TYPE_ANY",
            "TYPE_SURFACE",
            "TYPE_T_BAR",
            "TYPE_J_BAR",
            "TYPE_ROPE_TOW",
            "TYPE_POMA",
            "TYPE_CARPET",
            "TYPE_FUNICULAR",
            "TYPE_GONDOLA",
            "TYPE_CHAIR",
            "TYPE_AERIAL",
            "TYPE_TRAM"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "Surface lifts are those that pull or carry a skier along the ground; rope tows are a common example.",
            "",
            "",
            "",
            "",
            "",
            "",
            "An aerial lift, such as a gondola or funitel, that moves enclosed cars along a continuously circulating set of cables.",
            "An open-air chair lift.",
            "Aerial lifts are those that run along cables suspended above the ground",
            "An aerial tram system that shuttles back and forth along a fixed set of cables."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSkiTrailProto": {
      "description": "This protocol buffer holds attributes for features of TYPE_SKI_TRAIL.",
      "id": "GeostoreSkiTrailProto",
      "properties": {
        "difficulty": {
          "enum": [
            "DIFFICULTY_EASIEST",
            "DIFFICULTY_EASY",
            "DIFFICULTY_INTERMEDIATE",
            "DIFFICULTY_ADVANCED_INTERMEDIATE",
            "DIFFICULTY_DIFFICULT",
            "DIFFICULTY_ADVANCED_DIFFICULT"
          ],
          "enumDescriptions": [
            "The easiest ski trail. In the US, this would be marked with double-green circles.",
            "A novice ski trail. In the US, this would be marked with a single green circle.",
            "An intermediate-level ski trail. In the US, this would be marked with a single blue square.",
            "An advanced-intermediate level ski trail. In the US, this would be marked with double-blue squares.",
            "A difficult-level ski trail. In the US, this would be marked with a single black diamond.",
            "An advanced-difficult level ski trail. In the US, this would be marked with double-black diamonds."
          ],
          "type": "string"
        },
        "type": {
          "enum": [
            "TYPE_ANY",
            "TYPE_GLADE",
            "TYPE_TRAIL_TERRAIN",
            "TYPE_TRAIL",
            "TYPE_RACE_COURSE",
            "TYPE_BOWL"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "Glade trails are ski paths that traverse wooded areas; they may be well-defined or not, and groomed or ungroomed. Ideally, they should be rendered differently on map tiles to distinguish them from standard ski trails.",
            "A terrain-park area, usually containing special features such as jumps or half-pipes.",
            "A regular ski-trail.",
            "A trail specifically used for ski races.",
            "Bowls are large open areas, usually steep and often rocky, that are open for skiing but don't have defined trails. They are frequented mostly by expert skiers."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSlopeProto": {
      "id": "GeostoreSlopeProto",
      "properties": {
        "slopeValue": {
          "description": "Slope value as elevation change divided by horizontal distance, in the format of decimal, e.g., \u20180.1234\u2019 means a 12.34% slope. If a slope_value is unset, it indicates we don\u2019t have enough information to compute slope at this location.",
          "format": "float",
          "type": "number"
        },
        "startPointFraction": {
          "description": "Indicates how far along the segment this slope value starts to apply, in the format of decimal between 0 and 1.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreSocialReferenceProto": {
      "description": "MapFacts GAIA ID assigned to this feature. These values are virtual GAIA IDs from MapFacts, and as such are not stored in Focus.",
      "id": "GeostoreSocialReferenceProto",
      "properties": {
        "baseGaiaId": {
          "description": "WARNING: Please do NOT introduce new uses; treat this field as if it were deprecated. ",
          "format": "int64",
          "type": "string"
        },
        "claimedGaiaId": {
          "description": "GAIA ID used when a business has been claimed. This value is a robot GAIA ID. Robots are a special type of GAIA account used to denote identity for a user or a group of users, but are not logged-in directly by a user.",
          "format": "int64",
          "type": "string"
        },
        "gaiaIdForDisplay": {
          "description": "WARNING: Please do NOT introduce new uses; treat this field as if it were deprecated. ",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSourceInfoProto": {
      "description": "Source infos are the canonical way to establish data provenance. They can currently be set on features, edits, and issues. Every feature has a repeated list of SourceInfoProto messages to describe the source data that was used in building this feature. The data includes a feature id that points to additional data about the data source (version, copyright notice, etc), and optional \"raw data\" that is taken directly from the provider's format and has not been converted to a canonical form.",
      "id": "GeostoreSourceInfoProto",
      "properties": {
        "attributionUrl": {
          "description": "This is the URL of a page representing all the data from this source in this feature. It may have be the ultimate source of the data (in case of scraping) or merely the same data styled according the provider's taste. There is a similar field in DataSourceProto which is NOT cached in this field, since it has a different meaning.",
          "items": {
            "$ref": "GeostoreUrlProto"
          },
          "type": "array"
        },
        "collectionDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "The time that this particular piece of data was collected. If different attributes were collected on different dates, this is the date of the most recent edit."
        },
        "cookie": {
          "description": "A source info may have a magic cookie whose content and semantics are defined by the specific import process or third-party feed. For feeds that are processed by Distillery, the cookie, when set, should contain the unique identifier for the feature as provided by the feed.",
          "type": "string"
        },
        "dataset": {
          "description": "The dataset from which this SourceInfoProto was created. The content of this string will be determined by the data provider (e.g. for MultiNet data, \"fra\" would indicate the dataset for France). This field is unnecessary for providers that deliver a single dataset per release (e.g. Basarsoft).",
          "type": "string"
        },
        "gaiaId": {
          "description": "The Gaia ID of the user who provided us with this data. This field should never be set on source infos present on features, but may be set on source infos present on edits. DEPRECATED: Most clients should use the \"user\" field instead where Gaia IDs are encrypted.",
          "format": "int64",
          "type": "string"
        },
        "impersonationUser": {
          "$ref": "GeostoreUserProto",
          "description": "Information about an internal user or system that is operating on behalf of `user` by way of impersonation."
        },
        "layer": {
          "description": "The name of the layer from which this SourceInfoProto was created.",
          "type": "string"
        },
        "ogrFid": {
          "description": "The OGR feature identifier from which this SourceInfoProto was created. This is an internal OGR record identifier and has nothing to do with any of the feature's fields or the FeatureIdProto for the FeatureProto containing this SourceInfoProto. This field is present only for debugging purposes and possible use in the match pattern of a FeatureChangeProto designed to fix bad source data very early in the importing process.",
          "format": "int64",
          "type": "string"
        },
        "provider": {
          "description": "The data provider from which this source info was generated. The value must be equal to the one on the TYPE_DATA_SOURCE feature referenced by this source info via the source_id reference (see above). ",
          "format": "int32",
          "type": "integer"
        },
        "rawData": {
          "description": "A source info may optionally have a set of key-value pairs that provide \"raw data\" specific to that source. The types of raw data available will vary from one provider to another and should not be used in production code. Instead, new fields and/or protocol buffers should be defined to represent this information in a canonical form, and the relevant importers should be modified to populate these new fields.",
          "items": {
            "$ref": "GeostoreRawDataProto"
          },
          "type": "array"
        },
        "release": {
          "description": "The data release from which this SourceInfoProto was created. The format for this string is provider-dependent (e.g. a MultiNet release would look like \"2008.01\").",
          "type": "string"
        },
        "sourceId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "A source info may have a corresponding TYPE_DATA_SOURCE feature that describes it (provider, copyright information, date of release, etc). In the context of edits and issues, this field should not be set."
        },
        "temporaryData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A place for clients to attach arbitrary data to a source info. Never set in MapFacts."
        },
        "user": {
          "$ref": "GeostoreUserProto",
          "description": "RESERVED"
        }
      },
      "type": "object"
    },
    "GeostoreSourceTrustProto": {
      "description": "Trust related information about the input source (feed or user) to help feature summarization. Typically, the values in this proto are either based on source's previous observations (e.g., a blocked LBC user or a trusted feed) or their status (Google hired operator or admin user). The proto can later contain a more granular trust score or correctness probabilities. A higher enum value indicates a more trusted source. Leaving room in the value space for adding more granular enums, if they become necessary later.",
      "id": "GeostoreSourceTrustProto",
      "properties": {
        "level": {
          "description": "The level of trust for the source of the observation.",
          "enum": [
            "UNKNOWN",
            "BLOCKED",
            "NOT_TRUSTED",
            "YP_FEEDS",
            "TRUSTED",
            "SUPER_TRUSTED"
          ],
          "enumDescriptions": [
            "Value not set",
            "Should not be used (e.g. known spammer, 404 url)",
            "Edits from external users.",
            "Trusted feeds like IUSA etc. (See note below).",
            "Internal operators, approved edits.",
            "Internal admin operators"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSpeedLimitProto": {
      "description": "A speed limit, containing both the limit and the conditions in which it applies.",
      "id": "GeostoreSpeedLimitProto",
      "properties": {
        "category": {
          "description": "The type of speed limit.",
          "enum": [
            "SPEED_LIMIT_CATEGORY_UNKNOWN",
            "NONE",
            "SCHOOL",
            "CONSTRUCTION"
          ],
          "enumDescriptions": [
            "Default proto value, this value will never be set in MapFacts.",
            "Speed limits that apply outside of any particular category (contrast to the following categories.)",
            "Speed limits that apply in a school zone.",
            "Speed limits that apply in a construction zone."
          ],
          "type": "string"
        },
        "condition": {
          "description": "The conditions under which this speed limit is applicable. If multiple conditions are set, at least one of them must be true.",
          "items": {
            "$ref": "GeostoreRoadConditionalProto"
          },
          "type": "array"
        },
        "sourceType": {
          "description": "RESERVED",
          "enum": [
            "SPEED_LIMIT_SOURCE_TYPE_UNKNOWN",
            "EXPLICIT",
            "IMPLICIT"
          ],
          "enumDescriptions": [
            "Speed limit source is unknown for various reasons. Default value.",
            "The speed limit was derived from an explicit observation (such as a speed limit sign).",
            "The speed limit was derived implicitly by some policy or regulation (i.e. statuatory speed limit). An implicit speed limit value that is curated from statutory speed limit."
          ],
          "type": "string"
        },
        "speedWithUnit": {
          "$ref": "GeostoreSpeedProto",
          "description": "A constant speed limit."
        },
        "unlimitedSpeed": {
          "$ref": "GeostoreUnlimitedSpeedProto",
          "description": "A speed limit with no limit value. When there is no speed limit in place."
        },
        "variableSpeed": {
          "$ref": "GeostoreVariableSpeedProto",
          "description": "A dynamic speed limit that can vary within a range of values based on road conditions."
        }
      },
      "type": "object"
    },
    "GeostoreSpeedProto": {
      "description": "A speed value and unit.",
      "id": "GeostoreSpeedProto",
      "properties": {
        "speed": {
          "format": "float",
          "type": "number"
        },
        "unit": {
          "enum": [
            "UNIT_UNKNOWN",
            "MILES_PER_HOUR",
            "KILOMETERS_PER_HOUR"
          ],
          "enumDescriptions": [
            "Default proto value, this value will never be set in MapFacts.",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreStableFieldPathProto": {
      "description": "Represents a way to traverse nested fields by referencing their token fields. Everything starts relative to a known root message, specified externally. E.g., suppose we have a feature proto that has a lane with token 0x123 which in turn has a lane connection with token 0x456 for which we want to assert something about flowline altitudes. The field path in that case will look like: field_path: { field_num: 31 # segment } field_path: { field_num: 6 # lane version_token: \"0x123\" } field_path: { field_num: 8 # lane_connection version_token: \"0x456\" } field_path: { field_num: 3 # flow } field_path: { field_num: 1 # track } field_path: { # Note: pose is repeated. By not specifying a token we refer to all poses # in a track. field_num: 2 # pose } field_path: { field_num: 4 # altitude } This path could also be represented succinctly in a more human-friendly form as something like: segment.lane[@0x123].lane_connection[@0x456].flow.track.pose[*].altitude",
      "id": "GeostoreStableFieldPathProto",
      "properties": {
        "fieldPath": {
          "description": "A sequence of field selectors to be traversed starting from the root message.",
          "items": {
            "$ref": "GeostoreStableFieldPathProtoStableFieldSelector"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreStableFieldPathProtoStableFieldSelector": {
      "id": "GeostoreStableFieldPathProtoStableFieldSelector",
      "properties": {
        "fieldNum": {
          "description": "Field number to select.",
          "format": "int32",
          "type": "integer"
        },
        "versionToken": {
          "description": "Select repeated field entry by its version token. If this is used, then the message referenced by field_num must have a token field annotated with the (version_token) field option. Must be omitted for leaf non-repeated fields. If unset for a repeated field, we consider this selector to apply equally to all descendants.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreSweepProto": {
      "description": "This protocol buffer represents the 2D polygon connecting two segments at an intersection. Collectively, sweep polygons represent intersections for real road width rendering. Notes: - Sweeps represent geometry between the *end* of one segment and the *end* of the other segment (modulo retraction values). - Sweeps are strongly referenced, meaning geometry is stored on both segments involved in the sweep. For example, in the diagram below, the sweep between A and B would be stored on both segment A and segment B. | B | v --A--> - Sweeps are not strictly stored on adjacent segments. Disconnected segments (e.g., segments separated by an intersection group) may also contain sweeps.",
      "id": "GeostoreSweepProto",
      "properties": {
        "otherSegmentFeatureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The segment feature connected to this segment via the sweep geometry."
        },
        "polygon": {
          "$ref": "GeostorePolygonProto",
          "description": "Polygonal geometry representing the area between this segment and the other segment."
        },
        "sweepCurve": {
          "$ref": "GeostoreCurveConnectionProto",
          "description": "Describes parameters for generating the edge of this sweep that starts at edge_follows_segment_end_fraction. The other side of the sweep should be described on the sweep present on the sibling pair."
        },
        "sweepToken": {
          "description": "A token that can be used to identify the version of the data about this sweep.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreTelephoneProto": {
      "description": "This protocol buffer is used to represent telephone numbers and related information.",
      "id": "GeostoreTelephoneProto",
      "properties": {
        "callRate": {
          "description": "RESERVED",
          "items": {
            "$ref": "GeostorePriceRangeProto"
          },
          "type": "array"
        },
        "contactCategory": {
          "description": "Disambiguates between the types of information or service a caller might seek when contacting this phone number.",
          "enum": [
            "CONTACT_CATEGORY_UNSPECIFIED",
            "CUSTOMER_SERVICE",
            "RESERVATIONS",
            "SALES"
          ],
          "enumDescriptions": [
            "",
            "Provides service to customers before, during, or after a purchase. /m/03w5xm",
            "Allows customers to reserve a seat, ticket, room, etc. /m/0n9nm2h",
            "Provides information about a purchase of a product or service. /m/014dgf"
          ],
          "type": "string"
        },
        "flag": {
          "items": {
            "enum": [
              "FLAG_NO_COLD_CALLS",
              "FLAG_PREFERRED"
            ],
            "enumDescriptions": [
              "DEPRECATED",
              "This number is (one of) the preferred numbers to call. It should be displayed before other numbers in maps/placepage, for example. For each language served, there shall be at most 1 preferred phone (i.e., if there are two preferred phones, then the intersection between the \"language\" array should be empty). Note that the presence of a \"preferred\" phone doesn't state that we have no confidence on the other numbers of this establishment. The preference is based on the fact that this number is the primary customer service number, reservation hot line, etc."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "isSharedNumber": {
          "description": "True if this phone number is not unique to this establishment and might be shared with other features. In case an establishment shares a phone number with a business chain of which it is a member, and the number canonically belongs to that chain, it should be marked as shared for the establishment but not shared for the chain.",
          "type": "boolean"
        },
        "label": {
          "description": "RESERVED",
          "items": {
            "$ref": "GeostoreNameProto"
          },
          "type": "array"
        },
        "language": {
          "description": "RESERVED",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this telephone number."
        },
        "number": {
          "$ref": "TelephoneNumber",
          "description": "** DEPRECATED ** This is deprecated in favor of phone_number below. An internationalized representation of a phone number. See //location/country/telephonenumber.proto"
        },
        "phoneNumber": {
          "$ref": "I18nPhonenumbersPhoneNumber",
          "description": "An internationalized representation of a phone number. See //java/com/google/i18n/phonenumbers/phonenumber.proto"
        },
        "serviceLocationFeature": {
          "description": "The features from which this phone number can be called from. For instance, if a phone number can only be called from Europe, this field will contain a reference to the TYPE_CONTINENT feature of Europe. This field is analogous to http://kg/schema/common/phone_number/service_location. The only valid destination feature types are TYPE_CONTINENT and TYPE_POLITICAL. If empty, this phone number can be called from anywhere in Earth (this is the case for the majority of phones).",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "VOICE",
            "FAX",
            "TDD",
            "DATA",
            "MOBILE",
            "MESSAGING"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "The MESSAGING type should not be used in FeatureProto, but will be used in the context of KG /common/phone_number/type.",
            "RESERVED"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreTemporaryClosureProto": {
      "description": "This protocol buffer stores information related to temporary closure of a feature. The only allowed precisions for a date is PRECISION_DAY. DateTimeProto.seconds should have the lowest legal value for the desired date/time and precision. E.g. for PRECISION_MONTH, 2019-02-15 21:10:30 is not valid, it should be 2019-02-01 00:00:00 instead. NOTE: Each date is stored in UTC but should be interpreted as being in the local timezone. So clients should convert the DateTimeProto to local (civil) time using UTC+0, and then treat the result as local to the feature.",
      "id": "GeostoreTemporaryClosureProto",
      "properties": {
        "endAsOfDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "The latest when this closure may end, if the exact date is unknown. If set, the feature is operational again no later than this date."
        },
        "endDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "RESERVED"
        },
        "startAsOfDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "The latest when this closure may start, if the exact date is unknown. If set, the feature is temporarily closed starting no later than this date."
        },
        "startDate": {
          "$ref": "GeostoreDateTimeProto",
          "description": "RESERVED"
        }
      },
      "type": "object"
    },
    "GeostoreTextAffixProto": {
      "description": "Represents text (with an associated language) that is affixed to the beginning and/or end of a primary text.",
      "id": "GeostoreTextAffixProto",
      "properties": {
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. These strings should be treated as opaque blobs. You can use LanguageCodeConverter::FromOther to convert the string to a LanguageCode reference. You can then call methods on the LanguageCode class to extract language/script/region subtags (if any). See also http://g3doc/i18n/identifiers/g3doc/using-iii. We place extra restrictions on languages in addition to what the III library requires. See http://go/geo-schema-reference/feature-properties/languages.md",
          "type": "string"
        },
        "prefix": {
          "description": "Text to prepend to the primary text, including any necessary trailing whitespace. At least one of prefix or suffix is required.",
          "type": "string"
        },
        "suffix": {
          "description": "Text to append to the end of the primary text, including any necessary leading whitespace. At least one of prefix or suffix is required.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreThreeDimensionalModelProto": {
      "id": "GeostoreThreeDimensionalModelProto",
      "properties": {
        "pointIndices": {
          "description": "Triangle vertex indices, each triple defines a triangle.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "points": {
          "description": "We store a triangular mesh in indexed format. Points array.",
          "items": {
            "$ref": "GeostorePointWithHeightProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTimeBasedRateProto": {
      "description": "A rate which applies based on the precise times of utilization. Defines a rate, as well as restrictions on the start and end times which must be satisfied in order to be eligible for the rate. See go/rate-schema for more details.",
      "id": "GeostoreTimeBasedRateProto",
      "properties": {
        "durationBasedRate": {
          "description": "The rates for this rule. Each duration_based_rate defines the costs associated with a particular duration of a stay. There must be at least one rate with range_start_seconds set to 0 and there cannot be gaps between durations (i.e. there should be no interval uncovered between 0 and the largest range_end_seconds of any duration-based rate).",
          "items": {
            "$ref": "GeostoreDurationBasedRateProto"
          },
          "type": "array"
        },
        "taxIncluded": {
          "description": "If true, tax is included in the prices in this rate. If false, additional taxes may apply.",
          "type": "boolean"
        },
        "validEndWithin": {
          "$ref": "GeostoreTimeScheduleProto"
        },
        "validStartWithin": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "Time period during which utilization of this rate must start in order to be eligible for the rate. If not set, there is no restriction on the time when the utilization starts."
        }
      },
      "type": "object"
    },
    "GeostoreTimeComponentProto": {
      "id": "GeostoreTimeComponentProto",
      "properties": {
        "componentType": {
          "enum": [
            "COMPONENT_TYPE_POSITIVE",
            "COMPONENT_TYPE_MISSING_DATA"
          ],
          "enumDescriptions": [
            "Indicates that this time component is set with regards to what the component is trying to model. For instance, if this time component models opening hours for a business then COMPONENT_TYPE_POSITIVE means open and if it models a road restriction COMPONENT_TYPE_POSITIVE means the road is closed.",
            "Indicates that data for this time component is absent and that making assumptions about data over the time period this component represents may be unsafe. For instance, if this time component models opening hours for a business then COMPONENT_TYPE_MISSING_DATA can be used to explicitly record that we are missing data (eg. Sunday is not listed in the hours). NOTE: Not all uses of this proto support the COMPONENT_TYPE_MISSING_DATA component_type."
          ],
          "type": "string"
        },
        "interval": {
          "description": "The time component is the intersection of these intervals",
          "items": {
            "$ref": "GeostoreTimeIntervalProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTimeEndpointProto": {
      "description": "Not all combinations of optional fields in TimeEndpointProto are allowed. The granularity of time is a path along the directed graph with these edges: second -> minute minute -> hour hour -> day of week hour -> day of month hour -> day of year day of week -> week of month day of week -> week of year day of month -> month day of year -> year week of month -> month week of year -> year month -> year A TimeEndpointProto may not specify two fields that are unordered with respect to each other (\"day of year\" and \"day of week\", for instance). The absence of fields larger than any specified field indicates repetition (e.g. no year indicates that the interval occurs every year). The absence of units that are \"smaller\" than the largest specified unit indicates a default lowest value (no hour means midnight (0)). When intersecting time intervals, \"smaller\" units repeat within the \"larger\" unit as many times as necessary. For example, the intersection of the interval from hour 0 to hour 24 with the interval from second 0 to second 1 is equivalent to the union of the set of intervals which represents the first second of every minute of every hour of every day. ----------------------------------------------------------------------------- WARNING - if you add new fields to TimeEndpointProto you need to: - ensure AreTimeEndpointsEquivalent considers the new fields (and update the corresponding tests) -----------------------------------------------------------------------------",
      "id": "GeostoreTimeEndpointProto",
      "properties": {
        "day": {
          "description": "Valid ranges are 0-7, 1-31, and 1-366 (see day_type below)",
          "format": "int32",
          "type": "integer"
        },
        "dayType": {
          "enum": [
            "DAY_OF_WEEK",
            "DAY_OF_MONTH",
            "DAY_OF_YEAR"
          ],
          "enumDescriptions": [
            "Valid day range 0-7. (see enum DayOfWeek)",
            "Valid day range 1-31, must be valid day in month",
            "Eg day = 31 is not valid if month = September Valid day range 1-366"
          ],
          "type": "string"
        },
        "hour": {
          "description": "Valid range is 0-24. Because it could be unclear what wrapping hours mean in relation to days, 24 is used to denote midnight at the end of a day.",
          "format": "int32",
          "type": "integer"
        },
        "minute": {
          "description": "Valid range is 0-59, except when a repetitive minute interval ends at the end of an hour, in which case 60 is a legal end value.",
          "format": "int32",
          "type": "integer"
        },
        "month": {
          "enum": [
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER",
            "NEXT_JANUARY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "The following value is used to define the end of a recurring interval that ends at the end of the year. It can be used without a day to represent the end of an interval with month resolution (e.g. November through December) or with a day of month of 1 to represent the end of an interval with day resolution (e.g. November 15th through December 31th). This is similar to using hour 24 to represent the end of a recurring interval with hour resolution that ends at midnight. Also see http://g/pathfinder-team/NFS3S4L2lhs/tdMSGr0H9r4J for a real example."
          ],
          "type": "string"
        },
        "second": {
          "description": "Valid range is 0-59, except when a repetitive second interval ends at the end of a minute, in which case 60 is a legal end value.",
          "format": "int32",
          "type": "integer"
        },
        "week": {
          "description": "Valid ranges are 0-5 and 1-53 (depending on the value of week_type, see below).",
          "format": "int32",
          "type": "integer"
        },
        "weekType": {
          "enum": [
            "WEEK_OF_MONTH",
            "WEEK_OF_YEAR"
          ],
          "enumDescriptions": [
            "Valid week range 0-5.",
            "Note: Weeks of this type are numbered such that week 0 begins on the 1st of the month and extends for 7 days. This has the consequence that week 4 never has a full 7 days. For example, for a month with 31 days, dates 1-7 are in week 0, 8-14 in week 1, 15-21 in week 2, 22-28 in week 3, and 29-31 in week 4. Week 5 is considered the first week of next month, and much like using `24` for the hour field or `NEXT_JANUARY` for the month field, is meant only to denote that an interval includes week 4. Valid week range 1-53."
          ],
          "type": "string"
        },
        "year": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GeostoreTimeIntervalProto": {
      "id": "GeostoreTimeIntervalProto",
      "properties": {
        "begin": {
          "$ref": "GeostoreTimeEndpointProto",
          "description": "Begin and end are used to specify a range of times: [begin, end). If one is present, the other must be present as well. Additionally, both must have matching time granularities - all fields specified in the begin TimeEndpointProto must be present in the end TimeEndpointProto and vice-versa. Hours are not allowed to wrap (begin.hour() <= end.hour())."
        },
        "end": {
          "$ref": "GeostoreTimeEndpointProto"
        },
        "inverted": {
          "description": "If true, then this interval actually encodes the complement of the specified occasion or range. For example, the following TimeIntervalProto encodes all times other than the month of May. TimeIntervalProto[ type = TYPE_RANGE inverted = true begin = TimeEndpointProto[ month = MAY ] end = TimeEndpointProto[ month = JUNE ] ]",
          "type": "boolean"
        },
        "occasion": {
          "description": "clang-format on",
          "enum": [
            "OCCASION_SEASON",
            "OCCASION_SEASON_WINTER",
            "OCCASION_SEASON_SUMMER",
            "OCCASION_DAYS",
            "OCCASION_DAYS_SCHOOL",
            "OCCASION_DAYS_HOLIDAY",
            "OCCASION_DAYS_PRE_HOLIDAY",
            "OCCASION_HOURS",
            "OCCASION_HOURS_PEAK",
            "OCCASION_HOURS_SCHOOL",
            "OCCASION_HOURS_MARKET",
            "OCCASION_HOURS_BUSINESS",
            "OCCASION_HOURS_DUSK_TO_DAWN",
            "OCCASION_HOURS_HIGH_TIDE",
            "OCCASION_CONDITIONS",
            "OCCASION_CONDITIONS_HIGH_WATER",
            "OCCASION_CONDITIONS_ADVERSE",
            "OCCASION_CONDITIONS_ADVERSE_RAIN",
            "OCCASION_CONDITIONS_ADVERSE_WET",
            "OCCASION_CONDITIONS_ADVERSE_FOG",
            "OCCASION_CONDITIONS_WINTERY",
            "OCCASION_CONDITIONS_WINTERY_AVALANCHE",
            "OCCASION_CONDITIONS_WINTERY_SNOW",
            "OCCASION_CONDITIONS_WINTERY_ICE",
            "OCCASION_CONDITIONS_EVENT",
            "OCCASION_CONDITIONS_POLLUTION",
            "OCCASION_CONDITIONS_LOW_WATER",
            "OCCASION_UNDEFINED",
            "OCCASION_UNDEFINED_REGULAR",
            "OCCASION_UNDEFINED_SELDOM"
          ],
          "enumDescriptions": [
            "NavTeq just uses \"seasonal closure = yes\".",
            "",
            "\"Ski season\" appears in Tele Atlas once. Use OCCASION_SEASON_WINTER instead.",
            "",
            "",
            "",
            "",
            "",
            "",
            "OCCASION_HOURS_OFF_PEAK doesn't exist because it's the inverse of OCCASION_HOURS_PEAK.",
            "",
            "Business hours appears only three times.",
            "",
            "OCCASION_HOURS_DAWN_TO_DUSK doesn't exist because it's the inverse of OCCASION_HOURS_DUSK_TO_DAWN.",
            "",
            "",
            "Adverse conditions include rain, storms, and fog.",
            "",
            "",
            "",
            "Wintery conditions include snow and ice.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "type": {
          "enum": [
            "TYPE_OCCASION",
            "TYPE_RANGE"
          ],
          "enumDescriptions": [
            "Indicates a fuzzy interval using one of the occasion constants.",
            "Indicates a range of times between two endpoints, as specified in TimeEndpointProto. The endpoint is NOT inclusive."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreTimeScheduleProto": {
      "id": "GeostoreTimeScheduleProto",
      "properties": {
        "component": {
          "description": "The schedule is the union of these components.",
          "items": {
            "$ref": "GeostoreTimeComponentProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTimezoneProto": {
      "description": "A TimezoneProto holds information about a feature's related time zone.",
      "id": "GeostoreTimezoneProto",
      "properties": {
        "id": {
          "description": "i18n recognized time zone identifier. For the full list of identifiers, see google3/i18n/identifiers/data/timezones.txt.",
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this relation."
        }
      },
      "type": "object"
    },
    "GeostoreTollClusterProto": {
      "description": "A collection of information that applies to a toll cluster.",
      "id": "GeostoreTollClusterProto",
      "properties": {
        "intersection": {
          "description": "The list of TYPE_INTERSECTION features that are toll points and form this toll cluster. A toll cluser can consist of either a single or a group of intersection points called toll points at the end of various road segments in MapFacts that represent one or more lanes passing through a toll fixture that all go to the same routing destination. This relationship is reciprocal, as a toll point intersection also stores a reference to the toll cluster it belongs to. A toll cluster must have reference to one or more toll points i.e. toll_cluster.intersection should always be populated.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTrackProto": {
      "id": "GeostoreTrackProto",
      "properties": {
        "index": {
          "description": "The index of this TrackProto in a list of TrackProtos.",
          "format": "int32",
          "type": "integer"
        },
        "pose": {
          "description": "The instantaneous pose of points along this track. The fields set inside each pose must be set consistently along the track.",
          "items": {
            "$ref": "GeostorePoseProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTransitLineProto": {
      "description": "A transit line is a named set of transit trips that are advertised to passengers under a common name, and a number of attributes that are true for all those trips. There is no requirement for each trip to travel through the same list of stops or use the same legs, so a line can contain trips in opposite directions or with variations in the sequence of stops. See go/oysterpedia for an overview of the transit feature types. The standard feature properties are interpreted as follows: name - The names of this line, including both long and short names, if available. Short names like \"10\" or \"Blue\" should carry the FLAG_ABBREVIATED, long names like \"Dublin/Pleasanton line\" should not. The preferred name (one per language) for displaying the line on its own (e.g., as a search result for the line) should carry the FLAG_PREFERRED. website - The official web page describing this line. Repeated if multilingual. Line features have no geometry (neither points nor polylines nor polygons). Within Transit Oyster, geometry can be found in legs. Additional data only in Transit Oyster: child - The legs of this line, in no particular order. source_info - Specifies the GTFS routes that match this feature. Each is given as a PROVIDER_GOOGLE_TRANSIT source_info where dataset is the feed name and cookie is the route_id.",
      "id": "GeostoreTransitLineProto",
      "properties": {
        "agency": {
          "description": "The transit agencies responsible for operating this line. All lines should have at least one agency, and most will have exactly one. The following cases are reasons for multiple agencies: - Code share: Two or more agencies share trips - Alternations: Each trip is run by one of multiple agencies - Additional: All trips run by one agency, but a second one sells tickets In all cases the order has no meaning. Clarification comes from the trips.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "labelBackgroundColor": {
          "description": "The background color of labels for that transit line. The encoding is like in HTML or CSS, eg. 0x11ff00 means a bit of red, full green, no blue, in sRGB color space. The most significant byte must be zero, i.e. no transparency.",
          "format": "uint32",
          "type": "integer"
        },
        "labelTextColor": {
          "description": "The text color of labels for that transit line. Encoding like label_background_color.",
          "format": "uint32",
          "type": "integer"
        },
        "stations": {
          "description": "The transit stations (establishment POIs with gcid:transit_station) which this transit line can go through, in no particular order. Usage note: The source of truth are the transit leg features in Transit Oyster. In MapFacts, that information is cached in two locations: in this field, and in transit station attachments on POIs. Do not assume these locations are always up to date and/or synchronized with each other.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        },
        "vehicleType": {
          "description": "The type of vehicle that applies to all trips that use this line.",
          "enum": [
            "VEHICLE_TYPE_ANY",
            "VEHICLE_TYPE_RAIL",
            "VEHICLE_TYPE_METRO_RAIL",
            "VEHICLE_TYPE_SUBWAY",
            "VEHICLE_TYPE_TRAM",
            "VEHICLE_TYPE_MONORAIL",
            "VEHICLE_TYPE_HEAVY_RAIL",
            "VEHICLE_TYPE_COMMUTER_TRAIN",
            "VEHICLE_TYPE_HIGH_SPEED_TRAIN",
            "VEHICLE_TYPE_LONG_DISTANCE_TRAIN",
            "VEHICLE_TYPE_BUS",
            "VEHICLE_TYPE_INTERCITY_BUS",
            "VEHICLE_TYPE_TROLLEYBUS",
            "VEHICLE_TYPE_SHARE_TAXI",
            "VEHICLE_TYPE_FERRY",
            "VEHICLE_TYPE_CABLE_CAR",
            "VEHICLE_TYPE_GONDOLA_LIFT",
            "VEHICLE_TYPE_FUNICULAR",
            "VEHICLE_TYPE_SPECIAL",
            "VEHICLE_TYPE_HORSE_CARRIAGE",
            "VEHICLE_TYPE_AIRPLANE"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "ABSTRACT Metropolitan railway transport, mostly for local transit.",
            "ABSTRACT",
            "Subways run mainly or completely underground.",
            "Trams run mainly or completely along streets.",
            "Monorails run on track consisting of a single rail, e.g. suspended monorail.",
            "Heavy rail is rail transit that consists of larger vehicles, typically to transport more people across longer distances.",
            "Commuter trains connect the city with the suburbs. They tend to stop often and run short distances.",
            "High speed trains operate at much higher speed than normal trains. They can also run long distances. Typically with speeds upwards of 200 km/h. Examples are TGV, ICE, Shinkansen.",
            "Long distance trains connect multiple cities/regions of a country or even multiple countries. They run faster, but not high-speed. Typically speeds under 200 km/h.",
            "Buses cover mass transit over roads.",
            "A bus that connects cities to each other.",
            "A bus powered by electricity obtained from overhead wires by means of a pole.",
            "Share taxi is sort of bus transport with ability to drop off and pick up passengers anywhere on it route. Generally share taxi uses minibus vehicles.",
            "Ferries are a means of transit over water, often operated on regular, frequent, return services.",
            "Cable cars are a form of transit used in the mountains.",
            "An aerial lift (colloquially called \"gondola lift\") is a means of cable transport in which cabins, cars, gondolas or open chairs are hauled above the ground by means of one or more cables. Examples: gondola lift, aerial tramway. Funicular is a cable railway in which a pair of tram-like vehicles use each other as counter balance to ascend and descend.",
            "",
            "Used for easter eggs.",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreTransitLineVariantProto": {
      "description": "A line variant is a specific instantiation of a line concept, denoted by the ordered set of stops and collection of segments that it traverses. Line variants are modeled as TYPE_ROUTE features with gcid:transit_line_variant. This proto stores line-variant-specific information that is not generally applicable to all routes. Schema Design Doc: go/transit-line-concepts-and-variants",
      "id": "GeostoreTransitLineVariantProto",
      "properties": {
        "lineConcept": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Reference to the line variant\u2019s line concept."
        },
        "stops": {
          "description": "Ordered list of stations or platforms serviced by this line variant. The order is captured by the ServicedStopProto.index field.",
          "items": {
            "$ref": "GeostoreServicedStopProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTransitStationProto": {
      "description": "Encapsulates information related to an individual transit station.",
      "id": "GeostoreTransitStationProto",
      "properties": {
        "agencies": {
          "description": "Transit agencies which service this transit station. A station can be serviced by one or more transit agencies. See go/transit-agency-relation-migration for more information.",
          "items": {
            "$ref": "GeostoreFeatureIdProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreTrustSignalsProto": {
      "id": "GeostoreTrustSignalsProto",
      "properties": {
        "sourceTrust": {
          "$ref": "GeostoreSourceTrustProto",
          "description": "Trust signals for the source of a given observation, typically based on historical evidences or status (like internal Google operator)."
        }
      },
      "type": "object"
    },
    "GeostoreUnlimitedSpeedProto": {
      "description": "A speed limit without a limit value. Used to indicate the absence of a speed limit.",
      "id": "GeostoreUnlimitedSpeedProto",
      "properties": {},
      "type": "object"
    },
    "GeostoreUrlListProto": {
      "description": "Hold a list of URLs, usually to contain translations of a single URL.",
      "id": "GeostoreUrlListProto",
      "properties": {
        "url": {
          "items": {
            "$ref": "GeostoreUrlProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreUrlProto": {
      "description": "A web location for a Feature. URLs should always be stored in repeated fields because some objects (eg. transit schedules in Brussels) have different URLs for different languages.",
      "id": "GeostoreUrlProto",
      "properties": {
        "language": {
          "description": "The external form of a Google International Identifiers Initiative (III) LanguageCode object. See google3/i18n/identifiers/languagecode.h for details. We place extra restrictions on languages in addition to what the III library requires. See http://go/geo-schema-reference/feature-properties/languages.md This field represents the language of the content of the web site. It may be missing if the web site is language-independent or if the language is unknown.",
          "type": "string"
        },
        "metadata": {
          "$ref": "GeostoreFieldMetadataProto",
          "description": "Field-level metadata for this URL. NOTE: there are multiple UrlProto fields in the Geo Schema. Metadata here is only expected to be present on FeatureProto.website[]."
        },
        "pagerank": {
          "description": "** DEPRECATED ** The pagerank of this URL. Valid values [0, 65535] See http://wiki/Main/NearestSeeds for more information.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "description": "The URL.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreUserProto": {
      "description": "UserProto identifies a (human) user of Geo Data. Its primary use is in describing the source of pieces of data (e.g. edits). It could be a simple identifier, but isn't so that we can store it in the clear while still preventing correlation between a user's contribution.",
      "id": "GeostoreUserProto",
      "properties": {
        "encryptedGaiaId": {
          "description": "The user Gaia ID in encrypted form. Wipeout ids take value of \"\" in bytes.",
          "format": "byte",
          "type": "string"
        },
        "encryptionKeyName": {
          "description": "Required. The name of the key used to encrypt the Gaia ID.",
          "type": "string"
        },
        "keystoreConfigId": {
          "description": "Required (valid default provided). The config ID of the owner of the above encryption_key_name. This field must be set if the encryption key name is *not* \"mapfacts_gaia_id_encryption_key\".",
          "format": "int32",
          "type": "integer"
        },
        "username": {
          "description": "If possible, writers should set this to a full user email, including the domain. Readers should not assume that this is a well-formed email address. This field may only be set by Atlas, Pushpin and OneRing because they are internal tools which have a PWG exception to store textual usernames in the clear.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GeostoreVariableSpeedProto": {
      "description": "A speed limit whose value can change based on road, traffic, and weather conditions.",
      "id": "GeostoreVariableSpeedProto",
      "properties": {},
      "type": "object"
    },
    "GeostoreVehicleAttributeFilterProto": {
      "description": "A set of vehicle attribute conditionals (ex: weight >= 20T && num_trailers = 2) used to define a slice of all possible vehicles. This can be useful for filtering one or more vehicles by a predicate.",
      "id": "GeostoreVehicleAttributeFilterProto",
      "properties": {
        "axleCount": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"count < 4\" AND \"count >= 2\" means \"2 <= count < 4\").",
          "items": {
            "$ref": "GeostoreCountComparisonProto"
          },
          "type": "array"
        },
        "hasTrailer": {
          "description": "Whether the applied vehicle types have a trailer attached to them.",
          "type": "boolean"
        },
        "hazardousGoods": {
          "description": "List of prohibited hazardous goods for a vehicle to carry. A repeated value here is treated as an OR operation, meaning that they may not carry ANY of the goods listed.",
          "items": {
            "enum": [
              "HAZARDOUS_GOODS_TYPE_UNSPECIFIED",
              "EXPLOSIVES",
              "GASES",
              "FLAMMABLE",
              "COMBUSTIBLE",
              "ORGANIC",
              "POISON",
              "RADIOACTIVE",
              "CORROSIVE",
              "ASPIRATION_HAZARD",
              "ENVIRONMENTAL_HAZARD",
              "OTHER"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "numTrailers": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"count <= 4\" AND \"count > 2\" means \"2 < count <= 4\").",
          "items": {
            "$ref": "GeostoreCountComparisonProto"
          },
          "type": "array"
        },
        "trailerLength": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"length <= 53ft\" AND \"length > 48ft\" means \"48ft < length <= 53ft\").",
          "items": {
            "$ref": "GeostoreDimensionComparisonProto"
          },
          "type": "array"
        },
        "vehicleHeight": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"height > 3m\" AND \"height <= 5m\" means \"3m < height <= 5m\").",
          "items": {
            "$ref": "GeostoreDimensionComparisonProto"
          },
          "type": "array"
        },
        "vehicleLength": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"length <= 40m\" AND \"length > 35m\" means \"35m < length <= 40m\").",
          "items": {
            "$ref": "GeostoreDimensionComparisonProto"
          },
          "type": "array"
        },
        "vehicleWeight": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"weight < 8T\" AND \"weight >= 3T\" means \"3T <= weight < 8T\").",
          "items": {
            "$ref": "GeostoreWeightComparisonProto"
          },
          "type": "array"
        },
        "vehicleWidth": {
          "description": "A repeated value here is treated as an AND operation. This allows for ranges to be represented by two values (ex: \"width < 4m\" AND \"width >= 2m\" means \"2m <= width < 4m\").",
          "items": {
            "$ref": "GeostoreDimensionComparisonProto"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GeostoreVerticalOrderingProto": {
      "description": "A proto representing a vertical ordering of a feature. NOTE: This shouldn\u2019t be used if a more specific field can be used instead. E.g., for TYPE_SEGMENT features grade_level field should be preferred. For indoor features RELATION_ON_LEVEL should be preferred. See go/aboutgrades for comparison of various types of levels available.",
      "id": "GeostoreVerticalOrderingProto",
      "properties": {
        "level": {
          "description": "The level represents the relative vertical ordering of a feature among all overlapping features. For example, we may have features along freeway surface have level = 0, and features on an overpass have level = 1. NOTE: It\u2019s assumed that all features have level 0 by default, so that it\u2019s not necessary for all overlapping features to have this set.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GeostoreWeightComparisonProto": {
      "description": "A weight value tagged with a comparison operator.",
      "id": "GeostoreWeightComparisonProto",
      "properties": {
        "comparison": {
          "enum": [
            "COMPARISONOPERATOR_UNKNOWN",
            "LESS_THAN",
            "GREATER_THAN"
          ],
          "enumDescriptions": [
            "Default proto value, this value will never be set in Mapfacts.",
            "",
            ""
          ],
          "type": "string"
        },
        "comparisonOperator": {
          "enum": [
            "UNSPECIFIED",
            "EQUAL",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "weightWithUnit": {
          "$ref": "GeostoreWeightProto"
        }
      },
      "type": "object"
    },
    "GeostoreWeightProto": {
      "description": "A weight with a numerical value and unit.",
      "id": "GeostoreWeightProto",
      "properties": {
        "unit": {
          "enum": [
            "UNIT_UNKNOWN",
            "METRIC_TON",
            "LONG_TON",
            "SHORT_TON",
            "POUND",
            "KILOGRAM"
          ],
          "enumDescriptions": [
            "Default proto value, this value will never be set in Mapfacts.",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "weight": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoodocAnchorLabel": {
      "description": "An anchor label can be attached to any element to give it a reference address. LogicalEntity links (see goodoc-semantics.proto) may use anchor labels to point to goodoc elements (they may also use indices to locate the element, but the indices could become invalid if the goodocs are allowed to mutate). Multiple elements may have the same anchor.",
      "id": "GoodocAnchorLabel",
      "properties": {
        "Anchor": {
          "description": "There is a generic method for composing such strings. Please take a look at GoodocUtils::GenerateUniqueAnchorName(...) in ocr/goodoc/goodoc-utils.h.",
          "type": "string"
        },
        "anchorScope": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocBoundingBox": {
      "description": "Bounding box for page structural elements: pictures, paragraphs, characters, etc.",
      "id": "GoodocBoundingBox",
      "properties": {
        "Height": {
          "format": "int32",
          "type": "integer"
        },
        "Label": {
          "description": "Optional magic label, so objects can be sorted on bounding box dimensions easily",
          "format": "int32",
          "type": "integer"
        },
        "Left": {
          "description": "BoundingBox coordinates and sizes are expressed in pixels",
          "format": "int32",
          "type": "integer"
        },
        "Top": {
          "format": "int32",
          "type": "integer"
        },
        "Width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocBoxPartitions": {
      "description": "A way to specify a simple partitioning of a BoundingBox into a sequence of sub-boxes. +----------------------------------------------------+ | | | | | | | span(0) | (1) | (2) | (3) | (4) | | | | | | | +----------------------------------------------------+ This representation can, for example, be used to store coarse Symbol boundaries within a Word (see Word.CompactSymbolBoxes below) instead of per-Symbol BoundingBoxes, for saving space.",
      "id": "GoodocBoxPartitions",
      "properties": {
        "direction": {
          "format": "int32",
          "type": "integer"
        },
        "span": {
          "description": "\"span\" is width or height, determined by \"direction\". If there are k partitions, then there are k - 1 \"span\" values, one for each except the last symbol (which is redundant).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocBreakLabel": {
      "description": "Break label",
      "id": "GoodocBreakLabel",
      "properties": {
        "BreakLabelType": {
          "format": "int32",
          "type": "integer"
        },
        "isPrefix": {
          "description": "True if break prepends the element",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GoodocCharLabel": {
      "description": "Font label",
      "id": "GoodocCharLabel",
      "properties": {
        "BaseLine": {
          "description": "The shift of a character from the base line of the string in pixels",
          "format": "int32",
          "type": "integer"
        },
        "CharacterHeight": {
          "description": "Height of small characters in pixels on the source image",
          "format": "int32",
          "type": "integer"
        },
        "Color": {
          "description": "The foreground color of the symbol; the default color is 0 (black)",
          "format": "int32",
          "type": "integer"
        },
        "Confidence": {
          "description": "Symbol recognition confidence from OCR. Range depends upon OCR Engine.",
          "format": "int32",
          "type": "integer"
        },
        "FontId": {
          "description": "The font ID refers to the fonts table in the document header",
          "format": "int32",
          "type": "integer"
        },
        "FontSize": {
          "description": "Size in points (JFYI: point is 1/72\"). This is rounded to the nearest whole number.",
          "format": "int32",
          "type": "integer"
        },
        "FontSizeFloat": {
          "description": "Size in points represented as float.",
          "format": "float",
          "type": "number"
        },
        "FontType": {
          "format": "int32",
          "type": "integer"
        },
        "HasUncertainHeight": {
          "description": "If CharacterHeight is defined uncertainly",
          "type": "boolean"
        },
        "HorizontalScale": {
          "description": "The horizontal scaling for a character, in percents. The default value for this property is 100, which corresponds to no scaling.",
          "format": "int32",
          "type": "integer"
        },
        "IsBold": {
          "type": "boolean"
        },
        "IsItalic": {
          "type": "boolean"
        },
        "IsSmallCaps": {
          "type": "boolean"
        },
        "IsStrikeout": {
          "type": "boolean"
        },
        "IsSubscript": {
          "type": "boolean"
        },
        "IsSuperscript": {
          "type": "boolean"
        },
        "IsSuspicious": {
          "description": "If OCR Engine marked the character as \"suspicious\" (this character is likely to be recognized incorrectly).",
          "type": "boolean"
        },
        "IsUnderlined": {
          "type": "boolean"
        },
        "NotOcrablePerQA": {
          "description": "True if a QA operator has marked this as not OCRable. This is used for complex equations, scripts that the operator can't type, or handwriting.",
          "type": "boolean"
        },
        "Penalty": {
          "description": "Symbol-level penalty from the garbage text detector. Lower is better; range = [0,100].",
          "format": "int32",
          "type": "integer"
        },
        "SerifProbability": {
          "description": "The probability that a character is written with a Serif font",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocDocument": {
      "description": "Top-level representation of OCRed document",
      "id": "GoodocDocument",
      "properties": {
        "EditingHistory": {
          "description": "Debug info, recording the history of any editing done through the interface in goodoc-editing.h. The strings look like \"MoveParagraph(page_index = 0, source_block_index = 3, ...);",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "LogicalEntity": {
          "description": "Logical entities are stored as blobs. Depending on the kind of thing this is a goodoc of, a separate .proto file is expected to define the logical entity structure. Hence we can still parse this as a goodoc for people who dont care about this, and people who care about this can parse it specifically. ocr/goodoc/logical-entity-utils.h has methods to read and write these. See Goodoc++ doc",
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "LogicalEntityMessageName": {
          "description": "The names of the proto messages serialized in LogicalEntity, one for each LogicalEntity. The repetitions should number 0 to leave this unspecified, or they should equal the number of LogicalEntity strings.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "SubDocuments": {
          "description": "For multi-goodoc documents",
          "items": {
            "$ref": "GoodocDocument"
          },
          "type": "array"
        },
        "header": {
          "$ref": "GoodocDocumentHeader"
        },
        "page": {
          "items": {
            "$ref": "GoodocDocumentPage"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocDocumentHeader": {
      "id": "GoodocDocumentHeader",
      "properties": {
        "OcrEngineId": {
          "type": "string"
        },
        "OcrEngineVersion": {
          "type": "string"
        },
        "font": {
          "items": {
            "$ref": "GoodocDocumentHeaderFont"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocDocumentHeaderFont": {
      "id": "GoodocDocumentHeaderFont",
      "properties": {
        "FontId": {
          "format": "int32",
          "type": "integer"
        },
        "FontName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocDocumentPage": {
      "id": "GoodocDocumentPage",
      "properties": {
        "GarbageDetectorChangeList": {
          "description": "If the garbage text detector was run, the changelist that the binary was sync'ed to (or -1 if unknown), and whether the settings had their production values (or false if unknown).",
          "format": "int32",
          "type": "integer"
        },
        "GarbageDetectorWasProduction": {
          "type": "boolean"
        },
        "Height": {
          "description": "Height in pixels",
          "format": "int32",
          "type": "integer"
        },
        "HorizontalDpi": {
          "description": "Horizontal resolution in DPI.",
          "format": "int32",
          "type": "integer"
        },
        "Label": {
          "$ref": "GoodocLabel"
        },
        "PornScore": {
          "description": "Score of porn classifier from analyzing images on page. Note: This should be named porn_score, but we use PornScore as the name in order to be consistent with the rest of this proto.",
          "format": "double",
          "type": "number"
        },
        "TextConfidence": {
          "description": "Page text recognition confidence. Range depends on the algorithm but should be consistent in a given volume. 0 is bad, 100 is good.",
          "format": "int32",
          "type": "integer"
        },
        "VerticalDpi": {
          "description": "Vertical resolution in DPI.",
          "format": "int32",
          "type": "integer"
        },
        "Width": {
          "description": "Width in pixels",
          "format": "int32",
          "type": "integer"
        },
        "block": {
          "items": {
            "$ref": "GoodocDocumentPageBlock"
          },
          "type": "array"
        },
        "mergedpageinfo": {
          "items": {
            "$ref": "GoodocDocumentPageMergedPageInfo"
          },
          "type": "array"
        },
        "postOcrConfidence": {
          "description": "Whether page-level text confidences and other summary data were computed by PostOcrUtils instead of the now-obsolete GarbageTextDetector",
          "type": "boolean"
        },
        "stats": {
          "$ref": "GoodocSummaryStats",
          "description": "Page level stats (font size, line spacing, etc.)"
        }
      },
      "type": "object"
    },
    "GoodocDocumentPageBlock": {
      "id": "GoodocDocumentPageBlock",
      "properties": {
        "BlockType": {
          "format": "int32",
          "type": "integer"
        },
        "Box": {
          "$ref": "GoodocBoundingBox"
        },
        "Label": {
          "$ref": "GoodocLabel"
        },
        "OrientationLabel": {
          "$ref": "GoodocOrientationLabel",
          "description": "Which way is upright for this block, and what is the reading order (applicable if there is text here)."
        },
        "Paragraph": {
          "items": {
            "$ref": "GoodocParagraph"
          },
          "type": "array"
        },
        "RotatedBox": {
          "$ref": "GoodocRotatedBoundingBox",
          "description": "If RotatedBox is set, Box must be set as well. See RotatedBoundingBox."
        },
        "TextConfidence": {
          "description": "Block text recognition confidence. Range depends on the algorithm but should be consistent in a given volume. 0 is bad, 100 is good.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocDocumentPageMergedPageInfo": {
      "description": "If we have merged text from another goodoc into this one (for example, from a PDF text layer goodoc into an OCR'd goodoc), we record some source goodoc info here.",
      "id": "GoodocDocumentPageMergedPageInfo",
      "properties": {
        "OcrEngineId": {
          "type": "string"
        },
        "OcrEngineVersion": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocFontSizeStats": {
      "description": "Statistics about a particular font size (from CharLabel.FontSize) aggregated over a range of symbols",
      "id": "GoodocFontSizeStats",
      "properties": {
        "fontId": {
          "description": "CharLabel.FontId and FontSize",
          "format": "int32",
          "type": "integer"
        },
        "fontSize": {
          "format": "int32",
          "type": "integer"
        },
        "medianHeight": {
          "description": "The measurements are in pixels",
          "format": "int32",
          "type": "integer"
        },
        "medianLineHeight": {
          "description": "top to bottom",
          "format": "int32",
          "type": "integer"
        },
        "medianLineSpace": {
          "description": "bottom to next top in para",
          "format": "int32",
          "type": "integer"
        },
        "medianLineSpan": {
          "description": "top to next top in para",
          "format": "int32",
          "type": "integer"
        },
        "medianWidth": {
          "format": "int32",
          "type": "integer"
        },
        "numLineSpaces": {
          "description": "Lines (out of num_lines) that have a successor line within their para",
          "format": "int32",
          "type": "integer"
        },
        "numLines": {
          "description": "Line stats for this font. \"top\" corresponds to the highest ascender and \"bottom\" to the lowest descender. num_lines = # lines with > 50% symbols having this font",
          "format": "int32",
          "type": "integer"
        },
        "numSymbols": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocLabel": {
      "description": "Label aggregates all kinds of optional characteristics of page elements.",
      "id": "GoodocLabel",
      "properties": {
        "AnchorLabel": {
          "description": "AnchorLabel identifies a link target.",
          "items": {
            "$ref": "GoodocAnchorLabel"
          },
          "type": "array"
        },
        "BreakLabel": {
          "$ref": "GoodocBreakLabel"
        },
        "CharLabel": {
          "$ref": "GoodocCharLabel",
          "description": "CharLabel is specifically intended for symbols"
        },
        "LanguageLabel": {
          "description": "Languages used in the element (page, block, paragraph or word). Ordered by dominant-language first. Note: content scanjobs processed by the garbage_text_detector before CL 9223538 (Dec. 2008) have LanguageLabels in arbitrary order (within Page and Block elements) -- the confidence value should be inspected to find the dominant language guess for these, rather than just taking the first.",
          "items": {
            "$ref": "GoodocLanguageLabel"
          },
          "type": "array"
        },
        "SemanticLabel": {
          "$ref": "GoodocSemanticLabel",
          "description": "SemanticLabel is defined in goodoc-semantics.proto, it allows rich annotation of content, identifying the nature of page elements."
        }
      },
      "type": "object"
    },
    "GoodocLanguageCombinationLanguage": {
      "description": "Weighted language",
      "id": "GoodocLanguageCombinationLanguage",
      "properties": {
        "bcp47Tag": {
          "description": "Bcp47 language code. Note, this is not the same as OceanCode used by goodoc::Document.",
          "type": "string"
        },
        "weight": {
          "description": "Weight of language. This specifies how likely it is to see the language in the input text. The values don't have to add up to 1.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoodocLanguageLabel": {
      "description": "Language label",
      "id": "GoodocLanguageLabel",
      "properties": {
        "ClosestLanguageId": {
          "description": "Closest id from i18n/languages/proto/languages.proto; caveat: may not accurately capture the language. GoodocLanguageCodeToLanguage() declared in ocr/goodoc/goodoc-utils.h may be used to convert a Language enum (i18n/languages/proto/languages.proto) to a string suitable for this field.",
          "format": "int32",
          "type": "integer"
        },
        "Confidence": {
          "description": "Confidence level on that language, between 0 and 100",
          "format": "int32",
          "type": "integer"
        },
        "LanguageCode": {
          "description": "Old (Ocean) Language Code Usage: The language code is inferred during the running of the Garbage Text Detector and gets set at the paragraph, block and page level. Language code is a string of 3 or more characters. The first 3 letters specify the language, according to ISO 639. Optionally, the 3-letter code can be extended with an underscore and a language variant specifier. Specifiers exist for regional variants or for different forms of language spelling. The regional variants are specified as 2-letter country code, according to ISO 3166. Some examples: Standard \"por\" - Portuguese, standard \"rus\" - Russian, standard Regional variants: \"por_br\" - Portuguese, Brazilian \"eng_us\" - English, United States Variants of spelling: \"rus_old\" - Russian, old spelling \"chi_tra\" - Chinese, traditional \"ger_new\" - German, new spelling LanguageToGoodocLanguageCode() declared in ocr/goodoc/goodoc-utils.h may be used to convert a Language enum (i18n/languages/proto/languages.proto) to a string suitable for this field. New Language Code Usage: Most of the usages described above were standardized in BCP 47, and these codes are the new stanadard to be used in this field. To load either new or old language codes to form LanguageCode objects, use the function FromOceanCode() in ocr/quality/lang_util.h Note that the function ocr::FromOceanCode is capable of transforming either version of the LanguageCode to a C++ i18n_identifiers::LanguageCode.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocLogicalEntity": {
      "description": "A logical entity in the abstract is just a group of links to the goodoc. Depending on the kind of item, a separate proto file should extend this to define the logical structure for that kind. For example. newspapers.proto defines the logical entity for newspapers. LogicalEntity is also used within some SemanticLabels, for example, for a table-of-contents link.",
      "id": "GoodocLogicalEntity",
      "properties": {
        "Metadata": {
          "type": "string"
        },
        "link": {
          "items": {
            "$ref": "GoodocLogicalEntityLink"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocLogicalEntityLink": {
      "description": "NOTE(gponcin) 2008/11 This is repeated for articles where we may have multiple links in one entity. From Vivek (Atlantis): \"The block segmenter outputs a list of headlines on a page as a single logical entity that we attach to the logicalentity(1) for the goodoc.\"",
      "id": "GoodocLogicalEntityLink",
      "properties": {
        "Anchor": {
          "description": "The preferred way to link to an element is to create an AnchorLabel in the target element and name it here. Multiple elements may contain the same Anchor string.",
          "type": "string"
        },
        "BlockId": {
          "format": "int32",
          "type": "integer"
        },
        "DocId": {
          "description": "Links may also specifically locate the target element with the following indices. Note that during the course of layout analysis, goodoc elements may move around, so such hard links should be created only very late (or not at all -- Anchors would be more reliable target addresses).",
          "format": "int32",
          "type": "integer"
        },
        "PageId": {
          "format": "int32",
          "type": "integer"
        },
        "ParagraphId": {
          "format": "int32",
          "type": "integer"
        },
        "RouteId": {
          "format": "int32",
          "type": "integer"
        },
        "SymbolId": {
          "format": "int32",
          "type": "integer"
        },
        "Url": {
          "description": "If not defined, link points to the current doc",
          "type": "string"
        },
        "WordId": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocOrdinal": {
      "description": "An Ordinal message represents a single ordinal component of a page number. It encodes the printed or inferred numbering style (Roman, ASCII, etc.) and the ordinal value of the component. An optional set of variable is defined in order to express a sectioned ordinal. A sectioned ordinal may appear in certain page numbering styles, for example \"12-1\" where \"12\" identifies a chapter and \"1\" identifies the page within it. This case will be encoded with value 1 and section_value 12 both of type ASCII.",
      "id": "GoodocOrdinal",
      "properties": {
        "implicit": {
          "enum": [
            "UNKNOWN_IMPLICIT",
            "IMPLICIT",
            "EXPLICIT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "sectionStringValue": {
          "type": "string"
        },
        "sectionValue": {
          "format": "int32",
          "type": "integer"
        },
        "sectionValueType": {
          "description": "The following vars describe the section component of an ordinal (if exists). They are used to express situation where a page number has a section component, usually denoating the chapter number. For example pages 5-14, 5-15 will both have the common section 5. (If exists). The semantcis of the section variables correspond to that of the primary part of the ordinal. (Described above).",
          "enum": [
            "UNKNOWN_VALUE_TYPE",
            "LEGACY_PRE_VALUE",
            "ROMAN",
            "ASCII",
            "ALPHA",
            "LEGACY_POST_VALUE",
            "UNDEFINED_VALUE_TYPE",
            "CHINESE",
            "JAPANESE",
            "KOREAN",
            "ARABIC_ARABIC"
          ],
          "enumDescriptions": [
            "",
            "Not to be used",
            "Roman numeral",
            "ASCII numeral (i.e. 1,2,3)",
            "Alphabetic, as in the first part of \"A-11\".",
            "Not to be used",
            "",
            "",
            "",
            "",
            "Arabic numeral as used in Arabic. (Not to be confused with the ASCII numeral a.k.a Arabic numberal.)"
          ],
          "type": "string"
        },
        "stringValue": {
          "description": "The string page value.",
          "type": "string"
        },
        "value": {
          "description": "The numeric page value.",
          "format": "int32",
          "type": "integer"
        },
        "valueDelta": {
          "description": "The delta in which the value increases between pages.",
          "enum": [
            "DELTA_HALF",
            "DELTA_ONE",
            "DELTA_TWO"
          ],
          "enumDescriptions": [
            "appears in typewritten documents",
            "the usual numbering scenario",
            "appears in documents with two ordinals per page"
          ],
          "type": "string"
        },
        "valueType": {
          "description": "A value type from the Type enum above.",
          "enum": [
            "UNKNOWN_VALUE_TYPE",
            "LEGACY_PRE_VALUE",
            "ROMAN",
            "ASCII",
            "ALPHA",
            "LEGACY_POST_VALUE",
            "UNDEFINED_VALUE_TYPE",
            "CHINESE",
            "JAPANESE",
            "KOREAN",
            "ARABIC_ARABIC"
          ],
          "enumDescriptions": [
            "",
            "Not to be used",
            "Roman numeral",
            "ASCII numeral (i.e. 1,2,3)",
            "Alphabetic, as in the first part of \"A-11\".",
            "Not to be used",
            "",
            "",
            "",
            "",
            "Arabic numeral as used in Arabic. (Not to be confused with the ASCII numeral a.k.a Arabic numberal.)"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocOrientationLabel": {
      "description": "OrientationLabel groups the details about orientation and reading order.",
      "id": "GoodocOrientationLabel",
      "properties": {
        "deskewAngle": {
          "description": "After rotating so that the text orientation is upright, how many radians does one have to rotate the block anti-clockwise for it to be level? We guarantee: -Pi/4 <= deskew_angle <= Pi/4",
          "format": "float",
          "type": "number"
        },
        "mirrored": {
          "description": "Whether a text line is mirrored (e.g. reflected in a shiny surface or seen through the opposite side of a storefront window). The intent is that this is a quality of the text line image. It needs to be reflected according to a vertical axis along the direction of upright characters to make it readable. This does not affect the shape of the bounding box. A mirrored line with top to bottom writing remains top to bottom. A mirrored horizontal line will flip left to right. However any child entities (symbols) will remain in the same order, and the writing direction imposed by the language (ltr or rtl) will remain the same.",
          "type": "boolean"
        },
        "orientation": {
          "enum": [
            "ORIENTATION_PAGE_UP",
            "ORIENTATION_PAGE_RIGHT",
            "ORIENTATION_PAGE_DOWN",
            "ORIENTATION_PAGE_LEFT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "textlineOrder": {
          "enum": [
            "TEXTLINE_ORDER_LEFT_TO_RIGHT",
            "TEXTLINE_ORDER_RIGHT_TO_LEFT",
            "TEXTLINE_ORDER_TOP_TO_BOTTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "writingDirection": {
          "enum": [
            "WRITING_DIRECTION_LEFT_TO_RIGHT",
            "WRITING_DIRECTION_RIGHT_TO_LEFT",
            "WRITING_DIRECTION_TOP_TO_BOTTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocOverrides": {
      "description": "This message specifies structure \"overrides\" to apply: it can be used to force certain kinds of GoodocToHTML renderings of elements.",
      "id": "GoodocOverrides",
      "properties": {
        "blockImagination": {
          "description": "For text blocks only: do not allow this block to be turned into an image when rendering, even if your algorithms want to do so:",
          "enum": [
            "LEAVE_ALONE",
            "FORCE_TRUE",
            "FORCE_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "doNotExpandGraphicBox": {
          "description": "For graphic blocks, we often expand the block a bit for rendering, to compensate for bad image segmentation. do_not_expand_graphic_box forces this behavior to be turned off.",
          "type": "boolean"
        },
        "fullPageAsImage": {
          "description": "For Pages only: explicitly specify whether or not this page should be rendered fully as an image",
          "enum": [
            "LEAVE_ALONE",
            "FORCE_TRUE",
            "FORCE_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "fullPageLineated": {
          "description": "For Pages only: explicitly specify whether or not all text on this page should be treated as \"LINEATED\"",
          "enum": [
            "LEAVE_ALONE",
            "FORCE_TRUE",
            "FORCE_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "fullPageSkipped": {
          "description": "For Pages only: explicitly specify whether or not this page should be skipped.",
          "enum": [
            "LEAVE_ALONE",
            "FORCE_TRUE",
            "FORCE_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "needNotSuppressPhoto": {
          "description": "This GRAPHIC block's image can be shown even when GoodocToHTMLOptions.suppress_photos_with_this is specified.",
          "type": "boolean"
        },
        "pageBreakBefore": {
          "description": "For blocks: explicitly specify whether or not this block should get a page-break before it.",
          "enum": [
            "LEAVE_ALONE",
            "FORCE_TRUE",
            "FORCE_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "style": {
          "items": {
            "$ref": "GoodocOverridesStyle"
          },
          "type": "array"
        },
        "wordHtml": {
          "description": "For Words only: replace the rendered HTML by this:",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocOverridesStyle": {
      "description": "Extra css styles to apply",
      "id": "GoodocOverridesStyle",
      "properties": {
        "name": {
          "description": "css attribute name: \"margin-left\", for eg.",
          "type": "string"
        },
        "value": {
          "description": "css attribute vale: \"1em\", for eg.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocParagraph": {
      "description": "Represents a paragraph of text in OCRed content.",
      "id": "GoodocParagraph",
      "properties": {
        "Box": {
          "$ref": "GoodocBoundingBox"
        },
        "FirstLineIndent": {
          "format": "int32",
          "type": "integer"
        },
        "Label": {
          "$ref": "GoodocLabel"
        },
        "LeftIndent": {
          "format": "int32",
          "type": "integer"
        },
        "LineSpacing": {
          "format": "int32",
          "type": "integer"
        },
        "OrientationLabel": {
          "$ref": "GoodocOrientationLabel",
          "description": "Which way is upright for this paragraph and what is the dominant reading order?"
        },
        "RightIndent": {
          "format": "int32",
          "type": "integer"
        },
        "RotatedBox": {
          "$ref": "GoodocRotatedBoundingBox",
          "description": "If RotatedBox is set, Box must be set as well. See RotatedBoundingBox."
        },
        "SpaceAfter": {
          "format": "int32",
          "type": "integer"
        },
        "SpaceBefore": {
          "format": "int32",
          "type": "integer"
        },
        "SubsumedParagraphProperties": {
          "description": "If we merge any paragraphs into this one (through the MergeParagraphWithNext() interface in goodoc-editing.h), then we append the properties of the merged paragraph here, for debugging and to avoid losing any info. Note that the SubsumedParagraphProperties Paragraphs do not contain Routes.",
          "items": {
            "$ref": "GoodocParagraph"
          },
          "type": "array"
        },
        "TextConfidence": {
          "description": "Paragraph text recognition confidence. Range depends on the algorithm but should be consistent in a given volume. 0 is bad, 100 is good.",
          "format": "int32",
          "type": "integer"
        },
        "Width": {
          "format": "int32",
          "type": "integer"
        },
        "alignment": {
          "format": "int32",
          "type": "integer"
        },
        "droppedcap": {
          "$ref": "GoodocParagraphDroppedCap"
        },
        "route": {
          "items": {
            "$ref": "GoodocParagraphRoute"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocParagraphDroppedCap": {
      "description": "Information about the paragraph's dropped capital letter",
      "id": "GoodocParagraphDroppedCap",
      "properties": {
        "Box": {
          "$ref": "GoodocBoundingBox"
        },
        "LettersCount": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocParagraphRoute": {
      "id": "GoodocParagraphRoute",
      "properties": {
        "EndPoint": {
          "$ref": "GoodocRoutePoint",
          "description": "Route end point"
        },
        "StartPoint": {
          "$ref": "GoodocRoutePoint",
          "description": "Route start point"
        },
        "Weight": {
          "description": "Route weight, i.e. route",
          "format": "int32",
          "type": "integer"
        },
        "Word": {
          "description": "The array of words on this route",
          "items": {
            "$ref": "GoodocWord"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocRotatedBoundingBox": {
      "description": "Similar to goodoc.BoundingBox, but containing an angle of rotation, thus able to represent non-axis-aligned boxes. RotatedBoundingBox can be used in combination with BoundingBox to better represent non-axis-aligned page structural elements. In such case, two bounding boxes can be used per element. A RotatedBoundingBox that is rotated to tightly encompass the element; embedded (as tightly as possible) inside an axis-aligned BoundingBox. Note that there is some amount of ambiguity regarding what angle and vertex to use. Consider a square with axis-aligned diagonals: B / \\ A C \\ / D This can either be represented as a -45 degree rotation around A, a 45 degree rotation around B, a 135 degree rotation around C, or a -135 degree rotation around D. Which one you use depends on your use case, but one recommendation is to use the vertex that would be top left if the reader was reading it in the 'natural' orientation.",
      "id": "GoodocRotatedBoundingBox",
      "properties": {
        "Angle": {
          "description": "Angle of rotation of the original non-rotated box around the top left corner of the original non-rotated box, in clockwise degrees from the horizontal.",
          "format": "float",
          "type": "number"
        },
        "Height": {
          "format": "int32",
          "type": "integer"
        },
        "Left": {
          "description": "Coordinates and sizes are expressed in pixels, where the top-left pixel is (0, 0). The coordinates refer to the corner of the top-left vertex of the unrotated version of the box.",
          "format": "int32",
          "type": "integer"
        },
        "Top": {
          "format": "int32",
          "type": "integer"
        },
        "Width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocRoutePoint": {
      "id": "GoodocRoutePoint",
      "properties": {
        "RouteIndex": {
          "description": "The sequential route number, starts at 0",
          "format": "int32",
          "type": "integer"
        },
        "WordIndex": {
          "description": "The sequential word number, starts at 0",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabel": {
      "description": "Label identifying a logical part of the page content. This applies mostly at Block level or Paragraph level (but can apply to Words or to arbitrary spans if needed).",
      "id": "GoodocSemanticLabel",
      "properties": {
        "AlternateText": {
          "description": "Alternate text for a sequence of the Goodoc, just for the element containing this label, or for a sequence starting from this element to the EndOfSpanningLabel. Typically this is inserted by automatic or manual OCR correction. We use text instead of editing the Goodoc directly since we dont usually have accurate symbol level bboxes for the alternate text. Also the original values from OCR are preserved. It is upto the application to do anything more intelligent like mapping words and finding potential symbol/word bboxes.",
          "type": "string"
        },
        "Attribute": {
          "description": "Page elements can be given Attributes refining meaning/role. We keep this flexible by using strings instead of pre-determined enum values. But it is useful to list all such Attributes in use in ocr/goodoc/goodoc-semantics-attributes.h",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ChapterStart": {
          "description": "Blocks that are at the beginning of chapters have this set:",
          "type": "boolean"
        },
        "CleanupAnnotation": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "ContinuesFromPreviousPage": {
          "type": "boolean"
        },
        "ContinuesFromPreviousPageHyphenated": {
          "description": "When ContinuesFromPreviousPage=true, this bit can be set to note that the word fragment on the previous page ends in a hyphen.",
          "type": "boolean"
        },
        "ContinuesOnNextPage": {
          "description": "Paragraphs that span across pages can be identified with the following flags. Note that flows just connect Blocks across pages. These continuation flags imply something more specific -- the case of a single logical paragraph split over pages. Only the last Paragraph in the last Block within a given FlowThread() on a page can have ContinuesOnNextPage set. Similarly, only the first Paragraph in the first Block with a given FlowThread() on a page may have ContinuesFromPreviousPage set.",
          "type": "boolean"
        },
        "EndOfSpanningLabel": {
          "$ref": "GoodocLogicalEntity",
          "description": "Normally, a SemanticLabel applies exactly to the goodoc element that it is contained in (usually Block or Paragraph, sometimes Word). Occasionally, we need a SemanticLabel to span across the boundary or end before the boundary. For example, a URL may just be a few words within a Paragraph. In such cases, the SemanticLabel is added to the first element of the span and contains this LogicalEntity pointing to the last element of the span:"
        },
        "ExperimentalData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Message set for experimental algorithm data. Use case: We keep a set of features that was computed for the unsupervised caption extraction and store it here. Agora question producer will consume this message set to be embedded in a question. The experimental feature set can then be used later to pair up with ground truth labels for designing a supervised algorithm. Currently holding: o ocean/analysis/content/caption_data.proto's TextualElement"
        },
        "Flow": {
          "description": "Flow identifies a single sequential unit of text (or other content). It is only set on Blocks -- a flow identifies a sequence of Blocks. The default, main flow is just the empty string. The \"FlowThread\" of a block is the flow (if non-empty), suffixed with the block appearance. This is computed by GoodocUtils::FlowThread(). Paragraphs may be split over blocks in the same FlowThread, across pages. The following table shows how FlowThread gets computed: ## Flow Appearance FlowThread (empty) UNSPECIFIED \"UNSPECIFIED\" foo BODY \"foo:BODY\" Please use lower-case strings for flows (such as article-33-box). One useful way to think of flows is this: A logical unit of interest in a a Document (for example, an article) would be identified by a starting block, an ending block, and a list of flows of interest within the [start, end) span. message Article { (page#, block#): article_start; (page#, block#): article_end; repeated string flows; } The reading order of blocks, paragraphs/etc within this article would be the same order as present in the goodoc itself. Some applications (such as rendering) may want to process the article by running over all the flows together, others (such as indexing) may want to deal with the FlowThreads one after the other.",
          "type": "string"
        },
        "ModificationRecord": {
          "description": "This field can be used to record the steps by which AlternateText for a sequence of the Goodoc is generated.",
          "type": "string"
        },
        "PageNumberOrdinal": {
          "$ref": "GoodocOrdinal",
          "description": "If Appearence is PAGE_NUMBER:"
        },
        "appearance": {
          "format": "int32",
          "type": "integer"
        },
        "columndetails": {
          "$ref": "GoodocSemanticLabelColumnDetails"
        },
        "contentlink": {
          "$ref": "GoodocSemanticLabelContentLink"
        },
        "editcorrectioncandidate": {
          "items": {
            "$ref": "GoodocSemanticLabelEditCorrectionCandidate"
          },
          "type": "array"
        },
        "overrides": {
          "$ref": "GoodocOverrides",
          "description": "Structure overrides: typically manual corrections to goodoc renderings."
        },
        "snippetfilter": {
          "items": {
            "$ref": "GoodocSemanticLabelSnippetFilter"
          },
          "type": "array"
        },
        "tablecelldetails": {
          "$ref": "GoodocSemanticLabelTableCellDetails"
        },
        "tabledetails": {
          "$ref": "GoodocSemanticLabelTableDetails"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelColumnDetails": {
      "description": "If Appearance is COLUMN:",
      "id": "GoodocSemanticLabelColumnDetails",
      "properties": {
        "Column": {
          "format": "int32",
          "type": "integer"
        },
        "Columns": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelContentLink": {
      "description": "If the label is for something that links to another piece of content (in this volume, outside, a url, a citation, etc.).",
      "id": "GoodocSemanticLabelContentLink",
      "properties": {
        "UrlTarget": {
          "description": "For URL labels, we note the url here directly (it's also available by grabbing all text symbols within the labeled span). SCHOLARLY_CITATION labels or even CAPTION labels may occasionally contain URLs.",
          "type": "string"
        },
        "citationtarget": {
          "$ref": "GoodocSemanticLabelContentLinkCitationTarget"
        },
        "involumetarget": {
          "$ref": "GoodocSemanticLabelContentLinkInVolumeTarget"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelContentLinkCitationTarget": {
      "description": "For SCHOLARLY_CITATION labels:",
      "id": "GoodocSemanticLabelContentLinkCitationTarget",
      "properties": {
        "Authors": {
          "description": "separated by semicolons",
          "type": "string"
        },
        "BibKey": {
          "type": "string"
        },
        "Confidence": {
          "format": "double",
          "type": "number"
        },
        "Title": {
          "type": "string"
        },
        "Year": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelContentLinkInVolumeTarget": {
      "description": "For CAPTION or FOOTNOTE_POINTER or TOC_ENTRY or INDEX_ENTRY or CONTINUATION labels:",
      "id": "GoodocSemanticLabelContentLinkInVolumeTarget",
      "properties": {
        "Confidence": {
          "format": "double",
          "type": "number"
        },
        "LogicalEntity": {
          "$ref": "GoodocLogicalEntity",
          "description": "The CAPTION label typically targets the previous or the next Block. The FOOTNOTE_POINTER label typically targets a paragraph in a FOOTNOTE Block. TOC_ENTRY and INDEX_ENTRY labels are links that point to a different page within the volume. CONTINUATION labels also are links that point to a different page within the volume, or maybe even a particular block or paragraph."
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelEditCorrectionCandidate": {
      "description": "If there is more than one edit correction candidate, store all the candidates here. This helps a manual correction utility fire the right kind of question with the relevant options.",
      "id": "GoodocSemanticLabelEditCorrectionCandidate",
      "properties": {
        "EditedWord": {
          "type": "string"
        },
        "Probability": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelSnippetFilter": {
      "description": "Recording the output of the snippet filter. We run through a series of snippet filters and store all the conditions that this article passed. A condition is denoted by the \"badword_fraction_allowed\" in a running window of size - \"window_size\". If ARTICLE_SNIPPET_NOT_CLEAN annotation is set, this group has 0 items. It can be a part of article logicalentity, but keeping it here for consistency and coherence as SemanticLabel holds all other article metadata.",
      "id": "GoodocSemanticLabelSnippetFilter",
      "properties": {
        "badwordFraction": {
          "format": "double",
          "type": "number"
        },
        "windowSize": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelTableCellDetails": {
      "description": "If Appearance is TABLE_CELL:",
      "id": "GoodocSemanticLabelTableCellDetails",
      "properties": {
        "Column": {
          "format": "int32",
          "type": "integer"
        },
        "ColumnSpan": {
          "format": "int32",
          "type": "integer"
        },
        "Row": {
          "description": "Row and Column are 0-based",
          "format": "int32",
          "type": "integer"
        },
        "RowSpan": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSemanticLabelTableDetails": {
      "description": "If Appearance is TABLE:",
      "id": "GoodocSemanticLabelTableDetails",
      "properties": {
        "Columns": {
          "format": "int32",
          "type": "integer"
        },
        "Rows": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSummaryStats": {
      "description": "Goodoc stats for a range of elements, such as one page or a whole book. These stats can be computed using the SummaryStatsCollector class. Some range stats are pre-computed and stored in goodocs/volumes (eg., Page.stats below, and Ocean's CA_VolumeResult.goodoc_stats).",
      "id": "GoodocSummaryStats",
      "properties": {
        "estimatedFontSizes": {
          "description": "This flag is set if the histogram above has been derived by estimating font sizes from CharLabel.CharacterHeight; that happens if the FontSize field is constant, as has happened with Abbyy 9.",
          "type": "boolean"
        },
        "fontSizeHistogram": {
          "description": "Symbol counts (and other attributes) for each distinct CharLabel.FontId and FontSize; histogram is in decreasing order of symbol count",
          "items": {
            "$ref": "GoodocFontSizeStats"
          },
          "type": "array"
        },
        "meanSymbolsPerBlock": {
          "format": "int32",
          "type": "integer"
        },
        "meanSymbolsPerLine": {
          "format": "int32",
          "type": "integer"
        },
        "meanSymbolsPerParagraph": {
          "format": "int32",
          "type": "integer"
        },
        "meanSymbolsPerWord": {
          "format": "int32",
          "type": "integer"
        },
        "meanWordsPerBlock": {
          "format": "int32",
          "type": "integer"
        },
        "meanWordsPerLine": {
          "format": "int32",
          "type": "integer"
        },
        "meanWordsPerParagraph": {
          "format": "int32",
          "type": "integer"
        },
        "medianBlockSpace": {
          "description": "bottom to next top in flow on page",
          "format": "int32",
          "type": "integer"
        },
        "medianEvenPrintedBox": {
          "$ref": "GoodocBoundingBox",
          "description": "0,2,4.."
        },
        "medianFullEvenPrintedBox": {
          "$ref": "GoodocBoundingBox"
        },
        "medianFullOddPrintedBox": {
          "$ref": "GoodocBoundingBox"
        },
        "medianFullPrintedBox": {
          "$ref": "GoodocBoundingBox",
          "description": "Each median_full*_printed_box includes page header/footer but still excludes all graphic blocks"
        },
        "medianHeight": {
          "format": "int32",
          "type": "integer"
        },
        "medianHorizontalDpi": {
          "format": "int32",
          "type": "integer"
        },
        "medianLineHeight": {
          "description": "top to bottom",
          "format": "int32",
          "type": "integer"
        },
        "medianLineSpace": {
          "description": "bottom to next top in para",
          "format": "int32",
          "type": "integer"
        },
        "medianLineSpan": {
          "description": "top to next top in para",
          "format": "int32",
          "type": "integer"
        },
        "medianOddPrintedBox": {
          "$ref": "GoodocBoundingBox",
          "description": "1,3,5.."
        },
        "medianParagraphIndent": {
          "description": "leading space on first line",
          "format": "int32",
          "type": "integer"
        },
        "medianParagraphSpace": {
          "description": "bottom to next top in block",
          "format": "int32",
          "type": "integer"
        },
        "medianPrintedBox": {
          "$ref": "GoodocBoundingBox",
          "description": "Each median*_printed_box excludes page header/footer and all graphic blocks"
        },
        "medianSymbolsPerBlock": {
          "format": "int32",
          "type": "integer"
        },
        "medianSymbolsPerLine": {
          "format": "int32",
          "type": "integer"
        },
        "medianSymbolsPerParagraph": {
          "format": "int32",
          "type": "integer"
        },
        "medianSymbolsPerWord": {
          "format": "int32",
          "type": "integer"
        },
        "medianVerticalDpi": {
          "format": "int32",
          "type": "integer"
        },
        "medianWidth": {
          "format": "int32",
          "type": "integer"
        },
        "medianWordsPerBlock": {
          "format": "int32",
          "type": "integer"
        },
        "medianWordsPerLine": {
          "format": "int32",
          "type": "integer"
        },
        "medianWordsPerParagraph": {
          "format": "int32",
          "type": "integer"
        },
        "numBlockSpaces": {
          "description": "blocks that have a successor block within their flow on their page",
          "format": "int32",
          "type": "integer"
        },
        "numBlocks": {
          "description": "------ Block stats Median symbols and words omit junk, header and footer blocks; they are intended to be a measure of the typical \"content\" block. There can still be substantial differences between means and medians; however, block values will generally exceed paragraph values (not the case when headers and footers are included).",
          "format": "int32",
          "type": "integer"
        },
        "numLineSpaces": {
          "description": "Lines (out of num_lines) that have a successor line within their para",
          "format": "int32",
          "type": "integer"
        },
        "numLines": {
          "description": "------ Line stats \"top\" corresponds to the highest ascender and \"bottom\" to the lowest descender.",
          "format": "int32",
          "type": "integer"
        },
        "numNonGraphicBlocks": {
          "format": "int32",
          "type": "integer"
        },
        "numPages": {
          "description": "------ Page stats.",
          "format": "int32",
          "type": "integer"
        },
        "numParagraphSpaces": {
          "description": "paras that have a successor para within their block",
          "format": "int32",
          "type": "integer"
        },
        "numParagraphs": {
          "description": "------ Paragraph stats Median symbols and words omit junk, header and footer blocks; they are intended to be a measure of the typical \"content\" paragraph. There can still be substantial differences between means and medians, particularly if a table is present (every cell is a paragraph).",
          "format": "int32",
          "type": "integer"
        },
        "numSymbols": {
          "description": "------ Symbol stats",
          "format": "int32",
          "type": "integer"
        },
        "numWords": {
          "description": "------ Word stats",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocSymbol": {
      "description": "A single symbol representation",
      "id": "GoodocSymbol",
      "properties": {
        "Box": {
          "$ref": "GoodocBoundingBox"
        },
        "Code": {
          "description": "The unicode character code in UTF-32",
          "format": "int32",
          "type": "integer"
        },
        "Label": {
          "$ref": "GoodocLabel"
        },
        "RotatedBox": {
          "$ref": "GoodocRotatedBoundingBox",
          "description": "If RotatedBox is set, Box must be set as well. See RotatedBoundingBox."
        },
        "symbolvariant": {
          "items": {
            "$ref": "GoodocSymbolSymbolVariant"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocSymbolSymbolVariant": {
      "id": "GoodocSymbolSymbolVariant",
      "properties": {
        "Code": {
          "format": "int32",
          "type": "integer"
        },
        "Confidence": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoodocWord": {
      "description": "A word representation",
      "id": "GoodocWord",
      "properties": {
        "Baseline": {
          "description": "The baseline's y-axis offset from the bottom of the word's bounding box, given in pixels. (A value of 2, for instance, indicates the baseline is 2px above the bottom of the box.)",
          "format": "int32",
          "type": "integer"
        },
        "Box": {
          "$ref": "GoodocBoundingBox"
        },
        "Capline": {
          "description": "The capline is the y-axis offset from the top of the word bounding box. A positive value n indicates that capline is n-pixels above the top of this word.",
          "format": "int32",
          "type": "integer"
        },
        "CompactSymbolBoxes": {
          "$ref": "GoodocBoxPartitions",
          "description": "For space efficiency, we sometimes skip the detailed per-symbol bounding boxes in Symbol.Box, and use this coarser representation instead, where we just store Symbol boundaries within the Word box. Most client code should not have to worry directly about this, it should be handled in the deepest layers of writing/reading goodocs (for example, see Compress() and Uncompress() in ocean/goodoc/goovols-bigtable-volume.h). Note(viresh): I experimented with this compression, and here are some numbers for reference. If the zlib-compressed page goodoc string size was 100 to start with, then this compaction makes it 65. As a possible future relaxation to consider: if we add in, for each symbol, a \"top\" and \"bottom\" box offset then the size would be 75 (that's with \"repeated int32 top/bottom_offset\" fields inside BoxPartitions, instead of inside each symbol)."
        },
        "Confidence": {
          "description": "Word recognition confidence. Range depends upon OCR Engine.",
          "format": "int32",
          "type": "integer"
        },
        "IsFromDictionary": {
          "description": "word. The meaning and range depends on the OCR engine or subsequent processing. Specifies whether the word was found",
          "type": "boolean"
        },
        "IsIdentifier": {
          "description": "a number True if word represents",
          "type": "boolean"
        },
        "IsLastInSentence": {
          "description": "True if the word is the last word in any sub-paragraph unit that functions at the same level of granularity as a sentence. Examples: \"She hit the ball.\" (regular sentence) \"Dewey defeats Truman\" (heading) \"The more, the merrier.\" (no verb) Note: not currently used. Code to set this was introduced in CL 7038338 and removed in OCL=10678722.",
          "type": "boolean"
        },
        "IsNumeric": {
          "description": "in the dictionary True if the word represents",
          "type": "boolean"
        },
        "Label": {
          "$ref": "GoodocLabel"
        },
        "Penalty": {
          "description": "Penalty for discordance of characters in a",
          "format": "int32",
          "type": "integer"
        },
        "RotatedBox": {
          "$ref": "GoodocRotatedBoundingBox",
          "description": "If RotatedBox is set, Box must be set as well. See RotatedBoundingBox."
        },
        "Symbol": {
          "description": "Word characters, the text may",
          "items": {
            "$ref": "GoodocSymbol"
          },
          "type": "array"
        },
        "alternates": {
          "$ref": "GoodocWordAlternates"
        },
        "text": {
          "description": "As a shortcut, the content API provides the text of words instead of individual symbols (NOTE: this is experimental). This is UTF8. And the main font for the word is stored in Label.CharLabel.",
          "type": "string"
        },
        "writingDirection": {
          "description": "Writing direction for this word.",
          "enum": [
            "WRITING_DIRECTION_LEFT_TO_RIGHT",
            "WRITING_DIRECTION_RIGHT_TO_LEFT",
            "WRITING_DIRECTION_TOP_TO_BOTTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoodocWordAlternates": {
      "description": "Alternate OCR words for Ptolemy OCR Correction. This is the output of the Ptolemy error estimator. See http://go/Ptolemy.",
      "id": "GoodocWordAlternates",
      "properties": {
        "ErrorProbability": {
          "description": "The probability that the main OCR engine (Abbyy) string is incorrect; range is 0 (definitely correct) to 100 (definitely incorrect).",
          "format": "int32",
          "type": "integer"
        },
        "alternate": {
          "items": {
            "$ref": "GoodocWordAlternatesAlternate"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoodocWordAlternatesAlternate": {
      "description": "An alternate word provided by another OCR engine, used for OCR Correction. This iteration only supports simple substitution errors (exhanging one word for another), but with minor modifications (e.g. adding a word count for each alternate), it could support repairing word segmentation and text detection errors.",
      "id": "GoodocWordAlternatesAlternate",
      "properties": {
        "OcrEngineId": {
          "description": "See Document.Header",
          "type": "string"
        },
        "OcrEngineVersion": {
          "description": "See Document.Header",
          "type": "string"
        },
        "Word": {
          "$ref": "GoodocWord",
          "description": "In order to compile, this recursive message needs to be optional, even though it's within an optional group."
        }
      },
      "type": "object"
    },
    "GoogleAssistantAccessoryV1AudioOutConfig": {
      "description": "Specifies the desired format for the server to use when it returns `audio_out` messages.",
      "id": "GoogleAssistantAccessoryV1AudioOutConfig",
      "properties": {
        "audioMode": {
          "description": "Current audio mode on the device while issuing the query.",
          "enum": [
            "AUDIO_MODE_UNSPECIFIED",
            "MUTED",
            "SILENT",
            "PLAYING"
          ],
          "enumDescriptions": [
            "No audio mode specified. The Assistant may respond as if in `AUDIO_SILENT` mode.",
            "Device's audio mute mode has been activated by user. The Assistant will typically not return an audio response.",
            "No audio is currently playing, and device's audio mute mode has NOT been activated by user. The Assistant will typically return an audio response.",
            "Audio is currently playing, such as a video or music. The Assistant will typically not return an audio response, but may for certain queries that are inherently audio (such as \"what sound does a cow make?\" or \"how do you say 'something' in Korean\". This mode should also typically be used when the screen is on and a screen-reader is activated for accessibility, as the screen-reader will read the contents of the visual response and manage navigation."
          ],
          "type": "string"
        },
        "audioRoutingMode": {
          "description": "Current audio routing on the device while issuing the query.",
          "enum": [
            "AUDIO_ROUTING_MODE_UNSPECIFIED",
            "BLUETOOTH_HEADPHONES"
          ],
          "enumDescriptions": [
            "No audio routing mode specified.",
            "Audio routes to headphones connected over BLUETOOTH."
          ],
          "type": "string"
        },
        "encoding": {
          "description": "*Required* The encoding of audio data to be returned in all `audio_out` messages.",
          "enum": [
            "ENCODING_UNSPECIFIED",
            "LINEAR16",
            "MP3",
            "OGG_OPUS",
            "MULAW",
            "OPUS_CONTAINERLESS"
          ],
          "enumDescriptions": [
            "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
            "Uncompressed 16-bit signed little-endian samples (Linear PCM).",
            "MP3 audio encoding. The sample rate is encoded in the payload.",
            "Opus-encoded audio wrapped in an ogg container. The result will be a file which can be played natively on Android and in some browsers (such as Chrome). The quality of the encoding is considerably higher than MP3 while using the same bitrate. The sample rate is encoded in the payload.",
            "Mulaw encoded 8-bit samples, typically used only by telephony. `sample_rate_hertz` must be 8000.",
            "Opus encoded audio without a container."
          ],
          "type": "string"
        },
        "preferredBitrateBps": {
          "description": "*Optional* Specifies preferred encoding bitrate (bits-per-second). Currently this is only implemented for OGG_OPUS for bitrates of 12000, 16000, 24000, 32000. If not specified, OGG_OPUS defaults to 32000.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleAssistantAccessoryV1DeviceConfig": {
      "description": "*Required* Fields that identify the device to the Assistant. See also: * [Register a Device - REST API](https: //developers.google.com/assistant/sdk/re // ference/device-registration/register-device-manual) * [Device Model and Instance Schemas](https: //developers.google.com/assistant/sdk/re // ference/device-registration/model-and-instance-schemas) * [Device Proto](https: //developers.google.com/assistant/sdk/re // ference/rpc/google.assistant.devices.v1#device)",
      "id": "GoogleAssistantAccessoryV1DeviceConfig",
      "properties": {
        "deviceModelCapabilitiesOverride": {
          "$ref": "GoogleAssistantEmbeddedV1DeviceModelCapabilitiesOverride",
          "description": "Device model capabilities from client to override capabilities in the primary device model."
        },
        "heterodyneToken": {
          "description": "*Optional* An encrypted heterodyne_experiment_token containing the list of experiment_ids (go/ph-server-tokens).",
          "type": "string"
        },
        "surfaceIdentity": {
          "$ref": "GoogleAssistantEmbeddedV1SurfaceIdentity",
          "description": "*Required* Identifier for the device which sent the request."
        }
      },
      "type": "object"
    },
    "GoogleAssistantAccessoryV1DeviceState": {
      "description": "Information about the state of the device. This contains any state that Assistant may need to know about in order to fulfill requests, for example which timers and alarms are set. Next ID: 9",
      "id": "GoogleAssistantAccessoryV1DeviceState",
      "properties": {
        "alarmState": {
          "$ref": "GoogleAssistantEmbeddedV1Alarms",
          "description": "*Optional* Information about on-device alarms. For devices that support alarms, all on-device alarms must be sent up with the DeviceState in order for Assistant Server to be able to perform operations on them."
        },
        "contextParams": {
          "description": "Other context params to be sent to Assistant. This is a assistant.embedded.v1.ContextParams message in serialized binary proto format.",
          "format": "byte",
          "type": "string"
        },
        "deviceTime": {
          "description": "A timestamp of the current device time when the request was made. This field is required if your device supports alarms or timers. This ensures that requests are fulfilled relative to the current device time and regardless of any clock skew between the client and the server.",
          "format": "google-datetime",
          "type": "string"
        },
        "deviceTimeZone": {
          "$ref": "GoogleTypeTimeZone",
          "description": "The time zone where the device is currently located. This helps the Assistant answer time-related queries relative to the device's time zone. Generally speaking, mobile devices that support alarms or timers should supply device_time_zone. This field is required if your device supports alarms or timers and the device's location cannot reliably be determined. (See the comment above google.assistant.embedded.v1.DeviceLocation for a description of how the device's location is determined.) If the time zone cannot be determined, some queries for creating or modifying timers or alarms may fail with a generic error such as, \"Sorry, I don't know how to help with that.\""
        },
        "doNotDisturb": {
          "description": "Indicate whether do not disturb mode is turned on.",
          "type": "boolean"
        },
        "fitnessActivitiesState": {
          "$ref": "GoogleAssistantEmbeddedV1FitnessActivities",
          "description": "Information about on-device fitness activities. For devices that support fitness activities, all on-device fitness activities must be sent up with the DeviceState in order for Assistant Server to be able to perform operations on them."
        },
        "timerState": {
          "$ref": "GoogleAssistantEmbeddedV1Timers",
          "description": "*Optional* Information about on-device timers. For devices that support timers, all on-device timers must be sent up with the DeviceState in order for Assistant Server to be able to perform operations on them."
        }
      },
      "type": "object"
    },
    "GoogleAssistantAccessoryV1ResponseConfig": {
      "description": "Configuration for the response. Next Id: 11",
      "id": "GoogleAssistantAccessoryV1ResponseConfig",
      "properties": {
        "audioOutConfig": {
          "$ref": "GoogleAssistantAccessoryV1AudioOutConfig",
          "description": "Specifies the current audio mode on the device."
        },
        "deviceConfig": {
          "$ref": "GoogleAssistantAccessoryV1DeviceConfig",
          "description": "Configuration related to a specific device."
        },
        "deviceInteraction": {
          "description": "The client interaction to be sent to Assistant. This is a assistant.embedded.v1.DeviceInteraction message in serialized binary proto format.",
          "format": "byte",
          "type": "string"
        },
        "deviceState": {
          "$ref": "GoogleAssistantAccessoryV1DeviceState",
          "description": "Device state to pass to the Assistant server to use in calculating the response."
        },
        "initialAudioBytes": {
          "description": "Specifies the initial bytes of TTS audio to send.",
          "format": "int32",
          "type": "integer"
        },
        "isNewConversation": {
          "description": "If true, the server will treat the request as a new conversation and not use state from the prior request. Set this field to true when the conversation should be restarted, such as after a device reboot, or after a significant lapse of time since the prior query.",
          "type": "boolean"
        },
        "outputSampleRateHz": {
          "description": "Specifies the desired audio sample rate of the output TTS stream in Hz.",
          "format": "int32",
          "type": "integer"
        },
        "responseType": {
          "description": "Specifies the requested response type.",
          "enum": [
            "RESPONSE_TYPE_UNSPECIFIED",
            "TEXT",
            "TRANSCRIPTION"
          ],
          "enumDescriptions": [
            "No response type specified. This is invalid and the host will send a state update indicating an error.",
            "Requests an Assistant text response.",
            "Requests a voice transcription only."
          ],
          "type": "string"
        },
        "screenOutConfig": {
          "$ref": "GoogleAssistantAccessoryV1ScreenOutConfig",
          "description": "Specifies the desired format to use when server returns a visual screen response."
        }
      },
      "type": "object"
    },
    "GoogleAssistantAccessoryV1ScreenOutConfig": {
      "description": "Specifies the desired format for the server to use when it returns `screen_out` response.",
      "id": "GoogleAssistantAccessoryV1ScreenOutConfig",
      "properties": {
        "dimensions": {
          "$ref": "GoogleAssistantAccessoryV1ScreenOutConfigDimensions",
          "description": "Device dimensions."
        },
        "fontScaleFactor": {
          "description": "The scale factor used to convert Scalable Pixel (SP) units to Density-independent Pixel (DP) units (DP = SP * scale factor). Fonts are measured in units of SP, and on some platforms such as Android the SP to DP scale factor can be affected by the font size a user selects in accessibility settings.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleAssistantAccessoryV1ScreenOutConfigDimensions": {
      "description": "This contains physical and logical characteristics about the device (e.g. screen size and DPI, etc).",
      "id": "GoogleAssistantAccessoryV1ScreenOutConfigDimensions",
      "properties": {
        "screenDpi": {
          "description": "Dots (pixels) per inch of the screen.",
          "format": "float",
          "type": "number"
        },
        "screenHeightPx": {
          "description": "Height of the device's screen in pixels. If 0 or not specified, it's assumed to be the same as screen_width_px. For a square or round screen, it's recommended to leave this field empty as a bandwidth optimization.",
          "format": "int32",
          "type": "integer"
        },
        "screenShape": {
          "description": "The shape of the device's screen",
          "enum": [
            "SCREEN_SHAPE_UNSPECIFIED",
            "SCREEN_SHAPE_OVAL",
            "SCREEN_SHAPE_RECT"
          ],
          "enumDescriptions": [
            "Screen shape is undefined.",
            "A round screen (typically found on most Wear devices).",
            "Rectangular screens."
          ],
          "type": "string"
        },
        "screenWidthPx": {
          "description": "Width of the device's screen in pixels.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1Alarm": {
      "description": "Alarms are clocks that ring at a specified time on one or more days. The client schedules a time to ring based on the date/time pattern. When it rings, it may be rescheduled off the original time by snoozing or it may be replaced by the next occurrence.",
      "id": "GoogleAssistantEmbeddedV1Alarm",
      "properties": {
        "alarmId": {
          "description": "A string key used as an identifier to this alarm. This key needs to be unique amongst all alarms on the device. The client can choose a mechanism of its choice to ensure this. If the server suggests an alarm_id, the client can either use the suggestion or create a new unique alarm_id of its choosing.",
          "type": "string"
        },
        "datePattern": {
          "$ref": "GoogleTypeDate",
          "description": "For single alarms: the one date the alarm should next be scheduled for."
        },
        "label": {
          "description": "A user-provided name for this alarm.",
          "type": "string"
        },
        "recurrencePattern": {
          "$ref": "GoogleAssistantEmbeddedV1AlarmRecurrence",
          "description": "For recurring alarms: a description of the dates when the alarm should recur."
        },
        "scheduledTime": {
          "description": "When SCHEDULED or SNOOZED, the absolute time the alarm will fire next. When SNOOZED, this time includes the additional time added by snoozing the alarm. When FIRING, the absolute time the alarm had been scheduled to fire. When DISABLED, this field is undefined and should be ignored.",
          "format": "google-datetime",
          "type": "string"
        },
        "status": {
          "description": "Describes the part of the lifecycle that an alarm is in.",
          "enum": [
            "ALARM_STATUS_UNSPECIFIED",
            "SCHEDULED",
            "FIRING",
            "SNOOZED",
            "DISABLED"
          ],
          "enumDescriptions": [
            "",
            "The alarm is scheduled to fire at some point in the future.",
            "The alarm is currently firing.",
            "Like SCHEDULED; the alarm has been snoozed after firing.",
            "Alarm is disabled, i.e., it won't ring. Scheduled time is undefined for disabled alarms and should be ignored."
          ],
          "type": "string"
        },
        "timePattern": {
          "$ref": "GoogleTypeTimeOfDay",
          "description": "The time of day the alarm should be scheduled for. This value does not change when an alarm enters the SNOOZED state; instead the scheduled_time field should be adjusted to the new alarm time."
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1AlarmRecurrence": {
      "description": "A description of the dates when an alarm should recur.",
      "id": "GoogleAssistantEmbeddedV1AlarmRecurrence",
      "properties": {
        "dayOfWeek": {
          "description": "Specifies a weekly or daily recurrence. Constraint: The date falls on one of these days of the week, in 0...6 (Sunday...Saturday). Should not be empty.",
          "items": {
            "enum": [
              "DAY_OF_WEEK_UNSPECIFIED",
              "MONDAY",
              "TUESDAY",
              "WEDNESDAY",
              "THURSDAY",
              "FRIDAY",
              "SATURDAY",
              "SUNDAY"
            ],
            "enumDescriptions": [
              "The day of the week is unspecified.",
              "Monday",
              "Tuesday",
              "Wednesday",
              "Thursday",
              "Friday",
              "Saturday",
              "Sunday"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1Alarms": {
      "description": "Contains information about on-device alarms for devices that support alarms.",
      "id": "GoogleAssistantEmbeddedV1Alarms",
      "properties": {
        "alarms": {
          "description": "Information about all on-device alarms.",
          "items": {
            "$ref": "GoogleAssistantEmbeddedV1Alarm"
          },
          "type": "array"
        },
        "snoozeDuration": {
          "description": "The amount of time for which alarms should be snoozed. If not specified, the productivity vertical applies a default snooze duration, which may be seen here: http://google3/assistant/verticals/productivity/utils/alarm_utils.cc;l=2734;rcl=415933085",
          "format": "google-duration",
          "type": "string"
        },
        "stateFetchError": {
          "description": "Indicates if an error occurred while fetching alarm state. If this value is missing, it can be assumed that the state fetch was successful.",
          "enum": [
            "STATE_FETCH_ERROR_UNSPECIFIED",
            "STATE_FETCH_ERROR_TIMEOUT"
          ],
          "enumDescriptions": [
            "Equivalent to no errors from fetching state (i.e. success).",
            "The time taken to fetch state exceeded the allowed maximum time."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1DeviceModelCapabilitiesOverride": {
      "description": "Device model capabilities override from client.",
      "id": "GoogleAssistantEmbeddedV1DeviceModelCapabilitiesOverride",
      "properties": {
        "deviceModelCapabilities": {
          "description": "Device model capabilities from client.",
          "format": "byte",
          "type": "string"
        },
        "updateMask": {
          "description": "If present, overrides only fields specified in the mask. When doing so, selected message and repeated fields will be replaced rather than merged. Performs a regular proto MergeFrom if no mask is specified.",
          "format": "google-fieldmask",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1FitnessActivities": {
      "description": "Contains information about on-device fitness activities for devices that support fitness.",
      "id": "GoogleAssistantEmbeddedV1FitnessActivities",
      "properties": {
        "fitnessActivities": {
          "description": "Information about all on-device activities.",
          "items": {
            "$ref": "GoogleAssistantEmbeddedV1FitnessActivity"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1FitnessActivity": {
      "description": "Describes a particular fitness activity, its current state, and other data fields associated with that activity (e.g. elapsed time). LINT.IfChange",
      "id": "GoogleAssistantEmbeddedV1FitnessActivity",
      "properties": {
        "activityId": {
          "description": "Required A string key used as an identifier for this activity. This key needs to be unique amongst all activities on the device. The client can choose a mechanism of its choice to ensure this. If the server suggests an activity_id, the client can either use the suggestion or create a new unique activity_id of its choosing.",
          "type": "string"
        },
        "mostRecentStartTime": {
          "description": "DEPRECATED: The most recent time this activity was switched to the ACTIVE state.",
          "format": "google-datetime",
          "type": "string"
        },
        "previouslyAccumulatedDuration": {
          "description": "DEPRECATED: The total amount of time this activity has spent in the ACTIVE state until the most recent start time. The total time spent active may be computed by summing (now - most_recent_start_time) with previously_accumulated_duration.",
          "format": "google-duration",
          "type": "string"
        },
        "state": {
          "description": "The current state of this activity.",
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "PAUSED"
          ],
          "enumDescriptions": [
            "The state is either unknown or unspecified.",
            "Indicates that this activity is currently in progress.",
            "Indicates that this activity has been paused (and may be resumed later). Activities in this state should not continue to increment 'elapsed_time' until moved back into the ACTIVE state."
          ],
          "type": "string"
        },
        "type": {
          "description": "The type of activity being done.",
          "enum": [
            "TYPE_UNSPECIFIED",
            "WALK",
            "RUN",
            "ELLIPTICAL",
            "SWIM",
            "WEIGHTS",
            "TREADMILL",
            "BIKE",
            "YOGA",
            "WORKOUT",
            "BOOT_CAMP",
            "CIRCUIT_TRAINING",
            "GOLF",
            "HIKING",
            "INTERVAL_TRAINING",
            "KICKBOXING",
            "MARTIAL_ARTS",
            "PILATES",
            "SPINNING",
            "STAIR_CLIMBING",
            "TENNIS",
            "AEROBICS",
            "CORE_TRAINING",
            "DANCING",
            "HIGH_INTENSITY_INTERVAL_TRAINING",
            "KAYAKING",
            "ROWING",
            "SKIING",
            "STANDUP_PADDLEBOARDING",
            "STRENGTH_TRAINING",
            "SNOWBOARDING"
          ],
          "enumDescriptions": [
            "The type is unknown.",
            "Represents a walking activity type.",
            "Represents a running activity type.",
            "Represents an elliptical activity type.",
            "Represents a swimming activity type.",
            "Represents a weightlifting activity type.",
            "Represents a treadmill activity type (e.g. walking/running on a treadmill).",
            "Represents a cycling activity type.",
            "Represents a yoga activity type.",
            "Represents a generic workout activity.",
            "Represents a bootcamp activity type.",
            "Represents a circuit training activity type.",
            "Represents a golf activity type.",
            "Represents a hiking activity type.",
            "Represents an interval training activity type.",
            "Represents a kickboxing activity type.",
            "Represents a martial arts activity type.",
            "Represents a pilates activity type.",
            "Represents a spinning(indoor cycling, stationary biking) activity type.",
            "Represents a stair climbing activity type.",
            "Represents a tennis activity type.",
            "Represents an aerobics activity type.",
            "Represents a core training activity type.",
            "Represents a dancing activity type.",
            "Represents a HIIT activity type.",
            "Represents a kayaking activity type.",
            "Represents a rowing activity type.",
            "Represents a skiing activity type.",
            "Represents a standup paddleboading(SUP) activity type.",
            "Represents a strength training activity type.",
            "Represents a snowboarding activity type."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1SurfaceIdentity": {
      "description": "Contains fields to identify the device which sent the request.",
      "id": "GoogleAssistantEmbeddedV1SurfaceIdentity",
      "properties": {
        "surfaceType": {
          "description": "Surface type that the device identifies as.",
          "enum": [
            "UNKNOWN_TYPE",
            "ACCL",
            "AGSA",
            "ANDROID",
            "ANDROID_AUTO",
            "ANDROID_LITE",
            "ANDROID_PHONE",
            "ANDROID_SCREENLESS",
            "ANDROID_SMART_DISPLAY",
            "ANDROID_TABLET",
            "ANDROID_THINGS",
            "ANDROID_THINGS_CUBE",
            "ANDROID_THINGS_JASPER",
            "ANDROID_TV",
            "ANDROID_WEAR",
            "ASSISTANT_KIT",
            "ASSISTANT_SDK",
            "AUTO",
            "CAST_OS",
            "CHROME_OS",
            "CHROMECAST_MANHATTAN",
            "CLOUD_DEVICE",
            "CROS",
            "FITBIT_OS_WATCH",
            "FITBIT_OS_WATCH_ANDROID",
            "FITBIT_OS_WATCH_IOS",
            "GOOGLE_HOME",
            "HEADPHONE",
            "HEADPHONE_ANDROID",
            "HEADPHONE_IOS",
            "IOPA",
            "IOS",
            "IOS_SCREENLESS",
            "IPAD",
            "IPHONE",
            "KAI_OS",
            "KAI_OS_AMA",
            "LIBASSISTANT",
            "PHONE",
            "PIXEL",
            "PIXEL5",
            "PIXEL6",
            "PIXEL7",
            "PIXEL_BUDS",
            "PIXEL_TABLET",
            "PIXEL_TABLET_HUB_MODE",
            "PIXEL_TABLET_PERSONAL_MODE",
            "PIXEL_WATCH",
            "SCREENLESS",
            "SMART_DISPLAY",
            "SPEAKER",
            "TABLET",
            "TELEPHONE",
            "THING",
            "WATCH",
            "WEAR_OS",
            "WEAR_OS_WATCH"
          ],
          "enumDescriptions": [
            "Unknown surface type.",
            "Android conversation client library (go/accl) is an Android library which implements the Conversation Protocol that allows a surface to have conversations with the Assistant server. OWNERS: surfaces-infra-core@",
            "Android Google Search App (go/agsa). OWNERS: surfaces-infra-core@",
            "Android. OWNERS: surfaces-infra-core@",
            "Assistant on Android Auto (go/ast-auto). OWNERS: opa-android-leads@",
            "Assistant on Android Go (not part of AGSA). OWNERS: assistantgo-eng@",
            "Assistant on Android phones accessed through the Google App (velvet). This surface is formerly known as OPA_AGSA. OWNERS: opa-android-leads@",
            "Assistant on Nexus with screen off/locked. Use go/bisto device to trigger. OWNERS: opa-android-leads@",
            "Assistant on Titan hub mode (go/titan-hubmode-surface). This is OPA Android first party Smart Display devices. The UI experience is built on Opal (Gallium and Flutter) and native Android. OWNERS: opa-android-leads@",
            "Assistant on Android tablet. OWNERS: opa-android-leads@",
            "Android Things (go/things). OWNERS: surfaces-infra-core@",
            "Lenovo Smart Clock v1, a stationary smart display device with a 4-inch screen, targeted for bedroom/bedside use cases like alarm, sleep tracking. Based on Android Things. See go/cube-home. OWNERS: cube-eng@",
            "Former codename for 3P 8-inch and 10-inch Smart Displays from Lenovo, JBL and LG, targeted for use in the kitchen. Based on Android Things. See go/jasper-home. OWNERS: jasper-eng@",
            "The Android platform that powers smart televisions, set-top-boxes, and over-the-top devices. See go/atv-eng and go/opa-tv. OWNERS: opa-tv-eng@",
            "Legacy Wear OS Assistant. OWNERS: wear-assistant-eng@",
            "AssistantKit (go/assistantkit) is a collection of iOS libraries allowing first party apps to integrate Google Assistant features. OWNERS: assistantkit-eng@",
            "Standalone gRPC based client. See go/easi. OWNERS: assistant-sdk-service-eng@",
            "Automobile. OWNERS: surfaces-infra-core@",
            "Cast OS (go/opal-castos-docs#what-is-castos). OWNERS: surfaces-infra-core@",
            "Chrome OS (go/chromsos) OWNERS: surfaces-infra-core@",
            "For chromecast with assistant + screen, e.g. Newman. OWNERS: cast-eng-platform@",
            "Virtual device for event-based triggering, e.g. executing time scheduled routines: go/scheduled-routines. OWNERS: surfaces-infra-core@",
            "Assistant on native Chrome OS (go/croissant). OWNERS: croissant@",
            "Assistant on Fitbit OS Watch. OWNERS: assistant-wearable-team@",
            "Assistant on Fitbit Watch paired with AGSA. OWNERS: assistant-wearable-team@",
            "Assistant on Fitbit Watch paired with iOPA. OWNERS: assistant-wearable-team@",
            "Google home speaker, i.e., Chirp devices. See go/assistant-speakers. OWNERS: assistant-speaker-leads@",
            "Headphone. OWNERS: surfaces-infra-core@",
            "Assistant on headphones paired with AGSA. OWNERS: assistant-wearable-team@",
            "Assistant on headphones paired with iOPA. OWNERS: assistant-wearable-team@",
            "Assistant on iOS devices (go/opa-ios). OWNERS: opa-ios-eng@",
            "iOS. OWNERS: surfaces-infra-core@",
            "Assistant on iOS with screen off/locked. Use go/bisto device to trigger. OWNERS: bisto-team@",
            "iPad devices. OWNERS: surfaces-infra-core@",
            "iPhone devices. OWNERS: surfaces-infra-core@",
            "Kai OS (go/kaios). OWNERS: surfaces-infra-core@",
            "Assistant on KaiOS (go/kaiosama). OWNERS: assistant-kaios-eng@",
            "LibAssistant (go/libassistant) C++ SDK that powers Assistant experience on both 1P devices like Google Home and 3P devices like Sonos. OWNERS: libassistant-core@",
            "A phone. OWNERS: surfaces-infra-core@",
            "Pixel devices. OWNERS: surfaces-infra-core@",
            "Pixel 5. OWNERS: surfaces-infra-core@",
            "Pixel 6. OWNERS: surfaces-infra-core@",
            "Pixel 7. OWNERS: surfaces-infra-core@",
            "Assistant on Pixel Buds. OWNERS: assistant-wearable-team@",
            "Assistant on Pixel Tablet/Tangor (a.k.a, TK). OWNERS: assistant-display-eng@",
            "Assistant on Tangor running in Hub mode. OWNERS: assistant-display-eng@",
            "Assistant on Tangor running in Personal mode. OWNERS: assistant-display-eng@",
            "Assistant on Pixel Watch (a.k.a., Rohan). OWNERS: assistant-wearable-team@",
            "Devices with screen off or locked (go/bisto). OWNERS: surfaces-infra-core@",
            "Smart surface, such as Titan. OWNERS: surfaces-infra-core@",
            "A speaker. OWNERS: surfaces-infra-core@",
            "A tablet. OWNERS: surfaces-infra-core@",
            "Assistant on a phone call (go/telephone). OWNERS: telephone-assistant-eng@",
            "IoT device. OWNERS: surfaces-infra-core@",
            "Watch. OWNERS: surfaces-infra-core@",
            "Wear OS. OWNERS: surfaces-infra-core@",
            "Assistant on Wear OS Watch (a.k.a., Edoras). OWNERS: assistant-wearable-team@"
          ],
          "type": "string"
        },
        "userAgentSuffix": {
          "description": "* Fully formed user agent suffix string.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1Timer": {
      "description": "Conceptually, timers are clocks that count down from an initial duration and ring when they reach 0. In practice, as a timer is running, it holds a stable expiration time and computes the remaining duration using the current time. When a timer is paused, it holds a stable remaining duration.",
      "id": "GoogleAssistantEmbeddedV1Timer",
      "properties": {
        "expireTime": {
          "description": "The time the timer is scheduled to expire. google.protobuf.Timestamp is a Unix epoch time with a granularity of 1 nanosecond.",
          "format": "google-datetime",
          "type": "string"
        },
        "label": {
          "description": "A user-provided name for this timer.",
          "type": "string"
        },
        "originalDuration": {
          "description": "The duration of the timer when it was started. For the ADD_TIME action, this field contains the amount of time to add to the timer with the given timer_id.",
          "format": "google-duration",
          "type": "string"
        },
        "remainingDuration": {
          "description": "The remaining duration for the timer.",
          "format": "google-duration",
          "type": "string"
        },
        "status": {
          "description": "Describes the part of the lifecycle a timer is in.",
          "enum": [
            "TIMER_STATUS_UNSPECIFIED",
            "RUNNING",
            "PAUSED",
            "FIRING"
          ],
          "enumDescriptions": [
            "",
            "The timer is currently counting down.",
            "The timer is currently paused.",
            "The timer has expired and is ringing."
          ],
          "type": "string"
        },
        "timerId": {
          "description": "A string key used as an identifier to this timer. This key needs to be unique amongst all timers on the device. The client can choose a mechanism of its choice to ensure this. If the server suggests a timer_id, the client can either use the suggestion or create a new unique timer_id of its choosing.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleAssistantEmbeddedV1Timers": {
      "description": "Contains information about on-device timers for devices that support timers.",
      "id": "GoogleAssistantEmbeddedV1Timers",
      "properties": {
        "stateFetchError": {
          "description": "Indicates if an error occurred while fetching timer state. If this value is missing, it can be assumed that the state fetch was successful.",
          "enum": [
            "STATE_FETCH_ERROR_UNSPECIFIED",
            "STATE_FETCH_ERROR_TIMEOUT"
          ],
          "enumDescriptions": [
            "Equivalent to no errors from fetching state (i.e. success).",
            "The time taken to fetch state exceeded the allowed maximum time."
          ],
          "type": "string"
        },
        "timers": {
          "description": "Information about all on-device timers.",
          "items": {
            "$ref": "GoogleAssistantEmbeddedV1Timer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1AccessControlAction": {
      "description": "Represents the action responsible for access control list management operations.",
      "id": "GoogleCloudContentwarehouseV1AccessControlAction",
      "properties": {
        "operationType": {
          "description": "Identifies the type of operation.",
          "enum": [
            "UNKNOWN",
            "ADD_POLICY_BINDING",
            "REMOVE_POLICY_BINDING",
            "REPLACE_POLICY_BINDING"
          ],
          "enumDescriptions": [
            "The unknown operation type.",
            "Adds newly given policy bindings in the existing bindings list.",
            "Removes newly given policy bindings from the existing bindings list.",
            "Replaces existing policy bindings with the given policy binding list"
          ],
          "type": "string"
        },
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "Represents the new policy from which bindings are added, removed or replaced based on the type of the operation. the policy is limited to a few 10s of KB."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Action": {
      "description": "Represents the action triggered by Rule Engine when the rule is true.",
      "id": "GoogleCloudContentwarehouseV1Action",
      "properties": {
        "accessControl": {
          "$ref": "GoogleCloudContentwarehouseV1AccessControlAction",
          "description": "Action triggering access control operations."
        },
        "actionId": {
          "description": "ID of the action. Managed internally.",
          "type": "string"
        },
        "addToFolder": {
          "$ref": "GoogleCloudContentwarehouseV1AddToFolderAction",
          "description": "Action triggering create document link operation."
        },
        "dataUpdate": {
          "$ref": "GoogleCloudContentwarehouseV1DataUpdateAction",
          "description": "Action triggering data update operations."
        },
        "dataValidation": {
          "$ref": "GoogleCloudContentwarehouseV1DataValidationAction",
          "description": "Action triggering data validation operations."
        },
        "deleteDocumentAction": {
          "$ref": "GoogleCloudContentwarehouseV1DeleteDocumentAction",
          "description": "Action deleting the document."
        },
        "publishToPubSub": {
          "$ref": "GoogleCloudContentwarehouseV1PublishAction",
          "description": "Action publish to Pub/Sub operation."
        },
        "removeFromFolderAction": {
          "$ref": "GoogleCloudContentwarehouseV1RemoveFromFolderAction",
          "description": "Action removing a document from a folder."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ActionExecutorOutput": {
      "description": "Represents the output of the Action Executor.",
      "id": "GoogleCloudContentwarehouseV1ActionExecutorOutput",
      "properties": {
        "ruleActionsPairs": {
          "description": "List of rule and corresponding actions result.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1RuleActionsPair"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ActionOutput": {
      "description": "Represents the result of executing an action.",
      "id": "GoogleCloudContentwarehouseV1ActionOutput",
      "properties": {
        "actionId": {
          "description": "ID of the action.",
          "type": "string"
        },
        "actionState": {
          "description": "State of an action.",
          "enum": [
            "UNKNOWN",
            "ACTION_SUCCEEDED",
            "ACTION_FAILED",
            "ACTION_TIMED_OUT",
            "ACTION_PENDING"
          ],
          "enumDescriptions": [
            "The unknown state.",
            "State indicating action executed successfully.",
            "State indicating action failed.",
            "State indicating action timed out.",
            "State indicating action is pending."
          ],
          "type": "string"
        },
        "outputMessage": {
          "description": "Action execution output message.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1AddToFolderAction": {
      "description": "Represents the action responsible for adding document under a folder.",
      "id": "GoogleCloudContentwarehouseV1AddToFolderAction",
      "properties": {
        "folders": {
          "description": "Names of the folder under which new document is to be added. Format: projects/{project_number}/locations/{location}/documents/{document_id}.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CloudAIDocumentOption": {
      "description": "Request Option for processing Cloud AI Document in CW Document.",
      "id": "GoogleCloudContentwarehouseV1CloudAIDocumentOption",
      "properties": {
        "customizedEntitiesPropertiesConversions": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "If set, only selected entities will be converted to properties.",
          "type": "object"
        },
        "enableEntitiesConversions": {
          "description": "Whether to convert all the entities to properties.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Collection": {
      "description": "Defines the structure for content warehouse collection proto.",
      "id": "GoogleCloudContentwarehouseV1Collection",
      "properties": {
        "allowLinkDocuments": {
          "description": "Whether allow the collection to link to documents. Cannot be updated after the collection is created.",
          "type": "boolean"
        },
        "attributes": {
          "additionalProperties": {
            "description": "Properties of the object.",
            "type": "any"
          },
          "description": "Other collection attributes for the use cases.",
          "type": "object"
        },
        "collectionType": {
          "description": "Indicate this collection\u2019s type.",
          "enum": [
            "COLLECTION_TYPE_UNSPECIFIED",
            "DATASET",
            "RECORD_SET",
            "WORK_QUEUE",
            "WORKFLOW",
            "LEGAL_HOLD"
          ],
          "enumDescriptions": [
            "Not specified.",
            "Dataset collection.",
            "Record set collection.",
            "Queue collection. E.g. a queue for human review.",
            "The working collection for a workflow. One workflow has one collection.",
            "Legal hold collection."
          ],
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The time when the document is created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the collection given by the user.",
          "type": "string"
        },
        "name": {
          "description": "The resource name of the collection. Format: projects/{project_number}/locations/{location}/collections/{collection}. The name is ignored when creating a collection.",
          "type": "string"
        },
        "parentCollectionId": {
          "description": "The parent collection ID of the collection. One collection only can have one parent collection, and they should be in the same project and location.",
          "type": "string"
        },
        "revokeDocEditPermission": {
          "description": "If it is true, after adding the document to the collection, the users with document edit permission will only have view permission. Can not be updated after the collection is created.",
          "type": "boolean"
        },
        "updateTime": {
          "description": "Output only. The time when the document is last updated.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CollectionQuery": {
      "description": "The query string that matches against the collections.",
      "id": "GoogleCloudContentwarehouseV1CollectionQuery",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CreateDocumentLinkRequest": {
      "description": "Request message for DocumentLinkService.CreateDocumentLink.",
      "id": "GoogleCloudContentwarehouseV1CreateDocumentLinkRequest",
      "properties": {
        "documentLink": {
          "$ref": "GoogleCloudContentwarehouseV1DocumentLink",
          "description": "Required. Document links associated with the source documents (source_document_id)."
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the document creator, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CreateDocumentMetadata": {
      "description": "Metadata object for CreateDocument request (currently empty).",
      "id": "GoogleCloudContentwarehouseV1CreateDocumentMetadata",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CreateDocumentRequest": {
      "description": "Request message for DocumentService.CreateDocument.",
      "id": "GoogleCloudContentwarehouseV1CreateDocumentRequest",
      "properties": {
        "cloudAiDocumentOption": {
          "$ref": "GoogleCloudContentwarehouseV1CloudAIDocumentOption",
          "description": "Request Option for processing Cloud AI Document in Document Warehouse. This field offers limited support for mapping entities from Cloud AI Document to Warehouse Document. Please consult with product team before using this field and other available options."
        },
        "createMask": {
          "description": "Field mask for creating Document fields. If mask path is empty, it means all fields are masked. For the `FieldMask` definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask.",
          "format": "google-fieldmask",
          "type": "string"
        },
        "document": {
          "$ref": "GoogleCloudContentwarehouseV1Document",
          "description": "Required. The document to create."
        },
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "Default document policy during creation. This refers to an Identity and Access (IAM) policy, which specifies access controls for the Document. Conditions defined in the policy will be ignored."
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CreateDocumentResponse": {
      "description": "Response message for DocumentService.CreateDocument.",
      "id": "GoogleCloudContentwarehouseV1CreateDocumentResponse",
      "properties": {
        "document": {
          "$ref": "GoogleCloudContentwarehouseV1Document",
          "description": "Document created after executing create request."
        },
        "longRunningOperations": {
          "description": "post-processing LROs",
          "items": {
            "$ref": "GoogleLongrunningOperation"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation, such as the request tracking id."
        },
        "ruleEngineOutput": {
          "$ref": "GoogleCloudContentwarehouseV1RuleEngineOutput",
          "description": "Output from Rule Engine recording the rule evaluator and action executor's output. Refer format in: google/cloud/contentwarehouse/v1/rule_engine.proto"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1CustomWeightsMetadata": {
      "description": "To support the custom weighting across document schemas.",
      "id": "GoogleCloudContentwarehouseV1CustomWeightsMetadata",
      "properties": {
        "weightedSchemaProperties": {
          "description": "List of schema and property name. Allows a maximum of 10 schemas to be specified for relevance boosting.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1WeightedSchemaProperty"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DataUpdateAction": {
      "description": "Represents the action responsible for properties update operations.",
      "id": "GoogleCloudContentwarehouseV1DataUpdateAction",
      "properties": {
        "entries": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Map of (K, V) -> (valid name of the field, new value of the field) E.g., (\"age\", \"60\") entry triggers update of field age with a value of 60. If the field is not present then new entry is added. During update action execution, value strings will be casted to appropriate types.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DataValidationAction": {
      "description": "Represents the action responsible for data validation operations.",
      "id": "GoogleCloudContentwarehouseV1DataValidationAction",
      "properties": {
        "conditions": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Map of (K, V) -> (field, string condition to be evaluated on the field) E.g., (\"age\", \"age > 18 && age < 60\") entry triggers validation of field age with the given condition. Map entries will be ANDed during validation.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DateTimeArray": {
      "description": "DateTime values.",
      "id": "GoogleCloudContentwarehouseV1DateTimeArray",
      "properties": {
        "values": {
          "description": "List of datetime values. Both OffsetDateTime and ZonedDateTime are supported.",
          "items": {
            "$ref": "GoogleTypeDateTime"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DateTimeTypeOptions": {
      "description": "Configurations for a date time property.",
      "id": "GoogleCloudContentwarehouseV1DateTimeTypeOptions",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DeleteDocumentAction": {
      "description": "Represents the action responsible for deleting the document.",
      "id": "GoogleCloudContentwarehouseV1DeleteDocumentAction",
      "properties": {
        "enableHardDelete": {
          "description": "Boolean field to select between hard vs soft delete options. Set 'true' for 'hard delete' and 'false' for 'soft delete'.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DeleteDocumentLinkRequest": {
      "description": "Request message for DocumentLinkService.DeleteDocumentLink.",
      "id": "GoogleCloudContentwarehouseV1DeleteDocumentLinkRequest",
      "properties": {
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the document creator, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DeleteDocumentRequest": {
      "description": "Request message for DocumentService.DeleteDocument.",
      "id": "GoogleCloudContentwarehouseV1DeleteDocumentRequest",
      "properties": {
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Document": {
      "description": "Defines the structure for content warehouse document proto.",
      "id": "GoogleCloudContentwarehouseV1Document",
      "properties": {
        "cloudAiDocument": {
          "$ref": "GoogleCloudDocumentaiV1Document",
          "description": "Document AI format to save the structured content, including OCR."
        },
        "contentCategory": {
          "description": "Indicates the category (image, audio, video etc.) of the original content.",
          "enum": [
            "CONTENT_CATEGORY_UNSPECIFIED",
            "CONTENT_CATEGORY_IMAGE",
            "CONTENT_CATEGORY_AUDIO",
            "CONTENT_CATEGORY_VIDEO"
          ],
          "enumDescriptions": [
            "No category is specified.",
            "Content is of image type.",
            "Content is of audio type.",
            "Content is of video type."
          ],
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The time when the document is created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "creator": {
          "description": "The user who creates the document.",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the document given by the user. This name will be displayed in the UI. Customer can populate this field with the name of the document. This differs from the 'title' field as 'title' is optional and stores the top heading in the document.",
          "type": "string"
        },
        "displayUri": {
          "description": "Uri to display the document, for example, in the UI.",
          "type": "string"
        },
        "documentSchemaName": {
          "description": "The Document schema name. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}.",
          "type": "string"
        },
        "inlineRawDocument": {
          "description": "Raw document content.",
          "format": "byte",
          "type": "string"
        },
        "name": {
          "description": "The resource name of the document. Format: projects/{project_number}/locations/{location}/documents/{document_id}. The name is ignored when creating a document.",
          "type": "string"
        },
        "plainText": {
          "description": "Other document format, such as PPTX, XLXS",
          "type": "string"
        },
        "properties": {
          "description": "List of values that are user supplied metadata.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1Property"
          },
          "type": "array"
        },
        "rawDocumentFileType": {
          "description": "This is used when DocAI was not used to load the document and parsing/ extracting is needed for the inline_raw_document. For example, if inline_raw_document is the byte representation of a PDF file, then this should be set to: RAW_DOCUMENT_FILE_TYPE_PDF.",
          "enum": [
            "RAW_DOCUMENT_FILE_TYPE_UNSPECIFIED",
            "RAW_DOCUMENT_FILE_TYPE_PDF",
            "RAW_DOCUMENT_FILE_TYPE_DOCX",
            "RAW_DOCUMENT_FILE_TYPE_XLSX",
            "RAW_DOCUMENT_FILE_TYPE_PPTX",
            "RAW_DOCUMENT_FILE_TYPE_TEXT",
            "RAW_DOCUMENT_FILE_TYPE_TIFF"
          ],
          "enumDescriptions": [
            "No raw document specified or it is non-parsable",
            "Adobe PDF format",
            "Microsoft Word format",
            "Microsoft Excel format",
            "Microsoft Powerpoint format",
            "UTF-8 encoded text format",
            "TIFF or TIF image file format"
          ],
          "type": "string"
        },
        "rawDocumentPath": {
          "description": "Raw document file in Cloud Storage path.",
          "type": "string"
        },
        "referenceId": {
          "description": "The reference ID set by customers. Must be unique per project and location.",
          "type": "string"
        },
        "textExtractionDisabled": {
          "description": "If true, text extraction will not be performed.",
          "type": "boolean"
        },
        "textExtractionEnabled": {
          "description": "If true, text extraction will be performed.",
          "type": "boolean"
        },
        "title": {
          "description": "Title that describes the document. This can be the top heading or text that describes the document.",
          "type": "string"
        },
        "updateTime": {
          "description": "Output only. The time when the document is last updated.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "updater": {
          "description": "The user who lastly updates the document.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DocumentLink": {
      "description": "A document-link between source and target document.",
      "id": "GoogleCloudContentwarehouseV1DocumentLink",
      "properties": {
        "createTime": {
          "description": "Output only. The time when the documentLink is created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "Description of this document-link.",
          "type": "string"
        },
        "name": {
          "description": "Name of this document-link. It is required that the parent derived form the name to be consistent with the source document reference. Otherwise an exception will be thrown. Format: projects/{project_number}/locations/{location}/documents/{source_document_id}/documentLinks/{document_link_id}.",
          "type": "string"
        },
        "sourceDocumentReference": {
          "$ref": "GoogleCloudContentwarehouseV1DocumentReference",
          "description": "Document references of the source document."
        },
        "state": {
          "description": "The state of the documentlink. If target node has been deleted, the link is marked as invalid. Removing a source node will result in removal of all associated links.",
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "SOFT_DELETED"
          ],
          "enumDescriptions": [
            "Unknown state of documentlink.",
            "The documentlink has both source and target documents detected.",
            "Target document is deleted, and mark the documentlink as soft-deleted."
          ],
          "type": "string"
        },
        "targetDocumentReference": {
          "$ref": "GoogleCloudContentwarehouseV1DocumentReference",
          "description": "Document references of the target document."
        },
        "updateTime": {
          "description": "Output only. The time when the documentLink is last updated.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DocumentQuery": {
      "id": "GoogleCloudContentwarehouseV1DocumentQuery",
      "properties": {
        "customPropertyFilter": {
          "description": "This filter specifies a structured syntax to match against the [PropertyDefinition].is_filterable marked as `true`. The syntax for this expression is a subset of SQL syntax. Supported operators are: `=`, `!=`, `<`, `<=`, `>`, and `>=` where the left of the operator is a property name and the right of the operator is a number or a quoted string. You must escape backslash (\\\\) and quote (\\\") characters. Supported functions are `LOWER([property_name])` to perform a case insensitive match and `EMPTY([property_name])` to filter on the existence of a key. Boolean expressions (AND/OR/NOT) are supported up to 3 levels of nesting (for example, \"((A AND B AND C) OR NOT D) AND E\"), a maximum of 100 comparisons or functions are allowed in the expression. The expression must be < 6000 bytes in length. Sample Query: `(LOWER(driving_license)=\"class \\\"a\\\"\" OR EMPTY(driving_license)) AND driving_years > 10`",
          "type": "string"
        },
        "customWeightsMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1CustomWeightsMetadata",
          "description": "To support the custom weighting across document schemas, customers need to provide the properties to be used to boost the ranking in the search request. For a search query with CustomWeightsMetadata specified, only the RetrievalImportance for the properties in the CustomWeightsMetadata will be honored."
        },
        "documentCreatorFilter": {
          "description": "The exact creator(s) of the documents to search against. If a value isn't specified, documents within the search results are associated with any creator. If multiple values are specified, documents within the search results may be associated with any of the specified creators.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "documentSchemaNames": {
          "description": "This filter specifies the exact document schema Document.document_schema_name of the documents to search against. If a value isn't specified, documents within the search results are associated with any schema. If multiple values are specified, documents within the search results may be associated with any of the specified schemas. At most 20 document schema names are allowed.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "fileTypeFilter": {
          "$ref": "GoogleCloudContentwarehouseV1FileTypeFilter",
          "description": "This filter specifies the types of files to return: ALL, FOLDER, or FILE. If FOLDER or FILE is specified, then only either folders or files will be returned, respectively. If ALL is specified, both folders and files will be returned. If no value is specified, ALL files will be returned."
        },
        "folderNameFilter": {
          "description": "Search all the documents under this specified folder. Format: projects/{project_number}/locations/{location}/documents/{document_id}.",
          "type": "string"
        },
        "isNlQuery": {
          "description": "Experimental, do not use. If the query is a natural language question. False by default. If true, then the question-answering feature will be used instead of search, and `result_count` in SearchDocumentsRequest must be set. In addition, all other input fields related to search (pagination, histograms, etc.) will be ignored.",
          "type": "boolean"
        },
        "propertyFilter": {
          "description": "This filter specifies a structured syntax to match against the PropertyDefinition.is_filterable marked as `true`. The relationship between the PropertyFilters is OR.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1PropertyFilter"
          },
          "type": "array"
        },
        "query": {
          "description": "The query string that matches against the full text of the document and the searchable properties. The query partially supports [Google AIP style syntax](https://google.aip.dev/160). Specifically, the query supports literals, logical operators, negation operators, comparison operators, and functions. Literals: A bare literal value (examples: \"42\", \"Hugo\") is a value to be matched against. It searches over the full text of the document and the searchable properties. Logical operators: \"AND\", \"and\", \"OR\", and \"or\" are binary logical operators (example: \"engineer OR developer\"). Negation operators: \"NOT\" and \"!\" are negation operators (example: \"NOT software\"). Comparison operators: support the binary comparison operators =, !=, <, >, <= and >= for string, numeric, enum, boolean. Also support like operator `~~` for string. It provides semantic search functionality by parsing, stemming and doing synonyms expansion against the input query. To specify a property in the query, the left hand side expression in the comparison must be the property ID including the parent. The right hand side must be literals. For example: \"\\\"projects/123/locations/us\\\".property_a < 1\" matches results whose \"property_a\" is less than 1 in project 123 and us location. The literals and comparison expression can be connected in a single query (example: \"software engineer \\\"projects/123/locations/us\\\".salary > 100\"). Functions: supported functions are `LOWER([property_name])` to perform a case insensitive match and `EMPTY([property_name])` to filter on the existence of a key. Support nested expressions connected using parenthesis and logical operators. The default logical operators is `AND` if there is no operators between expressions. The query can be used with other filters e.g. `time_filters` and `folder_name_filter`. They are connected with `AND` operator under the hood. The maximum number of allowed characters is 255.",
          "type": "string"
        },
        "queryContext": {
          "description": "For custom synonyms. Customers provide the synonyms based on context. One customer can provide multiple set of synonyms based on different context. The search query will be expanded based on the custom synonyms of the query context set. By default, no custom synonyms wll be applied if no query context is provided. It is not supported for CMEK compliant deployment.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "timeFilters": {
          "description": "Documents created/updated within a range specified by this filter are searched against.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1TimeFilter"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DocumentReference": {
      "description": "References to the documents.",
      "id": "GoogleCloudContentwarehouseV1DocumentReference",
      "properties": {
        "createTime": {
          "description": "Output only. The time when the document is created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "deleteTime": {
          "description": "Output only. The time when the document is deleted.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "display_name of the referenced document; this name does not need to be consistent to the display_name in the Document proto, depending on the ACL constraint.",
          "type": "string"
        },
        "documentIsFolder": {
          "description": "The document type of the document being referenced.",
          "type": "boolean"
        },
        "documentName": {
          "description": "Required. Name of the referenced document.",
          "type": "string"
        },
        "snippet": {
          "description": "Stores the subset of the referenced document's content. This is useful to allow user peek the information of the referenced document.",
          "type": "string"
        },
        "updateTime": {
          "description": "Output only. The time when the document is last updated.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1DocumentSchema": {
      "description": "A document schema used to define document structure.",
      "id": "GoogleCloudContentwarehouseV1DocumentSchema",
      "properties": {
        "createTime": {
          "description": "Output only. The time when the document schema is created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "Schema description.",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Name of the schema given by the user. Must be unique per project.",
          "type": "string"
        },
        "documentIsFolder": {
          "description": "Document Type, true refers the document is a folder, otherwise it is a typical document.",
          "type": "boolean"
        },
        "name": {
          "description": "The resource name of the document schema. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}. The name is ignored when creating a document schema.",
          "type": "string"
        },
        "propertyDefinitions": {
          "description": "Document details.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1PropertyDefinition"
          },
          "type": "array"
        },
        "updateTime": {
          "description": "Output only. The time when the document schema is last updated.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1EnumArray": {
      "description": "Enum values.",
      "id": "GoogleCloudContentwarehouseV1EnumArray",
      "properties": {
        "values": {
          "description": "List of enum values.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1EnumTypeOptions": {
      "description": "Configurations for an enum/categorical property.",
      "id": "GoogleCloudContentwarehouseV1EnumTypeOptions",
      "properties": {
        "possibleValues": {
          "description": "Required. List of possible enum values.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "validationCheckDisabled": {
          "description": "Make sure the Enum property value provided in the document is in the possile value list during document creation. The validation check runs by default.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1EnumValue": {
      "description": "Represents the string value of the enum field.",
      "id": "GoogleCloudContentwarehouseV1EnumValue",
      "properties": {
        "value": {
          "description": "String value of the enum field. This must match defined set of enums in document schema using EnumTypeOptions.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ExportToCdwPipeline": {
      "description": "The configuration of exporting documents from the Document Warehouse to CDW pipeline.",
      "id": "GoogleCloudContentwarehouseV1ExportToCdwPipeline",
      "properties": {
        "docAiDataset": {
          "description": "The CDW dataset resource name. Format: projects/{project}/locations/{location}/processors/{processor}/dataset",
          "type": "string"
        },
        "documents": {
          "description": "The list of all the resource names of the documents to be processed. Format: projects/{project_number}/locations/{location}/documents/{document_id}.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "exportFolderPath": {
          "description": "The Cloud Storage folder path used to store the exported documents before being sent to CDW. Format: gs:///.",
          "type": "string"
        },
        "trainingSplitRatio": {
          "description": "Ratio of training dataset split. When importing into Document AI Workbench, documents will be automatically split into training and test split category with the specified ratio.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FetchAclRequest": {
      "description": "Request message for DocumentService.FetchAcl",
      "id": "GoogleCloudContentwarehouseV1FetchAclRequest",
      "properties": {
        "projectOwner": {
          "description": "For Get Project ACL only. Authorization check for end user will be ignored when project_owner=true.",
          "type": "boolean"
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FetchAclResponse": {
      "description": "Response message for DocumentService.FetchAcl.",
      "id": "GoogleCloudContentwarehouseV1FetchAclResponse",
      "properties": {
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation, such as the request tracking id."
        },
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "The IAM policy."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FetchCollectionAclRequest": {
      "description": "Request message for CollectionService.FetchAcl",
      "id": "GoogleCloudContentwarehouseV1FetchCollectionAclRequest",
      "properties": {
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FetchCollectionAclResponse": {
      "description": "Response message for CollectionService.FetchAcl.",
      "id": "GoogleCloudContentwarehouseV1FetchCollectionAclResponse",
      "properties": {
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation."
        },
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "The IAM policy."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FileTypeFilter": {
      "description": "Filter for the specific types of documents returned.",
      "id": "GoogleCloudContentwarehouseV1FileTypeFilter",
      "properties": {
        "fileType": {
          "description": "The type of files to return.",
          "enum": [
            "FILE_TYPE_UNSPECIFIED",
            "ALL",
            "FOLDER",
            "DOCUMENT"
          ],
          "enumDescriptions": [
            "Default document type. If set, disables the filter.",
            "Returns all document types, including folders.",
            "Returns only folders.",
            "Returns only non-folder documents."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FloatArray": {
      "description": "Float values.",
      "id": "GoogleCloudContentwarehouseV1FloatArray",
      "properties": {
        "values": {
          "description": "List of float values.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1FloatTypeOptions": {
      "description": "Configurations for a float property.",
      "id": "GoogleCloudContentwarehouseV1FloatTypeOptions",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1GcsIngestPipeline": {
      "description": "The configuration of the Cloud Storage ingestion pipeline.",
      "id": "GoogleCloudContentwarehouseV1GcsIngestPipeline",
      "properties": {
        "inputPath": {
          "description": "The input Cloud Storage folder. All files under this folder will be imported to Document Warehouse. Format: gs:///.",
          "type": "string"
        },
        "processorType": {
          "description": "The Doc AI processor type name. Only used when the format of ingested files is Doc AI Document proto format. Reference: https://source.corp.google.com/piper///depot/google3/cloud/ai/documentai/core/c/proto/processor.proto;l=21",
          "type": "string"
        },
        "schemaName": {
          "description": "The Document Warehouse schema resource name. All documents processed by this pipeline will use this schema. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1GcsIngestWithDocAiProcessorsPipeline": {
      "description": "The configuration of the document classify/split and entity/kvp extraction pipeline.",
      "id": "GoogleCloudContentwarehouseV1GcsIngestWithDocAiProcessorsPipeline",
      "properties": {
        "extractProcessorInfos": {
          "description": "The extract processors information. One matched extract processor will be used to process documents based on the classify processor result. If no classify processor is specificied, the first extract processor will be used.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1ProcessorInfo"
          },
          "type": "array"
        },
        "inputPath": {
          "description": "The input Cloud Storage folder. All files under this folder will be imported to Document Warehouse. Format: gs:///.",
          "type": "string"
        },
        "processorResultsFolderPath": {
          "description": "The Cloud Storage folder path used to store the raw results from processors. Format: gs:///.",
          "type": "string"
        },
        "splitClassifyProcessorInfo": {
          "$ref": "GoogleCloudContentwarehouseV1ProcessorInfo",
          "description": "The split and classify processor information. The split and classify result will be used to find a matched extract processor."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1GetDocumentRequest": {
      "description": "Request message for DocumentService.GetDocument.",
      "id": "GoogleCloudContentwarehouseV1GetDocumentRequest",
      "properties": {
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1HistogramQuery": {
      "description": "The histogram request.",
      "id": "GoogleCloudContentwarehouseV1HistogramQuery",
      "properties": {
        "filters": {
          "$ref": "GoogleCloudContentwarehouseV1HistogramQueryPropertyNameFilter",
          "description": "Optional. Filter the result of histogram query by the property names. It only works with histogram query count('FilterableProperties'). It is an optional. It will perform histogram on all the property names for all the document schemas. Setting this field will have a better performance."
        },
        "histogramQuery": {
          "description": "An expression specifies a histogram request against matching documents for searches. See SearchDocumentsRequest.histogram_queries for details about syntax.",
          "type": "string"
        },
        "requirePreciseResultSize": {
          "description": "Controls if the histogram query requires the return of a precise count. Enable this flag may adversely impact performance. Defaults to true.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1HistogramQueryPropertyNameFilter": {
      "id": "GoogleCloudContentwarehouseV1HistogramQueryPropertyNameFilter",
      "properties": {
        "documentSchemas": {
          "description": "This filter specifies the exact document schema(s) Document.document_schema_name to run histogram query against. It is optional. It will perform histogram for property names for all the document schemas if it is not set. At most 10 document schema names are allowed. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "propertyNames": {
          "description": "It is optional. It will perform histogram for all the property names if it is not set. The properties need to be defined with the is_filterable flag set to true and the name of the property should be in the format: \"schemaId.propertyName\". The property needs to be defined in the schema. Example: the schema id is abc. Then the name of property for property MORTGAGE_TYPE will be \"abc.MORTGAGE_TYPE\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "yAxis": {
          "description": "By default, the y_axis is HISTOGRAM_YAXIS_DOCUMENT if this field is not set.",
          "enum": [
            "HISTOGRAM_YAXIS_DOCUMENT",
            "HISTOGRAM_YAXIS_PROPERTY"
          ],
          "enumDescriptions": [
            "Count the documents per property name.",
            "Count the properties per property name."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1HistogramQueryResult": {
      "description": "Histogram result that matches HistogramQuery specified in searches.",
      "id": "GoogleCloudContentwarehouseV1HistogramQueryResult",
      "properties": {
        "histogram": {
          "additionalProperties": {
            "format": "int64",
            "type": "string"
          },
          "description": "A map from the values of the facet associated with distinct values to the number of matching entries with corresponding value. The key format is: * (for string histogram) string values stored in the field.",
          "type": "object"
        },
        "histogramQuery": {
          "description": "Requested histogram expression.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1InitializeProjectRequest": {
      "description": "Request message for projectService.InitializeProject",
      "id": "GoogleCloudContentwarehouseV1InitializeProjectRequest",
      "properties": {
        "accessControlMode": {
          "description": "Required. The access control mode for accessing the customer data",
          "enum": [
            "ACL_MODE_UNKNOWN",
            "ACL_MODE_UNIVERSAL_ACCESS",
            "ACL_MODE_DOCUMENT_LEVEL_ACCESS_CONTROL_BYOID",
            "ACL_MODE_DOCUMENT_LEVEL_ACCESS_CONTROL_GCI"
          ],
          "enumDescriptions": [
            "This value is required by protobuf best practices",
            "Universal Access: No document level access control.",
            "Document level access control with customer own Identity Service.",
            "Document level access control using Google Cloud Identity."
          ],
          "type": "string"
        },
        "databaseType": {
          "description": "Required. The type of database used to store customer data",
          "enum": [
            "DB_UNKNOWN",
            "DB_INFRA_SPANNER",
            "DB_CLOUD_SQL_POSTGRES"
          ],
          "enumDescriptions": [
            "This value is required by protobuf best practices",
            "Internal Spanner",
            "Cloud Sql with a Postgres Sql instance"
          ],
          "type": "string"
        },
        "documentCreatorDefaultRole": {
          "description": "Optional. The default role for the person who create a document.",
          "enum": [
            "DOCUMENT_CREATOR_DEFAULT_ROLE_UNSPECIFIED",
            "DOCUMENT_ADMIN",
            "DOCUMENT_EDITOR",
            "DOCUMENT_VIEWER"
          ],
          "enumDescriptions": [
            "Unspecified, will be default to document admin role.",
            "Document Admin, same as contentwarehouse.googleapis.com/documentAdmin.",
            "Document Editor, same as contentwarehouse.googleapis.com/documentEditor.",
            "Document Viewer, same as contentwarehouse.googleapis.com/documentViewer."
          ],
          "type": "string"
        },
        "kmsKey": {
          "description": "Optional. The KMS key used for CMEK encryption. It is required that the kms key is in the same region as the endpoint. The same key will be used for all provisioned resources, if encryption is available. If the kms_key is left empty, no encryption will be enforced.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1InitializeProjectResponse": {
      "description": "Response message for projectService.InitializeProject",
      "id": "GoogleCloudContentwarehouseV1InitializeProjectResponse",
      "properties": {
        "message": {
          "description": "The message of the project initialization process.",
          "type": "string"
        },
        "state": {
          "description": "The state of the project initialization process.",
          "enum": [
            "STATE_UNSPECIFIED",
            "SUCCEEDED",
            "FAILED",
            "CANCELLED",
            "RUNNING"
          ],
          "enumDescriptions": [
            "Clients should never see this.",
            "Finished project initialization without error.",
            "Finished project initialization with an error.",
            "Client canceled the LRO.",
            "Ask the customer to check the operation for results."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1IntegerArray": {
      "description": "Integer values.",
      "id": "GoogleCloudContentwarehouseV1IntegerArray",
      "properties": {
        "values": {
          "description": "List of integer values.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1IntegerTypeOptions": {
      "description": "Configurations for an integer property.",
      "id": "GoogleCloudContentwarehouseV1IntegerTypeOptions",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1InvalidRule": {
      "description": "A triggered rule that failed the validation check(s) after parsing.",
      "id": "GoogleCloudContentwarehouseV1InvalidRule",
      "properties": {
        "error": {
          "description": "Validation error on a parsed expression.",
          "type": "string"
        },
        "rule": {
          "$ref": "GoogleCloudContentwarehouseV1Rule",
          "description": "Triggered rule."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Link": {
      "description": "Defines the structure for content warehouse link proto.",
      "id": "GoogleCloudContentwarehouseV1Link",
      "properties": {
        "attributes": {
          "additionalProperties": {
            "description": "Properties of the object.",
            "type": "any"
          },
          "description": "Other link attributes.",
          "type": "object"
        },
        "collectionId": {
          "description": "The collection the link connects to. Should have the same project and location with the link.",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The create timestamp.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "creator": {
          "description": "Output only. Indicates who created this link.",
          "readOnly": true,
          "type": "string"
        },
        "documentId": {
          "description": "The document the link connects to. Should have the same project and location with the link.",
          "type": "string"
        },
        "name": {
          "description": "The resource name of the link. Format: projects/{project_number}/locations/{location}/links/{link}. The name is ignored when creating a link.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListDocumentSchemasResponse": {
      "description": "Response message for DocumentSchemaService.ListDocumentSchemas.",
      "id": "GoogleCloudContentwarehouseV1ListDocumentSchemasResponse",
      "properties": {
        "documentSchemas": {
          "description": "The document schemas from the specified parent.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1DocumentSchema"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListLinkedSourcesRequest": {
      "description": "Response message for DocumentLinkService.ListLinkedSources.",
      "id": "GoogleCloudContentwarehouseV1ListLinkedSourcesRequest",
      "properties": {
        "pageSize": {
          "description": "The maximum number of document-links to return. The service may return fewer than this value. If unspecified, at most 50 document-links will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
          "format": "int32",
          "type": "integer"
        },
        "pageToken": {
          "description": "A page token, received from a previous `ListLinkedSources` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListLinkedSources` must match the call that provided the page token.",
          "type": "string"
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the document creator, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListLinkedSourcesResponse": {
      "description": "Response message for DocumentLinkService.ListLinkedSources.",
      "id": "GoogleCloudContentwarehouseV1ListLinkedSourcesResponse",
      "properties": {
        "documentLinks": {
          "description": "Source document-links.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1DocumentLink"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListLinkedTargetsRequest": {
      "description": "Request message for DocumentLinkService.ListLinkedTargets.",
      "id": "GoogleCloudContentwarehouseV1ListLinkedTargetsRequest",
      "properties": {
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the document creator, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListLinkedTargetsResponse": {
      "description": "Response message for DocumentLinkService.ListLinkedTargets.",
      "id": "GoogleCloudContentwarehouseV1ListLinkedTargetsResponse",
      "properties": {
        "documentLinks": {
          "description": "Target document-links.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1DocumentLink"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListRuleSetsResponse": {
      "description": "Response message for RuleSetService.ListRuleSets.",
      "id": "GoogleCloudContentwarehouseV1ListRuleSetsResponse",
      "properties": {
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        },
        "ruleSets": {
          "description": "The rule sets from the specified parent.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1RuleSet"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ListSynonymSetsResponse": {
      "description": "Response message for SynonymSetService.ListSynonymSets.",
      "id": "GoogleCloudContentwarehouseV1ListSynonymSetsResponse",
      "properties": {
        "nextPageToken": {
          "description": "A page token, received from a previous `ListSynonymSets` call. Provide this to retrieve the subsequent page.",
          "type": "string"
        },
        "synonymSets": {
          "description": "The synonymSets from the specified parent.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1SynonymSet"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1LockDocumentRequest": {
      "description": "Request message for DocumentService.LockDocument.",
      "id": "GoogleCloudContentwarehouseV1LockDocumentRequest",
      "properties": {
        "collectionId": {
          "description": "The collection the document connects to.",
          "type": "string"
        },
        "lockingUser": {
          "$ref": "GoogleCloudContentwarehouseV1UserInfo",
          "description": "The user information who locks the document."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1MapProperty": {
      "description": "Map property value. Represents a structured entries of key value pairs, consisting of field names which map to dynamically typed values.",
      "id": "GoogleCloudContentwarehouseV1MapProperty",
      "properties": {
        "fields": {
          "additionalProperties": {
            "$ref": "GoogleCloudContentwarehouseV1Value"
          },
          "description": "Unordered map of dynamically typed values.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1MapTypeOptions": {
      "description": "Configurations for a Map property.",
      "id": "GoogleCloudContentwarehouseV1MapTypeOptions",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1MergeFieldsOptions": {
      "description": "Options for merging updated fields.",
      "id": "GoogleCloudContentwarehouseV1MergeFieldsOptions",
      "properties": {
        "replaceMessageFields": {
          "description": "When merging message fields, the default behavior is to merge the content of two message fields together. If you instead want to use the field from the source message to replace the corresponding field in the destination message, set this flag to true. When this flag is set, specified submessage fields that are missing in source will be cleared in destination.",
          "type": "boolean"
        },
        "replaceRepeatedFields": {
          "description": "When merging repeated fields, the default behavior is to append entries from the source repeated field to the destination repeated field. If you instead want to keep only the entries from the source repeated field, set this flag to true. If you want to replace a repeated field within a message field on the destination message, you must set both replace_repeated_fields and replace_message_fields to true, otherwise the repeated fields will be appended.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ProcessWithDocAiPipeline": {
      "description": "The configuration of processing documents in Document Warehouse with DocAi processors pipeline.",
      "id": "GoogleCloudContentwarehouseV1ProcessWithDocAiPipeline",
      "properties": {
        "documents": {
          "description": "The list of all the resource names of the documents to be processed. Format: projects/{project_number}/locations/{location}/documents/{document_id}.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "exportFolderPath": {
          "description": "The Cloud Storage folder path used to store the exported documents before being sent to CDW. Format: gs:///.",
          "type": "string"
        },
        "processorInfo": {
          "$ref": "GoogleCloudContentwarehouseV1ProcessorInfo",
          "description": "The CDW processor information."
        },
        "processorResultsFolderPath": {
          "description": "The Cloud Storage folder path used to store the raw results from processors. Format: gs:///.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ProcessorInfo": {
      "description": "The DocAI processor information.",
      "id": "GoogleCloudContentwarehouseV1ProcessorInfo",
      "properties": {
        "documentType": {
          "description": "The processor will process the documents with this document type.",
          "type": "string"
        },
        "processorName": {
          "description": "The processor resource name. Format is `projects/{project}/locations/{location}/processors/{processor}`, or `projects/{project}/locations/{location}/processors/{processor}/processorVersions/{processorVersion}`",
          "type": "string"
        },
        "schemaName": {
          "description": "The Document schema resource name. All documents processed by this processor will use this schema. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Property": {
      "description": "Property of a document.",
      "id": "GoogleCloudContentwarehouseV1Property",
      "properties": {
        "dateTimeValues": {
          "$ref": "GoogleCloudContentwarehouseV1DateTimeArray",
          "description": "Date time property values. It is not supported by CMEK compliant deployment."
        },
        "enumValues": {
          "$ref": "GoogleCloudContentwarehouseV1EnumArray",
          "description": "Enum property values."
        },
        "floatValues": {
          "$ref": "GoogleCloudContentwarehouseV1FloatArray",
          "description": "Float property values."
        },
        "integerValues": {
          "$ref": "GoogleCloudContentwarehouseV1IntegerArray",
          "description": "Integer property values."
        },
        "mapProperty": {
          "$ref": "GoogleCloudContentwarehouseV1MapProperty",
          "description": "Map property values."
        },
        "name": {
          "description": "Required. Must match the name of a PropertyDefinition in the DocumentSchema.",
          "type": "string"
        },
        "propertyValues": {
          "$ref": "GoogleCloudContentwarehouseV1PropertyArray",
          "description": "Nested structured data property values."
        },
        "textValues": {
          "$ref": "GoogleCloudContentwarehouseV1TextArray",
          "description": "String/text property values."
        },
        "timestampValues": {
          "$ref": "GoogleCloudContentwarehouseV1TimestampArray",
          "description": "Timestamp property values. It is not supported by CMEK compliant deployment."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1PropertyArray": {
      "description": "Property values.",
      "id": "GoogleCloudContentwarehouseV1PropertyArray",
      "properties": {
        "properties": {
          "description": "List of property values.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1Property"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1PropertyDefinition": {
      "description": "Defines the metadata for a schema property.",
      "id": "GoogleCloudContentwarehouseV1PropertyDefinition",
      "properties": {
        "dateTimeTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1DateTimeTypeOptions",
          "description": "Date time property. It is not supported by CMEK compliant deployment."
        },
        "displayName": {
          "description": "The display-name for the property, used for front-end.",
          "type": "string"
        },
        "enumTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1EnumTypeOptions",
          "description": "Enum/categorical property."
        },
        "floatTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1FloatTypeOptions",
          "description": "Float property."
        },
        "integerTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1IntegerTypeOptions",
          "description": "Integer property."
        },
        "isFilterable": {
          "description": "Whether the property can be filtered. If this is a sub-property, all the parent properties must be marked filterable.",
          "type": "boolean"
        },
        "isMetadata": {
          "description": "Whether the property is user supplied metadata. This out-of-the box placeholder setting can be used to tag derived properties. Its value and interpretation logic should be implemented by API user.",
          "type": "boolean"
        },
        "isRepeatable": {
          "description": "Whether the property can have multiple values.",
          "type": "boolean"
        },
        "isRequired": {
          "description": "Whether the property is mandatory. Default is 'false', i.e. populating property value can be skipped. If 'true' then user must populate the value for this property.",
          "type": "boolean"
        },
        "isSearchable": {
          "description": "Indicates that the property should be included in a global search.",
          "type": "boolean"
        },
        "mapTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1MapTypeOptions",
          "description": "Map property."
        },
        "name": {
          "description": "Required. The name of the metadata property. Must be unique within a document schema and is case insensitive. Names must be non-blank, start with a letter, and can contain alphanumeric characters and: /, :, -, _, and .",
          "type": "string"
        },
        "propertyTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1PropertyTypeOptions",
          "description": "Nested structured data property."
        },
        "retrievalImportance": {
          "description": "The retrieval importance of the property during search.",
          "enum": [
            "RETRIEVAL_IMPORTANCE_UNSPECIFIED",
            "HIGHEST",
            "HIGHER",
            "HIGH",
            "MEDIUM",
            "LOW",
            "LOWEST"
          ],
          "enumDescriptions": [
            "No importance specified. Default medium importance.",
            "Highest importance.",
            "Higher importance.",
            "High importance.",
            "Medium importance.",
            "Low importance (negative).",
            "Lowest importance (negative)."
          ],
          "type": "string"
        },
        "schemaSources": {
          "description": "The mapping information between this property to another schema source.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1PropertyDefinitionSchemaSource"
          },
          "type": "array"
        },
        "textTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1TextTypeOptions",
          "description": "Text/string property."
        },
        "timestampTypeOptions": {
          "$ref": "GoogleCloudContentwarehouseV1TimestampTypeOptions",
          "description": "Timestamp property. It is not supported by CMEK compliant deployment."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1PropertyDefinitionSchemaSource": {
      "description": "The schema source information.",
      "id": "GoogleCloudContentwarehouseV1PropertyDefinitionSchemaSource",
      "properties": {
        "name": {
          "description": "The schema name in the source.",
          "type": "string"
        },
        "processorType": {
          "description": "The Doc AI processor type name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1PropertyFilter": {
      "id": "GoogleCloudContentwarehouseV1PropertyFilter",
      "properties": {
        "condition": {
          "description": "The filter condition. The syntax for this expression is a subset of SQL syntax. Supported operators are: `=`, `!=`, `<`, `<=`, `>`, `>=`, and `~~` where the left of the operator is a property name and the right of the operator is a number or a quoted string. You must escape backslash (\\\\) and quote (\\\") characters. `~~` is the LIKE operator. The right of the operator must be a string. The only supported property data type for LIKE is text_values. It provides semantic search functionality by parsing, stemming and doing synonyms expansion against the input query. It matches if the property contains semantic similar content to the query. It is not regex matching or wildcard matching. For example, \"property.company ~~ \\\"google\\\"\" will match records whose property `property.compnay` have values like \"Google Inc.\", \"Google LLC\" or \"Google Company\". Supported functions are `LOWER([property_name])` to perform a case insensitive match and `EMPTY([property_name])` to filter on the existence of a key. Boolean expressions (AND/OR/NOT) are supported up to 3 levels of nesting (for example, \"((A AND B AND C) OR NOT D) AND E\"), a maximum of 100 comparisons or functions are allowed in the expression. The expression must be < 6000 bytes in length. Only properties that are marked filterable are allowed (PropertyDefinition.is_filterable). Property names do not need to be prefixed by the document schema id (as is the case with histograms), however property names will need to be prefixed by its parent hierarchy, if any. For example: top_property_name.sub_property_name. Sample Query: `(LOWER(driving_license)=\"class \\\"a\\\"\" OR EMPTY(driving_license)) AND driving_years > 10` CMEK compliant deployment only supports: * Operators: `=`, `<`, `<=`, `>`, and `>=`. * Boolean expressions: AND and OR.",
          "type": "string"
        },
        "documentSchemaName": {
          "description": "The Document schema name Document.document_schema_name. Format: projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1PropertyTypeOptions": {
      "description": "Configurations for a nested structured data property.",
      "id": "GoogleCloudContentwarehouseV1PropertyTypeOptions",
      "properties": {
        "propertyDefinitions": {
          "description": "Required. List of property definitions.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1PropertyDefinition"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1PublishAction": {
      "description": "Represents the action responsible for publishing messages to a Pub/Sub topic.",
      "id": "GoogleCloudContentwarehouseV1PublishAction",
      "properties": {
        "messages": {
          "description": "Messages to be published.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "topicId": {
          "description": "The topic id in the Pub/Sub service for which messages will be published to.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1QAResult": {
      "description": "Additional result info for the question-answering feature.",
      "id": "GoogleCloudContentwarehouseV1QAResult",
      "properties": {
        "confidenceScore": {
          "description": "The calibrated confidence score for this document, in the range [0., 1.]. This represents the confidence level for whether the returned document and snippet answers the user's query.",
          "format": "float",
          "type": "number"
        },
        "highlights": {
          "description": "Highlighted sections in the snippet.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1QAResultHighlight"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1QAResultHighlight": {
      "description": "A text span in the search text snippet that represents a highlighted section (answer context, highly relevant sentence, etc.).",
      "id": "GoogleCloudContentwarehouseV1QAResultHighlight",
      "properties": {
        "endIndex": {
          "description": "End index of the highlight, exclusive.",
          "format": "int32",
          "type": "integer"
        },
        "startIndex": {
          "description": "Start index of the highlight.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RemoveFromFolderAction": {
      "description": "Represents the action responsible for remove a document from a specific folder.",
      "id": "GoogleCloudContentwarehouseV1RemoveFromFolderAction",
      "properties": {
        "condition": {
          "description": "Condition of the action to be executed.",
          "type": "string"
        },
        "folder": {
          "description": "Name of the folder under which new document is to be added. Format: projects/{project_number}/locations/{location}/documents/{document_id}.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RequestMetadata": {
      "description": "Meta information is used to improve the performance of the service.",
      "id": "GoogleCloudContentwarehouseV1RequestMetadata",
      "properties": {
        "userInfo": {
          "$ref": "GoogleCloudContentwarehouseV1UserInfo",
          "description": "Provides user unique identification and groups information."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1ResponseMetadata": {
      "description": "Additional information returned to client, such as debugging information.",
      "id": "GoogleCloudContentwarehouseV1ResponseMetadata",
      "properties": {
        "requestId": {
          "description": "A unique id associated with this call. This id is logged for tracking purpose.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Rule": {
      "description": "Represents the rule for a content warehouse trigger.",
      "id": "GoogleCloudContentwarehouseV1Rule",
      "properties": {
        "actions": {
          "description": "List of actions that are executed when the rule is satisfied.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1Action"
          },
          "type": "array"
        },
        "condition": {
          "description": "Represents the conditional expression to be evaluated. Expression should evaluate to a boolean result. When the condition is true actions are executed. Example: user_role = \"hsbc_role_1\" AND doc.salary > 20000",
          "type": "string"
        },
        "description": {
          "description": "Short description of the rule and its context.",
          "type": "string"
        },
        "ruleId": {
          "description": "ID of the rule. It has to be unique across all the examples. This is managed internally.",
          "type": "string"
        },
        "triggerType": {
          "description": "Identifies the trigger type for running the policy.",
          "enum": [
            "UNKNOWN",
            "ON_CREATE",
            "ON_UPDATE"
          ],
          "enumDescriptions": [
            "Trigger for unknown action.",
            "Trigger for create document action.",
            "Trigger for update document action."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RuleActionsPair": {
      "description": "Represents a rule and outputs of associated actions.",
      "id": "GoogleCloudContentwarehouseV1RuleActionsPair",
      "properties": {
        "actionOutputs": {
          "description": "Outputs of executing the actions associated with the above rule.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1ActionOutput"
          },
          "type": "array"
        },
        "rule": {
          "$ref": "GoogleCloudContentwarehouseV1Rule",
          "description": "Represents the rule."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RuleEngineOutput": {
      "description": "Records the output of Rule Engine including rule evaluation and actions result.",
      "id": "GoogleCloudContentwarehouseV1RuleEngineOutput",
      "properties": {
        "actionExecutorOutput": {
          "$ref": "GoogleCloudContentwarehouseV1ActionExecutorOutput",
          "description": "Output from Action Executor containing rule and corresponding actions execution result."
        },
        "documentName": {
          "description": "Name of the document against which the rules and actions were evaluated.",
          "type": "string"
        },
        "ruleEvaluatorOutput": {
          "$ref": "GoogleCloudContentwarehouseV1RuleEvaluatorOutput",
          "description": "Output from Rule Evaluator containing matched, unmatched and invalid rules."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RuleEvaluatorOutput": {
      "description": "Represents the output of the Rule Evaluator.",
      "id": "GoogleCloudContentwarehouseV1RuleEvaluatorOutput",
      "properties": {
        "invalidRules": {
          "description": "A subset of triggered rules that failed the validation check(s) after parsing.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1InvalidRule"
          },
          "type": "array"
        },
        "matchedRules": {
          "description": "A subset of triggered rules that are evaluated true for a given request.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1Rule"
          },
          "type": "array"
        },
        "triggeredRules": {
          "description": "List of rules fetched from database for the given request trigger type.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1Rule"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RuleSet": {
      "description": "Represents a set of rules from a single customer.",
      "id": "GoogleCloudContentwarehouseV1RuleSet",
      "properties": {
        "description": {
          "description": "Short description of the rule-set.",
          "type": "string"
        },
        "name": {
          "description": "The resource name of the rule set. Managed internally. Format: projects/{project_number}/locations/{location}/ruleSet/{rule_set_id}. The name is ignored when creating a rule set.",
          "type": "string"
        },
        "rules": {
          "description": "List of rules given by the customer.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1Rule"
          },
          "type": "array"
        },
        "source": {
          "description": "Source of the rules i.e., customer name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1RunPipelineRequest": {
      "description": "Request message for DocumentService.RunPipeline.",
      "id": "GoogleCloudContentwarehouseV1RunPipelineRequest",
      "properties": {
        "exportCdwPipeline": {
          "$ref": "GoogleCloudContentwarehouseV1ExportToCdwPipeline",
          "description": "Export docuemnts from Document Warehouse to CDW for training purpose."
        },
        "gcsIngestPipeline": {
          "$ref": "GoogleCloudContentwarehouseV1GcsIngestPipeline",
          "description": "Cloud Storage ingestion pipeline."
        },
        "gcsIngestWithDocAiProcessorsPipeline": {
          "$ref": "GoogleCloudContentwarehouseV1GcsIngestWithDocAiProcessorsPipeline",
          "description": "Use DocAI processors to process documents in Cloud Storage and ingest them to Document Warehouse."
        },
        "processWithDocAiPipeline": {
          "$ref": "GoogleCloudContentwarehouseV1ProcessWithDocAiPipeline",
          "description": "Use a DocAI processor to process documents in Document Warehouse, and re-ingest the updated results into Document Warehouse."
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SearchCollectionsRequest": {
      "description": "Request message for CollectionService.SearchCollections.",
      "id": "GoogleCloudContentwarehouseV1SearchCollectionsRequest",
      "properties": {
        "pageSize": {
          "description": "A limit on the number of collections returned in the search results. Increasing this value above the default value of 10 can increase search response time. The value can be between 1 and 100.",
          "format": "int32",
          "type": "integer"
        },
        "pageToken": {
          "description": "The token specifying the current offset within search results. See SearchCollectionsResponse.next_page_token for an explanation of how to obtain the next set of query results.",
          "type": "string"
        },
        "query": {
          "$ref": "GoogleCloudContentwarehouseV1CollectionQuery",
          "description": "Query used to search against collections."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SearchCollectionsResponse": {
      "description": "Response message for CollectionService.SearchCollections.",
      "id": "GoogleCloudContentwarehouseV1SearchCollectionsResponse",
      "properties": {
        "matchingCollections": {
          "description": "The collection entities that match the specified SearchCollectionsRequest.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1SearchCollectionsResponseMatchingCollection"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "The token that specifies the starting position of the next page of results. This field is empty if there are no more results.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SearchCollectionsResponseMatchingCollection": {
      "description": "Collection entry with metadata inside SearchCollectionsResponse",
      "id": "GoogleCloudContentwarehouseV1SearchCollectionsResponseMatchingCollection",
      "properties": {
        "collection": {
          "$ref": "GoogleCloudContentwarehouseV1Collection",
          "description": "Collection that matches the specified SearchCollectionsRequest."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SearchDocumentsRequest": {
      "description": "Request message for DocumentService.SearchDocuments.",
      "id": "GoogleCloudContentwarehouseV1SearchDocumentsRequest",
      "properties": {
        "documentQuery": {
          "$ref": "GoogleCloudContentwarehouseV1DocumentQuery",
          "description": "Query used to search against documents (keyword, filters, etc.)."
        },
        "histogramQueries": {
          "description": "An expression specifying a histogram request against matching documents. Expression syntax is an aggregation function call with histogram facets and other options. The following aggregation functions are supported: * `count(string_histogram_facet)`: Count the number of matching entities for each distinct attribute value. Data types: * Histogram facet (aka filterable properties): Facet names with format <schema id>.<facet>. Facets will have the format of: `a-zA-Z`. If the facet is a child facet, then the parent hierarchy needs to be specified separated by dots in the prefix after the schema id. Thus, the format for a multi- level facet is: <schema id>.<parent facet name>. <child facet name>. Example: schema123.root_parent_facet.middle_facet.child_facet * DocumentSchemaId: (with no schema id prefix) to get histograms for each document type (returns the schema id path, e.g. projects/12345/locations/us-west/documentSchemas/abc123). Example expression: * Document type counts: count('DocumentSchemaId') * For schema id, abc123, get the counts for MORTGAGE_TYPE: count('abc123.MORTGAGE_TYPE')",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1HistogramQuery"
          },
          "type": "array"
        },
        "offset": {
          "description": "An integer that specifies the current offset (that is, starting result location, amongst the documents deemed by the API as relevant) in search results. This field is only considered if page_token is unset. The maximum allowed value is 5000. Otherwise an error is thrown. For example, 0 means to return results starting from the first matching document, and 10 means to return from the 11th document. This can be used for pagination, (for example, pageSize = 10 and offset = 10 means to return from the second page).",
          "format": "int32",
          "type": "integer"
        },
        "orderBy": {
          "description": "The criteria determining how search results are sorted. For non-empty query, default is `\"relevance desc\"`. For empty query, default is `\"upload_date desc\"`. Supported options are: * `\"relevance desc\"`: By relevance descending, as determined by the API algorithms. * `\"upload_date desc\"`: By upload date descending. * `\"upload_date\"`: By upload date ascending. * `\"update_date desc\"`: By last updated date descending. * `\"update_date\"`: By last updated date ascending. * `\"retrieval_importance desc\"`: By retrieval importance of properties descending. This feature is still under development, please do not use unless otherwise instructed to do so.",
          "type": "string"
        },
        "pageSize": {
          "description": "A limit on the number of documents returned in the search results. Increasing this value above the default value of 10 can increase search response time. The value can be between 1 and 100.",
          "format": "int32",
          "type": "integer"
        },
        "pageToken": {
          "description": "The token specifying the current offset within search results. See SearchDocumentsResponse.next_page_token for an explanation of how to obtain the next set of query results.",
          "type": "string"
        },
        "qaSizeLimit": {
          "description": "Experimental, do not use. The limit on the number of documents returned for the question-answering feature. To enable the question-answering feature, set [DocumentQuery].is_nl_query to true.",
          "format": "int32",
          "type": "integer"
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control and improve the search quality of the service."
        },
        "requireTotalSize": {
          "description": "Controls if the search document request requires the return of a total size of matched documents. See SearchDocumentsResponse.total_size. Enabling this flag may adversely impact performance. Hint: If this is used with pagination, set this flag on the initial query but set this to false on subsequent page calls (keep the total count locally). Defaults to false.",
          "type": "boolean"
        },
        "totalResultSize": {
          "description": "Controls if the search document request requires the return of a total size of matched documents. See SearchDocumentsResponse.total_size.",
          "enum": [
            "TOTAL_RESULT_SIZE_UNSPECIFIED",
            "ESTIMATED_SIZE",
            "ACTUAL_SIZE"
          ],
          "enumDescriptions": [
            "Total number calculation will be skipped.",
            "Estimate total number. The total result size will be accurated up to 10,000. This option will add cost and latency to your request.",
            "It may adversely impact performance. The limit is 1000,000."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SearchDocumentsResponse": {
      "description": "Response message for DocumentService.SearchDocuments.",
      "id": "GoogleCloudContentwarehouseV1SearchDocumentsResponse",
      "properties": {
        "histogramQueryResults": {
          "description": "The histogram results that match with the specified SearchDocumentsRequest.histogram_queries.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1HistogramQueryResult"
          },
          "type": "array"
        },
        "matchingDocuments": {
          "description": "The document entities that match the specified SearchDocumentsRequest.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1SearchDocumentsResponseMatchingDocument"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation, such as the request tracking id."
        },
        "nextPageToken": {
          "description": "The token that specifies the starting position of the next page of results. This field is empty if there are no more results.",
          "type": "string"
        },
        "totalSize": {
          "description": "The total number of matched documents which is available only if the client set SearchDocumentsRequest.require_total_size to `true` or set SearchDocumentsRequest.total_result_size to `ESTIMATED_SIZE` or `ACTUAL_SIZE`. Otherwise, the value will be `-1`. Typically a UI would handle this condition by displaying \"of many\", for example: \"Displaying 10 of many\".",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SearchDocumentsResponseMatchingDocument": {
      "description": "Document entry with metadata inside SearchDocumentsResponse",
      "id": "GoogleCloudContentwarehouseV1SearchDocumentsResponseMatchingDocument",
      "properties": {
        "document": {
          "$ref": "GoogleCloudContentwarehouseV1Document",
          "description": "Document that matches the specified SearchDocumentsRequest. This document only contains indexed metadata information."
        },
        "qaResult": {
          "$ref": "GoogleCloudContentwarehouseV1QAResult",
          "description": "Experimental. Additional result info if the question-answering feature is enabled."
        },
        "searchTextSnippet": {
          "description": "Contains snippets of text from the document full raw text that most closely match a search query's keywords, if available. All HTML tags in the original fields are stripped when returned in this field, and matching query keywords are enclosed in HTML bold tags. If the question-answering feature is enabled, this field will instead contain a snippet that answers the user's natural-language query. No HTML bold tags will be present, and highlights in the answer snippet can be found in QAResult.highlights.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SetAclRequest": {
      "description": "Request message for DocumentService.SetAcl.",
      "id": "GoogleCloudContentwarehouseV1SetAclRequest",
      "properties": {
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "Required. REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. This refers to an Identity and Access (IAM) policy, which specifies access controls for the Document. You can set ACL with condition for projects only. Supported operators are: `=`, `!=`, `<`, `<=`, `>`, and `>=` where the left of the operator is `DocumentSchemaId` or property name and the right of the operator is a number or a quoted string. You must escape backslash (\\\\) and quote (\\\") characters. Boolean expressions (AND/OR) are supported up to 3 levels of nesting (for example, \"((A AND B AND C) OR D) AND E\"), a maximum of 10 comparisons are allowed in the expression. The expression must be < 6000 bytes in length. Sample condition: `\"DocumentSchemaId = \\\"some schema id\\\" OR SchemaId.floatPropertyName >= 10\"`"
        },
        "projectOwner": {
          "description": "For Set Project ACL only. Authorization check for end user will be ignored when project_owner=true.",
          "type": "boolean"
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SetAclResponse": {
      "description": "Response message for DocumentService.SetAcl.",
      "id": "GoogleCloudContentwarehouseV1SetAclResponse",
      "properties": {
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation, such as the request tracking id."
        },
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "The policy will be attached to a resource (e.g. projecct, document)."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SetCollectionAclRequest": {
      "description": "Request message for CollectionService.SetAcl.",
      "id": "GoogleCloudContentwarehouseV1SetCollectionAclRequest",
      "properties": {
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "Required. REQUIRED: The complete policy to be applied to the collection. The size of the policy is limited to a few 10s of KB."
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SetCollectionAclResponse": {
      "description": "Response message for CollectionService.SetAcl.",
      "id": "GoogleCloudContentwarehouseV1SetCollectionAclResponse",
      "properties": {
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation, such as the request tracking id."
        },
        "policy": {
          "$ref": "GoogleIamV1Policy",
          "description": "The policy created for the Collection."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SynonymSet": {
      "description": "Represents a list of synonyms for a given context. For example a context \"sales\" could contain: Synonym 1: sale, invoice, bill, order Synonym 2: money, credit, finance, payment Synonym 3: shipping, freight, transport Each SynonymSets should be disjoint",
      "id": "GoogleCloudContentwarehouseV1SynonymSet",
      "properties": {
        "context": {
          "description": "This is a freeform field. Example contexts can be \"sales,\" \"engineering,\" \"real estate,\" \"accounting,\" etc. The context can be supplied during search requests.",
          "type": "string"
        },
        "name": {
          "description": "The resource name of the SynonymSet This is mandatory for google.api.resource. Format: projects/{project_number}/locations/{location}/synonymSets/{context}.",
          "type": "string"
        },
        "synonyms": {
          "description": "List of Synonyms for the context.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1SynonymSetSynonym"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1SynonymSetSynonym": {
      "description": "Represents a list of words given by the customer All these words are synonyms of each other.",
      "id": "GoogleCloudContentwarehouseV1SynonymSetSynonym",
      "properties": {
        "words": {
          "description": "For example: sale, invoice, bill, order",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1TextArray": {
      "description": "String/text values.",
      "id": "GoogleCloudContentwarehouseV1TextArray",
      "properties": {
        "values": {
          "description": "List of text values.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1TextTypeOptions": {
      "description": "Configurations for a text property.",
      "id": "GoogleCloudContentwarehouseV1TextTypeOptions",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1TimeFilter": {
      "description": "Filter on create timestamp or update timestamp of documents.",
      "id": "GoogleCloudContentwarehouseV1TimeFilter",
      "properties": {
        "timeField": {
          "description": "Specifies which time field to filter documents on. Defaults to TimeField.UPLOAD_TIME.",
          "enum": [
            "TIME_FIELD_UNSPECIFIED",
            "CREATE_TIME",
            "UPDATE_TIME"
          ],
          "enumDescriptions": [
            "Default value.",
            "Earliest document create time.",
            "Latest document update time."
          ],
          "type": "string"
        },
        "timeRange": {
          "$ref": "GoogleTypeInterval"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1TimestampArray": {
      "description": "Timestamp values.",
      "id": "GoogleCloudContentwarehouseV1TimestampArray",
      "properties": {
        "values": {
          "description": "List of timestamp values.",
          "items": {
            "$ref": "GoogleCloudContentwarehouseV1TimestampValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1TimestampTypeOptions": {
      "description": "Configurations for a timestamp property.",
      "id": "GoogleCloudContentwarehouseV1TimestampTypeOptions",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1TimestampValue": {
      "description": "Timestamp value type.",
      "id": "GoogleCloudContentwarehouseV1TimestampValue",
      "properties": {
        "textValue": {
          "description": "The string must represent a valid instant in UTC and is parsed using java.time.format.DateTimeFormatter.ISO_INSTANT. e.g. \"2013-09-29T18:46:19Z\"",
          "type": "string"
        },
        "timestampValue": {
          "description": "Timestamp value",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UpdateDocumentMetadata": {
      "description": "Metadata object for UpdateDocument request (currently empty).",
      "id": "GoogleCloudContentwarehouseV1UpdateDocumentMetadata",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UpdateDocumentRequest": {
      "description": "Request message for DocumentService.UpdateDocument.",
      "id": "GoogleCloudContentwarehouseV1UpdateDocumentRequest",
      "properties": {
        "cloudAiDocumentOption": {
          "$ref": "GoogleCloudContentwarehouseV1CloudAIDocumentOption",
          "description": "Request Option for processing Cloud AI Document in Document Warehouse. This field offers limited support for mapping entities from Cloud AI Document to Warehouse Document. Please consult with product team before using this field and other available options."
        },
        "document": {
          "$ref": "GoogleCloudContentwarehouseV1Document",
          "description": "Required. The document to update."
        },
        "requestMetadata": {
          "$ref": "GoogleCloudContentwarehouseV1RequestMetadata",
          "description": "The meta information collected about the end user, used to enforce access control for the service."
        },
        "updateOptions": {
          "$ref": "GoogleCloudContentwarehouseV1UpdateOptions",
          "description": "Options for the update operation."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UpdateDocumentResponse": {
      "description": "Response message for DocumentService.UpdateDocument.",
      "id": "GoogleCloudContentwarehouseV1UpdateDocumentResponse",
      "properties": {
        "document": {
          "$ref": "GoogleCloudContentwarehouseV1Document",
          "description": "Updated document after executing update request."
        },
        "metadata": {
          "$ref": "GoogleCloudContentwarehouseV1ResponseMetadata",
          "description": "Additional information for the API invocation, such as the request tracking id."
        },
        "ruleEngineOutput": {
          "$ref": "GoogleCloudContentwarehouseV1RuleEngineOutput",
          "description": "Output from Rule Engine recording the rule evaluator and action executor's output. Refer format in: google/cloud/contentwarehouse/v1/rule_engine.proto"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UpdateDocumentSchemaRequest": {
      "description": "Request message for DocumentSchemaService.UpdateDocumentSchema.",
      "id": "GoogleCloudContentwarehouseV1UpdateDocumentSchemaRequest",
      "properties": {
        "documentSchema": {
          "$ref": "GoogleCloudContentwarehouseV1DocumentSchema",
          "description": "Required. The document schema to update with."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UpdateOptions": {
      "description": "Options for Update operations.",
      "id": "GoogleCloudContentwarehouseV1UpdateOptions",
      "properties": {
        "mergeFieldsOptions": {
          "$ref": "GoogleCloudContentwarehouseV1MergeFieldsOptions",
          "description": "Options for merging."
        },
        "updateMask": {
          "description": "Field mask for merging Document fields. For the `FieldMask` definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask",
          "format": "google-fieldmask",
          "type": "string"
        },
        "updateType": {
          "description": "Type for update.",
          "enum": [
            "UPDATE_TYPE_UNSPECIFIED",
            "UPDATE_TYPE_REPLACE",
            "UPDATE_TYPE_MERGE",
            "UPDATE_TYPE_INSERT_PROPERTIES_BY_NAMES",
            "UPDATE_TYPE_REPLACE_PROPERTIES_BY_NAMES",
            "UPDATE_TYPE_DELETE_PROPERTIES_BY_NAMES",
            "UPDATE_TYPE_MERGE_AND_REPLACE_OR_INSERT_PROPERTIES_BY_NAMES"
          ],
          "enumDescriptions": [
            "Defaults to full replace behavior, ie. FULL_REPLACE.",
            "Fully replace all the fields (including previously linked raw document). Any field masks will be ignored.",
            "Merge the fields into the existing entities.",
            "Inserts the properties by names.",
            "Replace the properties by names.",
            "Delete the properties by names.",
            "For each of the property, replaces the property if the it exists, otherwise inserts a new property. And for the rest of the fields, merge them based on update mask and merge fields options."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UpdateRuleSetRequest": {
      "description": "Request message for RuleSetService.UpdateRuleSet.",
      "id": "GoogleCloudContentwarehouseV1UpdateRuleSetRequest",
      "properties": {
        "ruleSet": {
          "$ref": "GoogleCloudContentwarehouseV1RuleSet",
          "description": "Required. The rule set to update."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1UserInfo": {
      "description": "The user information.",
      "id": "GoogleCloudContentwarehouseV1UserInfo",
      "properties": {
        "groupIds": {
          "description": "The unique group identifications which the user is belong to. The format is \"group:yyyy@example.com\";",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "id": {
          "description": "A unique user identification string, as determined by the client. The maximum number of allowed characters is 255. Allowed characters include numbers 0 to 9, uppercase and lowercase letters, and restricted special symbols (:, @, +, -, _, ~) The format is \"user:xxxx@example.com\";",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1Value": {
      "description": "`Value` represents a dynamically typed value which can be either be a float, a integer, a string, or a datetime value. A producer of value is expected to set one of these variants. Absence of any variant indicates an error.",
      "id": "GoogleCloudContentwarehouseV1Value",
      "properties": {
        "booleanValue": {
          "description": "Represents a boolean value.",
          "type": "boolean"
        },
        "datetimeValue": {
          "$ref": "GoogleTypeDateTime",
          "description": "Represents a datetime value."
        },
        "enumValue": {
          "$ref": "GoogleCloudContentwarehouseV1EnumValue",
          "description": "Represents an enum value."
        },
        "floatValue": {
          "description": "Represents a float value.",
          "format": "float",
          "type": "number"
        },
        "intValue": {
          "description": "Represents a integer value.",
          "format": "int32",
          "type": "integer"
        },
        "stringValue": {
          "description": "Represents a string value.",
          "type": "string"
        },
        "timestampValue": {
          "$ref": "GoogleCloudContentwarehouseV1TimestampValue",
          "description": "Represents a timestamp value."
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1WeightedSchemaProperty": {
      "description": "Specifies the schema property name.",
      "id": "GoogleCloudContentwarehouseV1WeightedSchemaProperty",
      "properties": {
        "documentSchemaName": {
          "description": "The document schema name.",
          "type": "string"
        },
        "propertyNames": {
          "description": "The property definition names in the schema.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1beta1CreateDocumentMetadata": {
      "description": "Metadata object for CreateDocument request (currently empty).",
      "id": "GoogleCloudContentwarehouseV1beta1CreateDocumentMetadata",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1beta1InitializeProjectResponse": {
      "description": "Response message for projectService.InitializeProject",
      "id": "GoogleCloudContentwarehouseV1beta1InitializeProjectResponse",
      "properties": {
        "message": {
          "description": "The message of the project initialization process.",
          "type": "string"
        },
        "state": {
          "description": "The state of the project initialization process.",
          "enum": [
            "STATE_UNSPECIFIED",
            "SUCCEEDED",
            "FAILED",
            "CANCELLED",
            "RUNNING"
          ],
          "enumDescriptions": [
            "Clients should never see this.",
            "Finished project initialization without error.",
            "Finished project initialization with an error.",
            "Client canceled the LRO.",
            "Ask the customer to check the operation for results."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudContentwarehouseV1beta1UpdateDocumentMetadata": {
      "description": "Metadata object for UpdateDocument request (currently empty).",
      "id": "GoogleCloudContentwarehouseV1beta1UpdateDocumentMetadata",
      "properties": {},
      "type": "object"
    },
    "GoogleCloudDocumentaiV1Barcode": {
      "description": "Encodes the detailed information of a barcode.",
      "id": "GoogleCloudDocumentaiV1Barcode",
      "properties": {
        "format": {
          "description": "Format of a barcode. The supported formats are: - `CODE_128`: Code 128 type. - `CODE_39`: Code 39 type. - `CODE_93`: Code 93 type. - `CODABAR`: Codabar type. - `DATA_MATRIX`: 2D Data Matrix type. - `ITF`: ITF type. - `EAN_13`: EAN-13 type. - `EAN_8`: EAN-8 type. - `QR_CODE`: 2D QR code type. - `UPC_A`: UPC-A type. - `UPC_E`: UPC-E type. - `PDF417`: PDF417 type. - `AZTEC`: 2D Aztec code type. - `DATABAR`: GS1 DataBar code type.",
          "type": "string"
        },
        "rawValue": {
          "description": "Raw value encoded in the barcode. For example: `'MEBKM:TITLE:Google;URL:https://www.google.com;;'`.",
          "type": "string"
        },
        "valueFormat": {
          "description": "Value format describes the format of the value that a barcode encodes. The supported formats are: - `CONTACT_INFO`: Contact information. - `EMAIL`: Email address. - `ISBN`: ISBN identifier. - `PHONE`: Phone number. - `PRODUCT`: Product. - `SMS`: SMS message. - `TEXT`: Text string. - `URL`: URL address. - `WIFI`: Wifi information. - `GEO`: Geo-localization. - `CALENDAR_EVENT`: Calendar event. - `DRIVER_LICENSE`: Driver's license.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1BoundingPoly": {
      "description": "A bounding polygon for the detected image annotation.",
      "id": "GoogleCloudDocumentaiV1BoundingPoly",
      "properties": {
        "normalizedVertices": {
          "description": "The bounding polygon normalized vertices.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1NormalizedVertex"
          },
          "type": "array"
        },
        "vertices": {
          "description": "The bounding polygon vertices.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1Vertex"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1Document": {
      "description": "Document represents the canonical document resource in Document AI. It is an interchange format that provides insights into documents and allows for collaboration between users and Document AI to iterate and optimize for quality.",
      "id": "GoogleCloudDocumentaiV1Document",
      "properties": {
        "content": {
          "description": "Optional. Inline document content, represented as a stream of bytes. Note: As with all `bytes` fields, protobuffers use a pure binary representation, whereas JSON representations use base64.",
          "format": "byte",
          "type": "string"
        },
        "entities": {
          "description": "A list of entities detected on Document.text. For document shards, entities in this list may cross shard boundaries.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentEntity"
          },
          "type": "array"
        },
        "entityRelations": {
          "description": "Placeholder. Relationship among Document.entities.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentEntityRelation"
          },
          "type": "array"
        },
        "error": {
          "$ref": "GoogleRpcStatus",
          "description": "Any error that occurred while processing this document."
        },
        "mimeType": {
          "description": "An IANA published MIME type (also referred to as media type). For more information, see https://www.iana.org/assignments/media-types/media-types.xhtml.",
          "type": "string"
        },
        "pages": {
          "description": "Visual page layout for the Document.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPage"
          },
          "type": "array"
        },
        "revisions": {
          "description": "Placeholder. Revision history of this document.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentRevision"
          },
          "type": "array"
        },
        "shardInfo": {
          "$ref": "GoogleCloudDocumentaiV1DocumentShardInfo",
          "description": "Information about the sharding if this document is sharded part of a larger document. If the document is not sharded, this message is not specified."
        },
        "text": {
          "description": "Optional. UTF-8 encoded text in reading order from the document.",
          "type": "string"
        },
        "textChanges": {
          "description": "Placeholder. A list of text corrections made to Document.text. This is usually used for annotating corrections to OCR mistakes. Text changes for a given revision may not overlap with each other.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentTextChange"
          },
          "type": "array"
        },
        "textStyles": {
          "description": "Styles for the Document.text.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentStyle"
          },
          "type": "array"
        },
        "uri": {
          "description": "Optional. Currently supports Google Cloud Storage URI of the form `gs://bucket_name/object_name`. Object versioning is not supported. See [Google Cloud Storage Request URIs](https://cloud.google.com/storage/docs/reference-uris) for more info.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentEntity": {
      "description": "An entity that could be a phrase in the text or a property that belongs to the document. It is a known entity type, such as a person, an organization, or location.",
      "id": "GoogleCloudDocumentaiV1DocumentEntity",
      "properties": {
        "confidence": {
          "description": "Optional. Confidence of detected Schema entity. Range `[0, 1]`.",
          "format": "float",
          "type": "number"
        },
        "id": {
          "description": "Optional. Canonical id. This will be a unique value in the entity list for this document.",
          "type": "string"
        },
        "mentionId": {
          "description": "Optional. Deprecated. Use `id` field instead.",
          "type": "string"
        },
        "mentionText": {
          "description": "Optional. Text value of the entity e.g. `1600 Amphitheatre Pkwy`.",
          "type": "string"
        },
        "normalizedValue": {
          "$ref": "GoogleCloudDocumentaiV1DocumentEntityNormalizedValue",
          "description": "Optional. Normalized entity value. Absent if the extracted value could not be converted or the type (e.g. address) is not supported for certain parsers. This field is also only populated for certain supported document types."
        },
        "pageAnchor": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageAnchor",
          "description": "Optional. Represents the provenance of this entity wrt. the location on the page where it was found."
        },
        "properties": {
          "description": "Optional. Entities can be nested to form a hierarchical data structure representing the content in the document.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentEntity"
          },
          "type": "array"
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "Optional. The history of this annotation."
        },
        "redacted": {
          "description": "Optional. Whether the entity will be redacted for de-identification purposes.",
          "type": "boolean"
        },
        "textAnchor": {
          "$ref": "GoogleCloudDocumentaiV1DocumentTextAnchor",
          "description": "Optional. Provenance of the entity. Text anchor indexing into the Document.text."
        },
        "type": {
          "description": "Required. Entity type from a schema e.g. `Address`.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentEntityNormalizedValue": {
      "description": "Parsed and normalized entity value.",
      "id": "GoogleCloudDocumentaiV1DocumentEntityNormalizedValue",
      "properties": {
        "addressValue": {
          "$ref": "GoogleTypePostalAddress",
          "description": "Postal address. See also: https://github.com/googleapis/googleapis/blob/master/google/type/postal_address.proto"
        },
        "booleanValue": {
          "description": "Boolean value. Can be used for entities with binary values, or for checkboxes.",
          "type": "boolean"
        },
        "dateValue": {
          "$ref": "GoogleTypeDate",
          "description": "Date value. Includes year, month, day. See also: https://github.com/googleapis/googleapis/blob/master/google/type/date.proto"
        },
        "datetimeValue": {
          "$ref": "GoogleTypeDateTime",
          "description": "DateTime value. Includes date, time, and timezone. See also: https://github.com/googleapis/googleapis/blob/master/google/type/datetime.proto"
        },
        "floatValue": {
          "description": "Float value.",
          "format": "float",
          "type": "number"
        },
        "integerValue": {
          "description": "Integer value.",
          "format": "int32",
          "type": "integer"
        },
        "moneyValue": {
          "$ref": "GoogleTypeMoney",
          "description": "Money value. See also: https://github.com/googleapis/googleapis/blob/master/google/type/money.proto"
        },
        "text": {
          "description": "Optional. An optional field to store a normalized string. For some entity types, one of respective `structured_value` fields may also be populated. Also not all the types of `structured_value` will be normalized. For example, some processors may not generate `float` or `integer` normalized text by default. Below are sample formats mapped to structured values. - Money/Currency type (`money_value`) is in the ISO 4217 text format. - Date type (`date_value`) is in the ISO 8601 text format. - Datetime type (`datetime_value`) is in the ISO 8601 text format.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentEntityRelation": {
      "description": "Relationship between Entities.",
      "id": "GoogleCloudDocumentaiV1DocumentEntityRelation",
      "properties": {
        "objectId": {
          "description": "Object entity id.",
          "type": "string"
        },
        "relation": {
          "description": "Relationship description.",
          "type": "string"
        },
        "subjectId": {
          "description": "Subject entity id.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPage": {
      "description": "A page in a Document.",
      "id": "GoogleCloudDocumentaiV1DocumentPage",
      "properties": {
        "blocks": {
          "description": "A list of visually detected text blocks on the page. A block has a set of lines (collected into paragraphs) that have a common line-spacing and orientation.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageBlock"
          },
          "type": "array"
        },
        "detectedBarcodes": {
          "description": "A list of detected barcodes.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedBarcode"
          },
          "type": "array"
        },
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "dimension": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageDimension",
          "description": "Physical dimension of the page."
        },
        "formFields": {
          "description": "A list of visually detected form fields on the page.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageFormField"
          },
          "type": "array"
        },
        "image": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageImage",
          "description": "Rendered image for this page. This image is preprocessed to remove any skew, rotation, and distortions such that the annotation bounding boxes can be upright and axis-aligned."
        },
        "imageQualityScores": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageImageQualityScores",
          "description": "Image Quality Scores."
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for the page."
        },
        "lines": {
          "description": "A list of visually detected text lines on the page. A collection of tokens that a human would perceive as a line.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageLine"
          },
          "type": "array"
        },
        "pageNumber": {
          "description": "1-based index for current Page in a parent Document. Useful when a page is taken out of a Document for individual processing.",
          "format": "int32",
          "type": "integer"
        },
        "paragraphs": {
          "description": "A list of visually detected text paragraphs on the page. A collection of lines that a human would perceive as a paragraph.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageParagraph"
          },
          "type": "array"
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this page."
        },
        "symbols": {
          "description": "A list of visually detected symbols on the page.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageSymbol"
          },
          "type": "array"
        },
        "tables": {
          "description": "A list of visually detected tables on the page.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageTable"
          },
          "type": "array"
        },
        "tokens": {
          "description": "A list of visually detected tokens on the page.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageToken"
          },
          "type": "array"
        },
        "transforms": {
          "description": "Transformation matrices that were applied to the original document image to produce Page.image.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageMatrix"
          },
          "type": "array"
        },
        "visualElements": {
          "description": "A list of detected non-text visual elements e.g. checkbox, signature etc. on the page.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageVisualElement"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageAnchor": {
      "description": "Referencing the visual context of the entity in the Document.pages. Page anchors can be cross-page, consist of multiple bounding polygons and optionally reference specific layout element types.",
      "id": "GoogleCloudDocumentaiV1DocumentPageAnchor",
      "properties": {
        "pageRefs": {
          "description": "One or more references to visual page elements",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageAnchorPageRef"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageAnchorPageRef": {
      "description": "Represents a weak reference to a page element within a document.",
      "id": "GoogleCloudDocumentaiV1DocumentPageAnchorPageRef",
      "properties": {
        "boundingPoly": {
          "$ref": "GoogleCloudDocumentaiV1BoundingPoly",
          "description": "Optional. Identifies the bounding polygon of a layout element on the page."
        },
        "confidence": {
          "description": "Optional. Confidence of detected page element, if applicable. Range `[0, 1]`.",
          "format": "float",
          "type": "number"
        },
        "layoutId": {
          "description": "Optional. Deprecated. Use PageRef.bounding_poly instead.",
          "type": "string"
        },
        "layoutType": {
          "description": "Optional. The type of the layout element that is being referenced if any.",
          "enum": [
            "LAYOUT_TYPE_UNSPECIFIED",
            "BLOCK",
            "PARAGRAPH",
            "LINE",
            "TOKEN",
            "VISUAL_ELEMENT",
            "TABLE",
            "FORM_FIELD"
          ],
          "enumDescriptions": [
            "Layout Unspecified.",
            "References a Page.blocks element.",
            "References a Page.paragraphs element.",
            "References a Page.lines element.",
            "References a Page.tokens element.",
            "References a Page.visual_elements element.",
            "Refrrences a Page.tables element.",
            "References a Page.form_fields element."
          ],
          "type": "string"
        },
        "page": {
          "description": "Required. Index into the Document.pages element, for example using `Document.pages` to locate the related page element. This field is skipped when its value is the default `0`. See https://developers.google.com/protocol-buffers/docs/proto3#json.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageBlock": {
      "description": "A block has a set of lines (collected into paragraphs) that have a common line-spacing and orientation.",
      "id": "GoogleCloudDocumentaiV1DocumentPageBlock",
      "properties": {
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for Block."
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this annotation."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageDetectedBarcode": {
      "description": "A detected barcode.",
      "id": "GoogleCloudDocumentaiV1DocumentPageDetectedBarcode",
      "properties": {
        "barcode": {
          "$ref": "GoogleCloudDocumentaiV1Barcode",
          "description": "Detailed barcode information of the DetectedBarcode."
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for DetectedBarcode."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage": {
      "description": "Detected language for a structural component.",
      "id": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage",
      "properties": {
        "confidence": {
          "description": "Confidence of detected language. Range `[0, 1]`.",
          "format": "float",
          "type": "number"
        },
        "languageCode": {
          "description": "The BCP-47 language code, such as `en-US` or `sr-Latn`. For more information, see https://www.unicode.org/reports/tr35/#Unicode_locale_identifier.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageDimension": {
      "description": "Dimension for the page.",
      "id": "GoogleCloudDocumentaiV1DocumentPageDimension",
      "properties": {
        "height": {
          "description": "Page height.",
          "format": "float",
          "type": "number"
        },
        "unit": {
          "description": "Dimension unit.",
          "type": "string"
        },
        "width": {
          "description": "Page width.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageFormField": {
      "description": "A form field detected on the page.",
      "id": "GoogleCloudDocumentaiV1DocumentPageFormField",
      "properties": {
        "correctedKeyText": {
          "description": "Created for Labeling UI to export key text. If corrections were made to the text identified by the `field_name.text_anchor`, this field will contain the correction.",
          "type": "string"
        },
        "correctedValueText": {
          "description": "Created for Labeling UI to export value text. If corrections were made to the text identified by the `field_value.text_anchor`, this field will contain the correction.",
          "type": "string"
        },
        "fieldName": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for the FormField name. e.g. `Address`, `Email`, `Grand total`, `Phone number`, etc."
        },
        "fieldValue": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for the FormField value."
        },
        "nameDetectedLanguages": {
          "description": "A list of detected languages for name together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this annotation."
        },
        "valueDetectedLanguages": {
          "description": "A list of detected languages for value together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "valueType": {
          "description": "If the value is non-textual, this field represents the type. Current valid values are: - blank (this indicates the `field_value` is normal text) - `unfilled_checkbox` - `filled_checkbox`",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageImage": {
      "description": "Rendered image contents for this page.",
      "id": "GoogleCloudDocumentaiV1DocumentPageImage",
      "properties": {
        "content": {
          "description": "Raw byte content of the image.",
          "format": "byte",
          "type": "string"
        },
        "height": {
          "description": "Height of the image in pixels.",
          "format": "int32",
          "type": "integer"
        },
        "mimeType": {
          "description": "Encoding mime type for the image.",
          "type": "string"
        },
        "width": {
          "description": "Width of the image in pixels.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageImageQualityScores": {
      "description": "Image Quality Scores for the page image",
      "id": "GoogleCloudDocumentaiV1DocumentPageImageQualityScores",
      "properties": {
        "detectedDefects": {
          "description": "A list of detected defects.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageImageQualityScoresDetectedDefect"
          },
          "type": "array"
        },
        "qualityScore": {
          "description": "The overall quality score. Range `[0, 1]` where 1 is perfect quality.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageImageQualityScoresDetectedDefect": {
      "description": "Image Quality Defects",
      "id": "GoogleCloudDocumentaiV1DocumentPageImageQualityScoresDetectedDefect",
      "properties": {
        "confidence": {
          "description": "Confidence of detected defect. Range `[0, 1]` where 1 indicates strong confidence of that the defect exists.",
          "format": "float",
          "type": "number"
        },
        "type": {
          "description": "Name of the defect type. Supported values are: - `quality/defect_blurry` - `quality/defect_noisy` - `quality/defect_dark` - `quality/defect_faint` - `quality/defect_text_too_small` - `quality/defect_document_cutoff` - `quality/defect_text_cutoff` - `quality/defect_glare`",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageLayout": {
      "description": "Visual element describing a layout unit on a page.",
      "id": "GoogleCloudDocumentaiV1DocumentPageLayout",
      "properties": {
        "boundingPoly": {
          "$ref": "GoogleCloudDocumentaiV1BoundingPoly",
          "description": "The bounding polygon for the Layout."
        },
        "confidence": {
          "description": "Confidence of the current Layout within context of the object this layout is for. e.g. confidence can be for a single token, a table, a visual element, etc. depending on context. Range `[0, 1]`.",
          "format": "float",
          "type": "number"
        },
        "orientation": {
          "description": "Detected orientation for the Layout.",
          "enum": [
            "ORIENTATION_UNSPECIFIED",
            "PAGE_UP",
            "PAGE_RIGHT",
            "PAGE_DOWN",
            "PAGE_LEFT"
          ],
          "enumDescriptions": [
            "Unspecified orientation.",
            "Orientation is aligned with page up.",
            "Orientation is aligned with page right. Turn the head 90 degrees clockwise from upright to read.",
            "Orientation is aligned with page down. Turn the head 180 degrees from upright to read.",
            "Orientation is aligned with page left. Turn the head 90 degrees counterclockwise from upright to read."
          ],
          "type": "string"
        },
        "textAnchor": {
          "$ref": "GoogleCloudDocumentaiV1DocumentTextAnchor",
          "description": "Text anchor indexing into the Document.text."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageLine": {
      "description": "A collection of tokens that a human would perceive as a line. Does not cross column boundaries, can be horizontal, vertical, etc.",
      "id": "GoogleCloudDocumentaiV1DocumentPageLine",
      "properties": {
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for Line."
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this annotation."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageMatrix": {
      "description": "Representation for transformation matrix, intended to be compatible and used with OpenCV format for image manipulation.",
      "id": "GoogleCloudDocumentaiV1DocumentPageMatrix",
      "properties": {
        "cols": {
          "description": "Number of columns in the matrix.",
          "format": "int32",
          "type": "integer"
        },
        "data": {
          "description": "The matrix data.",
          "format": "byte",
          "type": "string"
        },
        "rows": {
          "description": "Number of rows in the matrix.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "This encodes information about what data type the matrix uses. For example, 0 (CV_8U) is an unsigned 8-bit image. For the full list of OpenCV primitive data types, please refer to https://docs.opencv.org/4.3.0/d1/d1b/group__core__hal__interface.html",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageParagraph": {
      "description": "A collection of lines that a human would perceive as a paragraph.",
      "id": "GoogleCloudDocumentaiV1DocumentPageParagraph",
      "properties": {
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for Paragraph."
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this annotation."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageSymbol": {
      "description": "A detected symbol.",
      "id": "GoogleCloudDocumentaiV1DocumentPageSymbol",
      "properties": {
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for Symbol."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageTable": {
      "description": "A table representation similar to HTML table structure.",
      "id": "GoogleCloudDocumentaiV1DocumentPageTable",
      "properties": {
        "bodyRows": {
          "description": "Body rows of the table.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageTableTableRow"
          },
          "type": "array"
        },
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "headerRows": {
          "description": "Header rows of the table.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageTableTableRow"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for Table."
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this table."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageTableTableCell": {
      "description": "A cell representation inside the table.",
      "id": "GoogleCloudDocumentaiV1DocumentPageTableTableCell",
      "properties": {
        "colSpan": {
          "description": "How many columns this cell spans.",
          "format": "int32",
          "type": "integer"
        },
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for TableCell."
        },
        "rowSpan": {
          "description": "How many rows this cell spans.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageTableTableRow": {
      "description": "A row of table cells.",
      "id": "GoogleCloudDocumentaiV1DocumentPageTableTableRow",
      "properties": {
        "cells": {
          "description": "Cells that make up this row.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageTableTableCell"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageToken": {
      "description": "A detected token.",
      "id": "GoogleCloudDocumentaiV1DocumentPageToken",
      "properties": {
        "detectedBreak": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageTokenDetectedBreak",
          "description": "Detected break at the end of a Token."
        },
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for Token."
        },
        "provenance": {
          "$ref": "GoogleCloudDocumentaiV1DocumentProvenance",
          "description": "The history of this annotation."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageTokenDetectedBreak": {
      "description": "Detected break at the end of a Token.",
      "id": "GoogleCloudDocumentaiV1DocumentPageTokenDetectedBreak",
      "properties": {
        "type": {
          "description": "Detected break type.",
          "enum": [
            "TYPE_UNSPECIFIED",
            "SPACE",
            "WIDE_SPACE",
            "HYPHEN"
          ],
          "enumDescriptions": [
            "Unspecified break type.",
            "A single whitespace.",
            "A wider whitespace.",
            "A hyphen that indicates that a token has been split across lines."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentPageVisualElement": {
      "description": "Detected non-text visual elements e.g. checkbox, signature etc. on the page.",
      "id": "GoogleCloudDocumentaiV1DocumentPageVisualElement",
      "properties": {
        "detectedLanguages": {
          "description": "A list of detected languages together with confidence.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentPageDetectedLanguage"
          },
          "type": "array"
        },
        "layout": {
          "$ref": "GoogleCloudDocumentaiV1DocumentPageLayout",
          "description": "Layout for VisualElement."
        },
        "type": {
          "description": "Type of the VisualElement.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentProvenance": {
      "description": "Structure to identify provenance relationships between annotations in different revisions.",
      "id": "GoogleCloudDocumentaiV1DocumentProvenance",
      "properties": {
        "id": {
          "description": "The Id of this operation. Needs to be unique within the scope of the revision.",
          "format": "int32",
          "type": "integer"
        },
        "parents": {
          "description": "References to the original elements that are replaced.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentProvenanceParent"
          },
          "type": "array"
        },
        "revision": {
          "description": "The index of the revision that produced this element.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "The type of provenance operation.",
          "enum": [
            "OPERATION_TYPE_UNSPECIFIED",
            "ADD",
            "REMOVE",
            "UPDATE",
            "REPLACE",
            "EVAL_REQUESTED",
            "EVAL_APPROVED",
            "EVAL_SKIPPED"
          ],
          "enumDescriptions": [
            "Operation type unspecified. If no operation is specified a provenance entry is simply used to match against a `parent`.",
            "Add an element.",
            "Remove an element identified by `parent`.",
            "Updates any fields within the given provenance scope of the message. It overwrites the fields rather than replacing them. Use this when you want to update a field value of an entity without also updating all the child properties.",
            "Currently unused. Replace an element identified by `parent`.",
            "Deprecated. Request human review for the element identified by `parent`.",
            "Deprecated. Element is reviewed and approved at human review, confidence will be set to 1.0.",
            "Deprecated. Element is skipped in the validation process."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentProvenanceParent": {
      "description": "The parent element the current element is based on. Used for referencing/aligning, removal and replacement operations.",
      "id": "GoogleCloudDocumentaiV1DocumentProvenanceParent",
      "properties": {
        "id": {
          "description": "The id of the parent provenance.",
          "format": "int32",
          "type": "integer"
        },
        "index": {
          "description": "The index of the parent item in the corresponding item list (eg. list of entities, properties within entities, etc.) in the parent revision.",
          "format": "int32",
          "type": "integer"
        },
        "revision": {
          "description": "The index of the index into current revision's parent_ids list.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentRevision": {
      "description": "Contains past or forward revisions of this document.",
      "id": "GoogleCloudDocumentaiV1DocumentRevision",
      "properties": {
        "agent": {
          "description": "If the change was made by a person specify the name or id of that person.",
          "type": "string"
        },
        "createTime": {
          "description": "The time that the revision was created, internally generated by doc proto storage at the time of create.",
          "format": "google-datetime",
          "type": "string"
        },
        "humanReview": {
          "$ref": "GoogleCloudDocumentaiV1DocumentRevisionHumanReview",
          "description": "Human Review information of this revision."
        },
        "id": {
          "description": "Id of the revision, internally generated by doc proto storage. Unique within the context of the document.",
          "type": "string"
        },
        "parent": {
          "description": "The revisions that this revision is based on. This can include one or more parent (when documents are merged.) This field represents the index into the `revisions` field.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "parentIds": {
          "description": "The revisions that this revision is based on. Must include all the ids that have anything to do with this revision - eg. there are `provenance.parent.revision` fields that index into this field.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "processor": {
          "description": "If the annotation was made by processor identify the processor by its resource name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentRevisionHumanReview": {
      "description": "Human Review information of the document.",
      "id": "GoogleCloudDocumentaiV1DocumentRevisionHumanReview",
      "properties": {
        "state": {
          "description": "Human review state. e.g. `requested`, `succeeded`, `rejected`.",
          "type": "string"
        },
        "stateMessage": {
          "description": "A message providing more details about the current state of processing. For example, the rejection reason when the state is `rejected`.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentShardInfo": {
      "description": "For a large document, sharding may be performed to produce several document shards. Each document shard contains this field to detail which shard it is.",
      "id": "GoogleCloudDocumentaiV1DocumentShardInfo",
      "properties": {
        "shardCount": {
          "description": "Total number of shards.",
          "format": "int64",
          "type": "string"
        },
        "shardIndex": {
          "description": "The 0-based index of this shard.",
          "format": "int64",
          "type": "string"
        },
        "textOffset": {
          "description": "The index of the first character in Document.text in the overall document global text.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentStyle": {
      "description": "Annotation for common text style attributes. This adheres to CSS conventions as much as possible.",
      "id": "GoogleCloudDocumentaiV1DocumentStyle",
      "properties": {
        "backgroundColor": {
          "$ref": "GoogleTypeColor",
          "description": "Text background color."
        },
        "color": {
          "$ref": "GoogleTypeColor",
          "description": "Text color."
        },
        "fontFamily": {
          "description": "Font family such as `Arial`, `Times New Roman`. https://www.w3schools.com/cssref/pr_font_font-family.asp",
          "type": "string"
        },
        "fontSize": {
          "$ref": "GoogleCloudDocumentaiV1DocumentStyleFontSize",
          "description": "Font size."
        },
        "fontWeight": {
          "description": "Font weight. Possible values are normal, bold, bolder, and lighter. https://www.w3schools.com/cssref/pr_font_weight.asp",
          "type": "string"
        },
        "textAnchor": {
          "$ref": "GoogleCloudDocumentaiV1DocumentTextAnchor",
          "description": "Text anchor indexing into the Document.text."
        },
        "textDecoration": {
          "description": "Text decoration. Follows CSS standard. https://www.w3schools.com/cssref/pr_text_text-decoration.asp",
          "type": "string"
        },
        "textStyle": {
          "description": "Text style. Possible values are normal, italic, and oblique. https://www.w3schools.com/cssref/pr_font_font-style.asp",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentStyleFontSize": {
      "description": "Font size with unit.",
      "id": "GoogleCloudDocumentaiV1DocumentStyleFontSize",
      "properties": {
        "size": {
          "description": "Font size for the text.",
          "format": "float",
          "type": "number"
        },
        "unit": {
          "description": "Unit for the font size. Follows CSS naming (in, px, pt, etc.).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentTextAnchor": {
      "description": "Text reference indexing into the Document.text.",
      "id": "GoogleCloudDocumentaiV1DocumentTextAnchor",
      "properties": {
        "content": {
          "description": "Contains the content of the text span so that users do not have to look it up in the text_segments. It is always populated for formFields.",
          "type": "string"
        },
        "textSegments": {
          "description": "The text segments from the Document.text.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentTextAnchorTextSegment"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentTextAnchorTextSegment": {
      "description": "A text segment in the Document.text. The indices may be out of bounds which indicate that the text extends into another document shard for large sharded documents. See ShardInfo.text_offset",
      "id": "GoogleCloudDocumentaiV1DocumentTextAnchorTextSegment",
      "properties": {
        "endIndex": {
          "description": "TextSegment half open end UTF-8 char index in the Document.text.",
          "format": "int64",
          "type": "string"
        },
        "startIndex": {
          "description": "TextSegment start UTF-8 char index in the Document.text.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1DocumentTextChange": {
      "description": "This message is used for text changes aka. OCR corrections.",
      "id": "GoogleCloudDocumentaiV1DocumentTextChange",
      "properties": {
        "changedText": {
          "description": "The text that replaces the text identified in the `text_anchor`.",
          "type": "string"
        },
        "provenance": {
          "description": "The history of this annotation.",
          "items": {
            "$ref": "GoogleCloudDocumentaiV1DocumentProvenance"
          },
          "type": "array"
        },
        "textAnchor": {
          "$ref": "GoogleCloudDocumentaiV1DocumentTextAnchor",
          "description": "Provenance of the correction. Text anchor indexing into the Document.text. There can only be a single `TextAnchor.text_segments` element. If the start and end index of the text segment are the same, the text change is inserted before that index."
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1NormalizedVertex": {
      "description": "A vertex represents a 2D point in the image. NOTE: the normalized vertex coordinates are relative to the original image and range from 0 to 1.",
      "id": "GoogleCloudDocumentaiV1NormalizedVertex",
      "properties": {
        "x": {
          "description": "X coordinate.",
          "format": "float",
          "type": "number"
        },
        "y": {
          "description": "Y coordinate (starts from the top of the image).",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleCloudDocumentaiV1Vertex": {
      "description": "A vertex represents a 2D point in the image. NOTE: the vertex coordinates are in the same scale as the original image.",
      "id": "GoogleCloudDocumentaiV1Vertex",
      "properties": {
        "x": {
          "description": "X coordinate.",
          "format": "int32",
          "type": "integer"
        },
        "y": {
          "description": "Y coordinate (starts from the top of the image).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleIamV1AuditConfig": {
      "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts `jose@example.com` from DATA_READ logging, and `aliya@example.com` from DATA_WRITE logging.",
      "id": "GoogleIamV1AuditConfig",
      "properties": {
        "auditLogConfigs": {
          "description": "The configuration for logging of each type of permission.",
          "items": {
            "$ref": "GoogleIamV1AuditLogConfig"
          },
          "type": "array"
        },
        "service": {
          "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleIamV1AuditLogConfig": {
      "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
      "id": "GoogleIamV1AuditLogConfig",
      "properties": {
        "exemptedMembers": {
          "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "logType": {
          "description": "The log type that this config enables.",
          "enum": [
            "LOG_TYPE_UNSPECIFIED",
            "ADMIN_READ",
            "DATA_WRITE",
            "DATA_READ"
          ],
          "enumDescriptions": [
            "Default case. Should never be this.",
            "Admin reads. Example: CloudIAM getIamPolicy",
            "Data writes. Example: CloudSQL Users create",
            "Data reads. Example: CloudSQL Users list"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleIamV1Binding": {
      "description": "Associates `members`, or principals, with a `role`.",
      "id": "GoogleIamV1Binding",
      "properties": {
        "condition": {
          "$ref": "GoogleTypeExpr",
          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
        },
        "members": {
          "description": "Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "role": {
          "description": "Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleIamV1Policy": {
      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members`, or principals, to a single `role`. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
      "id": "GoogleIamV1Policy",
      "properties": {
        "auditConfigs": {
          "description": "Specifies cloud audit logging configuration for this policy.",
          "items": {
            "$ref": "GoogleIamV1AuditConfig"
          },
          "type": "array"
        },
        "bindings": {
          "description": "Associates a list of `members`, or principals, with a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one principal. The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250 of these principals can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the `bindings` grant 50 different roles to `user:alice@example.com`, and not to any other principal, then you can add another 1,450 principals to the `bindings` in the `Policy`.",
          "items": {
            "$ref": "GoogleIamV1Binding"
          },
          "type": "array"
        },
        "etag": {
          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
          "format": "byte",
          "type": "string"
        },
        "version": {
          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaAvailabilityPeriod": {
      "description": "Represents the information about user's working hours during one day. Note that a period on Monday from 18:00 - 00:00 is represented as a triplet (1, 1080, 1440).",
      "id": "GoogleInternalAppsWaldoV1alphaAvailabilityPeriod",
      "properties": {
        "dayOfWeek": {
          "description": "Day of week, 0 for Sunday, 1 for Monday, ...",
          "format": "int32",
          "type": "integer"
        },
        "periodEndMinutes": {
          "description": "Period end, in minutes from the start of the day, exclusive.",
          "format": "int32",
          "type": "integer"
        },
        "periodStartMinutes": {
          "description": "Period start, in minutes from the start of the day, inclusive.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaCalendarBusy": {
      "description": "The status indicating the user is temporarily busy and there is not a more specific status derived from calendar that applies (e.g., InMeeting or DoNotDisturb).",
      "id": "GoogleInternalAppsWaldoV1alphaCalendarBusy",
      "properties": {
        "committedUntil": {
          "description": "The time when the user will either stop being committed or change commitment type (i.e. InMeeting, DoNotDisturb, Busy or OutOfOffice < Xh). Note that the goal of this field is to provide information to help users decide how to communicate with a user (see also http://shortn/_wXYXtZScgh).",
          "format": "google-datetime",
          "type": "string"
        },
        "committedUntilIsMixed": {
          "description": "TODO(b/265939748) To be removed, always false.",
          "type": "boolean"
        },
        "eventSummary": {
          "description": "The summary of the corresponding event in Calendar.",
          "type": "string"
        },
        "nextAvailable": {
          "description": "The next time when the user will be available, i.e., when their status will be neither InMeeting, CalendarBusy, DoNotDisturb, OutsideWorkingHours, nor OutOfOffice.",
          "format": "google-datetime",
          "type": "string"
        },
        "occupiedUntil": {
          "description": "The time when the user will stop being occupied, i.e., when their status will be neither inMeeting, Busy nor DoNotDisturb.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaCustomLocation": {
      "description": "Custom location specified by the user.",
      "id": "GoogleInternalAppsWaldoV1alphaCustomLocation",
      "properties": {
        "geoCoordinates": {
          "$ref": "GoogleTypeLatLng",
          "description": "Geographic location as geo coordinates."
        },
        "label": {
          "description": "The custom location label as a string entered manually by the user.",
          "type": "string"
        },
        "location": {
          "description": "Geographic location as free-form text.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaDoNotDisturb": {
      "description": "The status indicating the user should not be disturbed.",
      "id": "GoogleInternalAppsWaldoV1alphaDoNotDisturb",
      "properties": {
        "committedUntil": {
          "description": "The time when the user will either stop being committed or change commitment type (i.e. InMeeting, DoNotDisturb, Busy or OutOfOffice < Xh). Note that the goal of this field is to provide information to help users decide how to communicate with a user (see also http://shortn/_wXYXtZScgh).",
          "format": "google-datetime",
          "type": "string"
        },
        "committedUntilIsMixed": {
          "description": "TODO(b/265939748) To be removed, always false.",
          "type": "boolean"
        },
        "nextAvailable": {
          "description": "The next time when the user will be available, i.e., when their status will be neither InMeeting, CalendarBusy, DoNotDisturb, OutsideWorkingHours, nor OutOfOffice.",
          "format": "google-datetime",
          "type": "string"
        },
        "occupiedUntil": {
          "description": "The time when the user will stop being occupied, i.e., when their status will be neither inMeeting, Busy nor DoNotDisturb.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaHomeLocation": {
      "description": "Home location.",
      "id": "GoogleInternalAppsWaldoV1alphaHomeLocation",
      "properties": {},
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaInMeeting": {
      "description": "The status indicating the user is in a meeting.",
      "id": "GoogleInternalAppsWaldoV1alphaInMeeting",
      "properties": {
        "committedUntil": {
          "description": "The time when the user will either stop being committed or change commitment type (i.e. InMeeting, DoNotDisturb, Busy or OutOfOffice < Xh). Note that the goal of this field is to provide information to help users decide how to communicate with a user (see also http://shortn/_wXYXtZScgh).",
          "format": "google-datetime",
          "type": "string"
        },
        "committedUntilIsMixed": {
          "description": "TODO(b/265939748) To be removed, always false.",
          "type": "boolean"
        },
        "eventSummary": {
          "description": "The summary of the corresponding event in Calendar.",
          "type": "string"
        },
        "inMeetingsUntil": {
          "description": "The time when the user will stop being in a meeting.",
          "format": "google-datetime",
          "type": "string"
        },
        "nextAvailable": {
          "description": "The next time when the user will be available, i.e., when their status will be neither InMeeting, CalendarBusy, DoNotDisturb, OutsideWorkingHours, nor OutOfOffice.",
          "format": "google-datetime",
          "type": "string"
        },
        "occupiedUntil": {
          "description": "The time when the user will stop being occupied, i.e., when their status will be neither InMeeting, Busy nor DoNotDisturb.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaInactive": {
      "description": "The status indicating that no other status applies.",
      "id": "GoogleInternalAppsWaldoV1alphaInactive",
      "properties": {},
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaLocalTimeContext": {
      "description": "Context which helps to determine the user's local time.",
      "id": "GoogleInternalAppsWaldoV1alphaLocalTimeContext",
      "properties": {
        "timeZone": {
          "description": "The current time zone of the user. Represented as a valid time zone ID from Olson database, like \"Europe/Zurich\" (see http://google3/i18n/identifiers/data/timezones.txt).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaOfficeLocation": {
      "description": "Office location.",
      "id": "GoogleInternalAppsWaldoV1alphaOfficeLocation",
      "properties": {
        "experimentalBuildingId": {
          "description": "Experimental. Can change or disappear without warning or notice. References a building from http://google3/ccc/hosted/api/rosy/resources/calendar/building.proto For example \"US-NYC-9TH\".",
          "type": "string"
        },
        "experimentalDeskId": {
          "description": "Experimental. Can change or disappear without warning or notice. The desk id. For example \"11E358K\".",
          "type": "string"
        },
        "experimentalFloorId": {
          "description": "Experimental. Can change or disappear without warning or notice. The floor id. For example \"11\".",
          "type": "string"
        },
        "label": {
          "description": "The display label of this office location. For example a building name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaOutOfOffice": {
      "description": "The status indicating the user is out of office.",
      "id": "GoogleInternalAppsWaldoV1alphaOutOfOffice",
      "properties": {
        "comeBackTime": {
          "description": "The closest time when the user will be available after this OOO block. This might be different from the end of the OOO block in Calendar, since the OOO block might end on Friday evening, and then the user is outside working hours.",
          "format": "google-datetime",
          "type": "string"
        },
        "committedUntil": {
          "description": "The time when the user will either stop being committed or change commitment type (i.e. InMeeting, DoNotDisturb, Busy or OutOfOffice < Xh). Note that the goal of this field is to provide information to help users decide how to communicate with a user (see also http://shortn/_wXYXtZScgh). Note that if this OOO block is large (>=Xh), committed_until is not set.",
          "format": "google-datetime",
          "type": "string"
        },
        "committedUntilIsMixed": {
          "description": "TODO(b/265939748) To be removed, always false.",
          "type": "boolean"
        },
        "eventSummary": {
          "description": "The summary of the corresponding OOO block in Calendar. This is entered by the user, so we return it \"as is\" - no i18n.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaOutsideWorkingHours": {
      "description": "The status indicating the user doesn't work at this time.",
      "id": "GoogleInternalAppsWaldoV1alphaOutsideWorkingHours",
      "properties": {
        "comeBackTime": {
          "description": "The closest time when the user will be available after this block. This might be different from the start of the working hours in Calendar, because the given OutsideWorkingHours interval might be followed by OOO.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaTimeRange": {
      "description": "A time range, which includes the start and excludes the end.",
      "id": "GoogleInternalAppsWaldoV1alphaTimeRange",
      "properties": {
        "endTime": {
          "description": "End point of the range, exclusive.",
          "format": "google-datetime",
          "type": "string"
        },
        "startTime": {
          "description": "Starting point of the range, inclusive.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUpcomingCommitmentContext": {
      "id": "GoogleInternalAppsWaldoV1alphaUpcomingCommitmentContext",
      "properties": {
        "nextCommitmentStatus": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUserStatus",
          "description": "The status of the commitment above."
        },
        "nextCommitmentTime": {
          "description": "The most relevant upcoming commitment (InMeeting, DoNotDisturb, CalendarBusy or OutOfOffice). This context is set only if there is an upcoming commitment to show, and only on non commitments. Priority is given to the next closest commitment if its start is close enough to this event, otherwise the next large OOO if there is one.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUpcomingOooContext": {
      "description": "The context indicating the user's upcoming Out of Office event.",
      "id": "GoogleInternalAppsWaldoV1alphaUpcomingOooContext",
      "properties": {
        "timeRange": {
          "$ref": "GoogleInternalAppsWaldoV1alphaTimeRange",
          "description": "The future period of absence. The start of this timerange is the start of the future Out of Office event. The end of this timerange represents the come back time of the user from that future OOO event. Note that the come back time might be different (greater) than the end of the corresponding future OOO event due to other non-working user status intervals that it may be followed by."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUserAvailabilities": {
      "description": "The current and future availabilities of a user. The response contains a timeline, which starts before or at the request time, and the timeline is split into a set of disjoint intervals (without gaps), where the first range always contains the request time. Each range represents what should be displayed in the UI during this time range. The time range might be different from the actual time range of the underlying status. For example, if the user is OOO from 09:00 to 10:00, and a request is made at 8:00, the response might contain two intervals: [08:00, 09:00) - \"User is INACTIVE, but leaving the office soon\" [09:00, 10:00) - \"User is OOO till 10:00\" For intervals that don't have a clear availability signal coming from Calendar (e.g. OOO), we return INACTIVE. For more details, please see https://docs.google.com/presentation/d/1ADCTxGawjF9UqMnfuVrVNxGvdyjeiV8h4D7p0a9zYgw/edit#slide=id.g3e2824ac6c_12_94 The service returns availabilities for some short period of time - likely one day, but the client should stick to the \"next_poll_time\" to decide when to query the server again at the latest. Below there is an example response from the server. Let's assume the client calls the service at 17:59:45. The client receives the message and, assuming its current time is between [17:59:45, 18:00:00), it displays \"inactive\". When the current time becomes 18:00:00 it displays \"outside working hours\". At 18:00:40 the client issues another rpc which will return the availabilities for the next minute. The original response looks like availabilities { time_range { start_time: 17:59:45 end_time: 18:00:00 } status { inactive {} } } availabilities { time_range { start_time: 18:00:00 end_time: 18:00:45 } status { outside_working_hours { } } } next_poll_time: 18:00:40",
      "id": "GoogleInternalAppsWaldoV1alphaUserAvailabilities",
      "properties": {
        "availabilities": {
          "description": "A list of user availabilities having contiguous time ranges which are ordered chronologically. The first one starts at the time of the request or before, and is guaranteed to contain the request time. That means the first element always indicates the current status of a user. A client that wants to display a user's availability in real time should display the availability whose time range contains the current time.",
          "items": {
            "$ref": "GoogleInternalAppsWaldoV1alphaUserAvailability"
          },
          "type": "array"
        },
        "nextPollTime": {
          "description": "The time at which the client should issue the next availability query for this user. This field should only be used to control the polling frequency. This time is always before the end of the time range of the last availability so that the client always knows the current availability.",
          "format": "google-datetime",
          "type": "string"
        },
        "workingHours": {
          "$ref": "GoogleInternalAppsWaldoV1alphaWorkingHours",
          "description": "Information about the user's working hours. This will only be set in case working hours are enabled in their calendar settings."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUserAvailability": {
      "description": "A single availability range. The displayed status should be the same during the entire time range.",
      "id": "GoogleInternalAppsWaldoV1alphaUserAvailability",
      "properties": {
        "contexts": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUserContext",
          "description": "The contexts contain additional information about the current user's availability or its upcoming changes. The client doesn't need to extract certain bits to visualize the status or apply custom logic based on the content of this field: the status field should contain everything needed for the correct visualization."
        },
        "status": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUserStatus",
          "description": "The user status during the time range."
        },
        "timeRange": {
          "$ref": "GoogleInternalAppsWaldoV1alphaTimeRange",
          "description": "The time range when this availability should be displayed."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUserContext": {
      "description": "Additional context about the user's current and/or future availability to give a better understanding of the status (\"Working from Zurich\").",
      "id": "GoogleInternalAppsWaldoV1alphaUserContext",
      "properties": {
        "localTime": {
          "$ref": "GoogleInternalAppsWaldoV1alphaLocalTimeContext",
          "description": "Helps to determine the user's local time by providing their current time zone."
        },
        "upcomingCommitmentContext": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUpcomingCommitmentContext",
          "description": "Information about upcoming events."
        },
        "upcomingOoo": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUpcomingOooContext",
          "description": "Set if user has upcoming OOO."
        },
        "workingElsewhere": {
          "$ref": "GoogleInternalAppsWaldoV1alphaWorkingElsewhereContext",
          "description": "Set if the user has a working location. Not just elsewhere (legacy name)."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUserLocation": {
      "description": "Location of the user, which might be \"home\", for example, or an office building, as well as a custom location specified by the user.",
      "id": "GoogleInternalAppsWaldoV1alphaUserLocation",
      "properties": {
        "customLocation": {
          "$ref": "GoogleInternalAppsWaldoV1alphaCustomLocation",
          "description": "Indicates the user is working from some other location."
        },
        "homeLocation": {
          "$ref": "GoogleInternalAppsWaldoV1alphaHomeLocation",
          "description": "Indicates the user is working from home."
        },
        "officeLocation": {
          "$ref": "GoogleInternalAppsWaldoV1alphaOfficeLocation",
          "description": "Indicates the user is working from the office."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaUserStatus": {
      "description": "The actual status of the user. The message contains everything needed for visualisation of this status.",
      "id": "GoogleInternalAppsWaldoV1alphaUserStatus",
      "properties": {
        "calendarBusy": {
          "$ref": "GoogleInternalAppsWaldoV1alphaCalendarBusy",
          "description": "Set if the user is temporarily busy and there is not a more specific status derived from calendar that applies (e.g., InMeeting or DoNotDisturb)."
        },
        "doNotDisturb": {
          "$ref": "GoogleInternalAppsWaldoV1alphaDoNotDisturb",
          "description": "Set if the user is in a Focus Time block. Note that this is different than Chat's Do not disturb status, but they may coincide, see: go/focus-time-dnd."
        },
        "inMeeting": {
          "$ref": "GoogleInternalAppsWaldoV1alphaInMeeting",
          "description": "Set if the user is in a meeting."
        },
        "inactive": {
          "$ref": "GoogleInternalAppsWaldoV1alphaInactive",
          "description": "Set if no other statuses apply."
        },
        "outOfOffice": {
          "$ref": "GoogleInternalAppsWaldoV1alphaOutOfOffice",
          "description": "Set if the user is out of office."
        },
        "outsideWorkingHours": {
          "$ref": "GoogleInternalAppsWaldoV1alphaOutsideWorkingHours",
          "description": "Set if the user doesn't work at this time."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaWorkingElsewhereContext": {
      "description": "The context providing the User Location (not just Elsewhere). This is a legacy name from when it was only set for users working remotely, now it is also set when the user is working from the office.",
      "id": "GoogleInternalAppsWaldoV1alphaWorkingElsewhereContext",
      "properties": {
        "location": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUserLocation",
          "description": "The new location of the user. Might represent home, office, or a custom address on the map."
        }
      },
      "type": "object"
    },
    "GoogleInternalAppsWaldoV1alphaWorkingHours": {
      "description": "Information about the user's working hours.",
      "id": "GoogleInternalAppsWaldoV1alphaWorkingHours",
      "properties": {
        "availableTime": {
          "description": "A list of availability periods representing the user's working hours as configured in calendar.",
          "items": {
            "$ref": "GoogleInternalAppsWaldoV1alphaAvailabilityPeriod"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleInternalCommunicationsInstantmessagingV1Id": {
      "description": "Id for message recipients, e.g. users, groups etc.",
      "id": "GoogleInternalCommunicationsInstantmessagingV1Id",
      "properties": {
        "app": {
          "description": "app is the tachyon client application that generated or is to receive a message.",
          "type": "string"
        },
        "countryCode": {
          "description": "country_code is the E164_COUNTRY_CODE format country code for this id, used as a hint for its region. E.g, \"+1\" will be used for North America, \"+86\" will be used for China, etc. Should be filled only for RCS group id.",
          "type": "string"
        },
        "id": {
          "description": "id is a unique (for this type and app) identifier of a message source or recipient.",
          "type": "string"
        },
        "locationHint": {
          "$ref": "GoogleInternalCommunicationsInstantmessagingV1LocationHint",
          "description": "location_hint is used as a hint for the user's region."
        },
        "routingInfoToken": {
          "description": "Raw byte array containing encoded routing information. Clients of Tachyon are expected to include the most recent routing_info_cookie that they have received from the server in the requests that they make. Its format is purposely opaque so that clients do not need to concern themselves with the content of this field. This field is expected to be used primarily by Tachygram clients for go/tachygram-groups to simplify the API contract for group operations while reducing the need for unnecessary lookups.",
          "format": "byte",
          "type": "string"
        },
        "type": {
          "description": "type defines what the id field contains, e.g. phone number, Fi-number, Gaia ID etc.",
          "enum": [
            "UNSET",
            "PHONE_NUMBER",
            "GROUP_ID",
            "FIREBALL_BOT",
            "CALL_CONTROLLER",
            "SUGGESTER",
            "FI_ID",
            "SYSTEM",
            "DUO_BOT",
            "MATCHBOX_ID",
            "RCS_BOT",
            "WIREBALL",
            "SERVICE_ACCOUNT",
            "DEVICE_ID",
            "FOREIGN_RCS_GROUP",
            "DITTO",
            "EMAIL",
            "GAIA_ID",
            "LIGHTER_ID",
            "OPAQUE_ID",
            "SERVER",
            "SHORT_CODE",
            "CLOUDCAST_PLAYER_ID",
            "CHROMOTING_ID",
            "UNNORMALIZABLE_PHONE_NUMBER",
            "NOT_KNOWN",
            "ANDROID_ID",
            "NEARBY_ID",
            "WAZE_ID",
            "GUEST",
            "MESSAGES_DATA_DONATION",
            "DUO_CLIP_ID",
            "ACCOUNT_ID",
            "CARRIER_ID",
            "EXTERNAL_PARTNER_ID",
            "UNAUTHENTICATED_USER_ID",
            "SUPPORT_CASES_ID",
            "FITBIT_P11_ID",
            "SHORT_PHONE_NUMBER"
          ],
          "enumDescriptions": [
            "",
            "E.164 format.",
            "",
            "Handled by Extractor",
            "Handled by Call Controller Message Receiver.",
            "",
            "IDs of this type will be verified using a Fi service.",
            "Used for any system-generated, internal and external",
            "messages. ex: Duo's invite reward. Bots for Duo",
            "Used by Matchbox for 1P/3P App Preview Messaging.",
            "RCS BOT for sending message to Platinum",
            "Web Client for Fireball",
            "Service account, currently only used for Duo API.",
            "Device ID used by Matchstick anonymous registrations.",
            "Rcs group hosted by another RCS cloud.",
            "Android messages desktop: go/android-messages-desktop.",
            "Email address.",
            "Only used by servers.",
            "Used by Lighter platform: go/lighter-backend-api.",
            "Used by spam server as a special id type that allows",
            "apps that support external ids. Used for server delivery. go/tachyon_server_delivery",
            "Phone short code.",
            "Used by cloudcast (yeti). 64 bit integer.",
            "go/yeti-player-ids Chrome Remote Desktop (go/chromoting).",
            "Unnormalizable phone number",
            "client does not know the id type.",
            "android id",
            "Used by Nearby devices. go/tachyon-express-nearby.",
            "Used by Waze. go/waze-tachyon.",
            "Used by Duo currently.",
            "Used by Android Messages for data donation.",
            "Used as the Id Type of Clips From Duo clips. See http://go/clips-from-duo",
            "used by Takeout/LIS: see go/tachyon-legal-takeout.",
            "used by RCS NNI Notification",
            "used by RCS NNI Notification",
            "used by GMM for anonymous registration",
            "used by Support Cases for Realtime Media WebRtc",
            "signaling. go/cases-media-channel-dd. used by Fitbit Project 11 for messaging.",
            "Short phone number: go/shortnumbers"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleInternalCommunicationsInstantmessagingV1LocationHint": {
      "description": "LocationHint is used to specify a location as well as format.",
      "id": "GoogleInternalCommunicationsInstantmessagingV1LocationHint",
      "properties": {
        "format": {
          "description": "the format of location.",
          "enum": [
            "UNKNOWN",
            "E164_CALLING",
            "ISO_3166_1_ALPHA_2"
          ],
          "enumDescriptions": [
            "",
            "E164 country codes: https://en.wikipedia.org/wiki/List_of_country_calling_codes e.g. +1 for USA",
            "ISO 3166-1 alpha-2 country codes: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2"
          ],
          "type": "string"
        },
        "location": {
          "description": "Location is the location, provided in the format specified by format.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleLongrunningOperation": {
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "id": "GoogleLongrunningOperation",
      "properties": {
        "done": {
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
          "type": "boolean"
        },
        "error": {
          "$ref": "GoogleRpcStatus",
          "description": "The error result of the operation in case of failure or cancellation."
        },
        "metadata": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
          "type": "object"
        },
        "name": {
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
          "type": "string"
        },
        "response": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "GoogleProtobufEmpty": {
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
      "id": "GoogleProtobufEmpty",
      "properties": {},
      "type": "object"
    },
    "GoogleRpcStatus": {
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "id": "GoogleRpcStatus",
      "properties": {
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "format": "int32",
          "type": "integer"
        },
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "additionalProperties": {
              "description": "Properties of the object. Contains field @type with type URL.",
              "type": "any"
            },
            "type": "object"
          },
          "type": "array"
        },
        "message": {
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleTypeColor": {
      "description": "Represents a color in the RGBA color space. This representation is designed for simplicity of conversion to/from color representations in various languages over compactness. For example, the fields of this representation can be trivially provided to the constructor of `java.awt.Color` in Java; it can also be trivially provided to UIColor's `+colorWithRed:green:blue:alpha` method in iOS; and, with just a little work, it can be easily formatted into a CSS `rgba()` string in JavaScript. This reference page doesn't carry information about the absolute color space that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, applications should assume the sRGB color space. When color equality needs to be decided, implementations, unless documented otherwise, treat two colors as equal if all their red, green, blue, and alpha values each differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... public static java.awt.Color fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); } public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float green = (float) color.getGreen(); float blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / denominator) .build()); } return resultBuilder.build(); } // ... Example (iOS / Obj-C): // ... static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green = [protocolor green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha; if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { return nil; } Color* result = [[Color alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:blue]; if (alpha <= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease]; return result; } // ... Example (JavaScript): // ... var protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) { return rgbToCssColor(red, green, blue); } var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ',', alphaFrac, ')'].join(''); }; var rgbToCssColor = function(red, green, blue) { var rgbNumber = new Number((red << 16) | (green << 8) | blue); var hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) { resultBuilder.push('0'); } resultBuilder.push(hexString); return resultBuilder.join(''); }; // ...",
      "id": "GoogleTypeColor",
      "properties": {
        "alpha": {
          "description": "The fraction of this color that should be applied to the pixel. That is, the final pixel color is defined by the equation: `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)` This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a completely transparent color. This uses a wrapper message rather than a simple float scalar so that it is possible to distinguish between a default value and the value being unset. If omitted, this color object is rendered as a solid color (as if the alpha value had been explicitly given a value of 1.0).",
          "format": "float",
          "type": "number"
        },
        "blue": {
          "description": "The amount of blue in the color as a value in the interval [0, 1].",
          "format": "float",
          "type": "number"
        },
        "green": {
          "description": "The amount of green in the color as a value in the interval [0, 1].",
          "format": "float",
          "type": "number"
        },
        "red": {
          "description": "The amount of red in the color as a value in the interval [0, 1].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleTypeDate": {
      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay * google.type.DateTime * google.protobuf.Timestamp",
      "id": "GoogleTypeDate",
      "properties": {
        "day": {
          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
          "format": "int32",
          "type": "integer"
        },
        "month": {
          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
          "format": "int32",
          "type": "integer"
        },
        "year": {
          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleTypeDateTime": {
      "description": "Represents civil time (or occasionally physical time). This type can represent a civil time in one of a few possible ways: * When utc_offset is set and time_zone is unset: a civil time on a calendar day with a particular offset from UTC. * When time_zone is set and utc_offset is unset: a civil time on a calendar day in a particular time zone. * When neither time_zone nor utc_offset is set: a civil time on a calendar day in local time. The date is relative to the Proleptic Gregorian Calendar. If year, month, or day are 0, the DateTime is considered not to have a specific year, month, or day respectively. This type may also be used to represent a physical time if all the date and time fields are set and either case of the `time_offset` oneof is set. Consider using `Timestamp` message for physical time instead. If your use case also would like to store the user's timezone, that can be done in another field. This type is more flexible than some applications may want. Make sure to document and validate your application's limitations.",
      "id": "GoogleTypeDateTime",
      "properties": {
        "day": {
          "description": "Optional. Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a datetime without a day.",
          "format": "int32",
          "type": "integer"
        },
        "hours": {
          "description": "Optional. Hours of day in 24 hour format. Should be from 0 to 23, defaults to 0 (midnight). An API may choose to allow the value \"24:00:00\" for scenarios like business closing time.",
          "format": "int32",
          "type": "integer"
        },
        "minutes": {
          "description": "Optional. Minutes of hour of day. Must be from 0 to 59, defaults to 0.",
          "format": "int32",
          "type": "integer"
        },
        "month": {
          "description": "Optional. Month of year. Must be from 1 to 12, or 0 if specifying a datetime without a month.",
          "format": "int32",
          "type": "integer"
        },
        "nanos": {
          "description": "Optional. Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999, defaults to 0.",
          "format": "int32",
          "type": "integer"
        },
        "seconds": {
          "description": "Optional. Seconds of minutes of the time. Must normally be from 0 to 59, defaults to 0. An API may allow the value 60 if it allows leap-seconds.",
          "format": "int32",
          "type": "integer"
        },
        "timeZone": {
          "$ref": "GoogleTypeTimeZone",
          "description": "Time zone."
        },
        "utcOffset": {
          "description": "UTC offset. Must be whole seconds, between -18 hours and +18 hours. For example, a UTC offset of -4:00 would be represented as { seconds: -14400 }.",
          "format": "google-duration",
          "type": "string"
        },
        "year": {
          "description": "Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a datetime without a year.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleTypeExpr": {
      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
      "id": "GoogleTypeExpr",
      "properties": {
        "description": {
          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
          "type": "string"
        },
        "expression": {
          "description": "Textual representation of an expression in Common Expression Language syntax.",
          "type": "string"
        },
        "location": {
          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
          "type": "string"
        },
        "title": {
          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleTypeInterval": {
      "description": "Represents a time interval, encoded as a Timestamp start (inclusive) and a Timestamp end (exclusive). The start must be less than or equal to the end. When the start equals the end, the interval is empty (matches no time). When both start and end are unspecified, the interval matches any time.",
      "id": "GoogleTypeInterval",
      "properties": {
        "endTime": {
          "description": "Optional. Exclusive end of the interval. If specified, a Timestamp matching this interval will have to be before the end.",
          "format": "google-datetime",
          "type": "string"
        },
        "startTime": {
          "description": "Optional. Inclusive start of the interval. If specified, a Timestamp matching this interval will have to be the same or after the start.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleTypeLatLng": {
      "description": "An object that represents a latitude/longitude pair. This is expressed as a pair of doubles to represent degrees latitude and degrees longitude. Unless specified otherwise, this object must conform to the WGS84 standard. Values must be within normalized ranges.",
      "id": "GoogleTypeLatLng",
      "properties": {
        "latitude": {
          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
          "format": "double",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "GoogleTypeMoney": {
      "description": "Represents an amount of money with its currency type.",
      "id": "GoogleTypeMoney",
      "properties": {
        "currencyCode": {
          "description": "The three-letter currency code defined in ISO 4217.",
          "type": "string"
        },
        "nanos": {
          "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
          "format": "int32",
          "type": "integer"
        },
        "units": {
          "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleTypePostalAddress": {
      "description": "Represents a postal address, e.g. for postal delivery or payments addresses. Given a postal address, a postal service can deliver items to a premise, P.O. Box or similar. It is not intended to model geographical locations (roads, towns, mountains). In typical usage an address would be created via user input or from importing existing data, depending on the type of process. Advice on address input / editing: - Use an internationalization-ready address widget such as https://github.com/google/libaddressinput) - Users should not be presented with UI elements for input or editing of fields outside countries where that field is used. For more guidance on how to use this schema, please see: https://support.google.com/business/answer/6397478",
      "id": "GoogleTypePostalAddress",
      "properties": {
        "addressLines": {
          "description": "Unstructured address lines describing the lower levels of an address. Because values in address_lines do not have type information and may sometimes contain multiple values in a single field (e.g. \"Austin, TX\"), it is important that the line order is clear. The order of address lines should be \"envelope order\" for the country/region of the address. In places where this can vary (e.g. Japan), address_language is used to make it explicit (e.g. \"ja\" for large-to-small ordering and \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of an address can be selected based on the language. The minimum permitted structural representation of an address consists of a region_code with all remaining information placed in the address_lines. It would be possible to format such an address very approximately without geocoding, but no semantic reasoning could be made about any of the address components until it was at least partially resolved. Creating an address only containing a region_code and address_lines, and then geocoding is the recommended way to handle completely unstructured addresses (as opposed to guessing which parts of the address should be localities or administrative areas).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "administrativeArea": {
          "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.",
          "type": "string"
        },
        "languageCode": {
          "description": "Optional. BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. If this value is not known, it should be omitted (rather than specifying a possibly incorrect default). Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".",
          "type": "string"
        },
        "locality": {
          "description": "Optional. Generally refers to the city/town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave locality empty and use address_lines.",
          "type": "string"
        },
        "organization": {
          "description": "Optional. The name of the organization at the address.",
          "type": "string"
        },
        "postalCode": {
          "description": "Optional. Postal code of the address. Not all countries use or require postal codes to be present, but where they are used, they may trigger additional validation with other parts of the address (e.g. state/zip validation in the U.S.A.).",
          "type": "string"
        },
        "recipients": {
          "description": "Optional. The recipient at the address. This field may, under certain circumstances, contain multiline information. For example, it might contain \"care of\" information.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "regionCode": {
          "description": "Required. CLDR region code of the country/region of the address. This is never inferred and it is up to the user to ensure the value is correct. See https://cldr.unicode.org/ and https://www.unicode.org/cldr/charts/30/supplemental/territory_information.html for details. Example: \"CH\" for Switzerland.",
          "type": "string"
        },
        "revision": {
          "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is the latest revision. All new revisions **must** be backward compatible with old revisions.",
          "format": "int32",
          "type": "integer"
        },
        "sortingCode": {
          "description": "Optional. Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (e.g. C\u00f4te d'Ivoire).",
          "type": "string"
        },
        "sublocality": {
          "description": "Optional. Sublocality of the address. For example, this can be neighborhoods, boroughs, districts.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GoogleTypeTimeOfDay": {
      "description": "Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may choose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`.",
      "id": "GoogleTypeTimeOfDay",
      "properties": {
        "hours": {
          "description": "Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value \"24:00:00\" for scenarios like business closing time.",
          "format": "int32",
          "type": "integer"
        },
        "minutes": {
          "description": "Minutes of hour of day. Must be from 0 to 59.",
          "format": "int32",
          "type": "integer"
        },
        "nanos": {
          "description": "Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.",
          "format": "int32",
          "type": "integer"
        },
        "seconds": {
          "description": "Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "GoogleTypeTimeZone": {
      "description": "Represents a time zone from the [IANA Time Zone Database](https://www.iana.org/time-zones).",
      "id": "GoogleTypeTimeZone",
      "properties": {
        "id": {
          "description": "IANA Time Zone Database time zone, e.g. \"America/New_York\".",
          "type": "string"
        },
        "version": {
          "description": "Optional. IANA Time Zone Database version number, e.g. \"2019a\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GroupsPerDocData": {
      "id": "GroupsPerDocData",
      "properties": {
        "AuthorId": {
          "format": "uint64",
          "type": "string"
        },
        "GroupGaiaId": {
          "format": "uint64",
          "type": "string"
        },
        "GroupId": {
          "description": "Legacy group mysql id.",
          "format": "uint64",
          "type": "string"
        },
        "ThreadId": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HomeGraphCommonRoute": {
      "id": "HomeGraphCommonRoute",
      "properties": {
        "agentDeviceId": {
          "description": "The device ID defined by the agent.",
          "type": "string"
        },
        "agentId": {
          "description": "The agent's ID. Generally it is the agent's Google cloud project id.",
          "type": "string"
        },
        "chipEndpoint": {
          "description": "chip endpoint index (if the target is CHIP). Set packed = true to handle error caused by b/32953375 when exporting this data. Note that we should never change this to non-repeated: a packed field will not work properly if you change the field to non-repeated later.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "targetType": {
          "description": "Execution routing target.",
          "enum": [
            "UNSPECIFIED",
            "PARTNER_CLOUD",
            "LOCAL",
            "CHIP"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "HomeGraphCommonRoutingTable": {
      "description": "Defines execution routing information for Traits, which will be used to be mapped for each Trait as following: map traits_to_routing_table_map = X; We'll use this for CHIP first. And expect to migrate the existing routing logic to this gradually.",
      "id": "HomeGraphCommonRoutingTable",
      "properties": {
        "supportedRoutes": {
          "description": "List of supported execution route.",
          "items": {
            "$ref": "HomeGraphCommonRoute"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "HomeGraphCommonTraitRoutingHints": {
      "description": "LINT.IfChange go/shed-per-trait-routing. Making it object to allow for extendible design, where we can add attributes in future.",
      "id": "HomeGraphCommonTraitRoutingHints",
      "properties": {
        "cloudFulfillmentOnly": {
          "description": "Set to true for a non-local trait.",
          "type": "boolean"
        },
        "trait": {
          "description": "Trait name, e.g., \"action.devices.traits.MediaInitiation\". See [device traits](https://developers.home.google.com/cloud-to-cloud/traits). See java/com/google/home/graph/common/devices/config/protoconf.pi for the exhaustive list of trait-strings.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoAnonTimingStatPair": {
      "description": "TimingStatPair message stores a timing period name and a time value. This is intentionally vague for doing fine level timing of rendering as what we measure is likely to change as we iterate. The intention is also that these values will just be dumped to varzs for evaluation purposed and not used programmatically.",
      "id": "HtmlrenderWebkitHeadlessProtoAnonTimingStatPair",
      "properties": {
        "name": {
          "type": "string"
        },
        "timeS": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoBox": {
      "description": "A simple 2D box represented by an (x, y) coordinate, a width, and a height. Coordinates are in pixels.",
      "id": "HtmlrenderWebkitHeadlessProtoBox",
      "properties": {
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        },
        "x": {
          "description": "on horizontal axis",
          "format": "int32",
          "type": "integer"
        },
        "y": {
          "description": "on vertical axis",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoChromiumTrace": {
      "description": "A message to describe the trace events returned by Chromium.",
      "id": "HtmlrenderWebkitHeadlessProtoChromiumTrace",
      "properties": {
        "chromiumTrace": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoConsoleLogEntry": {
      "description": "ConsoleLogEntry message stores messages logged by the renderer to the console. Typically error messages related to JS execution, parsing, any CSS errors, etc are logged by the renderer to the console. Next id: 7.",
      "id": "HtmlrenderWebkitHeadlessProtoConsoleLogEntry",
      "properties": {
        "lineNumber": {
          "description": "Line number of the document which caused an error.",
          "format": "int32",
          "type": "integer"
        },
        "message": {
          "description": "Message which indicates the nature of the error. e.g. parse error, reference error (happens when javascript functions or variables are not resolvable) etc.",
          "type": "string"
        },
        "messageLevel": {
          "description": "message level",
          "enum": [
            "TIP_MESSAGE_LEVEL",
            "DEBUG_MESSAGE_LEVEL",
            "LOG_MESSAGE_LEVEL",
            "INFO_MESSAGE_LEVEL",
            "WARNING_MESSAGE_LEVEL",
            "ERROR_MESSAGE_LEVEL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "sourceUrl": {
          "description": "The url of the document which has the error.",
          "type": "string"
        },
        "stackTrace": {
          "description": "Stack trace which functions were called when generating the console log. The first frame is the innermost one.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoScriptStackFrame"
          },
          "type": "array"
        },
        "timestamp": {
          "description": "Wall time (s) when the log entry was recorded",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoCookie": {
      "id": "HtmlrenderWebkitHeadlessProtoCookie",
      "properties": {
        "domain": {
          "type": "string"
        },
        "expiration": {
          "format": "double",
          "type": "number"
        },
        "httpOnly": {
          "type": "boolean"
        },
        "name": {
          "format": "byte",
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "sameSite": {
          "enum": [
            "SAME_SITE_UNSPECIFIED",
            "SAME_SITE_LAX",
            "SAME_SITE_STRICT",
            "SAME_SITE_NONE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "secure": {
          "type": "boolean"
        },
        "value": {
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoDOMStorageItem": {
      "id": "HtmlrenderWebkitHeadlessProtoDOMStorageItem",
      "properties": {
        "key": {
          "type": "string"
        },
        "securityOrigin": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoDOMTreeNode": {
      "description": "DOMTreeNode Defines a DOM Node. An instance can contain references to one or more children (of type DOMTreeNode) and one or more attributes. The DOMTreeNode also encapsulates rendering information (if applicable) in the form of references to one or more RenderTreeNodes. Next tag available: 16",
      "id": "HtmlrenderWebkitHeadlessProtoDOMTreeNode",
      "properties": {
        "attribute": {
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoDOMTreeNodeAttribute"
          },
          "type": "array"
        },
        "childDomTreeNodeIndex": {
          "description": "An index per child. Indexes can be used to fetch the DOMTreeNodes from the list maintained by the Document.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "currentSourceUrl": {
          "description": "For elements, the actual url that was used to fetch the image. Note that this field is set only if it is different from the 'src' attribute value.",
          "type": "string"
        },
        "document": {
          "$ref": "HtmlrenderWebkitHeadlessProtoDocument",
          "description": "If the node represents an iframe or a frame then document will be set."
        },
        "htmlTagType": {
          "description": "Identifies the HTML tag type (IMG, P, DIV, etc). Applicable only for DOM nodes that are representative of html elements. For a list of possible types refer HtmlTagEnum defined in webutil/html/htmltagenum.h.",
          "format": "int32",
          "type": "integer"
        },
        "isClickable": {
          "description": "Whether this DOM node responds to mouse clicks. This includes e.g. nodes that have had click event listeners attached via JavaScript as well as e.g. anchor tags that naturally navigate when clicked.",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the node (document, text, comment, div, etc).",
          "type": "string"
        },
        "originUrl": {
          "description": "URL of the script, if any, which created or populated this node.",
          "type": "string"
        },
        "referencedResourceIndex": {
          "description": "List of referenced resource indexes for any resources that this DOM tree node references.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "renderTreeNodeIndex": {
          "description": "RenderTreeNode can be looked up from the list of RenderTreeNodes stored in the Document using render_tree_node_index. RenderTreeNode gives rendering information (bounding box, style that was applied, etc). Note: 1. If a DOMTreeNode does not have a RenderTreeNode then it is safe to assume that the DOMTreeNode has no effect on the rendering. DOMTreeNodes for a , ",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "ELEMENT_NODE",
            "ATTRIBUTE_NODE",
            "TEXT_NODE",
            "CDATA_SECTION_NODE",
            "ENTITY_REFERENCE_NODE",
            "ENTITY_NODE",
            "PROCESSING_INSTRUCTION_NODE",
            "COMMENT_NODE",
            "DOCUMENT_NODE",
            "DOCUMENT_TYPE_NODE",
            "DOCUMENT_FRAGMENT_NODE",
            "NOTATION_NODE",
            "XPATH_NAMESPACE_NODE",
            "SHADOW_ROOT_NODE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "description": "The node value is applicable for TEXT_NODEs, DOCUMENT_TYPE_NODEs, and user input elements such as , and <option>. For DOCUMENT_TYPE_NODEs, the value contains the publicId and SystemId. For input elements, the value reflects the current value in the element at the time the snapshot was taken.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoDOMTreeNodeAttribute": {
      "description": "Zero or more attributes for the node.",
      "id": "HtmlrenderWebkitHeadlessProtoDOMTreeNodeAttribute",
      "properties": {
        "htmlAttributeType": {
          "description": "Identifies the HTML attribute type (src, width, height, etc). For a list of possible types refer HtmlAttributeEnum defined in webutil/html/htmlattrenum.h.",
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoDocument": {
      "description": "Next available tag: 24",
      "id": "HtmlrenderWebkitHeadlessProtoDocument",
      "properties": {
        "baseUri": {
          "description": "Document's base uri.",
          "type": "string"
        },
        "charset": {
          "description": "Document's charset.",
          "type": "string"
        },
        "contentHeight": {
          "format": "int32",
          "type": "integer"
        },
        "contentLanguage": {
          "description": "Document's language.",
          "type": "string"
        },
        "contentWidth": {
          "description": "These fields contain the actual width and height of the document content, which may exceed the size of the rendering viewport. *DEPRECATED* Use rendered_content_area instead. These two fields always assume the content area begins at viewport coordinates (0,0).",
          "format": "int32",
          "type": "integer"
        },
        "domTreeNode": {
          "description": "A flat list of all the DOMTreeNodes in the DOM. A flat list is preferred to a tree to avoid recursion and potential stack overflows. Note that the first node in this list will always be the root node.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoDOMTreeNode"
          },
          "type": "array"
        },
        "frameId": {
          "description": "A unique identifier for the frame (browser window of iframe) this document is loaded in. This identifier matches the identifiers used in the timeline data to identify frames and therefore only set if the record_timeline field of the RenderRequest message was set to true. frame_id is not supported on Chromium.",
          "type": "string"
        },
        "frameName": {
          "description": "The name of the frame (browser window of iframe) this document is loaded in. May not be set if the frame name was empty.",
          "type": "string"
        },
        "javascriptTimeOfDay": {
          "description": "-------------------------------------------------------------------------- Input context. These fields are copied from RenderRequest so that Document can be a self contained protobuf. We would've liked to place them in a ## nested InputContext message but it's too late now. ## Time specified to RenderRequest.JavaScriptOptions.time_of_day, if any. ## End of input context. Output-only fields below.",
          "format": "double",
          "type": "number"
        },
        "redirectHop": {
          "description": "The chain of redirects (and redirect methods) used to get to the final resource for this Document. Deprecated: Use the redirect events in the render_event field instead.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoRedirectHop"
          },
          "type": "array"
        },
        "referencedResource": {
          "description": "Contains a list of Resources which the renderer requested -- both those that were found and those that were not. Resources are returned in the order that they were requested.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoReferencedResource"
          },
          "type": "array"
        },
        "renderEvent": {
          "description": "Different types of events which happened during rendering. All events for this document's frame are included, so for example if a confirmation dialog is created before a client redirect to this document the ConfirmationDialogEvent will still be included even though the dialog was created by a different document. See render_event.proto for the types of events which are recorded. Note that this is present regardless of whether record_timeline was set in the RenderRequest.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoRenderEvent"
          },
          "type": "array"
        },
        "renderStyle": {
          "description": "See htmlrender_webkit_headless_utils::SerializeRenderStyle() if a serialized css string is wanted.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoStyle"
          },
          "type": "array"
        },
        "renderTreeNode": {
          "description": "A flat list of all the RenderTreeNodes from the render tree. A flat list is preferred to a tree to avoid recursion and potential stack overflows. Note that the first node in this list will always be the RenderTreeNode for the #document node (aka root).",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoRenderTreeNode"
          },
          "type": "array"
        },
        "renderTreeQualityScore": {
          "description": "DEPRECATED - This field to be removed mid-2011. If you need this, use the library directly: //google3/htmlrender/webkit_headless/snapshot_quality Indicates how good or bad the rendering is from the perspective of the render tree. This is different from snapshot_quality_score in that the quality analysis examines everything that can be rendered, not just the portion within the document's viewport. It also ignores missing resouces with fixed width/height specified in the tag. A score of 1 (100%) implies the entire document can be rendered at the best quality and a score of 0 implies the entire document is unusable.",
          "format": "double",
          "type": "number"
        },
        "renderedContentArea": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox",
          "description": "The bounding box which represents the whole area of rendered content, which may exceed the size of the rendering viewport. It doesn't include the body's margin."
        },
        "scrollX": {
          "description": "Scroll offset of this document within the frame. Note that if expand_frame_to_content_height or expand_frame_to_content_width is true, this field reflects the final scroll offset after frame expansion.",
          "format": "int32",
          "type": "integer"
        },
        "scrollY": {
          "format": "int32",
          "type": "integer"
        },
        "snapshotQualityScore": {
          "description": "DEPRECATED - This field to be removed mid-2011. If you need this, use the library directly: //google3/htmlrender/webkit_headless/snapshot_quality Indicates how good or bad the rendered snapshot is within the rendered content area within the document's viewport. A score of 1 (100%) implies the snapshot is of best quality and a score of 0 implies the snapshot is unusable.",
          "format": "double",
          "type": "number"
        },
        "title": {
          "description": "Document's title.",
          "type": "string"
        },
        "uri": {
          "description": "Document uri is the URL that this document was fetched from. The displayed URL and base URL may be different. If this document was not fetched from any URL (e.g. iframe with no src, populated by script) uri will be \"about:blank\".",
          "type": "string"
        },
        "viewport": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox",
          "description": "The page's layout size."
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoFrameResizeEvent": {
      "description": "Event for frame resize. Currently we only record resize events caused by automatic frame expansion.",
      "id": "HtmlrenderWebkitHeadlessProtoFrameResizeEvent",
      "properties": {
        "resizeType": {
          "enum": [
            "UNKNOWN",
            "AUTOMATIC_FRAME_EXPANSION_TO_CONTENT_WIDTH",
            "AUTOMATIC_FRAME_EXPANSION_TO_CONTENT_HEIGHT"
          ],
          "enumDescriptions": [
            "",
            "This event is caused by expand_frame_to_content_width.",
            "This event is caused by expand_frame_to_content_height."
          ],
          "type": "string"
        },
        "visibleRectAfterResize": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox"
        },
        "visibleRectBeforeResize": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoImage": {
      "id": "HtmlrenderWebkitHeadlessProtoImage",
      "properties": {
        "data": {
          "description": "The binary image data, stored in a format decided by the application and a particular RenderService implementation.",
          "format": "byte",
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "pageNumber": {
          "description": "The page number if this is an image of a page from a print-mode rendering.",
          "format": "int32",
          "type": "integer"
        },
        "viewport": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox",
          "description": "The viewport from which this image was generated. This is relative to the upper left of the page's document."
        },
        "width": {
          "description": "The width and height of the image stored in the data field.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoInitialLoadEvent": {
      "description": "Event for the initial load of a frame, including main frame and subframes.",
      "id": "HtmlrenderWebkitHeadlessProtoInitialLoadEvent",
      "properties": {
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoModalDialogEvent": {
      "description": "Event for a modal dialog created by one of window.confirm(), window.prompt(), or window.alert().",
      "id": "HtmlrenderWebkitHeadlessProtoModalDialogEvent",
      "properties": {
        "confirmed": {
          "description": "Whether a confirm() or prompt() dialog was confirmed. Will not be present for an alert() dialog.",
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "result": {
          "description": "For a prompt() dialog, the result of the prompt. Will not be present for other types of dialogs. If confirmed == false and the prompt had a default value, result will contain the default value.",
          "type": "string"
        },
        "type": {
          "enum": [
            "CONFIRM",
            "PROMPT",
            "ALERT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoOffset": {
      "id": "HtmlrenderWebkitHeadlessProtoOffset",
      "properties": {
        "unit": {
          "enum": [
            "PIXELS",
            "PERCENT"
          ],
          "enumDescriptions": [
            "",
            "There are other possible Units, add them if needed."
          ],
          "type": "string"
        },
        "value": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoPartialRender": {
      "description": "PartialRenders can be created using the extension API to store the document state and/or create an image at points before the final render.",
      "id": "HtmlrenderWebkitHeadlessProtoPartialRender",
      "properties": {
        "cookie": {
          "description": "Cookies at the time of snapshot creation.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoCookie"
          },
          "type": "array"
        },
        "currentClientUrl": {
          "description": "Current url as would appear in the web browser's address bar at the time of snapshot creation.",
          "type": "string"
        },
        "document": {
          "$ref": "HtmlrenderWebkitHeadlessProtoDocument",
          "description": "Snapshot of the document DOM + Render trees, if requested"
        },
        "id": {
          "description": "ID set by the render extension",
          "type": "string"
        },
        "image": {
          "$ref": "HtmlrenderWebkitHeadlessProtoImage",
          "description": "Image of the render, if requested"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoPdf": {
      "id": "HtmlrenderWebkitHeadlessProtoPdf",
      "properties": {
        "data": {
          "description": "The binary PDF data.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRectangle": {
      "id": "HtmlrenderWebkitHeadlessProtoRectangle",
      "properties": {
        "bottom": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "left": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "right": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "top": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset",
          "description": "A missing value for any field in this message means 'auto'."
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRedirectEvent": {
      "description": "A redirect event represents a change in the resource URL for a document. This includes HTTP redirects, as well things which trigger client navigations such as script changing window.location, tags, HTTP Refresh headers, etc.",
      "id": "HtmlrenderWebkitHeadlessProtoRedirectEvent",
      "properties": {
        "httpMethod": {
          "description": "The HTTP method of the request for the redirect target.",
          "enum": [
            "OTHER_HTTP_METHOD",
            "GET",
            "POST"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "httpStatusCode": {
          "description": "For HTTP redirects, the HTTP status code returned in the initial HTTP response.",
          "format": "int32",
          "type": "integer"
        },
        "refreshType": {
          "enum": [
            "HTTP_REFRESH",
            "META_HTTP_EQUIV_REFRESH"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "targetContentDownloaded": {
          "description": "True if the redirect led to a download instead of loading a new page. Note that such redirects can appear anywhere in the list of redirect events.",
          "type": "boolean"
        },
        "targetUrl": {
          "type": "string"
        },
        "type": {
          "enum": [
            "UNKNOWN_REDIRECT_TYPE",
            "HTTP",
            "SCRIPT",
            "REFRESH"
          ],
          "enumDescriptions": [
            "If you see this in a RenderEvent produced by the render server it is a bug.",
            "Redirection by HTTP status code only. Refresh headers are classified as REFRESH. In this case http_method and http_stauts_code will be set.",
            "Actions taken by script that redirect the page. Examples include setting window.location, setting src on a frame, calling window.open(), etc.",
            "Redirect by an HTTP Refresh header or tag with http-equiv=\"refresh\". For this case refresh_type will be set indicating the type of refresh."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRedirectHop": {
      "id": "HtmlrenderWebkitHeadlessProtoRedirectHop",
      "properties": {
        "type": {
          "enum": [
            "SERVER",
            "CLIENT"
          ],
          "enumDescriptions": [
            "e.g. HTTP 301/302",
            "e.g. meta refresh, JavaScript"
          ],
          "type": "string"
        },
        "url": {
          "description": "The redirect target url.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoReferencedResource": {
      "description": "ReferencedResource contains an entry per url referenced by the browser while rendering a document. Next tag available: 20",
      "id": "HtmlrenderWebkitHeadlessProtoReferencedResource",
      "properties": {
        "canceled": {
          "description": "True if this fetch was canceled due to render server policy. e.g. the page exceeded the fetch budget or an extension canceled the fetch.",
          "type": "boolean"
        },
        "contentType": {
          "description": "Content type of this resource (webutil/http/content-type.h). The content type is from guess based on the file extension, any mime type in http headers at the beginning of the content, any content-disposition http header, and the content body itself. Note: the content type defined in webutil/http/content-type.proto is incomplete. If you are interested in missing types, please update the enum and the logic of content type detection.",
          "format": "int32",
          "type": "integer"
        },
        "domTreeNodeIndex": {
          "description": "DOMTreeNode index which has the url as one of its attributes specified using either src, href or background attributes. src attribute applies to img, script, frame and iframe nodes, href applies to link nodes and background applies to body node. It is possible for a url to be referenced by multiple DOM nodes. For e.g. an tag with the same src attribute can occur in multiple places within a document. It is possible for a url to not have any DOM node reference. For example, redirects don't have DOM tree nodes.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "failedHttpAccessControlCheck": {
          "description": "True when a HTTP request succeeded but the resource was not made accessible to script due to a HTTP Access Control (CORS) failure. This field is not implemented on Chromium.",
          "type": "boolean"
        },
        "fetchSourceInfo": {
          "description": "Where this resource comes from.",
          "items": {
            "$ref": "WirelessTranscoderFetchFetchSourceInfo"
          },
          "type": "array"
        },
        "fetchStatus": {
          "description": "The FetchStatus returned by the fetcher. Values are taken from wireless_transcoder_fetch.FetchConstants.FetchStatus in fetch_service.proto. The default value is SUCCESS(0).",
          "enum": [
            "SUCCESS",
            "TIMEOUT",
            "CONNECTION_ERROR",
            "IO_ERROR",
            "RPC_ERROR",
            "INTERRUPTED",
            "UNSUPPORTED_PROTOCOL",
            "MALFORMED_URL",
            "TOO_MANY_REDIRECTS",
            "MALFORMED_RESPONSE",
            "NOT_PERMITTED",
            "CERTIFICATE_ERROR",
            "INVALID_REQUEST",
            "BUSY",
            "INVALID_CUSTOM_PARAMS",
            "NOT_HANDLED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Use by a FetchService implementation to indicate that it is full and that the client should try another task.",
            "Indicates invalid trawler params were sent by the client.",
            "Indicates that the fetcher doesn't handle this request."
          ],
          "type": "string"
        },
        "httpHeader": {
          "description": "HTTP headers from the fetcher.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoReferencedResourceHttpHeader"
          },
          "type": "array"
        },
        "httpResponseCode": {
          "description": "HTTP response code if we had tried to fetch the url. Absence of this field indicates either we have not tried to fetch the url or the fetcher never got back to us with any response.",
          "format": "int32",
          "type": "integer"
        },
        "metadata": {
          "items": {
            "$ref": "WirelessTranscoderFetchFetchMetadata"
          },
          "type": "array"
        },
        "postData": {
          "description": "The post_data field is only valid when the HTTP request method is POST.",
          "format": "byte",
          "type": "string"
        },
        "redirectTarget": {
          "description": "If the http_response_code is a HTTP redirect, the redirect target will be stored here.",
          "type": "string"
        },
        "referencedResourceContentIndex": {
          "description": "Indicates which referenced_resource_content (in RenderResponse) this RefencedResource points to. This field will be set only when there is referenced_resource_content for this RefencedResource in RenderResponse.",
          "format": "int32",
          "type": "integer"
        },
        "requestHeader": {
          "description": "Only necessary headers are recorded. See google3/htmlrender/webkit_headless/resource_key.cc",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoReferencedResourceHttpHeader"
          },
          "type": "array"
        },
        "requestMethod": {
          "description": "The HTTP request method (GET, HEAD, POST, etc) used for this request. Values are taken from the HTTPHeaders::Protocol enum in webutil/http/httputils.h. HTTPHeaders::PROTO_GET",
          "format": "int32",
          "type": "integer"
        },
        "styleIndex": {
          "description": "style index which has the url specified using either the background-image property or the list-style-image property.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "synchronouslyFetched": {
          "description": "Whether it is synchronously fetched.",
          "type": "boolean"
        },
        "timing": {
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoReferencedResourceFetchTiming"
          },
          "type": "array"
        },
        "url": {
          "description": "Does not have a #fragment.",
          "type": "string"
        },
        "webkitMetadata": {
          "$ref": "HtmlrenderWebkitHeadlessProtoWebKitFetchMetadata",
          "description": "Additional information webkit about this resource. e.g. intended usage"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoReferencedResourceFetchTiming": {
      "description": "Timing data produced by the fetcher.",
      "id": "HtmlrenderWebkitHeadlessProtoReferencedResourceFetchTiming",
      "properties": {
        "finishMsec": {
          "format": "int64",
          "type": "string"
        },
        "name": {
          "description": "A string identifying the fetcher that added this timing information.",
          "type": "string"
        },
        "startMsec": {
          "description": "UNIX epoch timestamps in milliseconds.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoReferencedResourceHttpHeader": {
      "description": "HTTP Headers included with the resource request.",
      "id": "HtmlrenderWebkitHeadlessProtoReferencedResourceHttpHeader",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderEvent": {
      "id": "HtmlrenderWebkitHeadlessProtoRenderEvent",
      "properties": {
        "frameResize": {
          "$ref": "HtmlrenderWebkitHeadlessProtoFrameResizeEvent"
        },
        "initialLoad": {
          "$ref": "HtmlrenderWebkitHeadlessProtoInitialLoadEvent"
        },
        "modalDialog": {
          "$ref": "HtmlrenderWebkitHeadlessProtoModalDialogEvent"
        },
        "redirect": {
          "$ref": "HtmlrenderWebkitHeadlessProtoRedirectEvent"
        },
        "scriptOriginUrl": {
          "description": "The URL of the script which caused this event, if any. Analogous to origin_url in DOMTreeNode.",
          "type": "string"
        },
        "virtualTimeOffset": {
          "description": "Virtual time of the event, as an offset from the beginning of the render in seconds.",
          "format": "double",
          "type": "number"
        },
        "windowOpen": {
          "$ref": "HtmlrenderWebkitHeadlessProtoWindowOpenEvent"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderExtensionResult": {
      "description": "Results returned by a render server extension. Next id: 3",
      "id": "HtmlrenderWebkitHeadlessProtoRenderExtensionResult",
      "properties": {
        "consoleLogEntry": {
          "description": "Log messages and errors generated by extension script.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoConsoleLogEntry"
          },
          "type": "array"
        },
        "result": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderResponse": {
      "description": "See go/wrs-render-quality for how to evaluate the results. Next id: 24",
      "id": "HtmlrenderWebkitHeadlessProtoRenderResponse",
      "properties": {
        "chromiumTrace": {
          "$ref": "HtmlrenderWebkitHeadlessProtoChromiumTrace",
          "description": "Contains chromium trace generated during page rendering. This is present if a chromium_trace_config was provided in the request."
        },
        "cookie": {
          "description": "Contents of the browser's cookie jar. (if cookies_enabled was set to true in the RenderRequest).",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoCookie"
          },
          "type": "array"
        },
        "document": {
          "$ref": "HtmlrenderWebkitHeadlessProtoDocument",
          "description": "Contains the DOM tree, render tree and more. For details consult document.proto."
        },
        "exceptionDetail": {
          "description": "Provides extra debugging details when certain exception bits are set.",
          "type": "string"
        },
        "exceptions": {
          "description": "Exceptions (possibly serious conditions) that occurred during this rendering. 0 means none. Bitfield encoding. See the RenderingException enum above for an explanation.",
          "format": "int64",
          "type": "string"
        },
        "extensionResult": {
          "$ref": "HtmlrenderWebkitHeadlessProtoRenderExtensionResult",
          "description": "Render extension results (if `devtools_script` was provided with the request.)"
        },
        "finalClientUrl": {
          "description": "This field contains the final url as would appear in the web browser's address bar. Note that JavaScript can modify the contents of the location bar so this URL may not appear on the list of referenced resources. If we fail to follow a redirect this field will contain the URL that we failed to redirect to, not the last one we successfully loaded.",
          "type": "string"
        },
        "image": {
          "description": "Contains the viewport images rendered by webkit (if generate_image was set to true in the RenderRequest). Will also contain the print-mode images (if generate_print_mode_images was set to true).",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoImage"
          },
          "type": "array"
        },
        "localStorage": {
          "description": "Contents of the browser's local storage.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoDOMStorageItem"
          },
          "type": "array"
        },
        "partialRender": {
          "description": "Partial render snapshots (if requested by a render extension)",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoPartialRender"
          },
          "type": "array"
        },
        "pdf": {
          "$ref": "HtmlrenderWebkitHeadlessProtoPdf",
          "description": "Contains the PDF document (if generate_pdf was set to true in the RenderRequest)"
        },
        "referencedResourceContent": {
          "description": "Contents for all the urls fetched by the render server. This field is present only if generate_referenced_resource_content was set to true in the RenderRequest.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoResource"
          },
          "type": "array"
        },
        "renderStats": {
          "$ref": "HtmlrenderWebkitHeadlessProtoRenderStats",
          "description": "Time to render the url, total size of a document, number of referenced images, etc will be part of RenderStats."
        },
        "sessionStorage": {
          "description": "Contents of the browser's session storage.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoDOMStorageItem"
          },
          "type": "array"
        },
        "title": {
          "description": "Contains the page title produced by webkit, in the UTF-8 encoding.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderStats": {
      "description": "Next id: 17.",
      "id": "HtmlrenderWebkitHeadlessProtoRenderStats",
      "properties": {
        "anonRenderFineTimingStats": {
          "description": "Deliberately non-named fine timing stats. These are all related to each other and unrelated to other timing stats in this message.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoAnonTimingStatPair"
          },
          "type": "array"
        },
        "consoleLogEntry": {
          "description": "Any messages logged by the renderer to the console. Note that we capture a subset of the messages logged by the renderer here to avoid explosion.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoConsoleLogEntry"
          },
          "type": "array"
        },
        "counter": {
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoRenderStatsCounter"
          },
          "type": "array"
        },
        "documentBuildTimeMsec": {
          "description": "Time to build document and render tree response data.",
          "format": "int32",
          "type": "integer"
        },
        "droppedLogEntryCount": {
          "description": "Number of dropped log messages. Since we capture only a subset of the messages in console_log_entry this field is included just so that the consumers can get an idea of how many actual attempts were made by the renderer.",
          "format": "int32",
          "type": "integer"
        },
        "imageEncodingTimeMsec": {
          "description": "Image encoding (e.g. raw -> PNG) time.",
          "format": "int32",
          "type": "integer"
        },
        "imageScalingTimeMsec": {
          "description": "Image scaling time.",
          "format": "int32",
          "type": "integer"
        },
        "layoutTimeMsec": {
          "description": "Time from starting render to document finished loading. This includes all fetches, parsing, decoding, running JavaScript, etc.",
          "format": "int32",
          "type": "integer"
        },
        "paintTimeMsec": {
          "description": "Time required to paint a document into our buffer.",
          "format": "int32",
          "type": "integer"
        },
        "renderCostMgcu": {
          "description": "Total cost this render spent running and RPC cost in milliGCUs.",
          "format": "int32",
          "type": "integer"
        },
        "renderEngine": {
          "description": "Render engine used to render this document.",
          "enum": [
            "UNKNOWN",
            "BLINK_HEADLESS",
            "CHROME_HEADLESS",
            "UNKNOWN_DUE_TO_RPC_FAILURE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "renderRunningTimeMsec": {
          "description": "Total CPU time this render spent running in milliseconds.",
          "format": "int32",
          "type": "integer"
        },
        "renderServerBaselineCl": {
          "description": "The CL from which the render engine was built.",
          "format": "int64",
          "type": "string"
        },
        "renderTimeMsec": {
          "description": "Total wall time taken to render a document in milliseconds.",
          "format": "int32",
          "type": "integer"
        },
        "sandboxRenderTimeMsec": {
          "description": "Total time spent in the sandbox in milliseconds. This time includes all phases measured individually below.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderStatsCounter": {
      "description": "Render event counters.",
      "id": "HtmlrenderWebkitHeadlessProtoRenderStatsCounter",
      "properties": {
        "count": {
          "format": "int64",
          "type": "string"
        },
        "name": {
          "description": "By convention, counters may contain a \".\" which we use to separate a metric name from a counter name in streamz.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderTreeNode": {
      "id": "HtmlrenderWebkitHeadlessProtoRenderTreeNode",
      "properties": {
        "box": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox",
          "description": "Box is set for render blocks ( , , etc). Box for any RenderTreeNode can be found either in the RenderTreeNode itself or by traversing up the ancestors until a RenderTreeNode with a Box is found."
        },
        "childRenderTreeNodeIndex": {
          "description": "child_render_tree_node_index is an index into the list of RenderTreeNodes stored in the Document. *** WARNING ***: Don't use this field. Applications should not rely on the structure of the render tree. This is an internal browser implementation detail and it changes from time to time. Generally, applications should obtain rendering information by starting with the relevant DOMTreeNode and following pointers from there to the relevant RenderTreeNodes.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "domTreeNodeIndex": {
          "description": "Index of the DOMTreeNode for which this RenderTreeNode is applicable. This index can be used to lookup a DOMTreeNode from list of DOMTreeNodes stored in the Document.",
          "format": "int32",
          "type": "integer"
        },
        "inlineTextBox": {
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoRenderTreeNodeInlineTextBox"
          },
          "type": "array"
        },
        "renderedText": {
          "description": "The actual text that was rendered. This is applicable only for text nodes.",
          "type": "string"
        },
        "styleIndex": {
          "description": "Style index is set for rendered nodes (text nodes, image nodes, widgets, etc). The style_index can be used to lookup the style from the list of styles stored in the Document.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoRenderTreeNodeInlineTextBox": {
      "description": "For text nodes, individual lines of text. This repeats rendered_text with more specific bounding boxes.",
      "id": "HtmlrenderWebkitHeadlessProtoRenderTreeNodeInlineTextBox",
      "properties": {
        "box": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox"
        },
        "renderedText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoResource": {
      "description": "Next id: 9.",
      "id": "HtmlrenderWebkitHeadlessProtoResource",
      "properties": {
        "content": {
          "description": "content contains a complete HTTP response message including the HTTP status line, headers and body. For example: HTTP/1.1 200 OK\\r\\n Content-Type: text/html\\r\\n \\r\\n ... content ... For inputs (RenderRequest.resource): Any HTTP content encoding (e.g. gzip) and transfer encoding (e.g. chunked) MUST be decoded. HTTP content and transfer encoding headers will be ignored if present. For outputs (RenderResponse.referenced_resource_content): The body will be decoded (no content or transfer encoding) however any content or transfer encoding headers present in the original fetch response will be passed through. Decoding this field requires a correct text encoding. The charset field of Document proto can be a good guess but is not guaranteed to be correct.",
          "format": "byte",
          "type": "string"
        },
        "fetchSourceInfo": {
          "description": "Where this resource comes from.",
          "items": {
            "$ref": "WirelessTranscoderFetchFetchSourceInfo"
          },
          "type": "array"
        },
        "finalContentUrl": {
          "description": "The url that contributes the final content. Only existed when metadata contains FetchReplyData.",
          "type": "string"
        },
        "metadata": {
          "items": {
            "$ref": "WirelessTranscoderFetchFetchMetadata"
          },
          "type": "array"
        },
        "method": {
          "description": "The HTTP request method (GET, HEAD, POST, etc) used for this request. Values are taken from the HTTPHeaders::Protocol enum in webutil/http/httputils.h. If it's not set, we will infer GET or POST based on the presence of post_data.",
          "format": "int32",
          "type": "integer"
        },
        "postData": {
          "format": "byte",
          "type": "string"
        },
        "requestHeader": {
          "description": "Only necessary headers are included in the resource key by default. See google3/htmlrender/webkit_headless/resource_key.cc",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoResourceHttpHeader"
          },
          "type": "array"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoResourceHttpHeader": {
      "id": "HtmlrenderWebkitHeadlessProtoResourceHttpHeader",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoScriptStackFrame": {
      "description": "Describes a script stack frame.",
      "id": "HtmlrenderWebkitHeadlessProtoScriptStackFrame",
      "properties": {
        "columnNumber": {
          "description": "The current column number for the stack frame.",
          "format": "int32",
          "type": "integer"
        },
        "functionName": {
          "description": "The function name of the stack frame.",
          "type": "string"
        },
        "lineNumber": {
          "description": "The current line number for the stack frame.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "description": "The URL of the script being executed.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoStyle": {
      "description": "Next id: 54",
      "id": "HtmlrenderWebkitHeadlessProtoStyle",
      "properties": {
        "backgroundAttachment": {
          "enum": [
            "SCROLL",
            "FIXED"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "backgroundColorArgb": {
          "description": "Background color encoded as ARGB",
          "format": "uint32",
          "type": "integer"
        },
        "backgroundGradientColorStopArgb": {
          "items": {
            "format": "uint32",
            "type": "integer"
          },
          "type": "array"
        },
        "backgroundGradientRepeat": {
          "type": "boolean"
        },
        "backgroundGradientType": {
          "enum": [
            "LINEAR",
            "RADIAL"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "backgroundImageRepeat": {
          "enum": [
            "NO_REPEAT",
            "REPEAT",
            "REPEAT_X",
            "REPEAT_Y"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "backgroundImageUrl": {
          "description": "The url of the background image in the first layer.",
          "type": "string"
        },
        "backgroundImageXPos": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset",
          "description": "Background image position (x, y)."
        },
        "backgroundImageYPos": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "backgroundSize": {
          "enum": [
            "CONTAIN",
            "COVER",
            "SIZE_LENGTH",
            "SIZE_NONE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "backgroundSizeHeight": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "backgroundSizeWidth": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset",
          "description": "Only present (but may be missing) if background_size == SIZE_LENGTH."
        },
        "borderColorArgbBottom": {
          "format": "uint32",
          "type": "integer"
        },
        "borderColorArgbLeft": {
          "format": "uint32",
          "type": "integer"
        },
        "borderColorArgbRight": {
          "format": "uint32",
          "type": "integer"
        },
        "borderColorArgbTop": {
          "format": "uint32",
          "type": "integer"
        },
        "borderPixelWidthBottom": {
          "format": "uint32",
          "type": "integer"
        },
        "borderPixelWidthLeft": {
          "format": "uint32",
          "type": "integer"
        },
        "borderPixelWidthRight": {
          "format": "uint32",
          "type": "integer"
        },
        "borderPixelWidthTop": {
          "format": "uint32",
          "type": "integer"
        },
        "borderStyleBottom": {
          "enum": [
            "BNONE",
            "BHIDDEN",
            "INSET",
            "GROOVE",
            "RIDGE",
            "OUTSET",
            "DOTTED",
            "DASHED",
            "SOLID",
            "DOUBLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "borderStyleLeft": {
          "enum": [
            "BNONE",
            "BHIDDEN",
            "INSET",
            "GROOVE",
            "RIDGE",
            "OUTSET",
            "DOTTED",
            "DASHED",
            "SOLID",
            "DOUBLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "borderStyleRight": {
          "enum": [
            "BNONE",
            "BHIDDEN",
            "INSET",
            "GROOVE",
            "RIDGE",
            "OUTSET",
            "DOTTED",
            "DASHED",
            "SOLID",
            "DOUBLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "borderStyleTop": {
          "enum": [
            "BNONE",
            "BHIDDEN",
            "INSET",
            "GROOVE",
            "RIDGE",
            "OUTSET",
            "DOTTED",
            "DASHED",
            "SOLID",
            "DOUBLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "clip": {
          "$ref": "HtmlrenderWebkitHeadlessProtoRectangle",
          "description": "Default value for clip is \"auto\", which is represented here as !has_clip()."
        },
        "direction": {
          "enum": [
            "LTR",
            "RTL"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "display": {
          "enum": [
            "BLOCK",
            "INLINE",
            "INLINE_BLOCK"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "fontFamily": {
          "description": "Font and text decorations:",
          "type": "string"
        },
        "fontSize": {
          "format": "int32",
          "type": "integer"
        },
        "fontStyle": {
          "enum": [
            "FONT_NORMAL",
            "FONT_ITALIC"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "fontWeight": {
          "format": "int32",
          "type": "integer"
        },
        "foregroundColorArgb": {
          "description": "Foreground color encoded as ARGB",
          "format": "uint32",
          "type": "integer"
        },
        "hasBackground": {
          "description": "Starting from Chromium, has_background is set when there is a non-empty specification for background_image, whether it be a url, gradient or other cases, such as cross-fade. Besides setting this field, We additionally parse url and gradient cases and populate some of the following background fields.",
          "type": "boolean"
        },
        "listStyleImageUrl": {
          "type": "string"
        },
        "listStyleType": {
          "enum": [
            "DEFAULT_DISC",
            "CIRCLE",
            "SQUARE",
            "DECIMAL_LIST_STYLE",
            "DECIMAL_LEADING_ZERO",
            "ARABIC_INDIC",
            "BINARY_LIST_STYLE",
            "BENGALI",
            "CAMBODIAN",
            "KHMER",
            "DEVANAGARI",
            "GUJARATI",
            "GURMUKHI",
            "KANNADA",
            "LOWER_HEXADECIMAL",
            "LAO",
            "MALAYALAM",
            "MONGOLIAN",
            "MYANMAR",
            "OCTAL",
            "ORIYA",
            "PERSIAN",
            "URDU",
            "TELUGU",
            "TIBETAN",
            "THAI",
            "UPPER_HEXADECIMAL",
            "LOWER_ROMAN",
            "UPPER_ROMAN",
            "LOWER_GREEK",
            "LOWER_ALPHA",
            "LOWER_LATIN",
            "UPPER_ALPHA",
            "UPPER_LATIN",
            "AFAR",
            "ETHIOPIC_HALEHAME_AA_ET",
            "ETHIOPIC_HALEHAME_AA_ER",
            "AMHARIC",
            "ETHIOPIC_HALEHAME_AM_ET",
            "AMHARIC_ABEGEDE",
            "ETHIOPIC_ABEGEDE_AM_ET",
            "CJK_EARTHLY_BRANCH",
            "CJK_HEAVENLY_STEM",
            "ETHIOPIC",
            "ETHIOPIC_HALEHAME_GEZ",
            "ETHIOPIC_ABEGEDE",
            "ETHIOPIC_ABEGEDE_GEZ",
            "HANGUL_CONSONANT",
            "HANGUL",
            "LOWER_NORWEGIAN",
            "OROMO",
            "ETHIOPIC_HALEHAME_OM_ET",
            "SIDAMA",
            "ETHIOPIC_HALEHAME_SID_ET",
            "SOMALI",
            "ETHIOPIC_HALEHAME_SO_ET",
            "TIGRE",
            "ETHIOPIC_HALEHAME_TIG",
            "TIGRINYA_ER",
            "ETHIOPIC_HALEHAME_TI_ER",
            "TIGRINYA_ER_ABEGEDE",
            "ETHIOPIC_ABEGEDE_TI_ER",
            "TIGRINYA_ET",
            "ETHIOPIC_HALEHAME_TI_ET",
            "TIGRINYA_ET_ABEGEDE",
            "ETHIOPIC_ABEGEDE_TI_ET",
            "UPPER_GREEK",
            "UPPER_NORWEGIAN",
            "ASTERISKS",
            "FOOTNOTES",
            "HEBREW",
            "ARMENIAN",
            "LOWER_ARMENIAN",
            "UPPER_ARMENIAN",
            "GEORGIAN",
            "CJK_IDEOGRAPHIC",
            "HIRAGANA",
            "KATAKANA",
            "HIRAGANA_IROHA",
            "KATAKANA_IROHA",
            "NONE_LIST_STYLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "marginBottom": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "marginLeft": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "marginRight": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "marginTop": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset",
          "description": "Margin"
        },
        "opacity": {
          "format": "float",
          "type": "number"
        },
        "overflowX": {
          "enum": [
            "OVISIBLE",
            "OHIDDEN",
            "OSCROLL",
            "OAUTO",
            "OOVERLAY",
            "OMARQUEE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "overflowY": {
          "enum": [
            "OVISIBLE",
            "OHIDDEN",
            "OSCROLL",
            "OAUTO",
            "OOVERLAY",
            "OMARQUEE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "paddingBottom": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "paddingLeft": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "paddingRight": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset"
        },
        "paddingTop": {
          "$ref": "HtmlrenderWebkitHeadlessProtoOffset",
          "description": "Padding"
        },
        "position": {
          "enum": [
            "POSITION_STATIC",
            "POSITION_RELATIVE",
            "POSITION_ABSOLUTE",
            "POSITION_FIXED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "referencedResourceIndex": {
          "description": "List of referenced resource indexes for any resources that this style references. (e.g. background images.) (see document.proto)",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "textAlign": {
          "enum": [
            "DEFAULT_TASTART",
            "LEFT",
            "RIGHT",
            "CENTER",
            "JUSTIFY",
            "WEBKIT_LEFT",
            "WEBKIT_RIGHT",
            "WEBKIT_CENTER",
            "TAEND"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "textDecoration": {
          "enum": [
            "NONE",
            "UNDERLINED",
            "LINE_THROUGH"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "textShadowColorArgb": {
          "format": "uint32",
          "type": "integer"
        },
        "visibility": {
          "enum": [
            "VISIBLE",
            "HIDDEN",
            "COLLAPSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "zIndex": {
          "description": "Default value for z-index is \"auto\" which means \"inherit from parent\".",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoWebKitFetchMetadata": {
      "description": "WebkKitFetchMetadata holds additional webkit-specific information for a single resource fetch.",
      "id": "HtmlrenderWebkitHeadlessProtoWebKitFetchMetadata",
      "properties": {
        "devtoolsFrameId": {
          "description": "Chromium DevTools frame ID of the frame that initiated this fetch. Only populated in the streaming render service with FETCH_MODE_CLIENT.",
          "type": "string"
        },
        "targetType": {
          "enum": [
            "TARGET_UNSPECIFIED",
            "TARGET_MAIN_FRAME",
            "TARGET_SUBFRAME",
            "TARGET_SUBRESOURCE",
            "TARGET_STYLE_SHEET",
            "TARGET_SCRIPT",
            "TARGET_FONT",
            "TARGET_IMAGE",
            "TARGET_OBJECT",
            "TARGET_MEDIA",
            "TARGET_WORKER",
            "TARGET_SHARED_WORKER",
            "TARGET_PREFETCH",
            "TARGET_FAVICON",
            "TARGET_XHR",
            "TARGET_TEXT_TRACK",
            "TARGET_BEACON",
            "TARGET_FILE",
            "TARGET_MANIFEST",
            "TARGET_PING",
            "TARGET_RAW",
            "TARGET_EVENT_SOURCE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Shouldn't really ever see this one.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "HtmlrenderWebkitHeadlessProtoWindowOpenEvent": {
      "description": "Corresponds to a call to window.open(). Note that a WindowOpenEvent will be present whether or not the call was successful.",
      "id": "HtmlrenderWebkitHeadlessProtoWindowOpenEvent",
      "properties": {
        "allowed": {
          "description": "Whether or not the window was allowed to be opened by the popup blocker. Unless user events are created with a render extension this should be false.",
          "type": "boolean"
        },
        "url": {
          "description": "The URL for the new window. Note that this is the URL after it has been processed by WebKit, so, for example, relative links passed to window.create() will have been made absolute.",
          "type": "string"
        },
        "windowFeatures": {
          "description": "Window features passed to window.open().",
          "type": "string"
        },
        "windowName": {
          "description": "Window name passed to window.open(). If no name is provided this defaults to \"_blank\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "I18nPhonenumbersPhoneNumber": {
      "description": "The PhoneNumber object that is used by all LibPhoneNumber API's to fully represent a phone number.",
      "id": "I18nPhonenumbersPhoneNumber",
      "properties": {
        "countryCode": {
          "description": "The country calling code for this number, as defined by the International Telecommunication Union (ITU). For example, this would be 1 for NANPA countries, and 33 for France.",
          "format": "int32",
          "type": "integer"
        },
        "countryCodeSource": {
          "description": "The source from which the country_code is derived.",
          "enum": [
            "UNSPECIFIED",
            "FROM_NUMBER_WITH_PLUS_SIGN",
            "FROM_NUMBER_WITH_IDD",
            "FROM_NUMBER_WITHOUT_PLUS_SIGN",
            "FROM_DEFAULT_COUNTRY"
          ],
          "enumDescriptions": [
            "Default value returned if this is not set, because the phone number was created using parse, not parseAndKeepRawInput. hasCountryCodeSource will return false if this is the case.",
            "The country_code is derived based on a phone number with a leading \"+\", e.g. the French number \"+33 1 42 68 53 00\".",
            "The country_code is derived based on a phone number with a leading IDD, e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.",
            "The country_code is derived based on a phone number without a leading \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is supplied as France.",
            "The country_code is derived NOT based on the phone number itself, but from the defaultCountry parameter provided in the parsing function by the clients. This happens mostly for numbers written in the national format (without country code). For example, this would be set when parsing the French number \"01 42 68 53 00\", when defaultCountry is supplied as France."
          ],
          "type": "string"
        },
        "extension": {
          "description": "Extension is not standardized in ITU recommendations, except for being defined as a series of numbers with a maximum length of 40 digits. It is defined as a string here to accommodate for the possible use of a leading zero in the extension (organizations have complete freedom to do so, as there is no standard defined). Other than digits, some other dialling characters such as \",\" (indicating a wait) may be stored here.",
          "type": "string"
        },
        "italianLeadingZero": {
          "description": "In some countries, the national (significant) number starts with one or more \"0\"s without this being a national prefix or trunk code of some kind. For example, the leading zero in the national (significant) number of an Italian phone number indicates the number is a fixed-line number. There have been plans to migrate fixed-line numbers to start with the digit two since December 2000, but it has not happened yet. See http://en.wikipedia.org/wiki/%2B39 for more details. These fields can be safely ignored (there is no need to set them) for most countries. Some limited number of countries behave like Italy - for these cases, if the leading zero(s) of a number would be retained even when dialling internationally, set this flag to true, and also set the number of leading zeros. Clients who use the parsing or conversion functionality of the i18n phone number libraries (go/phonenumbers) will have these fields set if necessary automatically.",
          "type": "boolean"
        },
        "nationalNumber": {
          "description": "The National (significant) Number, as defined in International Telecommunication Union (ITU) Recommendation E.164, without any leading zero. The leading-zero is stored separately if required, since this is an uint64 and hence cannot store such information. Do not use this field directly: if you want the national significant number, call the getNationalSignificantNumber method of PhoneNumberUtil. For countries which have the concept of an \"area code\" or \"national destination code\", this is included in the National (significant) Number. Although the ITU says the maximum length should be 15, we have found longer numbers in some countries e.g. Germany. Note that the National (significant) Number does not contain the National (trunk) prefix. Obviously, as a uint64, it will never contain any formatting (hyphens, spaces, parentheses), nor any alphanumeric spellings.",
          "format": "uint64",
          "type": "string"
        },
        "numberOfLeadingZeros": {
          "description": "Full description of this field in the comment for italian_leading_zero since this field will only be set when italian_leading_zero is true.",
          "format": "int32",
          "type": "integer"
        },
        "preferredDomesticCarrierCode": {
          "description": "The carrier selection code that is preferred when calling this phone number domestically. This also includes codes that need to be dialed in some countries when calling from landlines to mobiles or vice versa. For example, in Columbia, a \"3\" needs to be dialed before the phone number itself when calling from a mobile phone to a domestic landline phone and vice versa. Note this is the \"preferred\" code, which means other codes may work as well.",
          "type": "string"
        },
        "rawInput": {
          "description": "This field is used to store the raw input string containing phone numbers before it was canonicalized by the library. For example, it could be used to store alphanumerical numbers such as \"1-800-GOOG-411\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageBaseThumbnailMetadata": {
      "description": "Next ID: 15",
      "id": "ImageBaseThumbnailMetadata",
      "properties": {
        "byteSize": {
          "description": "the size of the stored thumbnail",
          "format": "int32",
          "type": "integer"
        },
        "crops": {
          "$ref": "ContentAwareCropsIndexing",
          "description": "SmartCrop crop-hints By default, this field is not populated."
        },
        "deepCrop": {
          "$ref": "DeepCropIndexing",
          "description": "DeepCrop crop-hints. Usage in thumbnails could be deprecated in favor or deep_crop_pixels (below). By default, this field is not populated."
        },
        "deepCropPixels": {
          "$ref": "DeepCropPixels",
          "description": "DeepCrop signal in pixels, equivalent to deep_crop (above) but with pixels instead of percentages. By default, this field is not populated."
        },
        "docid": {
          "description": "the Amarna docid of the thumbnail",
          "format": "uint64",
          "type": "string"
        },
        "encryptedDocid": {
          "description": "encrypted version of docid",
          "type": "string"
        },
        "fprint": {
          "description": "the fprint of the thumbnail",
          "format": "uint64",
          "type": "string"
        },
        "height": {
          "description": "the height of the stored thumbnail",
          "format": "int32",
          "type": "integer"
        },
        "mimeType": {
          "description": "The mime_type of the thumbnail (\"image/jpeg\", \"image/png\", etc.).",
          "type": "string"
        },
        "originalHeight": {
          "format": "int32",
          "type": "integer"
        },
        "originalWidth": {
          "description": "Not populated by Amarna/image pipelines, ever. This was apparently introduced by a customer that wished to extend ThumbnailMetadata with this custom data.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "enum": [
            "THUMBNAIL_TYPE_DEFAULT",
            "THUMBNAIL_TYPE_AREA_50K",
            "THUMBNAIL_TYPE_400",
            "THUMBNAIL_TYPE_800",
            "THUMBNAIL_TYPE_ORIGINAL",
            "THUMBNAIL_TYPE_ORIGINAL_HQ",
            "THUMBNAIL_TYPE_FAVICON_16",
            "THUMBNAIL_TYPE_FAVICON_28",
            "THUMBNAIL_TYPE_FAVICON_32",
            "THUMBNAIL_TYPE_FAVICON_64",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL",
            "THUMBNAIL_TYPE_FAVICON_16_DARK",
            "THUMBNAIL_TYPE_FAVICON_28_DARK",
            "THUMBNAIL_TYPE_FAVICON_32_DARK",
            "THUMBNAIL_TYPE_FAVICON_64_DARK",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL_DARK",
            "THUMBNAIL_TYPE_1080",
            "THUMBNAIL_TYPE_1600_HQ",
            "THUMBNAIL_TYPE_AREA_300K",
            "THUMBNAIL_TYPE_AREA_50K_ALPHA",
            "THUMBNAIL_TYPE_AREA_50K_SYNTHETIC_ALPHA",
            "THUMBNAIL_TYPE_AREA_2M",
            "THUMBNAIL_TYPE_AREA_2M_METADATA",
            "THUMBNAIL_TYPE_800_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ORIGINAL_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ANIMATED_H144",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_LICENSED",
            "THUMBNAIL_TYPE_TENOR_250K_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_GIF",
            "THUMBNAIL_TYPE_TENOR_30K_OPTIMIZED_THUMBNAIL_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_OPTIMIZED_90P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100P_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100W_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200W_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_PREVIEW_GIF",
            "THUMBNAIL_TYPE_TENOR_250K_MEDIUM_GIF",
            "THUMBNAIL_TYPE_AREA_2M_WEBP",
            "THUMBNAIL_TYPE_AREA_2M_WEBP_METADATA",
            "THUMBNAIL_TYPE_AREA_2M_AVIF",
            "THUMBNAIL_TYPE_AREA_2M_AVIF_METADATA",
            "THUMBNAIL_TYPE_AREA_50K_WEBP",
            "THUMBNAIL_TYPE_AREA_50K_AVIF",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_KG"
          ],
          "enumDescriptions": [
            "DEPRECATED - use THUMBNAIL_TYPE_AREA_50K if possible. The default thumbnail type is deprecated and no longer served by SFFE. For legacy users (e.g. imagesearch heirloom UI) you must request a downsized THUMBNAIL_TYPE_AREA_50K thumbnail.",
            "This is the most common thumbnail type, used in image search results. It is defined to have 50625 pixels (= 225 x 225).",
            "This refers to a thumbnail that fits in a 400x400 box.",
            "This refers to a thumbnail that fits in a 800x800 box.",
            "This refers to re-encoding original image to JPEG at the same size (up to 10000x10000). Output quality may be lower.",
            "Re-encode image at the same size as original (up to 10000x10000) but with high-quality (q=90). This was introduced by TYPHOON client and is expected only for very few images in our table (under 10k). If you plan to use this contact amarna-dev@ and/or crt@",
            "These refer to favicon thumbnails of 16x16, 32x32 or 64x64. If the original image is an ico file containing multiple embedded images including 16x16, 32x32 or 64x64, these thumbnails are derived from the embedded image of the corresponding size. (If no such embedded image is found, prefer the closest size that's larger. If still no such size exists, prefer largest.) If no such size exists, these thumbnails are rescaled to an image whose maximum dimension is 16, 28, 32 or 64.",
            "",
            "",
            "",
            "This type of favicon will preserve the size of the original image.",
            "These refer to favicon thumbnails for dark mode. This triggers dark mode on the SVG decoding (and otherwise, the same as the above favicon types)",
            "",
            "",
            "",
            "",
            "This refers to a thumbnail that fits in a 1080x1080 box.",
            "This refers to a thumbnail that fits in a 1600x1600 box and is encoded with high-quality (q=90). Contact amarna-dev@/crt@/bingwang@ for using it.",
            "This uses the same MaxAreaSizer as THUMBNAIL_TYPE_AREA_50K. The exact area is defined to be 307200 (= 640 x 480).",
            "This is like THUMBNAIL_TYPE_AREA_50K, but with an alpha channel.",
            "DEPRECATED - Please do not introduce new requests for this type. It will be eliminated soon. Until then, it will behave like the AREA_50K_ALPHA type -- use that instead.",
            "This refers to a thumbnail with at most 2073600 pixels (=1920*1080). The image will be scaled down to 2M while preserving the aspect ratio if it's too large. If the thumbnail is in JPEG format, it is encoded with quality = 85. Besides, it supports alpha channel by default and does not convert lossless formats to JPEG.",
            "Similar to THUMBNAIL_TYPE_AREA_2M, but with the source image metadata propagated.",
            "In alpha-white thumbs, colors are remapped in RGBA to be more transparent the closer they are to white. This is for use with white-background images, so that the perceived background color can be darkened by rendering over gray. See go/alpha-white-thumbs for details and limitations. Sizing matches non-ALPHA_WHITE equivalents.",
            "",
            "Height-scaled animated thumb types, encoded as H264 previews. Suffix gives height, e.g. _H144 indicates height 144. Width is a scaled multiple-of-8 value so the thumb has approximately the same aspect ratio as the original. For more info, see http://go/animated-thumbs.",
            "New thumbnail type for licensed contents. From a thumbnail generation perspective this behaves similarly to THUMBNAIL_TYPE_ORIGINAL_HQ, but it exists as a separate thumbnail type to enable takedowns requested by owner. WARNING: This type is primarily used by go/licensed-media-service and is subject to policy changes. Please contact g/license-media-service-team before using.",
            "Tenor gifs go/tenor-integration-binary-serving-discussion",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Similar to THUMBNAIL_TYPE_AREA_2M but pre-transcoded to WebP and AVIF format, as those two format can be slow to transcode in serving time. Currently only generated for AMP images. These two thumbnails are static images despite that their formats support animation.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_WEBP, but with the source image metadata propagated.",
            "AVIF is not yet a supported input for SCS serving time thumbnailing, trying to do so will give errors.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_AVIF, but with the source image metadata propagated.",
            "WebP format. Currently only generated for navboost images.",
            "AVIF format. Currently only generated for navboost images.",
            "WARNING: This type is dedicated to KG_IMAGE client. http://b/234653726"
          ],
          "type": "string"
        },
        "width": {
          "description": "the width of the stored thumbnail",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageBaseVideoPreviewMetadata": {
      "description": "This message is used internally in Amarna and is also used to store information in the VideoWebAttachment portion of the websearch index. Only the following fields will be used in the index: VideoPreviewType type int32 width int32 height byte byte_size If more fields are added, please update this list.",
      "id": "ImageBaseVideoPreviewMetadata",
      "properties": {
        "byteSize": {
          "description": "Size of the stored preview.",
          "format": "int32",
          "type": "integer"
        },
        "docid": {
          "description": "64 bit docid of the original video.",
          "format": "uint64",
          "type": "string"
        },
        "duration": {
          "description": "TODO (yzliu): consider using duration_ms as field name since it is number of milliseconds. Duration of the preview in ms.",
          "format": "int32",
          "type": "integer"
        },
        "expirationTimestampMicros": {
          "description": "Expiration timestamp of preview in microseconds since epoch.",
          "format": "int64",
          "type": "string"
        },
        "fprint": {
          "description": "LINT.ThenChange(//depot/google3/video/crawl/indexing/signal_combiner.cc:video_preview) Fingerprint of the preview.",
          "format": "uint64",
          "type": "string"
        },
        "height": {
          "description": "Height of the stored preview.",
          "format": "int32",
          "type": "integer"
        },
        "mimeType": {
          "description": "Mime type of the preview (\"video/mp4\").",
          "type": "string"
        },
        "state": {
          "description": "Indicates the state in Venom for this preview type.",
          "enum": [
            "STATE_UNKNOWN",
            "STATE_DONE",
            "STATE_NOT_APPLICABLE",
            "STATE_MISSING",
            "STATE_DELETED",
            "STATE_DIRTY",
            "STATE_OBSOLETE",
            "STATE_PENDING_PUBLICATION",
            "STATE_FAILED"
          ],
          "enumDescriptions": [
            "",
            "Final states (ie states in which we would stay ## unless the client revises the expectations) As far as the relevant service is concerned, the asset has been fully produced.",
            "As far as the service is concerned, the asset should not be produced (say, HD for a SD input)",
            "STATE_MISSING indicates the asset needs to be created. It is a transient state from STATE_DIRTY. It is also the final state if the asset failed to be created within its allowed number of retries.",
            "The asset has been removed. This is the final state for assets that were previously OBSOLETE, or for goals of UNWANTED.",
            "Purely transient states, that will be reconciled to a final ## state at some point. The client is not happy with the state of an asset, and wants to get it regenerated.",
            "The asset has been produced in the past, but is not needed anymore. We'll try to delete it shortly.",
            "The asset is ready to be published but is waiting for other assets in its group. This state is between MISSING/DIRTY and DONE.",
            "RESERVED. This state is deprecated."
          ],
          "type": "string"
        },
        "timestamp": {
          "description": "Timestamp of start of preview in ms.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "LINT.IfChange",
          "enum": [
            "VPREVIEW_TYPE_8K",
            "VPREVIEW_TYPE_30K",
            "VPREVIEW_TYPE_90K",
            "VPREVIEW_TYPE_300K_24FPS",
            "VPREVIEW_TYPE_VERTICAL_30K",
            "VPREVIEW_TYPE_VERTICAL_90K",
            "VPREVIEW_TYPE_540K_ORIGINAL_HQ_LICENSED",
            "VPREVIEW_TYPE_90K_SPORT_HIGHLIGHT",
            "VPREVIEW_TYPE_VIDEO_ANSWER_300K_15SEC",
            "VPREVIEW_TYPE_VIDEO_ANSWER_300K_6SEC",
            "VPREVIEW_TENOR_250K_PREVIEW",
            "VPREVIEW_TENOR_100K_OPTIMIZED_PREVIEW",
            "VPREVIEW_TENOR_30K_OPTIMIZED_THUMBNAIL_PREVIEW",
            "VPREVIEW_TENOR_45K_OPTIMIZED_90P_PREVIEW",
            "VPREVIEW_TENOR_50K_OPTIMIZED_100P_PREVIEW",
            "VPREVIEW_TENOR_100K_OPTIMIZED_200P_PREVIEW",
            "VPREVIEW_TENOR_50K_OPTIMIZED_100W_PREVIEW",
            "VPREVIEW_TENOR_100K_OPTIMIZED_200W_PREVIEW",
            "VPREVIEW_TENOR_250K_MEDIUM_PREVIEW",
            "VPREVIEW_TENOR_250K_TINY_VIDEO_PREVIEW",
            "VPREVIEW_TENOR_250K_NANO_VIDEO_PREVIEW",
            "VPREVIEW_TENOR_100K_PREVIEW_MP4",
            "VPREVIEW_TENOR_250K_MP4",
            "VPREVIEW_TENOR_250K_MP4_AV",
            "VPREVIEW_TENOR_160K_TINY_MP4",
            "VPREVIEW_TENOR_75K_NANO_MP4",
            "VPREVIEW_TENOR_50K_FIXED_100P_MP4",
            "VPREVIEW_TENOR_100K_FIXED_200P_MP4",
            "VPREVIEW_TENOR_50K_FIXED_100W_MP4",
            "VPREVIEW_TENOR_100K_FIXED_200W_MP4"
          ],
          "enumDescriptions": [
            "This corresponds to 128x72, 10fps.",
            "This corresponds to 256x144, 10fps.",
            "This corresponds to 384x216, 10fps.",
            "This corresponds to 640x360, 24fps.",
            "This corresponds to 144x256, 10fps.",
            "This corresponds to 216x384, 10fps.",
            "This corresponds to 854x480, 24fps. This preview type is used for LMS videos only.",
            "This corresponds to 384x216, 10fps previews created with a Sport Highlight specific model. LINT.ThenChange( //depot/google3/video/pipeline/graph/sequences/mp4_moving_thumbnail.go )",
            "Video Answer previews (640x360, 10fps). See go/vsva-le1-doc and go/vsva-serving-design for the details. previews up to 15 seconds",
            "previews up to 6 seconds",
            "LINT.IfChange Tenor VPREIVEW is added by cl/237845543 (billzeng) This corresponds to 498*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 220*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*60, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*90, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*100, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*200, max 18fps. Preview for Tenor only.",
            "This corresponds to 100*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 200*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*498, max 18fps. Preview for Tenor only.",
            "This corresponds to 498*200, max 10fps. Preview for Tenor only.",
            "This corresponds to 498*498 max 10fps. Preview for Tenor only.",
            "This corresponds to 498*498, max 10fps. Preview for Tenor only.",
            "This corresponds to 320*498, max 10fps. Preview for Tenor only.",
            "This corresponds to 150*498, max 10fps. Preview for Tenor only.",
            "This corresponds to 498*100, max 10fps. Preview for Tenor only.",
            "This corresponds to 498*200, max 10fps. Preview for Tenor only.",
            "This corresponds to 100*498, max 10fps. Preview for Tenor only.",
            "This corresponds to 200*498, max 10fps. Preview for Tenor only. LINT.ThenChange( //depot/google3/image/tenor/eleven/util/format_helpers.cc, //depot/google3/image/tenor/eleven/util/format_helpers_test.cc, )"
          ],
          "type": "string"
        },
        "videoSegmentEndUs": {
          "description": "The end timestamp of the video segment in microseconds that this preview is generated from. Used for segmented video previews.",
          "format": "int64",
          "type": "string"
        },
        "videoSegmentStartUs": {
          "description": "The start timestamp of the video segment in microseconds that this preview is generated from. Used for segmented video previews.",
          "format": "int64",
          "type": "string"
        },
        "width": {
          "description": "Width of the stored preview.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageContentFlowProtoProd": {
      "description": "The subset of FlowProto that we want to go into production AND be stored in ContentSignals.",
      "id": "ImageContentFlowProtoProd",
      "properties": {
        "starburst": {
          "description": "Repeated so that multiple versions can exist in prod simultaneously.",
          "items": {
            "$ref": "ImageContentStarburstVersionGroup"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageContentQueryBoost": {
      "description": "Image content based multipliers. Current usage is in the pamir_section.",
      "id": "ImageContentQueryBoost",
      "properties": {
        "queryboost": {
          "items": {
            "$ref": "ImageContentQueryBoostQueryBoost"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageContentQueryBoostQueryBoost": {
      "id": "ImageContentQueryBoostQueryBoost",
      "properties": {
        "boost": {
          "description": "Score multiplier (fully normalized 1 is nop).",
          "format": "float",
          "type": "number"
        },
        "query": {
          "description": "Canonicalized query string.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageContentStarburstVersionGroup": {
      "id": "ImageContentStarburstVersionGroup",
      "properties": {
        "descriptorFloat": {
          "description": "Raw dense float feature vector.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "descriptorShort": {
          "description": "Short descriptor for image content features, e.g. compressed bytes. This is the compressed version of descriptor_float below. It can be can be decompressed to descriptor_float with a tiny bit of compression error (in most cases it should be totally fine).",
          "format": "byte",
          "type": "string"
        },
        "enumVersion": {
          "enum": [
            "UNKNOWN_VERSION",
            "STARBURST_V1",
            "STARBURST_V2",
            "STARBURST_V3",
            "STARBURST_V4",
            "STARBURST_VISUAL_V4",
            "STARBURST_V5",
            "STARBURST_V5_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "minorVersion": {
          "enum": [
            "UNKNOWN_MINOR_VERSION",
            "V3_ORIGINAL",
            "V3_ENET_EMULATED",
            "V3_FNET_EMULATED",
            "V3_STARBURST_LITE",
            "V4_ORIGINAL",
            "V4_STRETCH_RESIZE",
            "VISUAL_V4_ORIGINAL",
            "V5_ORIGINAL",
            "V5_5_ORIGINAL"
          ],
          "enumDescriptions": [
            "",
            "Minor versions for Starburst V3, used to distinguish the original and different emulated versions. See go/starburst-v3-emulation for detail.",
            "",
            "",
            "",
            "Minor versions for Starburst V4.",
            "V4 with stretch resize, instead of cropping. See b/154565902.",
            "Minor versions for Starburst Visual V4.",
            "Minor version for Starburst V5.",
            "Minor version for Starburst V5.5."
          ],
          "type": "string"
        },
        "starburstTokens": {
          "description": "Starburst tokens.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "version": {
          "description": "The following integers are currently used: Starburst V1: 1 Starburst V2: 2 Starburst V3: 3 Starburst V4: 4 Starburst Visual V4: 1004 This field is deprecated. Please try to use the 'enum_version' in future.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageData": {
      "description": "This defines the per-doc data which is extracted from thumbnails and propagated over to indexing. It contains all information that can be used for restricts. Next tag id: 129",
      "id": "ImageData",
      "properties": {
        "adaboostImageFeaturePorn": {
          "description": "Warning: adaboost_image_feature_porn* and imageFeaturePorn fields are DEPRECATED in favor of brain_porn_scores. Please do not use them. Contact safesearch@ for transition advice.",
          "format": "float",
          "type": "number"
        },
        "adaboostImageFeaturePornMinorVersion": {
          "format": "int32",
          "type": "integer"
        },
        "adaboostImageFeaturePornVersion": {
          "format": "int32",
          "type": "integer"
        },
        "animatedImageData": {
          "$ref": "ImageRepositoryAnimatedImagePerdocData",
          "description": "Present for animated images only: additional animatated image perdoc data."
        },
        "brainPornScores": {
          "$ref": "ImageSafesearchContentBrainPornAnnotation",
          "description": "A [0..1] SafeSearch scores based on image pixels, using Google Brain: porn, csai, violence, medical, and spoof. For porn only, if available prefer final_porn_score as it should be more precise than brain_porn_scores.porn_score."
        },
        "brainPornScoresVersion": {
          "description": "A string that indicates the version of SafeSearch classifier used to compute brain_porn_scores.",
          "type": "string"
        },
        "canonicalDocid": {
          "description": "This is the image docid used in image search. For ImageData protos coming from Alexandria/Freshdocs, this is a 'required' field that MUST be populated.",
          "format": "uint64",
          "type": "string"
        },
        "clickMagnetScore": {
          "description": "A score in (0, 1] to indicate how likely this image is considered as a click magnet based on clicks received from bad queries.",
          "format": "float",
          "type": "number"
        },
        "clipartDetectorScore": {
          "description": "Image content based classifier scores.",
          "format": "float",
          "type": "number"
        },
        "clipartDetectorVersion": {
          "format": "int32",
          "type": "integer"
        },
        "clusterId": {
          "description": "Superlabels generated cluster id.",
          "format": "byte",
          "type": "string"
        },
        "codomainStrength": {
          "description": "Like is_visible, this is a property of the (web-doc, img_url) pair not just the image. A high codomain_strength indicates high confidence based on collected stats that the image is hosted on a companion domain. If not enough stats are available for codomain strength, this field may be absent in ImageData, and hence the CompositeDoc. Do not place negative values here. Permitted values range between 0 and image_quality_codomain::kMaxCodomainStrength defined in //image/quality/codomain/codomain-stats-utils.h.",
          "format": "int32",
          "type": "integer"
        },
        "colorScore": {
          "description": "Colorness scores for the image. Each score represents the amount of a particular color in the image. At the current time, there are 12 colors, so there should always be 0 or 12 values in this array. The 12 colors are black, blue, brown, gray, green, orange, pink, purple, red, teal, white, yellow. The convention is that the scores are stored in alphabetical order, so the first score is black, and the last score is yellow.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "colorScoreVersion": {
          "format": "int32",
          "type": "integer"
        },
        "coloredPixelsFrac": {
          "description": "Fraction of the image that contains pixels over a certain saturation threshold: can be used to determine if the image is grayscale or not.",
          "format": "float",
          "type": "number"
        },
        "contentFirstCrawlTime": {
          "description": "Earliest known crawl time among all neardups of this image (go/imagecontentage).",
          "format": "int32",
          "type": "integer"
        },
        "corpusSelectionInfo": {
          "description": "Corpus scoring info for images indexed through Amarna.",
          "items": {
            "$ref": "CorpusSelectionInfo"
          },
          "type": "array"
        },
        "crops": {
          "$ref": "ContentAwareCropsIndexing",
          "description": "The content-aware cropping information."
        },
        "deepCrop": {
          "$ref": "DeepCropIndexing",
          "description": "DeepCrop based cropping information. See go/creatism/deepcrop for details."
        },
        "deepImageEngagingness": {
          "$ref": "ImageRepositoryDeepImageEngagingnessOutput",
          "description": "Productionized Deep Image Engagingness score."
        },
        "deepTags": {
          "$ref": "CommerceDatastoreImageDeepTags",
          "description": "VSS generated deep tags for shopping images."
        },
        "docid": {
          "description": "fingerprint(non-canonicalized absolute image url) This is *not* the image docid. Use canonical_docid instead. For ImageData protos coming from Alexandria/Freshdocs, this is a 'required' field that MUST be populated. But once again, this is very likely NOT something you need. Use canonical_docid instead.",
          "format": "uint64",
          "type": "string"
        },
        "embeddedMetadata": {
          "$ref": "ImageExifImageEmbeddedMetadata",
          "description": "the EXIF/IPTC metadata"
        },
        "expirationTimestamp": {
          "description": "The thumbnail is guaranteed to be kept in the serving system until the expiration timestamp has passed, in microseconds.",
          "format": "int64",
          "type": "string"
        },
        "extendedExif": {
          "$ref": "PhotosImageMetadata",
          "description": "The EXIF generated by photos backend team's (more specifically FIFE's) thumbnailer library. This exif model is more comprehensive since a dedicated team is constantly improving it and adding new fields over time. This is currently populated by moonshine for selected corpora."
        },
        "featuredImageProp": {
          "$ref": "ImageMonetizationFeaturedImageProperties",
          "description": "Properties used in featured imagesearch project. inspiration_score indicates how well an image is related to products, or how inspirational it is."
        },
        "fileFormat": {
          "description": "True file format (not extension).",
          "enum": [
            "FF_INVALID",
            "FF_JPG",
            "FF_GIF",
            "FF_PNG",
            "FF_BMP",
            "FF_SVG",
            "FF_WEBP",
            "FF_ICO",
            "FF_CRAW",
            "FF_HEIF"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "finalPornScore": {
          "description": "A [0..1] porn score based on some image-level features (like content score, referrer statistics, navboost queries, etc.). See class RiflePornScorer for more details.",
          "format": "float",
          "type": "number"
        },
        "finalPornScoreVersion": {
          "description": "A string that indicates the version of SafeSearch classifier used to compute final_porn_score.",
          "type": "string"
        },
        "firstCrawlTime": {
          "description": "Earliest known timestamp about this image. Today, this is the timestamp when the content key was generated for this image. The time is in seconds.",
          "format": "int32",
          "type": "integer"
        },
        "firstTimeSeenOnDocSec": {
          "description": "The first time this image URL was seen on the containing web page. Only set during web indexing.",
          "format": "int32",
          "type": "integer"
        },
        "flags": {
          "description": "Use image_perdoc.h to read/write 'flags'.",
          "format": "int32",
          "type": "integer"
        },
        "flowOutput": {
          "$ref": "ImageContentFlowProtoProd",
          "description": "The output of various features generated by the Flow framework, most importantly data from Starburst (go/starburst). Do NOT interact with the internals of this proto since they may change over time. Instead, use the existing interfaces that consume FlowProtoProd's directly, e.g., image/mustang/content/image_content_distance.h For more info, please contact image-content-core@."
        },
        "h2c": {
          "format": "float",
          "type": "number"
        },
        "h2i": {
          "description": "'Hovers to Impressions' and 'Hovers to Clicks' ratios for an image.",
          "format": "float",
          "type": "number"
        },
        "hateLogoDetection": {
          "$ref": "ImageUnderstandingIndexingAnnotationGroup",
          "description": "Hate logo detections from the VSS logo_recognition module."
        },
        "height": {
          "description": "Height",
          "format": "int32",
          "type": "integer"
        },
        "imageContentQueryBoost": {
          "$ref": "ImageContentQueryBoost",
          "description": "Image Content Scored per query boosts. Currently this is filled by the pamir algorithm and populates the pamir_section."
        },
        "imageExactBoost": {
          "$ref": "ImageExactBoost",
          "description": "A set of query fingerprints and confidence scores. There queries are supposed to be relevant to the image with high confidence."
        },
        "imageLicenseInfo": {
          "$ref": "ImageSearchImageLicenseInfo",
          "description": "Indicates license info of this image, which will tell image search users how to use this image legally."
        },
        "imageRegions": {
          "$ref": "ImageRegionsImageRegions",
          "description": "Regions detected within the image (go/images-region-search-edd). Regions contain bounding boxes circumscribing objects of interest in the image, along with object labels. Regions may overlap."
        },
        "imagerank": {
          "format": "int32",
          "type": "integer"
        },
        "isIipInScope": {
          "description": "IIP in scope signal (go/iip). Set to true if the image is annotated with any iip_in_scope entities (go/iukp-trust-v2).",
          "type": "boolean"
        },
        "isIndexedByImagesearch": {
          "description": "If this image was not selected for indexing by imagesearch, these fields say so and explain why.",
          "type": "boolean"
        },
        "isMultiframe": {
          "description": "True if the original image contains multiple frames (e.g., for animated or stereoscopic images).",
          "type": "boolean"
        },
        "isUnwantedContent": {
          "description": "Field to indicate the image is unwanted for search index. The data is propagated from amarna to alexandria to be annotated in the cdoc. Refer to image/repository/proto/unwanted_content.proto for more info.",
          "type": "boolean"
        },
        "isVisible": {
          "description": "True if the image is inlined on the page (typicially via ) or false if the image is linked to (via an href).",
          "type": "boolean"
        },
        "largestFaceFrac": {
          "description": "Fraction of image covered by the largest face (should match largestFaceFraction, but without scaling). In perdocs, is set only if numberFaces > 0.",
          "format": "float",
          "type": "number"
        },
        "largestFaceFraction": {
          "description": "Fraction of image covered by the largest face, scaled by 1000. Warning: Is DEPRECATED in favor of largest_face_frac. Do not use.",
          "format": "int32",
          "type": "integer"
        },
        "lastCrawlTime": {
          "description": "Most recent timestamp in seconds when this URL was crawled.",
          "format": "int32",
          "type": "integer"
        },
        "licensedWebImagesOptInState": {
          "description": "Indicates the web-master opt-in state of this image, and will be used for Google products to decide usage rights like showing large previews.",
          "enum": [
            "IMAGES_OPTIN_NONE",
            "IMAGES_OPTIN_FULL",
            "PAGE_SNIPPET_CONTROL_SIZE_NONE",
            "PAGE_SNIPPET_CONTROL_SIZE_STANDARD",
            "PAGE_SNIPPET_CONTROL_SIZE_LARGE",
            "IMAGE_TAG_SNIPPET_CONTROL_SIZE_NONE",
            "IMAGE_TAG_SNIPPET_CONTROL_SIZE_STANDARD",
            "IMAGE_TAG_SNIPPET_CONTROL_SIZE_LARGE"
          ],
          "enumDescriptions": [
            "DEFAULT",
            "",
            "Followings are extracted from page snippet restriction. Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels.",
            "Followings are extracted from per image tag snippet restriction. Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels."
          ],
          "type": "string"
        },
        "lineartDetectorScore": {
          "format": "float",
          "type": "number"
        },
        "lineartDetectorVersion": {
          "format": "int32",
          "type": "integer"
        },
        "multibangKgEntities": {
          "$ref": "ImageDataMultibangEntities"
        },
        "nearDupFeatures": {
          "format": "byte",
          "type": "string"
        },
        "nearDupFeaturesSmall": {
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "nearDupFeaturesSmallVersion": {
          "description": "The following fields contain information about a smaller and less powerful version of the hash, needed for neardup retrieval. A compressed and an encoded version of the small hash are stored below. The smaller hash may have a few variants to increase recall. NOTE: This hash is generated by V2 hash computation. A compressed version of the small hash. Currently, a 4-byte fingerprint.",
          "format": "int32",
          "type": "integer"
        },
        "nearDupFeaturesVersion": {
          "description": "Image content derived data used for finding image near dups. NOTE: This hash is generated by V1 hash computation.",
          "format": "int32",
          "type": "integer"
        },
        "nimaAva": {
          "$ref": "ImageRepositoryNimaOutput",
          "description": "Productionized Nima AVA score. Both this field and nima_vq were added on the top of nima_ava_score and nima_vq_score because the signals are already integrated with Batch Amarna in image/repository/schema/global_output_tags.h using NimaOutput."
        },
        "nimaVq": {
          "$ref": "ImageRepositoryNimaOutput",
          "description": "Productionized Nima VQ score."
        },
        "noIndexReason": {
          "items": {
            "enum": [
              "NO_INDEX_IMAGE_URL_NOT_SELECTED",
              "NO_INDEX_REFERRER_URL_NOT_SELECTED",
              "NO_INDEX_X_RAW_IMAGE",
              "NO_INDEX_FAVICON",
              "NO_INDEX_DETECTED_VIA_CONTENT",
              "NO_INDEX_EXTERNAL_VIDEO_THUMBNAIL",
              "NO_INDEX_ONSITE_ANCHOR",
              "NO_INDEX_RSS_FEED",
              "NO_INDEX_REJECTED_BY_IMAGE_SELECTION",
              "NO_INDEX_EXPIRED_THUMBNAIL",
              "NO_INDEX_REJECTED_BY_IMAGE_SELECTION_V1",
              "NO_INDEX_REJECTED_BY_PYTHIA",
              "NO_INDEX_EMPTY_THUMBNAIL"
            ],
            "enumDescriptions": [
              "",
              "",
              "This enum is set during the transition period for enabling raw image support in image search where we can use the indexing pipeline but UI for presentation is unavailable.",
              "This enum is set if the image was extracted as a favicon on the page, and was not gathered from the page for any other reason.",
              "This enum is set if the image was detected via its content and was not gathered from the page for any other reason. That is it was added to the image_links_from_content column in the document table.",
              "This enum is set if the image is an external video thumbnail from an off-page source such as image anchors.",
              "This enum is set if the image is from an on-page anchor.",
              "This enum is set if the image is detected from an rss feed.",
              "This enum is set if the image was normally selected by imagesearch for indexing, but didn't meet the quality threshold for Image Selection.",
              "This enum is set if the image has expired thumbnails or no expiration timestamp is specified.",
              "This enum is set if the image was normally selected by imagesearch for indexing, but didn't meet the quality threshold for heuristic image selection (a legacy system, ariane/171870).",
              "This enum is set if the image was normally selected by imagesearch for indexing, but didn't meet the quality threshold for image Selection v2 (aka Pythia). See go/image-selection for details.",
              "This enum is set if the image has no thumbnails fields found."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "numberFaces": {
          "description": "Number of faces detected in the image",
          "format": "int32",
          "type": "integer"
        },
        "ocrGoodoc": {
          "$ref": "GoodocDocument",
          "description": "Pruned OCR Goodoc see vss_aksara_ocr_util.h for the fields copied."
        },
        "ocrTaser": {
          "$ref": "GoodocDocument",
          "description": "Ocr detected by ocr_taser module."
        },
        "ocrTextboxes": {
          "description": "Text lines detected by OCR engine.",
          "items": {
            "$ref": "OcrPhotoTextBox"
          },
          "type": "array"
        },
        "onPageAlternateUrl": {
          "description": "For an image not explicitly visible on this page, the following url is the one which most closely matches it.",
          "type": "string"
        },
        "packedFullFaceInfo": {
          "$ref": "FaceIndexing",
          "description": "Encodes face number and largest face frac into a small package for storage in mustang. This is calculated directly from FaceDetectionResult."
        },
        "personAttributes": {
          "$ref": "LensDiscoveryStylePersonAttributes",
          "description": "Contains person attributes from the LookNet-Person model and the Style AI Iconic Person Scorer for the most iconic person in a style image."
        },
        "personDetectionSignals": {
          "$ref": "LensDiscoveryStylePersonDetectionSignals",
          "description": "Contains person detection result."
        },
        "photoDetectorScore": {
          "format": "float",
          "type": "number"
        },
        "photoDetectorVersion": {
          "format": "int32",
          "type": "integer"
        },
        "pornFlagData": {
          "$ref": "PornFlagData",
          "description": "Used by the segindexer for combined www+image indices."
        },
        "precomputedRestricts": {
          "$ref": "PrecomputedRestricts",
          "description": "Restricts computed before building a Mustang index."
        },
        "rankInNeardupCluster": {
          "description": "Rank in near-dup cluster (go/image-rank-in-neardup-cluster). The rank is 1-indexed: rank 1 is the best.",
          "format": "int32",
          "type": "integer"
        },
        "restrictStrings": {
          "description": "A string representation of all the restricts associated with this image.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "robotedAgents": {
          "description": "CSV list of user agents for which this image should be considered roboted. Note: All images are crawled using googlebot-images, this exists for clients that require additional restrictions beyond googlebot-images such as news.",
          "type": "string"
        },
        "shoppingProductInformation": {
          "$ref": "ImageRepositoryShoppingProductInformation",
          "description": "The Shoppable Images product information to be annotated in the Cdoc. All fields will be populated except the product location bounding box."
        },
        "size": {
          "description": "Size in bytes of original (non-thumbnail)",
          "format": "int32",
          "type": "integer"
        },
        "smearedTopWebLandingPageDocids": {
          "description": "Web docids that correspond to high ranked smeared landing pages for this image. Used for conditional retrieval of actionable landing pages for image search.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "smearedTopWebLandingPages": {
          "items": {
            "$ref": "SmearedWebLandingPageEntry"
          },
          "type": "array"
        },
        "styleAestheticsScore": {
          "$ref": "LensDiscoveryStyleAestheticsScoreSignals",
          "description": "Aesthetics score of a style image."
        },
        "styleImageType": {
          "$ref": "LensDiscoveryStyleStyleImageTypeSignals",
          "description": "Prediction of a style image type: Stage, Stock, Street or Outfits."
        },
        "testingScore": {
          "description": "This field is for testing purposes, more information in go/media-dirt-2022.",
          "format": "int32",
          "type": "integer"
        },
        "thumbHeight": {
          "format": "int32",
          "type": "integer"
        },
        "thumbSize": {
          "format": "int32",
          "type": "integer"
        },
        "thumbWidth": {
          "description": "Thumbnail width.",
          "format": "int32",
          "type": "integer"
        },
        "thumbnail": {
          "items": {
            "$ref": "ImageDataThumbnail"
          },
          "type": "array"
        },
        "unavailableAfterSecs": {
          "description": "Time in seconds since epoch after which this image should be considered unavailable.",
          "format": "int64",
          "type": "string"
        },
        "url": {
          "description": "Canonicalized absolute image url.",
          "type": "string"
        },
        "whiteBackgroundScore": {
          "format": "float",
          "type": "number"
        },
        "whiteBackgroundScoreVersion": {
          "description": "Image is likely an object on a white background (value on [0,1]).",
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageDataMultibangEntities": {
      "description": "Multibang kg entities.",
      "id": "ImageDataMultibangEntities",
      "properties": {
        "entity": {
          "items": {
            "$ref": "ImageDataMultibangEntitiesMultibangEntity"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageDataMultibangEntitiesMultibangEntity": {
      "id": "ImageDataMultibangEntitiesMultibangEntity",
      "properties": {
        "entityId": {
          "description": "Entity ID.",
          "type": "string"
        },
        "score": {
          "description": "Multibang score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageDataThumbnail": {
      "id": "ImageDataThumbnail",
      "properties": {
        "expirationTimestampMicros": {
          "description": "The thumbnail is guaranteed to be kept in the serving system until the expiration timestamp has passed, in microseconds.",
          "format": "int64",
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "mimeType": {
          "type": "string"
        },
        "size": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "enum": [
            "THUMBNAIL_TYPE_DEFAULT",
            "THUMBNAIL_TYPE_AREA_50K",
            "THUMBNAIL_TYPE_400",
            "THUMBNAIL_TYPE_800",
            "THUMBNAIL_TYPE_ORIGINAL",
            "THUMBNAIL_TYPE_ORIGINAL_HQ",
            "THUMBNAIL_TYPE_FAVICON_16",
            "THUMBNAIL_TYPE_FAVICON_28",
            "THUMBNAIL_TYPE_FAVICON_32",
            "THUMBNAIL_TYPE_FAVICON_64",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL",
            "THUMBNAIL_TYPE_FAVICON_16_DARK",
            "THUMBNAIL_TYPE_FAVICON_28_DARK",
            "THUMBNAIL_TYPE_FAVICON_32_DARK",
            "THUMBNAIL_TYPE_FAVICON_64_DARK",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL_DARK",
            "THUMBNAIL_TYPE_1080",
            "THUMBNAIL_TYPE_1600_HQ",
            "THUMBNAIL_TYPE_AREA_300K",
            "THUMBNAIL_TYPE_AREA_50K_ALPHA",
            "THUMBNAIL_TYPE_AREA_50K_SYNTHETIC_ALPHA",
            "THUMBNAIL_TYPE_AREA_2M",
            "THUMBNAIL_TYPE_AREA_2M_METADATA",
            "THUMBNAIL_TYPE_800_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ORIGINAL_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ANIMATED_H144",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_LICENSED",
            "THUMBNAIL_TYPE_TENOR_250K_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_GIF",
            "THUMBNAIL_TYPE_TENOR_30K_OPTIMIZED_THUMBNAIL_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_OPTIMIZED_90P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100P_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100W_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200W_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_PREVIEW_GIF",
            "THUMBNAIL_TYPE_TENOR_250K_MEDIUM_GIF",
            "THUMBNAIL_TYPE_AREA_2M_WEBP",
            "THUMBNAIL_TYPE_AREA_2M_WEBP_METADATA",
            "THUMBNAIL_TYPE_AREA_2M_AVIF",
            "THUMBNAIL_TYPE_AREA_2M_AVIF_METADATA",
            "THUMBNAIL_TYPE_AREA_50K_WEBP",
            "THUMBNAIL_TYPE_AREA_50K_AVIF",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_KG"
          ],
          "enumDescriptions": [
            "DEPRECATED - use THUMBNAIL_TYPE_AREA_50K if possible. The default thumbnail type is deprecated and no longer served by SFFE. For legacy users (e.g. imagesearch heirloom UI) you must request a downsized THUMBNAIL_TYPE_AREA_50K thumbnail.",
            "This is the most common thumbnail type, used in image search results. It is defined to have 50625 pixels (= 225 x 225).",
            "This refers to a thumbnail that fits in a 400x400 box.",
            "This refers to a thumbnail that fits in a 800x800 box.",
            "This refers to re-encoding original image to JPEG at the same size (up to 10000x10000). Output quality may be lower.",
            "Re-encode image at the same size as original (up to 10000x10000) but with high-quality (q=90). This was introduced by TYPHOON client and is expected only for very few images in our table (under 10k). If you plan to use this contact amarna-dev@ and/or crt@",
            "These refer to favicon thumbnails of 16x16, 32x32 or 64x64. If the original image is an ico file containing multiple embedded images including 16x16, 32x32 or 64x64, these thumbnails are derived from the embedded image of the corresponding size. (If no such embedded image is found, prefer the closest size that's larger. If still no such size exists, prefer largest.) If no such size exists, these thumbnails are rescaled to an image whose maximum dimension is 16, 28, 32 or 64.",
            "",
            "",
            "",
            "This type of favicon will preserve the size of the original image.",
            "These refer to favicon thumbnails for dark mode. This triggers dark mode on the SVG decoding (and otherwise, the same as the above favicon types)",
            "",
            "",
            "",
            "",
            "This refers to a thumbnail that fits in a 1080x1080 box.",
            "This refers to a thumbnail that fits in a 1600x1600 box and is encoded with high-quality (q=90). Contact amarna-dev@/crt@/bingwang@ for using it.",
            "This uses the same MaxAreaSizer as THUMBNAIL_TYPE_AREA_50K. The exact area is defined to be 307200 (= 640 x 480).",
            "This is like THUMBNAIL_TYPE_AREA_50K, but with an alpha channel.",
            "DEPRECATED - Please do not introduce new requests for this type. It will be eliminated soon. Until then, it will behave like the AREA_50K_ALPHA type -- use that instead.",
            "This refers to a thumbnail with at most 2073600 pixels (=1920*1080). The image will be scaled down to 2M while preserving the aspect ratio if it's too large. If the thumbnail is in JPEG format, it is encoded with quality = 85. Besides, it supports alpha channel by default and does not convert lossless formats to JPEG.",
            "Similar to THUMBNAIL_TYPE_AREA_2M, but with the source image metadata propagated.",
            "In alpha-white thumbs, colors are remapped in RGBA to be more transparent the closer they are to white. This is for use with white-background images, so that the perceived background color can be darkened by rendering over gray. See go/alpha-white-thumbs for details and limitations. Sizing matches non-ALPHA_WHITE equivalents.",
            "",
            "Height-scaled animated thumb types, encoded as H264 previews. Suffix gives height, e.g. _H144 indicates height 144. Width is a scaled multiple-of-8 value so the thumb has approximately the same aspect ratio as the original. For more info, see http://go/animated-thumbs.",
            "New thumbnail type for licensed contents. From a thumbnail generation perspective this behaves similarly to THUMBNAIL_TYPE_ORIGINAL_HQ, but it exists as a separate thumbnail type to enable takedowns requested by owner. WARNING: This type is primarily used by go/licensed-media-service and is subject to policy changes. Please contact g/license-media-service-team before using.",
            "Tenor gifs go/tenor-integration-binary-serving-discussion",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Similar to THUMBNAIL_TYPE_AREA_2M but pre-transcoded to WebP and AVIF format, as those two format can be slow to transcode in serving time. Currently only generated for AMP images. These two thumbnails are static images despite that their formats support animation.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_WEBP, but with the source image metadata propagated.",
            "AVIF is not yet a supported input for SCS serving time thumbnailing, trying to do so will give errors.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_AVIF, but with the source image metadata propagated.",
            "WebP format. Currently only generated for navboost images.",
            "AVIF format. Currently only generated for navboost images.",
            "WARNING: This type is dedicated to KG_IMAGE client. http://b/234653726"
          ],
          "type": "string"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageExactBoost": {
      "id": "ImageExactBoost",
      "properties": {
        "navquery": {
          "items": {
            "$ref": "ImageExactBoostNavQuery"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageExactBoostNavQuery": {
      "description": "Navboost query data.",
      "id": "ImageExactBoostNavQuery",
      "properties": {
        "confidence": {
          "description": "Associated confidence scores for the image for the query.",
          "format": "int32",
          "type": "integer"
        },
        "imageClickRank": {
          "description": "Click-based rank of the image for this query.",
          "format": "int32",
          "type": "integer"
        },
        "navFp": {
          "description": "Query fingerprint.",
          "format": "uint64",
          "type": "string"
        },
        "navQuery": {
          "description": "The normalized raw query text.",
          "type": "string"
        },
        "referrerDocid": {
          "description": "List of all referrers, sorted by their rank (stored in Moosedog).",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "referrerRank": {
          "description": "Rank of the current web doc referrer (stored in docjoins).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageExifIPTCMetadata": {
      "description": "This proto holds IPTC metadata. http://www.iptc.org/cms/site/index.html?channel=CH0099 Proto field name is same with IPTC property name except which is clearly stated. Next Id: 63",
      "id": "ImageExifIPTCMetadata",
      "properties": {
        "acquireLicensePage": {
          "description": "Page URL about how to acquire this licensable image.",
          "type": "string"
        },
        "artwork": {
          "items": {
            "$ref": "ImageExifIPTCMetadataArtwork"
          },
          "type": "array"
        },
        "contactinfo": {
          "$ref": "ImageExifIPTCMetadataContactInfo"
        },
        "copyrightNotice": {
          "type": "string"
        },
        "creator": {
          "description": "IPTC authorship & copyright related fields.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "creditLine": {
          "type": "string"
        },
        "dateCreated": {
          "description": "Time (in seconds)",
          "format": "int64",
          "type": "string"
        },
        "dateExpired": {
          "format": "int64",
          "type": "string"
        },
        "dateReleased": {
          "format": "int64",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "event": {
          "type": "string"
        },
        "headline": {
          "type": "string"
        },
        "imageSupplier": {
          "description": "PLUS field, not used.",
          "type": "string"
        },
        "instructions": {
          "type": "string"
        },
        "keywords": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "licenseUrl": {
          "description": "License URL about how to distribute the image.",
          "type": "string"
        },
        "location": {
          "$ref": "ImageExifIPTCMetadataLocation"
        },
        "locationCreated": {
          "$ref": "ImageExifIPTCMetadataLocationInfo",
          "description": "Location of the camera"
        },
        "locationShown": {
          "description": "Location shown on the image",
          "items": {
            "$ref": "ImageExifIPTCMetadataLocationInfo"
          },
          "type": "array"
        },
        "modelReleaseStatus": {
          "enum": [
            "MR_UNKNOWN",
            "MR_NONE",
            "MR_NOT_APPLICABLE",
            "MR_UNLIMITED",
            "MR_LIMITED_OR_INCOMPLETE"
          ],
          "enumDescriptions": [
            "",
            "http://ns.useplus.org/ldf/vocab/MR-NON",
            "http://ns.useplus.org/ldf/vocab/MR-NAP",
            "http://ns.useplus.org/ldf/vocab/MR-UMR",
            "http://ns.useplus.org/ldf/vocab/MR-LMR"
          ],
          "type": "string"
        },
        "propertyReleaseStatus": {
          "enum": [
            "PR_UNKNOWN",
            "PR_NONE",
            "PR_NOT_APPLICABLE",
            "PR_UNLIMITED",
            "PR_LIMITED_OR_INCOMPLETE"
          ],
          "enumDescriptions": [
            "",
            "http://ns.useplus.org/ldf/vocab/PR-NON",
            "http://ns.useplus.org/ldf/vocab/PR-NAP",
            "http://ns.useplus.org/ldf/vocab/PR-UPR",
            "http://ns.useplus.org/ldf/vocab/PR-LPR"
          ],
          "type": "string"
        },
        "rightsUsageTerms": {
          "type": "string"
        },
        "source": {
          "type": "string"
        },
        "supplementalCategories": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "title": {
          "description": "IPTC description related fields.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageExifIPTCMetadataArtwork": {
      "description": "Artwork or Object in the Image Details",
      "id": "ImageExifIPTCMetadataArtwork",
      "properties": {
        "title": {
          "description": "Other fields omitted.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageExifIPTCMetadataContactInfo": {
      "id": "ImageExifIPTCMetadataContactInfo",
      "properties": {
        "address": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "postalCode": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "webUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageExifIPTCMetadataLocation": {
      "description": "Location of the camera @deprecated: Use location_created instead.",
      "id": "ImageExifIPTCMetadataLocation",
      "properties": {
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "countryCode": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "subLocation": {
          "type": "string"
        },
        "worldRegion": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageExifIPTCMetadataLocationInfo": {
      "id": "ImageExifIPTCMetadataLocationInfo",
      "properties": {
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "countryCode": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "subLocation": {
          "type": "string"
        },
        "worldRegion": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageExifImageEmbeddedMetadata": {
      "description": "This class holds the EXIf/IPTC meta data Next Id: 104",
      "id": "ImageExifImageEmbeddedMetadata",
      "properties": {
        "altitude": {
          "format": "double",
          "type": "number"
        },
        "aperture": {
          "format": "float",
          "type": "number"
        },
        "author": {
          "description": "Text fields EXIF_TAG_ARTIST",
          "type": "string"
        },
        "author2": {
          "description": "EXIF_TAG_XP_AUTHOR",
          "type": "string"
        },
        "brightness": {
          "format": "float",
          "type": "number"
        },
        "cameraMaker": {
          "description": "Device - Camera raw text without normalization",
          "type": "string"
        },
        "cameraModel": {
          "description": "raw text without normalization",
          "type": "string"
        },
        "cameraSerialNumber": {
          "description": "This is the extracted serial number from EXIF (the source depends on camera, most of the cameras store it in makers note tag).",
          "type": "string"
        },
        "captureTime": {
          "description": "Capturing settings in time_t",
          "format": "int64",
          "type": "string"
        },
        "colorSpace": {
          "format": "int32",
          "type": "integer"
        },
        "comments": {
          "description": "EXIF_TAG_USER_COMMENT",
          "type": "string"
        },
        "comments2": {
          "description": "EXIF_TAG_XP_COMMENT",
          "type": "string"
        },
        "continousDriveMode": {
          "type": "boolean"
        },
        "copyright": {
          "description": "EXIF_TAG_COPYRIGHT",
          "type": "string"
        },
        "deprecatedCity": {
          "description": "Location from IPTC @deprecated: Use iptc.location instead.",
          "type": "string"
        },
        "deprecatedCountry": {
          "type": "string"
        },
        "deprecatedState": {
          "type": "string"
        },
        "description": {
          "description": "EXIF_TAG_IMAGE_DESCRIPTION",
          "type": "string"
        },
        "destBearing": {
          "format": "double",
          "type": "number"
        },
        "destBearingRef": {
          "description": "Bearing and distance to destination point.",
          "format": "double",
          "type": "number"
        },
        "destDistance": {
          "format": "double",
          "type": "number"
        },
        "destLatitude": {
          "description": "GPS location of destination point.",
          "format": "double",
          "type": "number"
        },
        "destLongitude": {
          "format": "double",
          "type": "number"
        },
        "digitalZoomRatio": {
          "format": "float",
          "type": "number"
        },
        "exposureBias": {
          "format": "float",
          "type": "number"
        },
        "exposureProgram": {
          "description": "1-8, see EXIF definition",
          "format": "int32",
          "type": "integer"
        },
        "exposureTime": {
          "format": "float",
          "type": "number"
        },
        "flashUsed": {
          "type": "boolean"
        },
        "focalLength": {
          "format": "float",
          "type": "number"
        },
        "focalLength35mm": {
          "description": "convert to match 35mm film camera",
          "format": "float",
          "type": "number"
        },
        "focalPlaneResUnit": {
          "format": "int32",
          "type": "integer"
        },
        "focalPlaneXres": {
          "format": "float",
          "type": "number"
        },
        "focusMode": {
          "enum": [
            "MANUAL_FOCUS",
            "AF_ONE_SHOT",
            "AF_CONTINUOUS",
            "AF_AUTO",
            "OTHER_FOCUS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "auto switch between AF_ONE_SHOT and AF_CONTINUOUS",
            ""
          ],
          "type": "string"
        },
        "gpsDop": {
          "description": "Dilution of precision. HDOP/PDOP depends on measure mode. Find out more at http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)",
          "format": "double",
          "type": "number"
        },
        "gpsMeasureMode": {
          "enum": [
            "MEASURE_MODE_2D",
            "MEASURE_MODE_3D"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "gpsStatus": {
          "enum": [
            "GPS_STATUS_ACTIVE",
            "GPS_STATUS_VOID"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "hPositioningError": {
          "description": "in meters",
          "format": "double",
          "type": "number"
        },
        "imageHeight": {
          "format": "int32",
          "type": "integer"
        },
        "imageWidth": {
          "format": "int32",
          "type": "integer"
        },
        "imgDirection": {
          "description": "GPS Heading 0.00 to 359.99 degrees",
          "format": "double",
          "type": "number"
        },
        "imgDirectionRef": {
          "enum": [
            "DirectionRef_True",
            "DirectionRef_Magnetic"
          ],
          "enumDescriptions": [
            "Indicates the reference for giving the direction of the image when it is captured.",
            ""
          ],
          "type": "string"
        },
        "iptc": {
          "$ref": "ImageExifIPTCMetadata"
        },
        "iso": {
          "format": "int32",
          "type": "integer"
        },
        "keywords": {
          "description": "EXIF_TAG_XP_KEYWORDS",
          "type": "string"
        },
        "latitude": {
          "description": "GPS location +/- 90 inclusive",
          "format": "double",
          "type": "number"
        },
        "lensId": {
          "description": "Device - Lens We use this extended id to identify a lens uniquely. Canon: \"%d %d %d\"=.. Nikon: \"%.2X %.2X %.2X %.2X %.2X %.2X %.2X %.2X\" Don't change the format of the internal lens id because we use them to look up the lens names.",
          "type": "string"
        },
        "lensMaker": {
          "type": "string"
        },
        "lightSource": {
          "format": "int32",
          "type": "integer"
        },
        "longFocal": {
          "format": "int32",
          "type": "integer"
        },
        "longitude": {
          "description": "+/- 180 inclusive",
          "format": "double",
          "type": "number"
        },
        "maxApertureAtLongFocal": {
          "format": "float",
          "type": "number"
        },
        "maxApertureAtShortFocal": {
          "format": "float",
          "type": "number"
        },
        "meteringMode": {
          "description": "1-6, see EXIF definition",
          "format": "int32",
          "type": "integer"
        },
        "modificationTime": {
          "description": "in time_t",
          "format": "int64",
          "type": "string"
        },
        "orientation": {
          "enum": [
            "ORIENTATION_0_DEG",
            "ORIENTATION_MIRROR_0_DEG",
            "ORIENTATION_180_DEG",
            "ORIENTATION_MIRROR_180_DEG",
            "ORIENTATION_MIRROR_270_DEG",
            "ORIENTATION_90_DEG",
            "ORIENTATION_MIRROR_90_DEG",
            "ORIENTATION_270_DEG"
          ],
          "enumDescriptions": [
            "All rotations are clockwise. Rotations expressed are those required to place the image in the desired orientation. Note that the enum values here are not arbitrary; they are defined in the exif standard. Normal.",
            "Mirror horizontally.",
            "Rotate 180 degrees.",
            "Mirror horizontally then rotate 180",
            "(the same as mirror vertically). Mirror horizontally then rotate 270.",
            "Rotate 90 degrees.",
            "Mirror horizontally then rotate 90.",
            "Rotate 270 degrees."
          ],
          "type": "string"
        },
        "shortFocal": {
          "format": "int32",
          "type": "integer"
        },
        "software": {
          "description": "EXIF_TAG_SOFTWARE",
          "type": "string"
        },
        "subject": {
          "description": "EXIF_TAG_XP_SUBJECT",
          "type": "string"
        },
        "subjectDistance": {
          "format": "float",
          "type": "number"
        },
        "subjectLocationX": {
          "format": "int32",
          "type": "integer"
        },
        "subjectLocationY": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "description": "EXIF_TAG_XP_TITLE",
          "type": "string"
        },
        "xResolution": {
          "description": "pixels per inch",
          "format": "float",
          "type": "number"
        },
        "yResolution": {
          "description": "pixels per inch",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageMonetizationFeaturedImageProperties": {
      "id": "ImageMonetizationFeaturedImageProperties",
      "properties": {
        "inspirationScore": {
          "description": "How an image is inspirational, [0, 1].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageMoosedogCrawlState": {
      "id": "ImageMoosedogCrawlState",
      "properties": {
        "code": {
          "enum": [
            "VALID_IMAGE",
            "INVALID_FETCH_REPLY",
            "XROBOTED",
            "URL_NOT_CRAWLED",
            "PARSE_ERROR",
            "INVALID_IMAGE",
            "IMS_CRAWL_NOT_MODIFIED",
            "EXPIRED_DISCOVERY_CRAWL",
            "EXPIRED_FEED_CRAWL",
            "EXPIRED_PRIORITY_FEED_CRAWL",
            "INVALID_URL",
            "VALID_VIDEO",
            "VALID_SWF",
            "VALID_SILVERLIGHT",
            "INVALID_VIDEO",
            "TRUNCATED_CONTENTS",
            "FAST_CRAWL_LOCK_ACQUIRE_FAILED",
            "FAST_CRAWL_TTL_EXPIRED"
          ],
          "enumDescriptions": [
            "",
            "The crawl resulted in an invalid fetch reply. This means that fetchreply did not contain the url or the original crawl date inside it.",
            "The url was xroboted.",
            "Look at url not_crawled_reason for specific errors.",
            "The url was successfully crawled but contained no valid image or video content.",
            "The url was successfully crawled but was in a format not currently supported.",
            "This was a referesh crawl and there was no modification that needs to be processesed.",
            "This is a discovery url that webmirror discarded. Such urls need not be imported.",
            "This is a feed url and webmirror expired it.",
            "This is a feed url in one of the priority feeds and webmirror expired it.",
            "The passed URL was not valid and could not be crawled.",
            "This is a valid video, SWF, or Silverlight object.",
            "",
            "",
            "This is an invalid video.",
            "This is a large image or video, and only part of it has been fetched.",
            "Temporary status for fast crawl failures.",
            ""
          ],
          "type": "string"
        },
        "detailedReason": {
          "description": "Each of the above not_crawled_reason will have a set of detailed reason defined in crawler/trawler/trawler_enums.proto.",
          "format": "int32",
          "type": "integer"
        },
        "internalStatus": {
          "$ref": "UtilStatusProto",
          "description": "The status returned when RPCs are used to internally fetch the image (eg. from FIFE)."
        },
        "isTerminal": {
          "description": "Specifies if the current crawl state is terminal.",
          "type": "boolean"
        },
        "noIndexAfterTimestamp": {
          "description": "Time in seconds since epoch after which this image should be considered unavailable.",
          "format": "int64",
          "type": "string"
        },
        "notCrawledReason": {
          "enum": [
            "URL_CRAWLED",
            "URL_ERROR",
            "URL_ROBOTED",
            "URL_UNREACHABLE",
            "URL_TIMEOUT",
            "URL_REJECTED",
            "URL_NOT_FOLLOWED",
            "NUM_STATE_TYPES"
          ],
          "enumDescriptions": [
            "",
            "Error fetching; most commonly 404;",
            "but many other possible reasons. Roboted out.",
            "Fetch error; 5xx; truncated response; etc.",
            "Timeout while fetching.",
            "Rejected based on capacity or permissions.",
            "Redirects/retries-related: we crawled something",
            "*** don't forget to update."
          ],
          "type": "string"
        },
        "overrodeTerminalState": {
          "description": "When true, it means that a non-terminal state has overwrote a terminal one.",
          "type": "boolean"
        },
        "repid": {
          "description": "The repid for the urls. This repid is the id given to the dupe cluster this url belongs to.",
          "format": "byte",
          "type": "string"
        },
        "robotedAgents": {
          "description": "A comma separated list of user agents for which this image should be considered roboted. All images are crawled using googlebot-images and this exists here purely for informative reasons.",
          "type": "string"
        },
        "url": {
          "description": "The url at which we crawled this content. With us starting to use repids the crawl table key no longer is suggestive of the url. In addition this is used in Amarna to detect race conditions between a reference changing its crawl directive and the original crawl job finishing.",
          "type": "string"
        },
        "urlDeleted": {
          "description": "Set to true if the url is taken down by clients. This indicates that this crawl state is used to fast remove the crawl result of the url instead of waiting for Multiverse crawl results. For more information, please refer to go/amarna-url-deletion.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ImageMustangImageLinkSelectionInfo": {
      "description": "For detailed info, please see go/naive-image-selection",
      "id": "ImageMustangImageLinkSelectionInfo",
      "properties": {
        "webRelevanceScore": {
          "description": "score calculated in image selection phase, higher imagelink_selection_score more relevant the link is related to the web page",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageMustangShoppingOffer": {
      "description": "A proto buffer to organize shopping offer info from Inventory & Policy Service.",
      "id": "ImageMustangShoppingOffer",
      "properties": {
        "inferredImageTypes": {
          "items": {
            "enum": [
              "UNKNOWN",
              "MERCHANT_IMAGE",
              "ML_INFERRED_IMAGE",
              "NEARDUP_INFERRED_IMAGE"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "ipsOfferId": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImagePerDocData": {
      "id": "ImagePerDocData",
      "properties": {
        "DEPRECATEDEntropyColor": {
          "description": "entropy and color values for thumbnail (4 bytes consisting of R, G, B and entropy values)",
          "format": "uint32",
          "type": "integer"
        },
        "filename": {
          "description": "about 10 bytes",
          "type": "string"
        },
        "flags": {
          "description": "image_perdoc.h",
          "format": "int32",
          "type": "integer"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImagePornDebugInfo": {
      "description": "Used to store debug information of the overall classifier.",
      "id": "ImagePornDebugInfo",
      "properties": {
        "info": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRegionsImageRegion": {
      "description": "A single region within an image. NEXT_ID: 11",
      "id": "ImageRegionsImageRegion",
      "properties": {
        "boundingBox": {
          "$ref": "PhotosVisionGroundtruthdbNormalizedBoundingBox",
          "description": "The bounding box of the region."
        },
        "boundingBoxScore": {
          "description": "The confidence score associated with the bounding box.",
          "format": "float",
          "type": "number"
        },
        "id": {
          "description": "A unique identifier for the region within the image. The id is unique only among other regions in the image.",
          "type": "string"
        },
        "isProduct": {
          "description": "Set true if the region represents a product, i.e., if any of its labels are on a product labels whitelist. See ImageRegionsConfig for details on the product whitelist.",
          "type": "boolean"
        },
        "knnScore": {
          "description": "The score for this region based on how visually similar its neighbors are.",
          "format": "double",
          "type": "number"
        },
        "labelGroup": {
          "$ref": "ImageUnderstandingIndexingLabelGroup",
          "description": "The label group corresponding to the first LabelParams listed in ImageRegionsConfig."
        },
        "labelVersion": {
          "description": "The version string of the labels with which the region was processed.",
          "type": "string"
        },
        "primaryLabel": {
          "$ref": "ImageUnderstandingIndexingLabel",
          "description": "The primary label associated with the region. Specifically, the highest-scored whitelisted label associated with the region. See ImageRegionsConfig for details on the whitelist."
        },
        "renderType": {
          "enum": [
            "UNSET",
            "DONT_RENDER",
            "RENDER_ONLY_BOUNDING_BOX",
            "RENDER_BOUNDING_BOX_AND_PRIMARY_LABEL"
          ],
          "enumDescriptions": [
            "",
            "Do not render this region.",
            "Render only the bounding box but not the primary label.",
            "Render both the bounding box and the primary label."
          ],
          "type": "string"
        },
        "starburstV4": {
          "$ref": "ImageUnderstandingIndexingFeature",
          "description": "The starburst v4 features and tokens for the region."
        }
      },
      "type": "object"
    },
    "ImageRegionsImageRegions": {
      "description": "An image with regions within it. NEXT_ID: 11",
      "id": "ImageRegionsImageRegions",
      "properties": {
        "finalPornScore": {
          "description": "The final_porn_score for the image.",
          "format": "float",
          "type": "number"
        },
        "finalViolenceScore": {
          "description": "The final_violence_score for the image.",
          "format": "float",
          "type": "number"
        },
        "flowOutput": {
          "$ref": "ImageContentFlowProtoProd",
          "description": "The output of various features generated by the Flow framework, most importantly data from Starburst (go/starburst)."
        },
        "has300kThumb": {
          "description": "True if the image has a 300k thumb.",
          "type": "boolean"
        },
        "hasNavboost": {
          "description": "True if the image has navboost.",
          "type": "boolean"
        },
        "isIuInappropriate": {
          "description": "True if the image is iu-inappropriate.",
          "type": "boolean"
        },
        "pedoScore": {
          "description": "The pedo_score of the image.",
          "format": "float",
          "type": "number"
        },
        "precomputedRestricts": {
          "$ref": "PrecomputedRestricts",
          "description": "The precomputed restricts for the image."
        },
        "racyScore": {
          "description": "The racy_score of the image.",
          "format": "float",
          "type": "number"
        },
        "region": {
          "description": "The list of regions.",
          "items": {
            "$ref": "ImageRegionsImageRegion"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryAmarnaCloudSpeechSignals": {
      "description": "Next Tag: 8",
      "id": "ImageRepositoryAmarnaCloudSpeechSignals",
      "properties": {
        "duplicateOfYtS3Asr": {
          "description": "If this field is set to true, it means that Youtube already processed the ASR from S3 for the langID. Please find the ASR result from transcript_asr in google3/image/repository/proto/video_search.proto instead.",
          "type": "boolean"
        },
        "langWithoutLocale": {
          "description": "The language id input for creating this ASR without regional info. Same format as in go/ytlangid. This field is populated in Kronos Amarna Cloud Speech operator and passed to Amarna, but it is cleared before stored in Amarna's metadata table.",
          "type": "string"
        },
        "modelIdentifier": {
          "description": "Identifying which ASR models are used for the result",
          "type": "string"
        },
        "results": {
          "description": "Raw results from Cloud Speech API",
          "items": {
            "$ref": "ImageRepositorySpeechRecognitionResult"
          },
          "type": "array"
        },
        "transcriptAsr": {
          "$ref": "PseudoVideoData",
          "description": "This field contains full (stitched) transcription, word-level time offset , and word-level byte offset. The value of this field is derived from the SpeechRecognitionResult field above."
        }
      },
      "type": "object"
    },
    "ImageRepositoryAmarnaSignalsBlob": {
      "id": "ImageRepositoryAmarnaSignalsBlob",
      "properties": {
        "frameFeatures": {
          "$ref": "DrishtiFeatureSetDataSequence"
        }
      },
      "type": "object"
    },
    "ImageRepositoryAmarnaSignalsBlobInfo": {
      "id": "ImageRepositoryAmarnaSignalsBlobInfo",
      "properties": {
        "signalsBlobId": {
          "description": "Blob id for AmarnaSignalsBlob (see `Blob proto` section of go/revisit-frame-level-signals-amarna).",
          "type": "string"
        },
        "signalsBlobUpdateTimestamp": {
          "description": "Additional timestamp field for when the blob is written/updated, serving as the dirty field to help checksum-based update push (see `Dirty field` section in go/revisit-frame-level-signals-amarna).",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryAmarnaStatus": {
      "description": "This message stores the status and reason why Amarna was unable to provide perdoc information for an image.",
      "id": "ImageRepositoryAmarnaStatus",
      "properties": {
        "reason": {
          "enum": [
            "NOT_REJECTED",
            "INVALID_MEDIA",
            "TERMINAL_CRAWL_ERROR",
            "LOW_PRIORITY_REFERRER",
            "REMOVED_BY_CLIENT_REQUEST",
            "XROBOTED",
            "CONTENT_PROCESSING_ERROR",
            "MISSING_DOCID",
            "ROBOTED",
            "UNWANTED_CONTENT",
            "NOT_A_VIDEO",
            "INDEXING_DELAY"
          ],
          "enumDescriptions": [
            "The default reason for rejection.",
            "The url was crawled successfully, but the content is not an image / video that Amarna can currently parse and index.",
            "There was a permanent error crawling this url, other than xrobots.",
            "The media item has too many urls associated with it and the priority of this media url is not high enough to be associated with the media item. As Amarna processes other requests it may force a previously associated url to be no longer associated with the item. In this case Amarna will send a message with this status asking the client to remove this url.",
            "The url was removed by the client's request.",
            "We successfully issued a crawl request to the host, and got roboted out.",
            "Contents were crawled successfully, the content type is something Amarna is supposed to handle, processing was attempted, but media annotators failed to generate data for this content.",
            "Fairly specific amarna internal consistency error: we last received a an expired feed crawl from this url, but never received the bytes and could not compute a docid..",
            "Crawl was disallowed by robots.txt.",
            "Deprecated. Don't reuse.",
            "",
            ""
          ],
          "type": "string"
        },
        "status": {
          "enum": [
            "READY",
            "REJECTED",
            "NOT_READY",
            "DEPRECATED_3"
          ],
          "enumDescriptions": [
            "For media_type == IMAGE: The url was crawled successfully, and the content is of correct media type. Amarna has registered the interest of the corpus and has associated this url with the media item. A receipt of a message with this status will imply to the client that Amarna is ready to serve this media externally. This is the only case when docid will be set. For media_type == VIDEO: This status will be used in all cases except deletions, so Alexandria will always link the contained VideoProperties to the associated web CompositeDocs. This is necessary because the final video indexing decisions are made in Doc-Properties, where the only inputs are the CompositeDocs. For media_type == FAVICON: The url was crawled successfully, and the content is of correct media type. Amarna has registered the interest of the corpus and has associated this url with the media item. A receipt of a message with this status will imply to the client that Amarna is ready to serve this media externally. This is the only case when docid will be set.",
            "For media_type == IMAGE: Corpus on receipt of this status should assume that Amarna has initiated a removal of this url and should prepare to delete it. For media_type == VIDEO: This status will be used for deletions, which occur when there are no longer any web pages associated with a video url. By using the REJECTED status, we instruct Alexandria to remove the VideoProperties from the video table. For media_type == FAVICON: Corpus on receipt of this status should assume that Amarna has initiated a removal of this url and should prepare to delete it.",
            "For media_type == IMAGE: Media is not ready to be served yet. Amarna is still trying to crawl it. This will be sent only in the immediate mode API or when a MediaUpdate is requested via MediaUpdateRequest. For media_type == VIDEO: Not applicable. For media_type == FAVICON: Media is not ready to be served yet. Amarna is still trying to crawl it or generate thumbnails for it.",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryAnimatedImagePerdocData": {
      "description": "Additional animated image data stored in perdoc (ImageData); will only be stored for animated images.",
      "id": "ImageRepositoryAnimatedImagePerdocData",
      "properties": {
        "aggregatedPornScores": {
          "$ref": "ImageSafesearchContentBrainPornAnnotation",
          "description": "Aggregated porn scores for animated images. Aggregated using max sampling rate / max duration. Note the plan is to fold these scores into existing summarized scores, for cases where these scores are available. See tracking bug b/63580795."
        },
        "durationMs": {
          "description": "Total duration of animation, in ms.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageRepositoryApiItagSpecificMetadata": {
      "description": "The metadata returned with each transcode. Next available field: 9",
      "id": "ImageRepositoryApiItagSpecificMetadata",
      "properties": {
        "expirationTimestampSec": {
          "description": "Timestamp (measured in seconds since epoch) after which Amarna will delete the serving transcode.",
          "format": "int64",
          "type": "string"
        },
        "genus": {
          "description": "The Venom Genus that this transcode was produced for.",
          "enum": [
            "GENUS_UNKNOWN",
            "GENUS_YT_HIGH_VALUE_CONTENT",
            "GENUS_YT_USER_GENERATED_CONTENT",
            "GENUS_GMAIL",
            "GENUS_KIDS_HUB",
            "GENUS_YOUTUBE_DIRECTOR",
            "GENUS_DCLK_VIDEO_ADS",
            "GENUS_DAI_PODCAST",
            "GENUS_TESTING",
            "GENUS_YT_UNPLUGGED_SVOD",
            "GENUS_YT_UNPLUGGED_DVR",
            "GENUS_HVC_INGESTION",
            "GENUS_DRIVE",
            "GENUS_YT_LIGHTWEIGHT_VIDEO",
            "GENUS_ASK_QNA",
            "GENUS_LOCAL_VIDEO",
            "GENUS_PLAY_AUDIOBOOKS",
            "GENUS_HANGOUTS_CHAT",
            "GENUS_VIDEO_INTEREST_FEED",
            "GENUS_YT_MUSIC",
            "GENUS_RECORDER",
            "GENUS_YT_ORIGINAL_CONTENT",
            "GENUS_STAMP",
            "GENUS_BULLETIN_AUDIO",
            "GENUS_CRAWL",
            "GENUS_PHOTOS",
            "GENUS_MATERIAL_GALLERY",
            "GENUS_YT_REFERENCE",
            "GENUS_LENSLETS_VIDEOS",
            "GENUS_BLOGGER",
            "GENUS_PODCASTS",
            "GENUS_OCEAN",
            "GENUS_LMS",
            "GENUS_WEB_VIDEO_ADS",
            "GENUS_STUDIO",
            "GENUS_YT_TDSD_REFERENCE",
            "GENUS_WEB_STORY",
            "GENUS_NEST_CAMERA_CLOUD",
            "GENUS_AREA120_BLUEBIRD",
            "GENUS_ARTS_AND_CULTURE",
            "GENUS_DEMO",
            "GENUS_KARTO",
            "GENUS_CONTRIB_SERVICE_SHARED",
            "GENUS_CONTRIB_SERVICE_GEO_UGC",
            "GENUS_SEARCH_SPORTS",
            "GENUS_BUSINESSMESSAGING",
            "GENUS_AERIAL_VIEW"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "Genus for Ad Manager Video Ads (formerly Doubleclick video ads).",
            "Genus for DAI podcasts, part of Ad Manager Video Ads.",
            "",
            "Genera for Unplugged videos. GENUS_YT_UNPLUGGED_SVOD is for Unplugged SVOD contents. GENUS_YT_UNPLUGGED_DVR is for Unplugged DVR contents. Videos created with this genus will be stored in Blobstore (to make per-user clone), and will be removed after a certain period. Besides, we prefer no reruns for such videos.",
            "",
            "",
            "",
            "Also known as Stories, or Reels.",
            "",
            "Genus for local imagery aka Photo/Video On Maps, stored on Google Photos. Contact: local-imagery-team@.",
            "",
            "Genus for Hangouts Chat (Dynamite).",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Genus for 'A-' References; audio or video references that are not playable on YouTube, and only used as references for ContentID claiming.",
            "",
            "",
            "Genus for Google Podcasts & Audio News.",
            "Genus for Ocean / Play Books.",
            "Genus for Licensed Media Service videos.",
            "Genus for Web Video Ads.",
            "Genus for RichMedia Studio.",
            "Genus for TDSD references. These are not playable on YouTube, and are only used for generating ContentID fingerprints.",
            "Genus for Kahani Web Stories.",
            "Genus for Nest Camera Cloud.",
            "Genus for Area120 Bluebird",
            "Genus for Google Arts & Culture.",
            "Genus for new Video Processing clients to do initial prototyping before they decide to formally onboard. go/venom-clients#demo-tier",
            "Genus for Karto videos.",
            "Shared genus for ContribService UGC videos for small clients requesting the same set of common signals. Large ContribService Video clients should have their own genera. go/user-owned-video-content-processing",
            "Genus for GEO UGC videos processed by ContribService. go/venom-lite-for-geo-photo-videos",
            "Genus for Search Sports vertical videos",
            "Genus for Business Messaging videos",
            "Genus for Geo Aerial View"
          ],
          "type": "string"
        },
        "state": {
          "description": "Indicates the state in Venom for this transcode type.",
          "enum": [
            "STATE_UNKNOWN",
            "STATE_DONE",
            "STATE_NOT_APPLICABLE",
            "STATE_MISSING",
            "STATE_DELETED",
            "STATE_DIRTY",
            "STATE_OBSOLETE",
            "STATE_PENDING_PUBLICATION",
            "STATE_FAILED"
          ],
          "enumDescriptions": [
            "",
            "Final states (ie states in which we would stay ## unless the client revises the expectations) As far as the relevant service is concerned, the asset has been fully produced.",
            "As far as the service is concerned, the asset should not be produced (say, HD for a SD input)",
            "STATE_MISSING indicates the asset needs to be created. It is a transient state from STATE_DIRTY. It is also the final state if the asset failed to be created within its allowed number of retries.",
            "The asset has been removed. This is the final state for assets that were previously OBSOLETE, or for goals of UNWANTED.",
            "Purely transient states, that will be reconciled to a final ## state at some point. The client is not happy with the state of an asset, and wants to get it regenerated.",
            "The asset has been produced in the past, but is not needed anymore. We'll try to delete it shortly.",
            "The asset is ready to be published but is waiting for other assets in its group. This state is between MISSING/DIRTY and DONE.",
            "RESERVED. This state is deprecated."
          ],
          "type": "string"
        },
        "transcodeItag": {
          "description": "transcode type which are available for the video.",
          "format": "int32",
          "type": "integer"
        },
        "videoId": {
          "$ref": "VideoAssetsVenomVideoId",
          "description": "The Venom ID that this transcode was produced for."
        },
        "xtagsList": {
          "$ref": "ImageRepositoryApiXtagList",
          "description": "Indicates xtags if present. Xtag makes the different transcode. For transcode \"MP4_AVCBASE640_AAC/af=sq\" (itag 18 with xtag), \"af=sq\" is the xtag part. This is a different transcode than \"MP4_AVCBASE640_AAC\" (itag 18)."
        }
      },
      "type": "object"
    },
    "ImageRepositoryApiXtag": {
      "id": "ImageRepositoryApiXtag",
      "properties": {
        "name": {
          "description": "Names are all stored case-sensitive, and no case-folding is done for comparisons.",
          "type": "string"
        },
        "value": {
          "description": "The value associated with this Xtag. Values are all stored case-sensitive, and no case-folding is done for comparisons.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryApiXtagList": {
      "description": "XtagList -- a collection of Xtag instances with unique names. This would be associated with one specific piece of content.",
      "id": "ImageRepositoryApiXtagList",
      "properties": {
        "xtags": {
          "items": {
            "$ref": "ImageRepositoryApiXtag"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryContentBasedVideoMetadata": {
      "description": "Next Tag: 49",
      "id": "ImageRepositoryContentBasedVideoMetadata",
      "properties": {
        "amarnaDocid": {
          "description": "A hash of the video bytes used as a key to Amarna's video_metadata table.",
          "type": "string"
        },
        "aresClassificationRequestTimestamp": {
          "description": "Timestamp of the last successful Ares classification request.",
          "format": "google-datetime",
          "type": "string"
        },
        "audioOnly": {
          "description": "Both audio- and audio-video-files are treated as videos during indexing (whether they share a container format, like .mp4, or not, like .mp3). This bool indicates that there's no video track, just an audio track.",
          "type": "boolean"
        },
        "cloudSpeechSignals": {
          "$ref": "ImageRepositoryAmarnaCloudSpeechSignals",
          "description": "Transcript generated from Cloud Speech API"
        },
        "featureSetData": {
          "$ref": "DrishtiFeatureSetData",
          "description": "Video Understanding Golden features. (go/amarna-video-signals#golden-signals) Note: Golden6 features (names matching \"video_*\") are DEPRECATED. Please migrate to Golden7 (\"VideoFeatures.*\"). For more context, see go/golden7/migrating-from-golden6 and go/amarna-golden-feature-tracker. Signals popluated in Raffia cdoc.doc_videos are configured in cs/symbol:AMARNA_EXPORTED_GOLDEN7_FEATURES."
        },
        "golden7SoapboxSummary": {
          "$ref": "DrishtiFeatureSetData",
          "description": "Golden7 video-level people features. (go/ypf-video-features)"
        },
        "inlinePlayback": {
          "$ref": "VideoCrawlVideoInlinePlaybackMetadata",
          "description": "Metadata related to Inline playback on the Interest Feed. This field is filled by Hamilton."
        },
        "languageIdentification": {
          "$ref": "VideoTimedtextS4ALIResults"
        },
        "legosAnnotationData": {
          "$ref": "VideoLegosLegosAnnotationsSets",
          "description": "Legos results"
        },
        "lmsPreviewFramePerdocs": {
          "$ref": "ImageRepositoryFramePerdocs",
          "description": "LMS preview frame perdocs. Timestamps of the frame perdocs are from the original video, not from the preview."
        },
        "loudnessData": {
          "$ref": "VideoStorageLoudnessData",
          "description": "When Transcode itag 140 is requested, MediaAnalyzer (as the part of Viper graph) generates audio info including loudness_data, which is then published to Streamer. For Audio news client, we extract this loudness data from Streamer to this field."
        },
        "mediaInfo": {
          "$ref": "VideoMediaInfo",
          "description": "Information about the media file, such as duration, resolution, and detail about each audio/video stream. Note that it contains no PII."
        },
        "representativeFrameData": {
          "$ref": "ImageData"
        },
        "s3Asr": {
          "$ref": "ImageRepositoryAmarnaCloudSpeechSignals",
          "description": "Trnascript generated through AMARNA_CLOUD_SPEECH asset in Venom. Note that AMARNA_CLOUD_SPEECH uses S3 as the speech engine backend, similar to YT caption's SPEECH_RECOGNIZER asset. However, they may use different S3 models."
        },
        "s3LanguageIdentification": {
          "$ref": "ImageRepositoryS3LangIdSignals"
        },
        "safesearchVideoContentSignals": {
          "$ref": "SafesearchVideoContentSignals",
          "description": "Contains SafeSearch video classification outputs which are vertical_name/float pairs."
        },
        "searchDocid": {
          "description": "64 bit docid used for retrieving video previews.",
          "format": "uint64",
          "type": "string"
        },
        "signalsBlob": {
          "$ref": "ImageRepositoryAmarnaSignalsBlob",
          "description": "Amarna signals blob that contains large-size signals like VCA frame-level signals."
        },
        "signalsBlobInfo": {
          "$ref": "ImageRepositoryAmarnaSignalsBlobInfo",
          "description": "Information for the amarna signals blob."
        },
        "speechProperties": {
          "$ref": "IndexingSpeechSpeechPropertiesProto"
        },
        "thumbnailQualityScore": {
          "$ref": "VideoThumbnailsThumbnailScore",
          "description": "Thumbnail quality score predict how visual pleasing a thumbnail is, based on the model trained with deep neural networks.(go/thumb_features_dd) Note the signal currently only available for Youtube videos."
        },
        "thumbnailerData": {
          "$ref": "VideoPipelineViperThumbnailerColumnData"
        },
        "transcodeMetadata": {
          "description": "Metadata about each transcode requested.",
          "items": {
            "$ref": "ImageRepositoryApiItagSpecificMetadata"
          },
          "type": "array"
        },
        "transcriptAsr": {
          "$ref": "PseudoVideoData",
          "description": "Speech related metadata The transcript_asr field is generated from the YT caption's SPEECH_RECOGNIZER asset."
        },
        "truncationInfo": {
          "$ref": "ImageRepositoryFileTruncationInfo",
          "description": "Data about whether or not the video was truncated."
        },
        "unwantedContent": {
          "$ref": "ImageRepositoryUnwantedContent",
          "description": "If set, video has been deleted using the deletion service (MediaDeletionService)."
        },
        "venomId": {
          "description": "The video id in the venom pipeline for STAMP purposes. DEPRECATED: Use transcode_metadata or venom_processing_info instead, which includes the ID and contains information for all clients.",
          "type": "string"
        },
        "venomProcessingInfo": {
          "$ref": "ImageRepositoryVenomProcessingInfo",
          "description": "Information about the video's status in Venom, including IDs and processing times."
        },
        "videoAnchorSet": {
          "$ref": "VideoContentSearchVideoAnchorSets",
          "description": "Video anchor sets hold set of anchors with multiple anchor types and sequence of VideoAnchor which contains metadata about the anchor, such as thumbnail, perdoc data."
        },
        "videoDurationSec": {
          "description": "Set from the video header if truncated, or is the verified length if completely crawled.",
          "format": "double",
          "type": "number"
        },
        "videoPornScore": {
          "description": "The video porn confidence score extracted from Whisper featureSet: \"video_labels:whisper_v3\", with CR2 label: \"/cr2/1\".",
          "format": "float",
          "type": "number"
        },
        "videoPornScoreV4": {
          "description": "The video porn confidence score extracted from WhisperV4 featureSet: \"VideoFeatures.whisper_v4_labels\", with CR2 label: \"/tns/porn\".",
          "format": "float",
          "type": "number"
        },
        "videoPreviewBytes": {
          "description": "video_preview_bytes is only exported as virtual dataset by IE VideoUnderstanding and should not be persisted. It will be used by downstream IE functions to push for serving.",
          "items": {
            "$ref": "ImageRepositoryVideoPreviewsVideoPreview"
          },
          "type": "array"
        },
        "videoPreviews": {
          "description": "video_previews contain the preview metadata but no bytes. It exits for IE and non-IE cases.",
          "items": {
            "$ref": "ImageBaseVideoPreviewMetadata"
          },
          "type": "array"
        },
        "videoStreamInfo": {
          "$ref": "VideoPipelineViperVSIColumnData",
          "description": "Deprecated, please use media_info."
        },
        "videoTranscriptAnnotations": {
          "$ref": "QualityWebanswersVideoTranscriptAnnotations",
          "description": "VideoTranscriptAnnotations holds sentence segmented text and timing information to be used for VideoAnswers (go/video-answers). Note that only punctuated_transcript, timing_info, and lang field are filled, and other fields will be filled in the later stage."
        },
        "youtubeProcessingFilter": {
          "$ref": "ImageRepositoryYoutubeProcessingFilter",
          "description": "Contains lists of reasons why YT videos were filtered from specific processing."
        }
      },
      "type": "object"
    },
    "ImageRepositoryCrawlStatusInfo": {
      "description": "Fields for crawl-status-related debugging information.",
      "id": "ImageRepositoryCrawlStatusInfo",
      "properties": {
        "code": {
          "enum": [
            "VALID_IMAGE",
            "INVALID_FETCH_REPLY",
            "XROBOTED",
            "URL_NOT_CRAWLED",
            "PARSE_ERROR",
            "INVALID_IMAGE",
            "IMS_CRAWL_NOT_MODIFIED",
            "EXPIRED_DISCOVERY_CRAWL",
            "EXPIRED_FEED_CRAWL",
            "EXPIRED_PRIORITY_FEED_CRAWL",
            "INVALID_URL",
            "VALID_VIDEO",
            "VALID_SWF",
            "VALID_SILVERLIGHT",
            "INVALID_VIDEO",
            "TRUNCATED_CONTENTS",
            "FAST_CRAWL_LOCK_ACQUIRE_FAILED",
            "FAST_CRAWL_TTL_EXPIRED"
          ],
          "enumDescriptions": [
            "",
            "The crawl resulted in an invalid fetch reply. This means that fetchreply did not contain the url or the original crawl date inside it.",
            "The url was xroboted.",
            "Look at url not_crawled_reason for specific errors.",
            "The url was successfully crawled but contained no valid image or video content.",
            "The url was successfully crawled but was in a format not currently supported.",
            "This was a referesh crawl and there was no modification that needs to be processesed.",
            "This is a discovery url that webmirror discarded. Such urls need not be imported.",
            "This is a feed url and webmirror expired it.",
            "This is a feed url in one of the priority feeds and webmirror expired it.",
            "The passed URL was not valid and could not be crawled.",
            "This is a valid video, SWF, or Silverlight object.",
            "",
            "",
            "This is an invalid video.",
            "This is a large image or video, and only part of it has been fetched.",
            "Temporary status for fast crawl failures.",
            ""
          ],
          "type": "string"
        },
        "notCrawledReason": {
          "enum": [
            "URL_CRAWLED",
            "URL_ERROR",
            "URL_ROBOTED",
            "URL_UNREACHABLE",
            "URL_TIMEOUT",
            "URL_REJECTED",
            "URL_NOT_FOLLOWED",
            "NUM_STATE_TYPES"
          ],
          "enumDescriptions": [
            "",
            "Error fetching; most commonly 404;",
            "but many other possible reasons. Roboted out.",
            "Fetch error; 5xx; truncated response; etc.",
            "Timeout while fetching.",
            "Rejected based on capacity or permissions.",
            "Redirects/retries-related: we crawled something",
            "*** don't forget to update."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryDeepImageEngagingnessOutput": {
      "id": "ImageRepositoryDeepImageEngagingnessOutput",
      "properties": {
        "score": {
          "description": "DeepImageEngagingness score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageRepositoryFileTruncationInfo": {
      "description": "Describes our knowledge about whether a stored file is truncated with respect to its original file online.",
      "id": "ImageRepositoryFileTruncationInfo",
      "properties": {
        "originalFileSizeLowerBoundBytes": {
          "description": "A lower bound on the original file's size.",
          "format": "int64",
          "type": "string"
        },
        "truncationState": {
          "description": "Indicates whether the stored file is equal to the original file (COMPLETE), is only a prefix (TRUNCATED), or that we don't know (UNKNOWN, the default).",
          "enum": [
            "UNKNOWN",
            "COMPLETE",
            "TRUNCATED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryFrameIdentifier": {
      "description": "Identifier for frames associated with a video.",
      "id": "ImageRepositoryFrameIdentifier",
      "properties": {
        "previewFrameZeroVariant": {
          "$ref": "ImageRepositoryFrameIdentifierPreviewFrameZeroVariant"
        },
        "thumbnailVariant": {
          "$ref": "ImageRepositoryFrameIdentifierThumbnailVariant"
        },
        "timestampMs": {
          "description": "Offset of the frame from the beginning of the video (in milliseconds).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageRepositoryFrameIdentifierPreviewFrameZeroVariant": {
      "description": "This variant defines the frame to be the first frame of the video's generated preview.",
      "id": "ImageRepositoryFrameIdentifierPreviewFrameZeroVariant",
      "properties": {
        "previewLength": {
          "enum": [
            "UNSPECIFIED",
            "THREE_SECONDS",
            "SIX_SECONDS"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "xtagList": {
          "$ref": "ImageRepositoryApiXtagList",
          "description": "All xtags used in the generation of the preview. The same frame generated from the same preview with different xtags will likely have different bytes (such as, for example, resulting from a different aspect ratio)."
        }
      },
      "type": "object"
    },
    "ImageRepositoryFrameIdentifierThumbnailVariant": {
      "description": "This variant defines the frame to be a thumbnail of the video.",
      "id": "ImageRepositoryFrameIdentifierThumbnailVariant",
      "properties": {},
      "type": "object"
    },
    "ImageRepositoryFramePerdoc": {
      "description": "Only one of timestamp_msec or frame_identifier should be set. timestamp_msec is the old identifier for frames, and is still used on thumbnail frames. frame_identifier should be used on other kinds of frames (e.g. preview frame zero).",
      "id": "ImageRepositoryFramePerdoc",
      "properties": {
        "frameIdentifier": {
          "$ref": "ImageRepositoryFrameIdentifier"
        },
        "perdoc": {
          "$ref": "ImageData"
        },
        "timestampMsec": {
          "description": "Timestamp (in msec) of the frame from the original video DEPRECATED: Use the timestamp_ms field in frame_identifier instead.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageRepositoryFramePerdocs": {
      "description": "This proto stores perdocs extracted from video frames.",
      "id": "ImageRepositoryFramePerdocs",
      "properties": {
        "framePerdoc": {
          "items": {
            "$ref": "ImageRepositoryFramePerdoc"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryNimaOutput": {
      "id": "ImageRepositoryNimaOutput",
      "properties": {
        "score": {
          "description": "NIMA score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageRepositoryS3LangIdSignals": {
      "description": "Next Tag: 9",
      "id": "ImageRepositoryS3LangIdSignals",
      "properties": {
        "containsSpeech": {
          "description": "Whether this audio chunk has speech or not.",
          "type": "boolean"
        },
        "endSec": {
          "format": "int64",
          "type": "string"
        },
        "langidResult": {
          "$ref": "SpeechS3LanguageIdentificationResult",
          "description": "S3 langID result. We keep langid_result even if contains_speech = false."
        },
        "languageIdentification": {
          "$ref": "VideoTimedtextS4ALIResults",
          "description": "Converted version of the langid_result field, so that we have the YT compatible version of the langID result."
        },
        "modelVersion": {
          "description": "The version of the model used for S3 LangID service.",
          "type": "string"
        },
        "speechFrameCount": {
          "format": "int32",
          "type": "integer"
        },
        "startSec": {
          "description": "The audio chunk which corresponds to this langID result expressed as a start_sec and end_sec.",
          "format": "int64",
          "type": "string"
        },
        "totalFrameCount": {
          "description": "Count the number of total frames in the audio chunk as well as the number of speech frames.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageRepositoryShoppingProductInformation": {
      "description": "A message containing embedding information and localization scores using the VSS product recognition module.",
      "id": "ImageRepositoryShoppingProductInformation",
      "properties": {
        "productSets": {
          "description": "Information about versioned product sets found. There will be at most two versions present. The results from the current version of the models used in VSS and the results from the previous version of the models used. Note that not all products may have two version since the model might detect the product in one version and not the other.",
          "items": {
            "$ref": "ImageRepositoryShoppingProductInformationVersionedProductInformationSet"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryShoppingProductInformationBoundingBox": {
      "description": "Contains the coordinates of the normalized bounding box.",
      "id": "ImageRepositoryShoppingProductInformationBoundingBox",
      "properties": {
        "h": {
          "description": "The vertical height of the bounding box (ymax - ymin + 1), normalized by image height with range [0,1].",
          "format": "float",
          "type": "number"
        },
        "w": {
          "description": "The horizontal width of the bound box (xmax - xmin + 1), normalized by image width with range [0,1].",
          "format": "float",
          "type": "number"
        },
        "x": {
          "description": "The x coordinate (xmin), normalized by image width with range [0,1).",
          "format": "float",
          "type": "number"
        },
        "y": {
          "description": "The y coordinate (ymin), normalized by image height with range [0,1).",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageRepositoryShoppingProductInformationEntity": {
      "description": "The recognized entity.",
      "id": "ImageRepositoryShoppingProductInformationEntity",
      "properties": {
        "id": {
          "type": "string"
        },
        "score": {
          "description": "The normalized recognition score between 0 and 1.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageRepositoryShoppingProductInformationProductInformation": {
      "description": "Information about a single product. For ProductNet models, each product has one label with a detection score. The label is mapped to one or multiple category ids. For PRIMI generic feature models, each product can have multiple entities, and each entity has a score. The category_id and detection_score fields are not populated for PRIMI generic feature models.",
      "id": "ImageRepositoryShoppingProductInformationProductInformation",
      "properties": {
        "categoryId": {
          "description": "The possible Merlot ids for the item. There may be more than one if the product detector result corresponds to a collection of merlot ids, which can't be easily grouped up to a common ancestor, for which the detector would still make sense for all the children. E.g. a detected \"chair\" can be either an indoor chair or an outdoor one, however in Merlot the common ancestor of the two is furniture.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "clusterIds": {
          "description": "The k-d tree clusters for retrieval. Will be deprecated, use the token_groups instead. To add tokens/cluster_ids from new tokenization model in the future, add it to the token_groups.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "detectionScore": {
          "description": "The localization detection score.",
          "format": "float",
          "type": "number"
        },
        "embedding": {
          "description": "The serialized embedding values.",
          "format": "byte",
          "type": "string"
        },
        "entities": {
          "description": "The recognized entities and scores.",
          "items": {
            "$ref": "ImageRepositoryShoppingProductInformationEntity"
          },
          "type": "array"
        },
        "featureType": {
          "description": "Feature type (different detectors and embedders) requested.",
          "type": "string"
        },
        "productLocation": {
          "$ref": "ImageRepositoryShoppingProductInformationBoundingBox",
          "description": "The bounding box."
        },
        "tokenGroups": {
          "items": {
            "$ref": "ImageRepositoryShoppingProductInformationProductInformationTokenGroup"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryShoppingProductInformationProductInformationTokenGroup": {
      "description": "The tokens for retrieval.",
      "id": "ImageRepositoryShoppingProductInformationProductInformationTokenGroup",
      "properties": {
        "model": {
          "enum": [
            "UNKNOWN",
            "KMEANS",
            "KMEANSV2",
            "KMEANSV3"
          ],
          "enumDescriptions": [
            "",
            "Apparel, homegoods, and PGF V1 tokens.",
            "Apparel V2, homegoods V2 (box) and PGF V2 tokens.",
            "PGF V3 tokens."
          ],
          "type": "string"
        },
        "tokens": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryShoppingProductInformationVersionedProductInformationSet": {
      "description": "Store ProductInformation for a given version of the models used in VSS.",
      "id": "ImageRepositoryShoppingProductInformationVersionedProductInformationSet",
      "properties": {
        "modelType": {
          "description": "The type of the model.",
          "enum": [
            "MODEL_TYPE_UNKNOWN",
            "MODEL_TYPE_PRODUCTNET",
            "MODEL_TYPE_PRIMI_GENERIC"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "products": {
          "description": "List of ProductInformation for this version.",
          "items": {
            "$ref": "ImageRepositoryShoppingProductInformationProductInformation"
          },
          "type": "array"
        },
        "version": {
          "description": "The version of the models used in VSS. Newer version will have a higher version number.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ImageRepositorySpeechRecognitionAlternative": {
      "description": "Alternative hypotheses (a.k.a. n-best list).",
      "id": "ImageRepositorySpeechRecognitionAlternative",
      "properties": {
        "confidence": {
          "description": "The confidence estimate between 0.0 and 1.0. A higher number indicates an estimated greater likelihood that the recognized words are correct. This field is set only for the top alternative of a non-streaming result or, of a streaming result where `is_final=true`. This field is not guaranteed to be accurate and users should not rely on it to be always provided. The default of 0.0 is a sentinel value indicating `confidence` was not set.",
          "format": "float",
          "type": "number"
        },
        "transcript": {
          "description": "Transcript text representing the words that the user spoke.",
          "type": "string"
        },
        "words": {
          "description": "A list of word-specific information for each recognized word. Note: When `enable_speaker_diarization` is true, you will see all the words from the beginning of the audio.",
          "items": {
            "$ref": "ImageRepositoryWordInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositorySpeechRecognitionResult": {
      "description": "A speech recognition result corresponding to a portion of the audio. This field is copied from cloud/speech/v1p1beta1/cloud_speech.proto. Amarna needs to have a standalone version as v1p1beta1/cloud_speech.proto is in the for of versioned proto and it breaks other prod code depending on Amarna's video schema.",
      "id": "ImageRepositorySpeechRecognitionResult",
      "properties": {
        "alternatives": {
          "description": "May contain one or more recognition hypotheses (up to the maximum specified in `max_alternatives`). These alternatives are ordered in terms of accuracy, with the top (first) alternative being the most probable, as ranked by the recognizer.",
          "items": {
            "$ref": "ImageRepositorySpeechRecognitionAlternative"
          },
          "type": "array"
        },
        "channelTag": {
          "description": "For multi-channel audio, this is the channel number corresponding to the recognized result for the audio from that channel. For audio_channel_count = N, its output values can range from '1' to 'N'.",
          "format": "int32",
          "type": "integer"
        },
        "languageCode": {
          "description": "The [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the language in this result. This language code was detected to have the most likelihood of being spoken in the audio.",
          "type": "string"
        },
        "resultEndTime": {
          "description": "Time offset of the end of this result relative to the beginning of the audio. This field is internal-only and is used to order results based on their timestamps.",
          "format": "google-duration",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryUnwantedContent": {
      "description": "To indicate whether the image or video is to be deleted from the repository due to legal reasons or hidden from search results.",
      "id": "ImageRepositoryUnwantedContent",
      "properties": {
        "deletionReason": {
          "enum": [
            "OTHER",
            "CP"
          ],
          "enumDescriptions": [
            "",
            "abusive images involving children."
          ],
          "type": "string"
        },
        "hideReason": {
          "enum": [
            "UNKNOWN",
            "NCEI"
          ],
          "enumDescriptions": [
            "",
            "NCEI stands for 'non-consensual explicit imagery', aka 'revenge porn'. However in this case the name is misleading as it actually only applies for videos."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryVenomProcessingInfo": {
      "id": "ImageRepositoryVenomProcessingInfo",
      "properties": {
        "venomStatus": {
          "description": "Contains one status for each Genus that this video belongs to in Venom. For example, a video that is both 1) Found on the web, and 2) Opted-in by an Interest Feed partner would have two entries, one for GENUS_CRAWL and one for GENUS_VIDEO_INTEREST_FEED",
          "items": {
            "$ref": "ImageRepositoryVenomStatus"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryVenomStatus": {
      "id": "ImageRepositoryVenomStatus",
      "properties": {
        "acl": {
          "$ref": "VideoAssetsVenomACL",
          "description": "Venom ACL of the video. Used to check if other systems, such as Ares, are able to process the video."
        },
        "deletionTimestampUsec": {
          "format": "int64",
          "type": "string"
        },
        "genus": {
          "description": "The Genus (Venom's client ID) that this media belongs to.",
          "enum": [
            "GENUS_UNKNOWN",
            "GENUS_YT_HIGH_VALUE_CONTENT",
            "GENUS_YT_USER_GENERATED_CONTENT",
            "GENUS_GMAIL",
            "GENUS_KIDS_HUB",
            "GENUS_YOUTUBE_DIRECTOR",
            "GENUS_DCLK_VIDEO_ADS",
            "GENUS_DAI_PODCAST",
            "GENUS_TESTING",
            "GENUS_YT_UNPLUGGED_SVOD",
            "GENUS_YT_UNPLUGGED_DVR",
            "GENUS_HVC_INGESTION",
            "GENUS_DRIVE",
            "GENUS_YT_LIGHTWEIGHT_VIDEO",
            "GENUS_ASK_QNA",
            "GENUS_LOCAL_VIDEO",
            "GENUS_PLAY_AUDIOBOOKS",
            "GENUS_HANGOUTS_CHAT",
            "GENUS_VIDEO_INTEREST_FEED",
            "GENUS_YT_MUSIC",
            "GENUS_RECORDER",
            "GENUS_YT_ORIGINAL_CONTENT",
            "GENUS_STAMP",
            "GENUS_BULLETIN_AUDIO",
            "GENUS_CRAWL",
            "GENUS_PHOTOS",
            "GENUS_MATERIAL_GALLERY",
            "GENUS_YT_REFERENCE",
            "GENUS_LENSLETS_VIDEOS",
            "GENUS_BLOGGER",
            "GENUS_PODCASTS",
            "GENUS_OCEAN",
            "GENUS_LMS",
            "GENUS_WEB_VIDEO_ADS",
            "GENUS_STUDIO",
            "GENUS_YT_TDSD_REFERENCE",
            "GENUS_WEB_STORY",
            "GENUS_NEST_CAMERA_CLOUD",
            "GENUS_AREA120_BLUEBIRD",
            "GENUS_ARTS_AND_CULTURE",
            "GENUS_DEMO",
            "GENUS_KARTO",
            "GENUS_CONTRIB_SERVICE_SHARED",
            "GENUS_CONTRIB_SERVICE_GEO_UGC",
            "GENUS_SEARCH_SPORTS",
            "GENUS_BUSINESSMESSAGING",
            "GENUS_AERIAL_VIEW"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "Genus for Ad Manager Video Ads (formerly Doubleclick video ads).",
            "Genus for DAI podcasts, part of Ad Manager Video Ads.",
            "",
            "Genera for Unplugged videos. GENUS_YT_UNPLUGGED_SVOD is for Unplugged SVOD contents. GENUS_YT_UNPLUGGED_DVR is for Unplugged DVR contents. Videos created with this genus will be stored in Blobstore (to make per-user clone), and will be removed after a certain period. Besides, we prefer no reruns for such videos.",
            "",
            "",
            "",
            "Also known as Stories, or Reels.",
            "",
            "Genus for local imagery aka Photo/Video On Maps, stored on Google Photos. Contact: local-imagery-team@.",
            "",
            "Genus for Hangouts Chat (Dynamite).",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Genus for 'A-' References; audio or video references that are not playable on YouTube, and only used as references for ContentID claiming.",
            "",
            "",
            "Genus for Google Podcasts & Audio News.",
            "Genus for Ocean / Play Books.",
            "Genus for Licensed Media Service videos.",
            "Genus for Web Video Ads.",
            "Genus for RichMedia Studio.",
            "Genus for TDSD references. These are not playable on YouTube, and are only used for generating ContentID fingerprints.",
            "Genus for Kahani Web Stories.",
            "Genus for Nest Camera Cloud.",
            "Genus for Area120 Bluebird",
            "Genus for Google Arts & Culture.",
            "Genus for new Video Processing clients to do initial prototyping before they decide to formally onboard. go/venom-clients#demo-tier",
            "Genus for Karto videos.",
            "Shared genus for ContribService UGC videos for small clients requesting the same set of common signals. Large ContribService Video clients should have their own genera. go/user-owned-video-content-processing",
            "Genus for GEO UGC videos processed by ContribService. go/venom-lite-for-geo-photo-videos",
            "Genus for Search Sports vertical videos",
            "Genus for Business Messaging videos",
            "Genus for Geo Aerial View"
          ],
          "type": "string"
        },
        "insertionResponseTimestampUsec": {
          "description": "Time that VideoNotification result was received from Venom.",
          "format": "int64",
          "type": "string"
        },
        "insertionTimestampUsec": {
          "format": "int64",
          "type": "string"
        },
        "lastInsertionAttemptsNum": {
          "description": "Record the attempts num of previous insertion. It's only updated when either the insertion succeeds or fails with reason INSERTION_ATTEMPTS_EXCEEDED, but it's always set so that we can easily construct venom_id with this attempts num for future insertions.",
          "format": "int32",
          "type": "integer"
        },
        "reason": {
          "enum": [
            "NONE",
            "INVALID",
            "WRONG_CRITERIA",
            "DISABLED",
            "FAILED_INSERTION",
            "INSERTION_SKIPPED",
            "FAILED_DELETION",
            "INCOMPLETE_DOWNLOAD",
            "FILTERED",
            "NOT_FOUND",
            "INSERTION_ATTEMPTS_EXCEEDED",
            "ASSET_ALREADY_EXISTS"
          ],
          "enumDescriptions": [
            "",
            "Missing/bad video data.",
            "Video doesn't meet criteria for the producer.",
            "Met all criteria, but unsent due to flags.",
            "RPC failed.",
            "Venom insertion skipped because the video has",
            "been uploaded successfully to Venom in previous insertion. This is only set when VenomState is INSERTED. RPC failed.",
            "Not inserted due to truncated download.",
            "Filtered from Venom based on metadata.",
            "The video is not found, only applies to YouTube videos.",
            "Out of insertion attempts.",
            "The assets already exist in Venom."
          ],
          "type": "string"
        },
        "settings": {
          "description": "The Settings that were used to customize the Venom request for this media.",
          "items": {
            "$ref": "VideoAssetsVenomSettings"
          },
          "type": "array"
        },
        "state": {
          "enum": [
            "UNKNOWN_STATE",
            "INSERTED",
            "RESPONDED",
            "NOT_INSERTED",
            "DELETED",
            "NOT_DELETED"
          ],
          "enumDescriptions": [
            "",
            "Video sent to Venom.",
            "Amarna has received a pubsub from Venom.",
            "Amarna chose not to send the video to Venom.",
            "Video has been deleted.",
            "Video should've been deleted, but wasn't."
          ],
          "type": "string"
        },
        "transition": {
          "$ref": "VideoAssetsVenomTransition",
          "description": "Transition contains the Objective and Outcome of the latest Venom run."
        },
        "venomId": {
          "$ref": "VideoAssetsVenomVideoId",
          "description": "The media's unique identifier within Venom."
        },
        "venomMutationGeneration": {
          "description": "The generation number returned by Venom.",
          "format": "int64",
          "type": "string"
        },
        "videoVenomSetting": {
          "description": "This field is not persisted anywhere. It is only used in deletion service for converying the VideoVenomSetting when deleting Venom data.",
          "enum": [
            "VIDEO_VENOM_SETTING_COMMON",
            "VIDEO_VENOM_SETTING_VINEYARD"
          ],
          "enumDescriptions": [
            "This corresponds to [trustme.crawl] is {CLIENT_OTHER}.",
            "This corresponds to [trustme.crawl] is {CLIENT_OTHER, CLIENT_VINEYARD}. LINT.ThenChange( //depot/google3/image/repository/shared/util/video_util.cc, )"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryVideoIndexingInfo": {
      "id": "ImageRepositoryVideoIndexingInfo",
      "properties": {
        "notIndexedVideoLink": {
          "items": {
            "$ref": "ImageRepositoryVideoLinkIndexingInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageRepositoryVideoLinkIndexingInfo": {
      "id": "ImageRepositoryVideoLinkIndexingInfo",
      "properties": {
        "crawlStatusInfo": {
          "$ref": "ImageRepositoryCrawlStatusInfo",
          "description": "Fields for crawl-status-related debugging information."
        },
        "url": {
          "description": "The video URL.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryVideoPreviewsDebuggingInfo": {
      "id": "ImageRepositoryVideoPreviewsDebuggingInfo",
      "properties": {
        "lastAmarnaProcessingTime": {
          "description": "Last Amarna processing timestamp.",
          "format": "google-datetime",
          "type": "string"
        },
        "processingEngine": {
          "description": "The underlying processing engine, like 'viper' or 'kronos'.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryVideoPreviewsVideoPreview": {
      "id": "ImageRepositoryVideoPreviewsVideoPreview",
      "properties": {
        "content": {
          "description": "The actual video preview bytes generated for the video.",
          "format": "byte",
          "type": "string"
        },
        "debuggingInfo": {
          "$ref": "ImageRepositoryVideoPreviewsDebuggingInfo",
          "description": "Used for debugging only."
        },
        "metadata": {
          "$ref": "ImageBaseVideoPreviewMetadata",
          "description": "The metadata associated with the preview (i.e. the type: 8k, 90k, etc.)"
        },
        "previewFrameZero": {
          "$ref": "DrishtiVesperVideoThumbnail",
          "description": "0th frame image of the preview. This frame has the same resolution as the associated preview video bytes, as it is taken directly from the preview bytes in Venom/Viper processing. Right now, we only populate preview_frame_zero only for the VPREVIEW_TYPE_540K_ORIGINAL_HQ_LICENSED preview type. Note that preview_frame_zero.thumbnails(0).timestamp_ms() is the timestamp from the full video, not from the preview."
        }
      },
      "type": "object"
    },
    "ImageRepositoryVideoProperties": {
      "id": "ImageRepositoryVideoProperties",
      "properties": {
        "audioOnly": {
          "description": "Both audio- and audio-video-files are treated as videos during indexing (whether they share a container format, like .mp4, or not, like .mp3). This bool indicates that there's no video track, just an audio track.",
          "type": "boolean"
        },
        "contentBasedMetadata": {
          "$ref": "ImageRepositoryContentBasedVideoMetadata",
          "description": "Information derived from fetched video bytes."
        },
        "crawlState": {
          "$ref": "ImageMoosedogCrawlState",
          "description": "The raw crawl state."
        },
        "firstCrawlTimestampSec": {
          "description": "Timestamp of the first time that the video was successfully crawled.",
          "format": "int64",
          "type": "string"
        },
        "firstProcessingTimestampSec": {
          "description": "Timestamp when this video's videoProperties is populated for the first time, measured in seconds since epoch.",
          "format": "int64",
          "type": "string"
        },
        "inlinePlayback": {
          "$ref": "VideoCrawlVideoInlinePlaybackMetadata",
          "description": "DEPRECATED: please use content_based_metadata.inline_playback. Metadata related to Inline playback on the Interest Feed"
        },
        "lastCrawlRequestTimestampSec": {
          "description": "Timestamp when this video's last crawling is requested, measured in seconds since epoch.",
          "format": "int64",
          "type": "string"
        },
        "lastProcessingTimestampSec": {
          "description": "Last timestamp when this video's videoProperties is populated, measured in seconds since epoch.",
          "format": "int64",
          "type": "string"
        },
        "url": {
          "description": "This is the video url taken from the key of the Amarna references table row corresponding to this message.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryWordInfo": {
      "description": "Word-specific information for recognized words.",
      "id": "ImageRepositoryWordInfo",
      "properties": {
        "confidence": {
          "description": "The confidence estimate between 0.0 and 1.0. A higher number indicates an estimated greater likelihood that the recognized words are correct. This field is set only for the top alternative of a non-streaming result or, of a streaming result where `is_final=true`. This field is not guaranteed to be accurate and users should not rely on it to be always provided. The default of 0.0 is a sentinel value indicating `confidence` was not set.",
          "format": "float",
          "type": "number"
        },
        "endTime": {
          "description": "Time offset relative to the beginning of the audio, and corresponding to the end of the spoken word. This field is only set if `enable_word_time_offsets=true` and only in the top hypothesis. This is an experimental feature and the accuracy of the time offset can vary.",
          "format": "google-duration",
          "type": "string"
        },
        "speakerTag": {
          "description": "A distinct integer value is assigned for every speaker within the audio. This field specifies which one of those speakers was detected to have spoken this word. Value ranges from '1' to diarization_speaker_count. speaker_tag is set if enable_speaker_diarization = 'true' and only in the top alternative.",
          "format": "int32",
          "type": "integer"
        },
        "startTime": {
          "description": "Time offset relative to the beginning of the audio, and corresponding to the start of the spoken word. This field is only set if `enable_word_time_offsets=true` and only in the top hypothesis. This is an experimental feature and the accuracy of the time offset can vary.",
          "format": "google-duration",
          "type": "string"
        },
        "word": {
          "description": "The word corresponding to this set of information.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageRepositoryYoutubeProcessingFilter": {
      "description": "Next available tag: 13",
      "id": "ImageRepositoryYoutubeProcessingFilter",
      "properties": {
        "previewsFilteredReason": {
          "items": {
            "enum": [
              "UNKNOWN",
              "CONTENT_CLAIMS",
              "MATURE_CONTENT",
              "INVALID_VIDEO_DATA",
              "NO_VSI",
              "SHORT_DURATION",
              "NO_DURATION",
              "EMPTY_DATA",
              "DELETED",
              "OFFICIAL_MUSIC_VIDEO",
              "PREMIUM_CONTENT",
              "ART_TRACK",
              "PHARMA_CHANNEL"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "This is set for livestreams, which have a duration of 0.",
              "",
              "",
              "Set if video has ut_video_policy FLAG_OFFICIAL_MUSIC_VIDEO.",
              "Set if video has ut_video_policy FLAG_PREMIUM_CONTENT.",
              "Set if video has ut_video_policy FLAG_ART_TRACK.",
              "Set if the video has a pharma channel ID."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageSafesearchContentBrainPornAnnotation": {
      "description": "Don't change the field names. The names are used as sparse feature labels in client projects.",
      "id": "ImageSafesearchContentBrainPornAnnotation",
      "properties": {
        "childScore": {
          "description": "The probability that the youngest person in the image is a child.",
          "format": "float",
          "type": "number"
        },
        "csaiScore": {
          "description": "This score correlates with potential child abuse. Google confidential!",
          "format": "double",
          "type": "number"
        },
        "iuInappropriateScore": {
          "description": "This field contains the probability that an image is inappropriate for Images Universal, according to this policy: go/iupolicy.",
          "format": "float",
          "type": "number"
        },
        "medicalScore": {
          "format": "float",
          "type": "number"
        },
        "pedoScore": {
          "format": "float",
          "type": "number"
        },
        "pornScore": {
          "format": "double",
          "type": "number"
        },
        "racyScore": {
          "description": "This score is related to an image being sexually suggestive.",
          "format": "float",
          "type": "number"
        },
        "spoofScore": {
          "format": "float",
          "type": "number"
        },
        "version": {
          "description": "This field is an experimental one with a quite vague meaning. Please contact safesearch@ before any meaningful use of it. There is no guarantee it will preserve its behavior in the future.",
          "type": "string"
        },
        "violenceScore": {
          "format": "float",
          "type": "number"
        },
        "ytPornScore": {
          "description": "Deprecated, use porn_score instead. The most recent model version does not produce this anymore.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageSafesearchContentOCRAnnotation": {
      "description": "A protocol buffer to store the OCR annotation. Next available tag id: 10.",
      "id": "ImageSafesearchContentOCRAnnotation",
      "properties": {
        "ocrAnnotationVersion": {
          "description": "A string that indicates the version of SafeSearch OCR annotation.",
          "type": "string"
        },
        "ocrProminenceScore": {
          "description": "The score produced by Aksara geometry and spoof score. Describes the 'visibility' or 'importance' of the text on the image [0, 1]",
          "format": "float",
          "type": "number"
        },
        "pornScore": {
          "description": "Image OCR racyness/pornyness, computed by porn query classifier.",
          "format": "float",
          "type": "number"
        },
        "prominentOffensiveScore": {
          "description": "Same as offensive_score, but weighted by prominence.",
          "format": "float",
          "type": "number"
        },
        "prominentVulgarScore": {
          "description": "Same as vulgar_score, but weighted by prominence.",
          "format": "float",
          "type": "number"
        },
        "qbstOffensiveScore": {
          "description": "The score produced by offensive salient terms model.",
          "format": "float",
          "type": "number"
        },
        "vulgarI18nBit": {
          "description": "Presence of i18n-recognized vulgar term in the OCR.",
          "type": "boolean"
        },
        "vulgarScore": {
          "description": "Image OCR vulgarity, computed by vulgar query classifier.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageSafesearchContentOffensiveSymbolDetection": {
      "id": "ImageSafesearchContentOffensiveSymbolDetection",
      "properties": {
        "matches": {
          "items": {
            "$ref": "ImageSafesearchContentOffensiveSymbolMatch"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageSafesearchContentOffensiveSymbolMatch": {
      "description": "Each entry corresponds to an image containing an offensive symbol.",
      "id": "ImageSafesearchContentOffensiveSymbolMatch",
      "properties": {
        "score": {
          "description": "Confidence score of the match. The higher, the more likely to match the symbol.",
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "INVALID",
            "SWASTIKA_WHITE_ON_BLACK",
            "SWASTIKA_BLACK_ON_WHITE",
            "SWASTIKA_BLACK_ON_WHITE_ROTATED",
            "NAZI_YELLOW_BADGE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageSearchImageIndexingInfo": {
      "id": "ImageSearchImageIndexingInfo",
      "properties": {
        "imageLinkSelectionInfo": {
          "description": "Image Selection Info",
          "items": {
            "$ref": "ImageSearchImageSelectionInfo"
          },
          "type": "array"
        },
        "rejectedNotIndexedImageLink": {
          "description": "URLs and Amarna status of images on the page for which image data is not yet available and weren't selected for indexing in image search. Used by consumers of docjoins that need a complete view of image urls on the page (i.e. Digdug).",
          "items": {
            "$ref": "ImageSearchUnindexedImageLink"
          },
          "type": "array"
        },
        "selectedNotIndexedImageLink": {
          "description": "URLs and Amarna status of images on the page for which image data is not yet available and were otherwise selected for indexing in image search. Used by consumers of docjoins that need a complete view of selected image urls on the page (i.e. Hearse, the index selection testbed).",
          "items": {
            "$ref": "ImageSearchUnindexedImageLink"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageSearchImageLicenseInfo": {
      "description": "The image license info for licensable images(go/Licensable-Images-PRD) This proto in design doc: go/licensable-images-edd",
      "id": "ImageSearchImageLicenseInfo",
      "properties": {
        "acquireLicensePage": {
          "description": "Records web page url about how to use the licensed image.",
          "type": "string"
        },
        "copyrightNotice": {
          "description": "Provides copyright info.",
          "type": "string"
        },
        "copyrightNoticeSourceType": {
          "description": "Source type for copyright_notice field.",
          "enum": [
            "UNKNOWN_SOURCE",
            "SCHEMA_ORG_MARKUP",
            "IPTC_METADATA"
          ],
          "enumDescriptions": [
            "DEFAULT",
            "",
            ""
          ],
          "type": "string"
        },
        "creator": {
          "description": "creator, authors.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "creatorSourceType": {
          "description": "Source type for creator field.",
          "enum": [
            "UNKNOWN_SOURCE",
            "SCHEMA_ORG_MARKUP",
            "IPTC_METADATA"
          ],
          "enumDescriptions": [
            "DEFAULT",
            "",
            ""
          ],
          "type": "string"
        },
        "creditText": {
          "description": "Text for crediting persons or organizations.",
          "type": "string"
        },
        "creditTextSourceType": {
          "description": "Source type for credit_text field.",
          "enum": [
            "UNKNOWN_SOURCE",
            "SCHEMA_ORG_MARKUP",
            "IPTC_METADATA"
          ],
          "enumDescriptions": [
            "DEFAULT",
            "",
            ""
          ],
          "type": "string"
        },
        "isRetiredCcUrl": {
          "description": "Whether this license url is in retired license list, which is from: https://creativecommons.org/retiredlicenses/",
          "type": "boolean"
        },
        "licenseType": {
          "enum": [
            "NO_LICENSE",
            "CREATIVE_COMMONS_LICENSE",
            "NON_CREATIVE_COMMONS_LICENSE"
          ],
          "enumDescriptions": [
            "",
            "The license URL is formatted as creativecommons.org/... Creative Commons (CC) license is free for content creators to use when making their work available to the public.",
            "The provider posts a non-Creative-Commons link with information on how to licence that image."
          ],
          "type": "string"
        },
        "licenseUrl": {
          "description": "Records license URL.",
          "type": "string"
        },
        "safesearchFlags": {
          "description": "A bitwise-OR of SafeSearch filtering flags. If present, the flags will be a bitwise-AND between this value and all the classifier_porn::query::Vertical enums. If the value is -1, it indicates there is some error with SafeSearch classifier. The default value 0 means no filtering flags are set.",
          "format": "int32",
          "type": "integer"
        },
        "sourceType": {
          "enum": [
            "UNKNOWN_SOURCE",
            "SCHEMA_ORG_MARKUP",
            "IPTC_METADATA"
          ],
          "enumDescriptions": [
            "DEFAULT",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageSearchImageSelectionInfo": {
      "id": "ImageSearchImageSelectionInfo",
      "properties": {
        "imageLinkSelectionInfo": {
          "$ref": "ImageMustangImageLinkSelectionInfo",
          "description": "Image Selection Info."
        },
        "url": {
          "description": "The image URL.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageSearchUnindexedImageLink": {
      "id": "ImageSearchUnindexedImageLink",
      "properties": {
        "amarnaStatus": {
          "$ref": "ImageRepositoryAmarnaStatus",
          "description": "Insight on why we do not have data for this imagelink."
        },
        "crawlStatusInfo": {
          "$ref": "ImageRepositoryCrawlStatusInfo",
          "description": "Fields for crawl-status-related debugging information."
        },
        "url": {
          "description": "The image URL.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingAnnotation": {
      "description": "Annotation packs various recognition, detection, embedding, and parsing results. One Annotation per bounding box detection.",
      "id": "ImageUnderstandingIndexingAnnotation",
      "properties": {
        "feature": {
          "description": "Multiple feature embeddings for this bounding box.",
          "items": {
            "$ref": "ImageUnderstandingIndexingFeature"
          },
          "type": "array"
        },
        "labelGroup": {
          "description": "Multiple label annotations for this bounding box.",
          "items": {
            "$ref": "ImageUnderstandingIndexingLabelGroup"
          },
          "type": "array"
        },
        "roi": {
          "$ref": "ImageUnderstandingIndexingImageRegion",
          "description": "Detected bounding box. Leave it not set for whole image annotation."
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingAnnotationGroup": {
      "id": "ImageUnderstandingIndexingAnnotationGroup",
      "properties": {
        "annotation": {
          "items": {
            "$ref": "ImageUnderstandingIndexingAnnotation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingFeature": {
      "description": "Image feature embedding proto. It supports various embedding formats: raw bytes, floating point values, and tokens.",
      "id": "ImageUnderstandingIndexingFeature",
      "properties": {
        "bytesValue": {
          "description": "Multiple fields can be set. For example for Starburst V3, they can be used to store compressed byte, raw float feature, and tokens, respectively.",
          "format": "byte",
          "type": "string"
        },
        "floatValue": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "imageTemplate": {
          "$ref": "PhotosVisionObjectrecImageTemplate",
          "description": "Local features."
        },
        "int32Value": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingImageRegion": {
      "description": "Image region produced by a detector.",
      "id": "ImageUnderstandingIndexingImageRegion",
      "properties": {
        "box": {
          "$ref": "PhotosVisionGroundtruthdbNormalizedBoundingBox",
          "description": "Bounding box normalized to [0,1] scale independent on the image size. For example if the original image has the size 1600x1200, the rectangle [200, 200, 800, 600] from the image would have a normalized bounding box [1/8, 1/6, 1/2, 1/2]."
        },
        "score": {
          "description": "Box confidence score. This is used to store the confidence of the box proposal, not the score associated with any specific labels. The box proposal confidence score is a float number per region between [0, 1] indicating how likely a box contains an \"object\".",
          "format": "float",
          "type": "number"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingLabel": {
      "description": "A single label with score and meta data.",
      "id": "ImageUnderstandingIndexingLabel",
      "properties": {
        "canonicalText": {
          "description": "Human readable text.",
          "type": "string"
        },
        "entityId": {
          "description": "KG entity id.",
          "type": "string"
        },
        "metaData": {
          "description": "Meta data for topicality, visible labels, attribute, etc.",
          "items": {
            "$ref": "ImageUnderstandingIndexingMetaData"
          },
          "type": "array"
        },
        "score": {
          "description": "Confidence score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingLabelGroup": {
      "description": "LabelGroup is a set of labels produced by a single model, or by multiple models that share the same versioning. It can be used to store results from ICA, box classifier, visible labels, noun+attribute, and so on.",
      "id": "ImageUnderstandingIndexingLabelGroup",
      "properties": {
        "label": {
          "items": {
            "$ref": "ImageUnderstandingIndexingLabel"
          },
          "type": "array"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ImageUnderstandingIndexingMetaData": {
      "description": "Meta data useful to annotation Label and Feature with extra information.",
      "id": "ImageUnderstandingIndexingMetaData",
      "properties": {
        "floatValue": {
          "format": "float",
          "type": "number"
        },
        "name": {
          "type": "string"
        },
        "stringValue": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingBadSSLCertificate": {
      "description": "This protobuffer stores bad SSL certificate information for a canonical URL, and meant to be included in DocJoins and push to serving time.",
      "id": "IndexingBadSSLCertificate",
      "properties": {
        "badSslCertificate": {
          "$ref": "TrawlerSSLCertificateInfo"
        },
        "urlWithBadSslCertificate": {
          "description": "The URL where the bad SSL certificate really comes from. Present iff it is different from the source URL, i.e. a redirect target of the source URL).",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingConverterLocalizedAlternateName": {
      "id": "IndexingConverterLocalizedAlternateName",
      "properties": {
        "annotationSource": {
          "enum": [
            "HTTP",
            "HTML",
            "SITEMAP"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "deviceMatchInfo": {
          "description": "Device match info calculated only by URL pattern.",
          "enum": [
            "UNKNOWN",
            "WWW_TO_WWW",
            "WWW_TO_M",
            "M_TO_M",
            "M_TO_WWW"
          ],
          "enumDescriptions": [
            "",
            "Both canonical and localized url are www version.",
            "Canonical is www version but localized url is m version.",
            "Both canonical and localized url are m version.",
            "Canonical is m version but localized url is www version."
          ],
          "type": "string"
        },
        "ecnFp": {
          "description": "Fp96 of webmirror ECN as of the last time the canonical was processed.",
          "format": "byte",
          "type": "string"
        },
        "feedUrl": {
          "description": "Populated if annotation_source is SITEMAP.",
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "parsedLanguage": {
          "description": "Parsed language and region code from language field.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "parsedRegion": {
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "format": "byte",
          "type": "string"
        },
        "urlEncoding": {
          "description": "see webutil/urlencoding",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingConverterRawRedirectInfo": {
      "description": "The proto to be stored in raw_redirect_info column of document table.",
      "id": "IndexingConverterRawRedirectInfo",
      "properties": {
        "rawFinalTargetFromRendering": {
          "description": "Final redirect target found from rendering. It is the same as the last element of raw_redirect_chain_from_rendering. It is used as an input source for the indexable fragment detection pipeline and also downstream phases.",
          "type": "string"
        },
        "rawFinalTargetFromTrawler": {
          "description": "This is with-fragment version of redirect_with_contents. This field is populated only if there was a fragment. This field is used by indexing::mobile::GetRedirectTarget() defined in indexing/mobile/internal/smartphone-util.cc, which extracts the redirect target for smartphone optimized pages. The extracted target in turn is served in search results for smartphone users. We need with-fragment version because with-fragment url can return different content than fragment-stripped url. For example, http://www.example.com/m#article=11 and http://www.example.com/m can return different content. These cases are most typical for Ajaxy sites. This fragment does not have to be indexable.",
          "type": "string"
        },
        "rawRedirectChainFromRendering": {
          "$ref": "IndexingConverterRedirectChain",
          "description": "Redirect chain generated from redirect events in rendering. At the beginning of it, there could be some redirects from trawler (i.e. could be partial or entire trawler redirect chain), other redirects have their RedirectParams::is_redirect_from_rendering fields set to true. Redirects here have no RedirectChain::Hop::raw_target fields populated, and targets stored in RedirectChain::Hop::target fields are likely cleaned while keeping fragments (also sometimes they could be uncleaned ones because of cleaning failures), fragments could be indexable or non-indexable."
        },
        "renderingRedirectLimit": {
          "description": "This is used to describe how many redirect hops from Webkit were kept in the raw_redirect_chain_from_rendering. If it is -1, it means it kept all the hops from Webkit in redirect chain.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingConverterRedirectChain": {
      "description": "Redirect_chain is present for redirects, and absent for the final target. It contains the chain from the current hop's target to the final target.",
      "id": "IndexingConverterRedirectChain",
      "properties": {
        "hop": {
          "items": {
            "$ref": "IndexingConverterRedirectChainHop"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingConverterRedirectChainHop": {
      "description": "NOLINT",
      "id": "IndexingConverterRedirectChainHop",
      "properties": {
        "params": {
          "$ref": "IndexingConverterRedirectParams"
        },
        "rawTarget": {
          "description": "Redirect target with fragment. This field is populated only if there was a fragment.",
          "type": "string"
        },
        "target": {
          "description": "Redirect target URL and params of the current hop in the redirect chain.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingConverterRedirectParams": {
      "description": "If we detect any server or content based redirect, we will store the characteristics in this message.",
      "id": "IndexingConverterRedirectParams",
      "properties": {
        "delay": {
          "description": "The time difference between page loading and redirect occurrence. When missing, it means the redirect happens immediately (i.e. delay = 0). In seconds.",
          "format": "int32",
          "type": "integer"
        },
        "frameTargetDeniesFraming": {
          "description": "Populated for SINGLE_FRAME and SINGLE_IFRAME redirects only and indicates that the target url requested not to be framed, by virtue of using the \"X-Frame-Options\" HTTP header.",
          "type": "boolean"
        },
        "isDownload": {
          "description": "Indicates corresponding redirect is a download. This field is only set when rendering redirect chain is used. This field represents the value of corresponding \"RedirectEvent.target_content_downloaded\" field.",
          "type": "boolean"
        },
        "isRenderingRedirect": {
          "description": "Indicates corresponding redirect is from rendering if set to true.",
          "type": "boolean"
        },
        "metaRedirectFromTrawler": {
          "description": "If set, it means that the redirect of type META was detected by Trawler (as opposed to the content processor.) Only makes sense when type is META.",
          "type": "boolean"
        },
        "type": {
          "enum": [
            "PERMANENT",
            "TEMPORARY",
            "WIKIPEDIA_DEPRECATED",
            "JAVASCRIPT",
            "META",
            "SINGLE_FRAME",
            "CRYPTO301",
            "LINK_REL_CANONICAL",
            "SINGLE_IFRAME",
            "WEBKIT",
            "META_FRAGMENT",
            "SINGLE_CHOICE_300",
            "SINGLE_PAGE",
            "DATAFILE",
            "HTTP_REFRESH",
            "HTTP_POST",
            "HTML5_HISTORY_API",
            "AJAX_CRAWLING"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated.",
            "",
            "",
            "",
            "",
            "Like META, but extracted from HTTP headers.",
            "Usually caused by JavaScript. The HTTP method",
            "of the target URL is POST. The URL in address bar is modified without",
            "reloading (usually by Javascript). Similar with DATAFILE. Only used for dup"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingConverterRichContentData": {
      "description": "Contains information about 3 versions of the content of a document: 1. Original: the crawled content (possibly patched in ConversionFilters). 2. Processed: the final version of the content indexed in Web search. 3. Intermediate (no longer generated): intermediate version between the original and the processed content. All 3 versions of the content consist of HTTP headers (in unknown encoding) concatenated with the document body (in interchange valid UTF-8 encoding).",
      "id": "IndexingConverterRichContentData",
      "properties": {
        "range": {
          "items": {
            "$ref": "IndexingConverterRichContentDataRange"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingConverterRichContentDataRange": {
      "description": "Stores an ordered list of ranges of content from the original, processed, and intermediate content, such that: 1. The original content can be reconstructed from the ranges of type ORIGINAL_AND_PROCESSED, ORIGINAL_ONLY, and ORIGINAL_AND_INTERMEDIATE. 2. The processed content can be reconstructed from the ranges of type ORIGINAL_AND_PROCESSED and PROCESSED_ONLY. 3. The intermediate content (if present) can be reconstructed from the ranges of type ORIGINAL_AND_INTERMEDIATE and INTERMEDIATE_ONLY.",
      "id": "IndexingConverterRichContentDataRange",
      "properties": {
        "rangeType": {
          "enum": [
            "ORIGINAL_AND_PROCESSED",
            "ORIGINAL_ONLY",
            "PROCESSED_ONLY",
            "ORIGINAL_AND_INTERMEDIATE",
            "INTERMEDIATE_ONLY"
          ],
          "enumDescriptions": [
            "no longer generated",
            "",
            "",
            "no longer generated",
            "no longer generated"
          ],
          "type": "string"
        },
        "size": {
          "description": "Range size when uncompressed, in bytes.",
          "format": "int32",
          "type": "integer"
        },
        "sourceType": {
          "description": "The source of this range of content. Present iff 'type' is PROCESSED_ONLY or INTERMEDIATE_ONLY. Note: 'source_type' is not present for ORIGINAL_AND_PROCESSED, ORIGINAL_ONLY, and ORIGINAL_AND_INTERMEDIATE because for those range types the source of their content is the original crawled content.",
          "enum": [
            "SEPARATOR",
            "FRAME",
            "DOMTRACKER_JAVASCRIPT",
            "FLASH",
            "IFRAME",
            "WEBKIT_PHRASES_DEPRECATED",
            "WEBKIT_CONTENT_REPLACEMENT"
          ],
          "enumDescriptions": [
            "No longer generated. It was used for whitespace and tags (e.g. ) added to separate other ranges.",
            "No longer generated. It was used for content inserted from a frame.",
            "No longer generated. It was used for content generated by DomTracker JavaScript execution.",
            "No longer generated. It was used for content generated by executing flash animations.",
            "No longer generated. It was used for content inserted from an iframe.",
            "No longer generated. It was used for text content inserted from WebKit rendering.",
            "Used for content from WebKit rendering replacing all the crawled content."
          ],
          "type": "string"
        },
        "sourceUrl": {
          "description": "The source URL of this range of content. Present iff 'source_type' is present and 'source_type' is FRAME or FLASH or IFRAME.",
          "type": "string"
        },
        "text": {
          "description": "The content of the range, compressed with 'text_compression_method'. Present iff 'type' is ORIGINAL_ONLY or ORIGINAL_AND_INTERMEDIATE or INTERMEDIATE_ONLY. Useful to reconstruct the original content or the intermediate content. Note: 'text' is not present for ORIGINAL_AND_PROCESSED and PROCESSED_ONLY because the processed content is already stored separately (in the contents column, and in CompositeDoc.doc.Content.Representation).",
          "format": "byte",
          "type": "string"
        },
        "textCompressionMethod": {
          "description": "Method used to compress the 'text' field. May be present only when the 'text' is present.",
          "enum": [
            "TEXT_COMPRESSION_NONE",
            "TEXT_COMPRESSION_BMDIFF"
          ],
          "enumDescriptions": [
            "The text is not compressed.",
            "The text is BMDiff encoded using the processed content as dictionary."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingConverterRobotsInfo": {
      "description": "Robots Info encapsulates all robots.txt or related information that we know about the Document collected from multiple sources such as HTTP headers, meta robots tags etc.",
      "id": "IndexingConverterRobotsInfo",
      "properties": {
        "contentExpiry": {
          "description": "time in unix time format after which this content should not be shown in the results. This in inferred from the X-Robots-Tag HTTP header with unavailable_after: Do not use this field directly. There is a column called content_expiration in Alexandria that includes this and other signals.",
          "format": "int32",
          "type": "integer"
        },
        "convertToRobotedReason": {
          "enum": [
            "BLOCKING_HOST",
            "EMPTY_PAGE",
            "MOBILE_IP_RESTRICTED",
            "CLOAKING_4XX",
            "UNSUPPORTED_PROTOCOL"
          ],
          "enumDescriptions": [
            "",
            "",
            "Mobile crawler failed to crawl the webpage, but its crawl status was changed to ROBOTED because it is in mobile whitelist.",
            "URL cloaking googlebot with 4xx response.",
            "URL redirects to unsupported protocol in trawler, but the protocol is actually visitable on device."
          ],
          "type": "string"
        },
        "disallowedReason": {
          "format": "int32",
          "type": "integer"
        },
        "indexifembeddedReason": {
          "description": "IMPORTANT: if you add a new field here, update the MergeRobotsInfo() function to merge the new field.",
          "format": "int32",
          "type": "integer"
        },
        "maxImagePreview": {
          "description": "Max image preview restriction applied to this data. A value of THUMBNAIL_UNSPECIFIED can be treated as though there is no restriction.",
          "enum": [
            "THUMBNAIL_UNSPECIFIED",
            "NONE",
            "STANDARD",
            "LARGE"
          ],
          "enumDescriptions": [
            "Not specified, no preview policy-related restrictions apply (but other restrictions like Fair Use still do).",
            "Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels."
          ],
          "type": "string"
        },
        "maxSnippetLength": {
          "description": "Max snippet preview restriction applied to this data. If this field is zero, it indicates that no snippet data can be displayed, therefore this field should be checked using has_max_snippet_length to determine if it was set.",
          "format": "int64",
          "type": "string"
        },
        "noarchiveReason": {
          "format": "int32",
          "type": "integer"
        },
        "nofollowReason": {
          "format": "int32",
          "type": "integer"
        },
        "noimageframeoverlayReason": {
          "format": "int32",
          "type": "integer"
        },
        "noimageindexReason": {
          "format": "int32",
          "type": "integer"
        },
        "noindexReason": {
          "description": "Bit map of RobotedReasons values. When set to a non-zero value, the document should not be indexed or archived etc. based on the name of the tag.",
          "format": "int32",
          "type": "integer"
        },
        "nopreviewReason": {
          "format": "int32",
          "type": "integer"
        },
        "nosnippetReason": {
          "format": "int32",
          "type": "integer"
        },
        "notranslateReason": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingConverterShingleFingerprint": {
      "description": "Used for storing fingerprints, along with meta-data that expresses how the fingerprint was computed. The metadata can be anything that fits in an uint64.",
      "id": "IndexingConverterShingleFingerprint",
      "properties": {
        "metadata": {
          "format": "uint64",
          "type": "string"
        },
        "value": {
          "description": "Repeated to allow for fingerprints larger than 64-bits.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingCrawlerIdServingDocumentIdentifier": {
      "id": "IndexingCrawlerIdServingDocumentIdentifier",
      "properties": {
        "doubleIndexingExperimentId": {
          "description": "Only for double indexing experiments. This field is set for duplicated documents so that docjoin users will not see duplicated docs.",
          "type": "string"
        },
        "dupExperimentId": {
          "description": "Only for Experimental clusters, not relevant for production serving data: Index-Dups can run experiments in Quality Clusters where different versions of the same document (e.g. with different signals) are serving in parallel. They are uniquely identified by the dup-experiment-IDs. This is for experimental clusters only. In prod-versions the member will not be set.",
          "type": "string"
        },
        "key": {
          "description": "The primary identifier of a production document is the document key, which is the same as the row-key in Alexandria, and represents a URL and its crawling context. The document key is the unique identifier for each document, but multiple document keys can cover the same URL (e.g. crawled with different device types). In your production code, please always assume that the document key is the only way to uniquely identify a document. Link for more background information: http://go/url The document key is populated for all docs in indexing since 2014-03. ## Recommended way of reading: const string& doc_key = cdoc.doc().id().key(); ## CHECK(!doc_key.empty()); Note: For older DocJoins (e.g. historical DocJoins), the field is not populated. In those scenarios it is recommended to use the function 'GetDocumentKeyFromCompositeDoc' in '//indexing/crawler_id/utils/compositedoc/compositedoc_util.h' instead.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorPhraseSpamInfo": {
      "description": "Following signals identify spike of spammy anchor phrases. Anchors created during the spike are tagged with LINK_SPAM_PHRASE_SPIKE.",
      "id": "IndexingDocjoinerAnchorPhraseSpamInfo",
      "properties": {
        "phraseAnchorSpamCount": {
          "description": "How many spam phrases found in the anchors among unique domains.",
          "format": "float",
          "type": "number"
        },
        "phraseAnchorSpamDays": {
          "description": "Over how many days 80% of these phrases were discovered.",
          "format": "float",
          "type": "number"
        },
        "phraseAnchorSpamDemoted": {
          "description": "Total number of demoted anchors.",
          "format": "uint32",
          "type": "integer"
        },
        "phraseAnchorSpamEnd": {
          "description": "Time when anchor spam spike ended with padding.",
          "format": "uint32",
          "type": "integer"
        },
        "phraseAnchorSpamFraq": {
          "description": "Spam phrases fraction of all anchors of the document.",
          "format": "float",
          "type": "number"
        },
        "phraseAnchorSpamPenalty": {
          "description": "Combined penalty for anchor demotion.",
          "format": "float",
          "type": "number"
        },
        "phraseAnchorSpamProcessed": {
          "description": "Total number of observed anchors.",
          "format": "uint32",
          "type": "integer"
        },
        "phraseAnchorSpamRate": {
          "description": "Average daily rate of spam anchor discovery.",
          "format": "float",
          "type": "number"
        },
        "phraseAnchorSpamStart": {
          "description": "Time when anchor spam spike started with padding.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorSpamInfo": {
      "description": "Following structure summarizes output of AnchorSpamPenalizer. Spammy anchors are tagged with LINK_SPAM_PHRASE_PENALIZER and demoted to SPAM locality in anchor-localizer.cc",
      "id": "IndexingDocjoinerAnchorSpamInfo",
      "properties": {
        "anchorEnd": {
          "description": "End date of the last anchor of the document.",
          "format": "uint32",
          "type": "integer"
        },
        "anchorFraq": {
          "description": "Ratio of spam demoted period to all anchor period.",
          "format": "float",
          "type": "number"
        },
        "anchorStart": {
          "description": "Start date of the first anchor of the document.",
          "format": "uint32",
          "type": "integer"
        },
        "demoted": {
          "description": "Following field record details of anchor demotion in action. How many anchors were demoted.",
          "format": "uint32",
          "type": "integer"
        },
        "demotedAll": {
          "description": "Demoted all anchors in the period or only anchors classified as spam.",
          "type": "boolean"
        },
        "demotedEnd": {
          "description": "End date of the demotion period.",
          "format": "uint32",
          "type": "integer"
        },
        "demotedStart": {
          "description": "Start date of the demotion period.",
          "format": "uint32",
          "type": "integer"
        },
        "phraseCount": {
          "description": "Following fields record signals used in anchor spam classification. How many spam phrases found in the anchors among unique domains.",
          "format": "float",
          "type": "number"
        },
        "phraseDays": {
          "description": "Over how many days 80% of these phrases were discovered.",
          "format": "float",
          "type": "number"
        },
        "phraseFraq": {
          "description": "Spam phrases fraction of all anchors of the document.",
          "format": "float",
          "type": "number"
        },
        "phraseRate": {
          "description": "Average daily rate of spam anchor discovery.",
          "format": "float",
          "type": "number"
        },
        "processed": {
          "description": "Total number of processed anchors.",
          "format": "uint32",
          "type": "integer"
        },
        "sampled": {
          "description": "True if anchors were sampled during observation phrase.",
          "type": "boolean"
        },
        "sources": {
          "description": "Detailed information about trusted sources and match computation. Populated only when --anchorspam_penalizer_debug=true.",
          "items": {
            "$ref": "IndexingDocjoinerAnchorTrustedInfo"
          },
          "type": "array"
        },
        "spamDebugInfo": {
          "description": "Additional debug information about computation of spam probability.",
          "type": "string"
        },
        "spamPenalty": {
          "description": "Combined penalty for anchor demotion.",
          "format": "float",
          "type": "number"
        },
        "spamProbability": {
          "description": "Predicted probability of spam.",
          "format": "float",
          "type": "number"
        },
        "trustedDemoted": {
          "description": "Number of trusted anchors used in computation of spam probability.",
          "format": "uint32",
          "type": "integer"
        },
        "trustedExamples": {
          "description": "Examples of trusted sources.",
          "type": "string"
        },
        "trustedMatching": {
          "description": "Number of trusted anchors with anchor text matching spam terms.",
          "format": "uint32",
          "type": "integer"
        },
        "trustedTarget": {
          "description": "Following fields record details about trusted anchors True if is this URL is on trusted source.",
          "type": "boolean"
        },
        "trustedTotal": {
          "description": "Total number of trusted sources for this URL.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorStatistics": {
      "description": "Statistics of the anchors in a docjoin. Next available tag ID: 63.",
      "id": "IndexingDocjoinerAnchorStatistics",
      "properties": {
        "anchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "anchorPhraseCount": {
          "description": "The number of unique anchor phrases. Capped by the constant kMaxAnchorPhraseCountInStats (=5000) defined in indexing/docjoiner/anchors/anchor-manager.cc.",
          "format": "int32",
          "type": "integer"
        },
        "anchorSpamInfo": {
          "$ref": "IndexingDocjoinerAnchorSpamInfo",
          "description": "This structure contains signals and penalties of AnchorSpamPenalizer. It replaces phrase_anchor_spam_info above, that is deprecated."
        },
        "anchorsWithDedupedImprovanchors": {
          "description": "The number of anchors for which some ImprovAnchors phrases have been removed due to duplication within source org.",
          "format": "int32",
          "type": "integer"
        },
        "badbacklinksPenalized": {
          "description": "Whether this doc is penalized by BadBackLinks, in which case we should not use improvanchor score in mustang ascorer.",
          "type": "boolean"
        },
        "baseAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "baseOffdomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "droppedHomepageAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "droppedLocalAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "droppedNonLocalAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "droppedRedundantAnchorCount": {
          "description": "Sum of anchors_dropped in the repeated group RedundantAnchorInfo, but can go higher if the latter reaches the cap of kMaxRecordsToKeep. (indexing/docjoiner/anchors/anchor-loader.cc), currently 10,000",
          "format": "int32",
          "type": "integer"
        },
        "fakeAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "forwardedAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "forwardedOffdomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "globalAnchorDelta": {
          "description": "Metric of number of changed global anchors computed as, size(union(previous, new) - intersection(previous, new)).",
          "format": "int32",
          "type": "integer"
        },
        "linkBeforeSitechangeTaggedAnchors": {
          "format": "int32",
          "type": "integer"
        },
        "localAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "lowCorpusAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "lowCorpusOffdomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "mediumCorpusAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "mediumCorpusOffdomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "minDomainHomePageLocalOutdegree": {
          "description": "Minimum local outdegree of all anchor sources that are domain home pages as well as on the same domain as the current target URL.",
          "format": "int32",
          "type": "integer"
        },
        "minHostHomePageLocalOutdegree": {
          "description": "Minimum local outdegree of all anchor sources that are host home pages as well as on the same host as the current target URL.",
          "format": "int32",
          "type": "integer"
        },
        "nonLocalAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "offdomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "ondomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "onsiteAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "pageFromExpiredTaggedAnchors": {
          "description": "Set in SignalPenalizer::FillInAnchorStatistics.",
          "format": "int32",
          "type": "integer"
        },
        "pageMismatchTaggedAnchors": {
          "format": "int32",
          "type": "integer"
        },
        "penguinEarlyAnchorProtected": {
          "description": "Doc is protected by goodness of early anchors.",
          "type": "boolean"
        },
        "penguinLastUpdate": {
          "description": "BEGIN: Penguin related fields. Timestamp when penguin scores were last updated. Measured in days since Jan. 1st 1995.",
          "format": "int32",
          "type": "integer"
        },
        "penguinPenalty": {
          "description": "Page-level penguin penalty (0 = good, 1 = bad).",
          "format": "float",
          "type": "number"
        },
        "penguinTooManySources": {
          "description": "Doc not scored because it has too many anchor sources. END: Penguin related fields.",
          "type": "boolean"
        },
        "perdupstats": {
          "items": {
            "$ref": "IndexingDocjoinerAnchorStatisticsPerDupStats"
          },
          "type": "array"
        },
        "phraseAnchorSpamInfo": {
          "$ref": "IndexingDocjoinerAnchorPhraseSpamInfo",
          "description": "Following signals identify spike of spammy anchor phrases. Anchors created during the spike are tagged with LINK_SPAM_PHRASE_SPIKE."
        },
        "redundantAnchorForPhraseCapCount": {
          "description": "Total anchor dropped due to exceed per domain phrase cap. Equals to sum of anchors_dropped in the repeated group RedundantAnchorInfoForPhraseCap, but can go higher if the latter reaches the cap of kMaxDomainsToKeepForPhraseCap (indexing/docjoiner/anchors/anchor-loader.h), currently 1000.",
          "format": "int32",
          "type": "integer"
        },
        "redundantanchorinfo": {
          "items": {
            "$ref": "IndexingDocjoinerAnchorStatisticsRedundantAnchorInfo"
          },
          "type": "array"
        },
        "redundantanchorinfoforphrasecap": {
          "items": {
            "$ref": "IndexingDocjoinerAnchorStatisticsRedundantAnchorInfoForPhraseCap"
          },
          "type": "array"
        },
        "scannedAnchorCount": {
          "description": "The total number of anchors being scanned from storage.",
          "format": "int32",
          "type": "integer"
        },
        "skippedAccumulate": {
          "description": "A count of the number of times anchor accumulation has been skipped for this document. Note: Only used when canonical.",
          "format": "int32",
          "type": "integer"
        },
        "skippedOrReusedReason": {
          "description": "Reason to skip accumulate, when skipped, or Reason for reprocessing when not skipped.",
          "type": "string"
        },
        "spamLog10Odds": {
          "description": "The log base 10 odds that this set of anchors exhibits spammy behavior. Computed in the AnchorLocalizer.",
          "format": "float",
          "type": "number"
        },
        "timestamp": {
          "description": "Walltime of when anchors were accumulated last.",
          "format": "int32",
          "type": "integer"
        },
        "topPrOffdomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "topPrOndomainAnchorCount": {
          "format": "int32",
          "type": "integer"
        },
        "topPrOnsiteAnchorCount": {
          "description": "According to anchor quality bucket, anchor with pagrank > 51000 is the best anchor. anchors with pagerank < 47000 are all same.",
          "format": "int32",
          "type": "integer"
        },
        "totalDomainPhrasePairsAboveLimit": {
          "description": "The following should be equal to the size of the following repeated group, except that it can go higher than 10,000.",
          "format": "int32",
          "type": "integer"
        },
        "totalDomainPhrasePairsSeenApprox": {
          "description": "Number of domain/phrase pairs in total -- i.e. how many anchors we would have if the domain/phrase cutoff was set to 1 instead of 200. This is \"approx\" for large anchor clusters because there can be double counting when the LRU cache forgets about rare domain/phrase pairs.",
          "format": "int32",
          "type": "integer"
        },
        "totalDomainsAbovePhraseCap": {
          "description": "Number of domains above per domain phrase cap. We see too many phrases in the domains.",
          "format": "int32",
          "type": "integer"
        },
        "totalDomainsSeen": {
          "description": "Number of domains seen in total.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorStatisticsPerDupStats": {
      "description": "------------------------------------------------------------------------- The total number of anchors collected per dupforwarding (including the canonical itself). Includes additional data about redundant and offdomain counts and the last timestamp it was collected from.",
      "id": "IndexingDocjoinerAnchorStatisticsPerDupStats",
      "properties": {
        "anchorCount": {
          "description": "Count of anchors kept from forwarding.",
          "format": "int32",
          "type": "integer"
        },
        "collectType": {
          "description": "This is EcnCollectType in anchor-ecn-matcher.h for the latest ECN of this dup: - kCollectNormal = 0, // Normal collection. - kCollectUnforwarded = 1, // Forwarding leader docid match only. - kCollectWhitelisted = 2, // Collected anchors matching whitelist. - kCollectNone = 4 // Skipped ECN anchor cluster.",
          "format": "int32",
          "type": "integer"
        },
        "dupUrl": {
          "description": "If missing, the same as the canonical.",
          "type": "string"
        },
        "offdomainAnchorCount": {
          "description": "Count of offdomain anchors.",
          "format": "int32",
          "type": "integer"
        },
        "redundantAnchorCount": {
          "description": "Count of redundant anchors.",
          "format": "int32",
          "type": "integer"
        },
        "scannedAnchorCount": {
          "description": "The number of anchors being scanned from storage per dupforwarding.",
          "format": "int32",
          "type": "integer"
        },
        "timestamp": {
          "description": "Walltime when this was scanned last.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorStatisticsRedundantAnchorInfo": {
      "description": "------------------------------------------------------------------------- The total number of redundant anchors dropped per (domain, text). If we receive a large number of anchors from a particular domain, then we'll throw out all but 200 of them from that domain. The data is sorted by the (domain, text) pairs. This is capped at 10,000 entries (if less, it will have the same number of elements as the above_limit count).",
      "id": "IndexingDocjoinerAnchorStatisticsRedundantAnchorInfo",
      "properties": {
        "anchorsDropped": {
          "format": "int64",
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorStatisticsRedundantAnchorInfoForPhraseCap": {
      "id": "IndexingDocjoinerAnchorStatisticsRedundantAnchorInfoForPhraseCap",
      "properties": {
        "anchorsDropped": {
          "format": "int32",
          "type": "integer"
        },
        "domain": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerAnchorTrustedInfo": {
      "description": "This message summarized anchors of one trusted site.",
      "id": "IndexingDocjoinerAnchorTrustedInfo",
      "properties": {
        "matchedScore": {
          "description": "Difference in KL-divergence from spam and non-spam anchors. Value >0 indicate that anchor text from this trusted source is similar to anchors classified as spam which means that spammy anchors are legitimate.",
          "format": "float",
          "type": "number"
        },
        "matchedScoreInfo": {
          "description": "Detailed debug information about computation of trusted anchors match. Populated only when --anchorspam_penalizer_debug=true",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "phrasesScore": {
          "description": "Count of anchors classified as spam using anchor text.",
          "format": "float",
          "type": "number"
        },
        "site": {
          "description": "Site name from anchor.source().site().",
          "type": "string"
        },
        "text": {
          "description": "Tokenized text of all anchors from the site.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "trustedScore": {
          "description": "Fraction of pages with newsy anchors on the site, >0 for trusted sites.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerCDocBuildInfo": {
      "description": "Holds extra info except annotations and raw cdoc for buildint the final cdoc.",
      "id": "IndexingDocjoinerCDocBuildInfo",
      "properties": {
        "extraMessage": {
          "$ref": "Proto2BridgeMessageSet"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerDataVersion": {
      "description": "DataVersion tracks the version of data in CompositeDoc. The notion of \"data\" here is loose and people can define the name of their own. For example, a signal generated by Index Signals or an annotation generated by Goldmine (and other components) can all be considered as data here. Each field in this proto represents the human readable version string and the timestamp of one particular data. We choose to explicitly list out all of the data here for better understanding about which data are tracked. NOTE that human_readable_version is not intended for comparison, use timestamp_micros. In addition, we have an annotation about the field paths of each data. With proto reflection (using google3/net/proto2/util/public/field_path.h), downstream systems can take advantage of this annotation to automatically handle newly introduced data without modifying their code. Please also see the comment of FieldProjector above. There are also some fields in DataInfo that annotate who generates the data, the Index Signals or Goldmine annotator name.",
      "id": "IndexingDocjoinerDataVersion",
      "properties": {
        "acceleratedShoppingSignal": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "chromeCounts": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "creator": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo",
          "description": "LINT.ThenChange(//depot/google3/indexing/ames/spanner/schema/web-version.proto)"
        },
        "instantNavboost": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "localyp": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "modernFormatContent": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "navboost": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo",
          "description": "LINT.IfChange"
        },
        "rankembed": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "universalFacts": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "videoScoringSignal": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        },
        "volt": {
          "$ref": "IndexingDocjoinerDataVersionVersionInfo"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerDataVersionVersionInfo": {
      "id": "IndexingDocjoinerDataVersionVersionInfo",
      "properties": {
        "humanReadableVersion": {
          "type": "string"
        },
        "timestampMicros": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerServingTimeClusterId": {
      "description": "The serving cluster id metadata. Why we cluster the documents. The default value is UNKNOWN. Serving-Side Clustering is used for pages which represent the same content but are not identical (e.g. translated pages, or paginated content). Those documents are not dup-clustered in Alexandria so that all documents (and their tokens) are available to search queries. However, those documents are assigned the same Serving-Time-Cluster-ID (on the same reasontype), which during serving guarantees that only one of them is shown to the user.",
      "id": "IndexingDocjoinerServingTimeClusterId",
      "properties": {
        "clusterId": {
          "description": "The unique id to distinguish members in cluster. It could be generated in different ways according to reason, e.g. LINK_REL_NEXT_PREVIOUS: it is the fingerprint of the URL of index 0; PAGE_PARAMETER_INFO: it is the fingerprint of pagination pattern (pagination_pattern_fp field in PageParamInfo message).",
          "format": "uint64",
          "type": "string"
        },
        "indexForDebugging": {
          "description": "The member index of this document in cluster. Starts from \"0\". Note that indices of pages in a cluster may not be consistent with each other, because we may update them at different points in time. Currently only used for debugging.",
          "format": "int32",
          "type": "integer"
        },
        "reason": {
          "description": "The reason why this document is clustered into this cluster.",
          "enum": [
            "UNKNOWN",
            "LINK_REL_NEXT_PREVIOUS",
            "PAGE_PARAMETER_INFO",
            "DEPRECATED_DO_NOT_USE_LANGUAGE_REGION_VARIATION",
            "SITE_DUP",
            "FLIPPED_CANONICAL",
            "MOBILE_REDIRECTION_DUP",
            "BROKEN_REL_CANONICAL",
            "ROBOTED_SAME_HOST",
            "DEPRECATED_DO_NOT_USE_SAME_PRE_RENDER_CHECKSUM"
          ],
          "enumDescriptions": [
            "",
            "The documents are clustered together by link rel=next/previous elements.",
            "The documents are clustered together by page parameter information.",
            "Language/Region variation. No longer used as serving-time-cluster-IDs, handled via it's own fields and twiddler.",
            "The documents are clustered together if they belong to sites which are suspected to be identical.",
            "The documents are canonicals chosen from the same dup cluster, but at slightly different points in time. This could be because they're serving from different tiers, e.g., daily vs. base, or different segments in teragoogle; or it could simply be a result of non-atomic updates to librarian. While Alexandria guarantees that there will only ever be one canonical, it is possible for an old and a new canonical to be serving at the same time. In such a case, they should share this ID.",
            "The documents are clustered together if they are redirected to the same URL on smartphone. This type is only used for smartphone traffic.",
            "The documents are connected by a rel=canonical link that has been found invalid by mr-bad-rel-canonicals.",
            "The documents that are roboted and belong to the same host and have the same suffix are clustered together. See http://sites/index-dups/clustering/roboted for details.",
            "The documents that have same pre-rendering checksum 96bit are clustered together. This is used as a safe guard for the launch of replacing pre-render checksum 96bit with rendered checksum 96bit."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDocjoinerServingTimeClusterIds": {
      "description": "This message contains a set of cluster ids used to de-dup at serving time. A document could be clustered into different clusters according to different properties.",
      "id": "IndexingDocjoinerServingTimeClusterIds",
      "properties": {
        "clusterId": {
          "description": "The exact cluster metadata for each individual cluster if any.",
          "items": {
            "$ref": "IndexingDocjoinerServingTimeClusterId"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingDupsComputedLocalizedAlternateNamesLocaleEntry": {
      "id": "IndexingDupsComputedLocalizedAlternateNamesLocaleEntry",
      "properties": {
        "clusterId": {
          "description": "Cluster-ID of that locale entry. Not Populated if the message is part of a Cluster-Proto (e.g. when loaded as a signal). The data is being populated when the proto is used outside of the cluster context. For instance, when being used as a dups-computed-localized-alternate-name.",
          "format": "uint64",
          "type": "string"
        },
        "deviceMatchInfo": {
          "description": "Device match info calculated only by URL pattern.",
          "enum": [
            "UNKNOWN",
            "WWW_TO_WWW",
            "WWW_TO_M",
            "M_TO_M",
            "M_TO_WWW"
          ],
          "enumDescriptions": [
            "",
            "Both canonical and localized url are www version.",
            "Canonical is www version but localized url is m version.",
            "Both canonical and localized url are m version.",
            "Canonical is m version but localized url is www version."
          ],
          "type": "string"
        },
        "language": {
          "description": "Language/Region code. E.g. \"en-US\" or \"de\". Allowed values are language-region codes based on the W3C recommendation http://www.w3.org/TR/html401/struct/dirlang.html#langcodes",
          "type": "string"
        },
        "url": {
          "description": "The alternate url representing the content for a specific language and region (or language only).",
          "type": "string"
        },
        "urlEncoding": {
          "description": "see webutil/urlencoding",
          "format": "int32",
          "type": "integer"
        },
        "urlRegionCode": {
          "description": "The region code that was extracted from the URL, either by the TLD or via a pattern (like 'en-ca' as a path element).. Always filled in if known, unlike the sometimes left out region part of the language field. Unknown Region Code",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedCluster": {
      "id": "IndexingDupsLocalizedLocalizedCluster",
      "properties": {
        "boostSourceBlocker": {
          "description": "Defined as a source-blocker, a result which can be a boost target but should itself not be boosted (e.g. roboted documents). For more details on source and target blocking, please read through the code for quality/twiddler/impls/PROTECTED/local_result_twiddler_v2.cc",
          "type": "boolean"
        },
        "cluster": {
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterCluster"
          },
          "type": "array"
        },
        "deprecatedHreflangInfo": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfo",
          "description": "Since July 2014 those two fiels are no longer populated, the data is stored in the TargetLinkSets instead. The deprecated fields contain values only for docs which have not been processed since July 2014."
        },
        "deprecatedOutlinksInfo": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfo"
        },
        "documentLanguage": {
          "description": "The language of this document (as detected by on-page language detection, not influenced by external anchor signals or other indirect conclusions).",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "hreflangTargetLink": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkSets"
        },
        "inbodyTargetLink": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkSets"
        },
        "outlinksTargetLink": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkSets"
        },
        "sitedupRuleId": {
          "description": "The list of Sitedup rule IDs for this specific URL. The value is only populated if the URL has at least one localized cluster fulfilling the following conditions: - spans more than one host - does not have filtering enabled due to other input (e.g. due to being a hreflang cluster).",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "warningMessage": {
          "description": "A warning indicator that a problem has occurred, e.g. cross-domain links being filtered early. The warning is just presented for debugging purposes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterCluster": {
      "id": "IndexingDupsLocalizedLocalizedClusterCluster",
      "properties": {
        "clusterId": {
          "description": "The cluster id, a unique int64 id for the cluster.",
          "format": "uint64",
          "type": "string"
        },
        "clusterType": {
          "enum": [
            "UNDEFINED_CLUSTER_TYPE",
            "COMPUTED_ORGMAP",
            "COMPUTED_URL_PATTERN",
            "HREFLANG_ANNOTATION",
            "HREFLANG_ANNOTATION_OPTIMISTIC_GUESS",
            "HREFLANG_ANNOTATION_FROM_BODY",
            "PAGE_OUTLINKS",
            "NOT_USED_4",
            "NOT_USED_6",
            "NOT_USED_8",
            "NOT_USED_9"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "deprecatedDebugInfo": {
          "description": "Debug Info being attached to each cluster, to understand how it was created. That info is stored in Alexandria, but not available during serving.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "filteringEnabled": {
          "description": "Indicates that filtering can be applied on the category (if many results of one cluster show up on the SERP, only one should be kept).",
          "type": "boolean"
        },
        "language": {
          "description": "The language as represented by the URL, e.g. 'use this document on the cluster for German queries'.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "regionCode": {
          "description": "Same as language, except for the country. This is the Stable Region Code. This value may be UNKNOWN even though the URL region code is known, namely when the known region code was the main region for the language and for that language no other region is specified (e.g. de-DE being the only german variation). Unknown Region Code",
          "format": "int32",
          "type": "integer"
        },
        "urlRegionCode": {
          "description": "Similar to region_code, but always has the value filled in if known. Unknown Region Code",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfo": {
      "description": "ClusterInfo no longer being populated (they are the 'old' version of storing meta-information only available in old not-reprocessed documents, all documents processed since July 2014 use the 'TargetLinkSet' instead.",
      "id": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfo",
      "properties": {
        "fpOutlinks": {
          "description": "A fingerprint of all outlink-URLs of this document that have been used as algorithmic input.",
          "format": "uint64",
          "type": "string"
        },
        "lastModifiedInputTimestampMs": {
          "description": "The last time the set of outgoing links of this document was modified. This is the input for our calculation.",
          "format": "int64",
          "type": "string"
        },
        "lastProcessedOutputTimestampMs": {
          "description": "The last time the cross-validation of the links was done. Between that last timestamp and now, only cached results have been used.",
          "format": "int64",
          "type": "string"
        },
        "linkMember": {
          "description": "All verified members of the cluster (including recursive inclusions).",
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfoLinkMember"
          },
          "type": "array"
        },
        "unvalidatedOutlink": {
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfoLinkData"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfoLinkData": {
      "id": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfoLinkData",
      "properties": {
        "annotationSource": {
          "enum": [
            "HTTP",
            "HTML",
            "SITEMAP"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "crawlTimestamp": {
          "description": "If set, represents the crawl timestamp. If not set, there is no known crawl timestamp for that url.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfoLinkMember": {
      "id": "IndexingDupsLocalizedLocalizedClusterLinkBasedClusterInfoLinkMember",
      "properties": {
        "annotationSource": {
          "enum": [
            "HTTP",
            "HTML",
            "SITEMAP"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "languageCode": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterTargetLink": {
      "description": "Message containing information about the localized URL linked to from this document in a localized-variation-context.",
      "id": "IndexingDupsLocalizedLocalizedClusterTargetLink",
      "properties": {
        "linkData": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkLink"
        },
        "metaData": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkMetadata"
        },
        "targetDocData": {
          "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkTargetDocData"
        },
        "validationStatus": {
          "enum": [
            "VALIDATION_UNKNOWN",
            "SELFLINK",
            "NO_BACKLINK",
            "HAS_BACKLINK",
            "BLINDLY_TRUSTED",
            "BLINDLY_TRUSTED_WITH_BACKLINK"
          ],
          "enumDescriptions": [
            "",
            "Link is a self link to source URL.",
            "Link doesn't have a backlink path to source URL.",
            "Link has a backlink path to source URL.",
            "Link is missing data or was crawled prior to source URL, so its blindly trusted with no verfication of a backlink.",
            "The union of BLINDLY_TRUSTED and HAS_BACKLINK."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterTargetLinkLink": {
      "description": "Basic information about the link target, i.e. the URL or the language code it's believed to represent.",
      "id": "IndexingDupsLocalizedLocalizedClusterTargetLinkLink",
      "properties": {
        "annotationSourceInfo": {
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkLinkAnnotationSourceInfo"
          },
          "type": "array"
        },
        "crossDomain": {
          "description": "For a link A->B where B is represented by this proto, cross_domain := Host(A) != Host(B).",
          "type": "boolean"
        },
        "url": {
          "description": "The URL the information in TargetLink refers to.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterTargetLinkLinkAnnotationSourceInfo": {
      "description": "Message describing where was the link discovered and with what language annotation.",
      "id": "IndexingDupsLocalizedLocalizedClusterTargetLinkLinkAnnotationSourceInfo",
      "properties": {
        "anchorText": {
          "description": "Optional field for storing the anchor text the language code was extracted from. Applies to outlinks only.",
          "type": "string"
        },
        "annotationSource": {
          "description": "Information about where the language code was extracted from.",
          "enum": [
            "HTTP",
            "HTML",
            "SITEMAP"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "languageCode": {
          "description": "Language code extracted from the URL (hreflang or outlink). One URL can represent multiple language codes, like e.g. de-at and de-ch",
          "type": "string"
        },
        "sourceFeedUrl": {
          "description": "Optional field that stores the feed URL where a Sitemap annotation was discovered. Only populated if annotation_source is SITEMAP.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterTargetLinkMetadata": {
      "description": "Information derived from alexandria when processing the cross-link validation (e.g. when this was done the last time, or when we started to see the outlink for the first time).",
      "id": "IndexingDupsLocalizedLocalizedClusterTargetLinkMetadata",
      "properties": {
        "firstSeenMs": {
          "description": "When was the first time a link seen. Defaults to last crawled timestamp.",
          "format": "int64",
          "type": "string"
        },
        "lastVerifiedMs": {
          "description": "When was the last time a link validated. Validation is the process of (re)reading the relevant information for a linked document from its respective row in the document table. Data needed for understanding the correctness of the cluster is copied over to have it available locally.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterTargetLinkSets": {
      "id": "IndexingDupsLocalizedLocalizedClusterTargetLinkSets",
      "properties": {
        "directTargetLink": {
          "description": "Direct links are the simplest scenarios where A simply links to B.",
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLink"
          },
          "type": "array"
        },
        "indirectTargetLink": {
          "description": "Repeated field for URLs that are not directly linking to the document TargetLink refers to. We can encounter the following scenario: A -> Links to B -> links to C (i.e. without (A) linking to (C)). In the context of B, indirect_inclusion would include the link to 'C' but not the link back to 'A'.",
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLink"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingDupsLocalizedLocalizedClusterTargetLinkTargetDocData": {
      "description": "Information about the URLs being validated.",
      "id": "IndexingDupsLocalizedLocalizedClusterTargetLinkTargetDocData",
      "properties": {
        "contentLanguage": {
          "description": "The detected on-page content language of the document.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "crawlStatus": {
          "enum": [
            "UNKNOWN",
            "CONTENT",
            "ROBOTED",
            "ERROR"
          ],
          "enumDescriptions": [
            "Default state.",
            "Crawled successfully with contents.",
            "Roboted from accessing the page.",
            "Fatal server-side error, e.g. 404."
          ],
          "type": "string"
        },
        "crawlTimestampSeconds": {
          "description": "The timestamp of the last crawl attempt from crawl_timestamp column.",
          "format": "int32",
          "type": "integer"
        },
        "isCanonical": {
          "description": "Whether the URL being validated is canonical at the time of processing.",
          "type": "boolean"
        },
        "outgoingLinkData": {
          "description": "Repeated field for data about the outgoing hreflang links that appear in the document that the currently processed URL refers to.",
          "items": {
            "$ref": "IndexingDupsLocalizedLocalizedClusterTargetLinkLink"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentEmbeddedContentInfo": {
      "description": "This protobuf is used (1) To pass data between EmbeddedExporter and the publisher, and (2) As a member of CompositeDoc, to stick embedded content output into the docjoins. Next tag available: 21",
      "id": "IndexingEmbeddedContentEmbeddedContentInfo",
      "properties": {
        "compressedDocumentTrees": {
          "description": "The document's DOM and render tree produced by WebKit as a side effect of rendering the page. It might be compressed or not. Thus, use indexing::embedded_content::UncompressWebkitDocument to decode it.",
          "format": "byte",
          "type": "string"
        },
        "convertedContents": {
          "description": "The converted contents, as produced by the same DocumentUpdater transaction that generated the render tree. Useful whenever one of our users wants to experiment with deriving an annotation from the render tree.",
          "type": "string"
        },
        "embeddedLinksInfo": {
          "$ref": "IndexingEmbeddedContentEmbeddedLinksInfo",
          "description": "Information about all external resources needed to render this page, a.k.a. embedded links. This includes .css files, images embedded in a page, external javascripts, iframes etc."
        },
        "headlessResponse": {
          "$ref": "HtmlrenderWebkitHeadlessProtoRenderResponse",
          "description": "The headless response for rendering the document."
        },
        "isAlternateSnapshot": {
          "description": "Indicate if the snapshot is generated from alternate snapshot. If true, the snapshot will be exported even if the snapshot quality score is low.",
          "type": "boolean"
        },
        "originalEncoding": {
          "description": "The original encoding of the content crawled from trawler. It's the value of enum i18n::encodings::encoding. We put a int32 here instead of encoding proto to maintain the compatibility of \"py_api_version = 1\"",
          "format": "int32",
          "type": "integer"
        },
        "rawRedirectInfo": {
          "$ref": "IndexingConverterRawRedirectInfo",
          "description": "*** DEPRECATED *** This field is only populated in fresh_doc which is shutting down."
        },
        "referencedResource": {
          "description": "Information about all external resources used to render this page, a.k.a. embedded links. This includes .css files, images embedded in a page, external javascripts, iframes etc.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoReferencedResource"
          },
          "type": "array"
        },
        "renderedSnapshot": {
          "$ref": "HtmlrenderWebkitHeadlessProtoImage",
          "description": "Only exist in dry run mode."
        },
        "renderedSnapshotImage": {
          "description": "Snapshot image of a rendered html document (possibly encoded as png, jpeg, or webp).",
          "type": "string"
        },
        "renderedSnapshotMetadata": {
          "$ref": "SnapshotSnapshotMetadata",
          "description": "A collection of values which are needed by the users of the Kodachrome bigtable."
        },
        "renderedSnapshotQualityScore": {
          "description": "The quality of the image, 0.0 is the worst, 1.0 is the best. If all dependencies are successfully crawled, the quality should be 1.0. If one or more of the dependencies are unknown, the quality will be lower.",
          "format": "double",
          "type": "number"
        },
        "renderingOutputMetadata": {
          "$ref": "IndexingEmbeddedContentRenderingOutputMetadata"
        },
        "richcontentData": {
          "$ref": "IndexingConverterRichContentData",
          "description": "The rich content data to recover the original contents from the converted_contents. Useful for offline content analysis."
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentEmbeddedLinksInfo": {
      "id": "IndexingEmbeddedContentEmbeddedLinksInfo",
      "properties": {
        "embedderInfo": {
          "$ref": "IndexingEmbeddedContentEmbedderInfo",
          "description": "This field is optional only because we're adding it late and want to support records written before that. For newly produced records, this field should always be set."
        },
        "link": {
          "items": {
            "$ref": "IndexingEmbeddedContentLinkInfo"
          },
          "type": "array"
        },
        "pageSizeInfo": {
          "$ref": "IndexingEmbeddedContentPageSizeInfo",
          "description": "Page download size."
        },
        "sumHttpResponseLength": {
          "description": "This field is the sum of http_response_length for the embedder and all embedded resources. This is expected to be set only in the docjoins, not in the pinax tables or the exported bigtable.",
          "format": "int32",
          "type": "integer"
        },
        "uncrawledLinkUrl": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentEmbedderInfo": {
      "id": "IndexingEmbeddedContentEmbedderInfo",
      "properties": {
        "importanceAsEmbedder": {
          "format": "int32",
          "type": "integer"
        },
        "linkInfo": {
          "$ref": "IndexingEmbeddedContentLinkInfo"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentFetchHostCount": {
      "description": "Log how many urls finally goes to trawler on a host in rendering.",
      "id": "IndexingEmbeddedContentFetchHostCount",
      "properties": {
        "counter": {
          "items": {
            "$ref": "IndexingEmbeddedContentFetchHostCountCounter"
          },
          "type": "array"
        },
        "host": {
          "type": "string"
        },
        "num": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentFetchHostCountCounter": {
      "id": "IndexingEmbeddedContentFetchHostCountCounter",
      "properties": {
        "name": {
          "type": "string"
        },
        "num": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentFetchUrlResponseMetadata": {
      "description": "Capsulate all metadata annotated from fetch server. This message will typically go through: - EmbeddedContentFetcher, or - EmbeddedLinkGetter-> DenormalizedContent -> ContentStore. And finally deposit in referenced_resources and link_info.",
      "id": "IndexingEmbeddedContentFetchUrlResponseMetadata",
      "properties": {
        "adsResourceType": {
          "enum": [
            "ADS_TYPE_UNKNOWN",
            "ADS_TYPE_NON_ADS",
            "ADS_TYPE_PATTERN",
            "ADS_TYPE_CENTERPIECE_ADS_MATCHER"
          ],
          "enumDescriptions": [
            "",
            "Not ads.",
            "Ads by pattern.",
            "Ads by centerpiece ads matcher."
          ],
          "type": "string"
        },
        "crawlStatus": {
          "description": "The field always exists, and has four options: UNKNOWN, CONTENT, ROBOTED and ERROR, which are defined in indexing.converter.CrawlStatus.",
          "format": "int32",
          "type": "integer"
        },
        "criticalResourceType": {
          "enum": [
            "UNKNOWN",
            "NON_CRITICAL",
            "CONTENT_BASED",
            "GEOMETRY_LAYOUT_BASED",
            "THREE_WAY",
            "MANUAL",
            "TARGET_MAIN_FRAME",
            "ROBOTED"
          ],
          "enumDescriptions": [
            "",
            "Not critical.",
            "Critical in terms of content.",
            "Critical in terms of geometry layout.",
            "Generated by three-way rendering.",
            "Manually marked.",
            "",
            "Roboted critical resources."
          ],
          "type": "string"
        },
        "fetchWithSmartphoneUa": {
          "description": "True if the response is fetched with SMARTPHONE user agent.",
          "type": "boolean"
        },
        "isAdsResource": {
          "type": "boolean"
        },
        "isCriticalResource": {
          "type": "boolean"
        },
        "isTrivialResource": {
          "type": "boolean"
        },
        "numTrawlerFetches": {
          "description": "Number of trawler fetches while fetching this URL. In most cases, this number will be 0 or 1.",
          "format": "int32",
          "type": "integer"
        },
        "rewriteMethod": {
          "description": "Used for logging purposes only here.",
          "type": "string"
        },
        "robotsInfo": {
          "$ref": "IndexingConverterRobotsInfo",
          "description": "Note that this robots_info should only be used for noindex_reason and will only be present for TARGET_MAIN_FRAME / TARGET_SUBFRAME fetches."
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentLinkInfo": {
      "description": "Information about one embedded link. Next tag: 18",
      "id": "IndexingEmbeddedContentLinkInfo",
      "properties": {
        "contentLength": {
          "description": "Size of the HTTP body (payload of the HTTP response, excluding headers), pre-decompression. Equal to the value of the Content-Length header if any. NOTE: if this proto is converted to from ReferencedResource, we have to use the size of the full HTTP response (i.e. http_response_length) as an approximation, as we could not get the size of HTTP headers.",
          "format": "int32",
          "type": "integer"
        },
        "contentType": {
          "format": "int32",
          "type": "integer"
        },
        "crawlDuration": {
          "description": "Time spent downloading this resource, in milliseconds. Not a timestamp!",
          "format": "int32",
          "type": "integer"
        },
        "crawlStatus": {
          "description": "Enum values for crawl_status are defined in indexing/converter/proto/converter.proto",
          "format": "int32",
          "type": "integer"
        },
        "crawlTimestamp": {
          "format": "int32",
          "type": "integer"
        },
        "deprecatedRedirect": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "fetchSourceInfo": {
          "description": "Where this resource comes from.",
          "items": {
            "$ref": "WirelessTranscoderFetchFetchSourceInfo"
          },
          "type": "array"
        },
        "fetchStatus": {
          "$ref": "TrawlerFetchStatus",
          "description": "Fetch status from trawler."
        },
        "fetchUrlResponseMetadata": {
          "$ref": "IndexingEmbeddedContentFetchUrlResponseMetadata",
          "description": "Populated from embedded-content fetch server."
        },
        "frd": {
          "$ref": "TrawlerFetchReplyData",
          "description": "FetchReplyData from trawler."
        },
        "httpResponseLength": {
          "description": "Size of the full HTTP response (headers and body pre-decompression). Semantically equal to content_length plus size of the HTTP headers.",
          "format": "int32",
          "type": "integer"
        },
        "isCacheable": {
          "type": "boolean"
        },
        "isRobotedContentFromFastnet": {
          "type": "boolean"
        },
        "uncompressedContentLength": {
          "description": "Size of the HTTP body (payload of the HTTP response, excluding headers), post-decompression. Equal to content_length if the body was not compressed to begin with. NOTE: if this proto is converted to from ReferencedResource, we have to use the size of the full HTTP response as an approximation, as we could not get the size of HTTP headers.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "format": "byte",
          "type": "string"
        },
        "webkitFetchMetadata": {
          "$ref": "HtmlrenderWebkitHeadlessProtoWebKitFetchMetadata"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentOutputGenerationTimestamps": {
      "description": "For each of the output fields generated by the embedded content system, the Unix timestamp of when it was most recently generated. Used for controlling the frequency of generation (and thus exporting) of the fields which are expensive to generate and/or the consumers of which are not able to handle the high load of daily/hourly updates. If a timestamp corresponding to an output field is missing, it means the last attempt to generate this field failed (which could be mean that the document was not important enough for this field to be generated, or that we hit a bug in WebKit). In case we choose not to regenerate the field (because the latest generation timestamp is too fresh) the corresponding timestamp doesn't change. Next tag available: 8",
      "id": "IndexingEmbeddedContentOutputGenerationTimestamps",
      "properties": {
        "documentData": {
          "format": "int32",
          "type": "integer"
        },
        "renderedSnapshot": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentPageSizeInfo": {
      "description": "Page download size information.",
      "id": "IndexingEmbeddedContentPageSizeInfo",
      "properties": {
        "numImages": {
          "description": "Images are also resources. num_images <= num_resources.",
          "format": "int32",
          "type": "integer"
        },
        "numImagesWithContent": {
          "description": "Number of images whose crawl status is CONTENT.",
          "format": "int32",
          "type": "integer"
        },
        "numResources": {
          "description": "Numbers below don't include embedder.",
          "format": "int32",
          "type": "integer"
        },
        "numResourcesWithContent": {
          "description": "Number of resources whose crawl status is CONTENT.",
          "format": "int32",
          "type": "integer"
        },
        "sumHttpResponseLength": {
          "description": "Sum of embedder and all referenced resources.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentRenderCacheStats": {
      "description": "Fields used to track cache use in the rendering microservice. Next tag available: 6",
      "id": "IndexingEmbeddedContentRenderCacheStats",
      "properties": {
        "cacheExpireTimestampUsec": {
          "description": "When the rendered content would expire from the cache in microseconds.",
          "format": "int64",
          "type": "string"
        },
        "crawledSimhashDistance": {
          "format": "int32",
          "type": "integer"
        },
        "lastRenderedTimestampUsec": {
          "description": "The last time the document was rendered, in microseconds. Does not update in case of cache use.",
          "format": "int64",
          "type": "string"
        },
        "renderCache": {
          "enum": [
            "UNKNOWN_CACHE",
            "CACHE_MISS",
            "CACHE_SKIPPED",
            "ARECA_CACHE",
            "CRAWLED_SIMHASH_CACHE"
          ],
          "enumDescriptions": [
            "",
            "We didn't find this document in any cache.",
            "We found this document in the cache and decided not to use the cached version.",
            "",
            ""
          ],
          "type": "string"
        },
        "renderedSimhashDistance": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentRenderRequestConfigConfigParams": {
      "id": "IndexingEmbeddedContentRenderRequestConfigConfigParams",
      "properties": {
        "virtualTime": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentRenderingFetchStats": {
      "description": "Fetch stats during rendering.",
      "id": "IndexingEmbeddedContentRenderingFetchStats",
      "properties": {
        "fetchHostCount": {
          "description": "A host->count mapping to log how many embedded_links in each host finally goes to trawler during rendering.",
          "items": {
            "$ref": "IndexingEmbeddedContentFetchHostCount"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentRenderingOutputMetadata": {
      "description": "Small values from rendering output. It's stored as a column in alexandria document table. Next tag available: 30",
      "id": "IndexingEmbeddedContentRenderingOutputMetadata",
      "properties": {
        "configParams": {
          "$ref": "IndexingEmbeddedContentRenderRequestConfigConfigParams"
        },
        "exceptions": {
          "description": "The exceptions observed during the rendering. In bit-field encoding of enum values of RenderResponse.RenderingException.",
          "format": "int64",
          "type": "string"
        },
        "experimentalRenderTimeMsec": {
          "description": "Total GCU time for rendering the document in millisecond. This data is from render_stats.render_cost_mgcu in RenderResponse proto. Note that this is *experimental* field. Please check with rendering-infra@ if you want to use.",
          "format": "int32",
          "type": "integer"
        },
        "generationTimestamps": {
          "$ref": "IndexingEmbeddedContentOutputGenerationTimestamps"
        },
        "importance": {
          "description": "The importance value of the rendered document.",
          "format": "int32",
          "type": "integer"
        },
        "lastNewContentProbingTimestamp": {
          "description": "The timestamp of last new content probing.",
          "format": "int32",
          "type": "integer"
        },
        "newTokensPercentageAfterRendering": {
          "description": "Percentage of new tokens in the rendered the document content.",
          "format": "double",
          "type": "number"
        },
        "numNewTokensFoundInRendering": {
          "format": "int32",
          "type": "integer"
        },
        "refresh": {
          "type": "boolean"
        },
        "renderCacheStats": {
          "$ref": "IndexingEmbeddedContentRenderCacheStats",
          "description": "A collection of fields to track stats on cache use in the Rendering microservice."
        },
        "renderEngine": {
          "enum": [
            "UNKNOWN",
            "BLINK_HEADLESS",
            "CHROME_HEADLESS"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "renderEvent": {
          "description": "Different types of events which happened during rendering.",
          "items": {
            "$ref": "HtmlrenderWebkitHeadlessProtoRenderEvent"
          },
          "type": "array"
        },
        "renderServerCl": {
          "description": "The CL from which the render engine was built.",
          "format": "int64",
          "type": "string"
        },
        "renderTreeQualityScore": {
          "format": "double",
          "type": "number"
        },
        "renderedSnapshotSignature": {
          "description": "Short signature (usually less than 1 KB) which captures a perceptual hash on the rendered image. This is used to determine whether successive renderings should be output. See the library in googlen/snapshot/shared/similarity.* for more info about how this value is interpreted and used.",
          "format": "byte",
          "type": "string"
        },
        "renderedTimeUsec": {
          "description": "Current time in microseconds the document is going through rendering system. This field is set regardless of whether the document is being rendered or if we are skipping rendering by using a cache.",
          "format": "int64",
          "type": "string"
        },
        "renderingFetchStats": {
          "$ref": "IndexingEmbeddedContentRenderingFetchStats"
        },
        "selectionResult": {
          "$ref": "IndexingEmbeddedContentSelectionResult",
          "description": "The corpus selection result. Can be used for offline analysis."
        },
        "snapshotQualityScore": {
          "description": "These scores are copied from htmlrender_webkit_headless_proto.Document.",
          "format": "double",
          "type": "number"
        },
        "withMissingResources": {
          "description": "True if there were any missing resources during the rendering.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "IndexingEmbeddedContentSelectionResult": {
      "description": "Output that indicates a url should be in our corpus.",
      "id": "IndexingEmbeddedContentSelectionResult",
      "properties": {
        "renderEffort": {
          "enum": [
            "RENDER_NONE",
            "RENDER_SKIP",
            "RENDER_TRIVIAL",
            "RENDER_LIGHT",
            "RENDER_CONTROL",
            "RENDER_FULL",
            "RENDER_FORCE",
            "RENDER_REJECT"
          ],
          "enumDescriptions": [
            "The enum value is also used as decision priority, so we assign sparse values here for possible future effort.",
            "Skip rendering by keeping the old data. DEPRECATED",
            "Render with minimum resources, i.e., turn on readonly fetch, turn off js and turn off snapshot.",
            "Light weight rendering does not generate snapshot.",
            "Light weight rendering but we will try our best during rendering and fetching.",
            "Render with standard features: fetching all embedded links, turn on javascript, generate snapshot.",
            "Always render. DEPRECATED",
            "The url can not be rendered, i.e. pdf."
          ],
          "type": "string"
        },
        "selectorId": {
          "description": "Indicate which selector has made the decision.",
          "enum": [
            "NO_SELECTOR",
            "INELIGIBLE",
            "NO_INDEX",
            "IMPORTANCE",
            "HOME_PAGE",
            "LIGHT_WEIGHT",
            "SMARTPHONE",
            "VIDEO_SIGNAL",
            "VIDEO_CLASSIFER",
            "PINPOINT_SIGNAL",
            "CENTER_PIECE_SIGNAL",
            "INDEXABLE_FRAGMENT",
            "ESCAPED_FRAGMENT",
            "FRAGMENT_REDIRECT",
            "META_REFRESH_REDIRECT",
            "FORCE",
            "FORCE_BY_TIMESTAMP",
            "INTEREST",
            "IMPORTANCE_PROTECTED",
            "NOT_SUPPORTED_CRAWLER_ID",
            "BLACK_LIST",
            "NEWS_ONLY",
            "SAMPLER",
            "CONTENT_REPLACEMENT_WHITELIST",
            "SMART",
            "SMART_RANDOM",
            "SMARTPHONE_SMART",
            "SMARTPHONE_REJECT",
            "SMART_GROUND_TRUTH",
            "APP",
            "CONTROL_GROUP",
            "NAVBOOST_COUNT",
            "DEFAULT_LIGHT",
            "NEWS"
          ],
          "enumDescriptions": [
            "",
            "REJECT",
            "REJECT",
            "LIGHT SKIP",
            "LIGHT",
            "LIGHT DEPRECATED",
            "LIGHT REJECT DEPRECATED",
            "LIGHT SKIP",
            "LIGHT SKIP",
            "LIGHT",
            "LIGHT",
            "LIGHT",
            "LIGHT",
            "LIGHT",
            "LIGHT",
            "FORCE_FULL DEPRECATED",
            "FORCE_FULL DEPRECATED",
            "FULL (dry run)",
            "LIGHT DEPRECATED",
            "REJECT",
            "REJECT",
            "REJECT - added for Freshdocs",
            "REJECT - added for Freshdocs",
            "LIGHT (for temporary experiment) DEPRECATED",
            "LIGHT TRIVIAL",
            "LIGHT",
            "LIGHT TRIVIAL DEPRECATED",
            "REJECT",
            "LIGHT",
            "LIGHT",
            "CONTROL",
            "LIGHT",
            "LIGHT",
            "FULL"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingMlVerticalVerticalItem": {
      "id": "IndexingMlVerticalVerticalItem",
      "properties": {
        "id": {
          "description": "Unique ID.",
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "description": "The description name.",
          "type": "string"
        },
        "petacatId": {
          "description": "The corresponding Petacat ID.",
          "format": "int32",
          "type": "integer"
        },
        "probability": {
          "description": "The probability of the vertical, whose value is in [0.0, 1.0].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingMobileInterstitialsProtoDesktopInterstitials": {
      "description": "Desktop interstitials signal. The message contains both fields for site-level signal lookup in Index Signals (go/index-signals) and fields for final attachment in DocJoin.",
      "id": "IndexingMobileInterstitialsProtoDesktopInterstitials",
      "properties": {
        "details": {
          "items": {
            "$ref": "IndexingMobileInterstitialsProtoDesktopInterstitialsDetails"
          },
          "type": "array"
        },
        "pipelineEpoch": {
          "description": "Epoch of the interstitial offline pipeline generating this signal.",
          "type": "string"
        },
        "pipelinePattern": {
          "description": "If present, pipeline_pattern identifies the cluster of URLs for which the signal value was smeared.",
          "type": "string"
        },
        "urlTree": {
          "$ref": "IndexingUrlPatternUrlTreeUrlTree",
          "description": "URL tree of interstitial patterns belong to the host, to be used as site-level signal in Index Signals. A pattern may contain a payload InterstitialPatternPayload, which will indicate the violated interstitial types of this pattern."
        },
        "violatesDesktopInterstitialPolicy": {
          "description": "Overall policy violation status. If this is true, at least one of the InterstitialSignal below indicates a violation.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "IndexingMobileInterstitialsProtoDesktopInterstitialsDetails": {
      "description": "An optional message that may contain details of the signals computation.",
      "id": "IndexingMobileInterstitialsProtoDesktopInterstitialsDetails",
      "properties": {
        "basicInfo": {
          "$ref": "IndexingMobileInterstitialsProtoInterstitialBasicInfo"
        },
        "isSmearedSignal": {
          "description": "Indicates whether the signal value is \"smeared\", e.g. extrapolated from other URLs.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "IndexingMobileInterstitialsProtoInterstitialBasicInfo": {
      "description": "Basic interstitial info, shared by all layout types. This message can be used to quickly iterate through detected interstitials, if layout type specific details are not required. Note: this message stores info for one primary interstitial as detected by a particular layout codepath. Some codepaths, e.g. overlay interstitial detection, may find multiple interstitial candidates; such details can be found in codepath-specific messages below.",
      "id": "IndexingMobileInterstitialsProtoInterstitialBasicInfo",
      "properties": {
        "absoluteBox": {
          "$ref": "HtmlrenderWebkitHeadlessProtoBox",
          "description": "Stores the geometry of detected interstitial in absolute page pixels."
        },
        "contentType": {
          "enum": [
            "UNSPECIFIED",
            "GENERIC",
            "APP_INSTALL_PROMO",
            "COOKIE",
            "ADULT_CONTENT",
            "LOGIN",
            "HEALTH_CARE_PROFESSIONAL",
            "WHITELISTED",
            "ADS",
            "SUBSCRIPTION"
          ],
          "enumDescriptions": [
            "",
            "Interstitial content analysis was run, but failed to determine a particular content type.",
            "Interstitial content appears to promote a mobile app install.",
            "Interstitial content appears to be in response to legal obligation to warn users about usage of cookies on the web page.",
            "Interstitial content appears to be in response to legal obligation to warn users about adult content on the web page.",
            "Interstitial content appears to be asking users to login. Also the page seems to have private content that is not publicly viewable.",
            "Interstitial content appears to be asking users whether they are health care professionals.",
            "A special type indicating whitelisted content that never violates interstitial policy.",
            "Interstitial content appears to be ads.",
            "Interstitial content appears to be asking users to subscribe to newsletter."
          ],
          "type": "string"
        },
        "detectionMode": {
          "enum": [
            "NORMAL",
            "DELAYED",
            "AFTER_SCROLL"
          ],
          "enumDescriptions": [
            "Normal rendering. Default value. For this detection uses the default value of the rendering completion delay FLAGS_webkit_completion_virtual_delay (currently 5 seconds) to detect the overlay interstitials, i.e. the page is analyzed as it appears at 5 seconds after rendering start time.",
            "Delayed rendering. For this detection mode, the web page is allowed to run for an extended duration, and then analysed. This detects a common type of overlay interstitials that appear after a longer timeout.",
            "After scroll rendering. For this detection mode, the web page is allowed to run for an initial duration, then a user scroll action is emulated, before analysing the page contents. This detects a common type of overlay interstitials that appear after a user scroll action."
          ],
          "type": "string"
        },
        "layoutType": {
          "enum": [
            "INTERSTITIAL_LAYOUT_TYPE_UNSPECIFIED",
            "OVERLAY",
            "SCROLLABLE",
            "STANDALONE",
            "DENSITY"
          ],
          "enumDescriptions": [
            "",
            "Overlay layout type includes interstitials implemented as popups, typically using CSS z-index to hover above main content and occlude it.",
            "Scrollable layout type includes large inline interstitials that are typically inserted before the main content starts, and require the user to scroll past them.",
            "Standalone layout type includes interstitials that appear as a separate page, and typically redirect the browser to main content after a delay or a user action.",
            "Could be any type of layout. Usually it means it's an interstitial not for its layout but for its content."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingMobileVoltCoreWebVitals": {
      "description": "Core Web Vitals (https://web.dev/vitals/) carried in VoltSignal: the field data metrics extracted from UKM aggregated 75-percentile data.",
      "id": "IndexingMobileVoltCoreWebVitals",
      "properties": {
        "cls": {
          "description": "Cumulative Layout Shift.",
          "format": "int64",
          "type": "string"
        },
        "fid": {
          "description": "First Input Delay.",
          "format": "int64",
          "type": "string"
        },
        "inp": {
          "format": "int64",
          "type": "string"
        },
        "lcp": {
          "description": "Largest Contentful Paint.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingMobileVoltVoltPerDocData": {
      "description": "The protocol buffer stored in the legacyperdocdata muppet attachment for VOLT (go/volt). The data is used for ranking changes. Only CWV signals and secure signal are stored. MobileFriendliness is stored separately in the legacyperdocdata. Safe browsing and BAS/AER conditions are not used for ranking.",
      "id": "IndexingMobileVoltVoltPerDocData",
      "properties": {
        "desktopCwv": {
          "$ref": "IndexingMobileVoltCoreWebVitals",
          "description": "Desktop Core Wev Vital metrics. NOTE(yunchengz): This field will not be populated in Muppet."
        },
        "desktopDisplayUrlIsHttps": {
          "type": "boolean"
        },
        "displayUrlIsHttps": {
          "type": "boolean"
        },
        "mobileCwv": {
          "$ref": "IndexingMobileVoltCoreWebVitals",
          "description": "Mobile Core Web Vital metrics. NOTE(yunchengz): This field will not be populated in Muppet."
        }
      },
      "type": "object"
    },
    "IndexingPrivacyAccessAccessRequirements": {
      "id": "IndexingPrivacyAccessAccessRequirements",
      "properties": {
        "restrictionCategories": {
          "items": {
            "enum": [
              "UNSPECIFIED",
              "CHILD_SAFETY_CONTENT"
            ],
            "enumDescriptions": [
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorAdaptiveIntervalData": {
      "description": "State data for AdaptiveFrequencyEstimator",
      "id": "IndexingSignalAggregatorAdaptiveIntervalData",
      "properties": {
        "clicksGoodInterval": {
          "format": "double",
          "type": "number"
        },
        "clicksGoodPriorWeight": {
          "format": "double",
          "type": "number"
        },
        "clicksTotalInterval": {
          "format": "double",
          "type": "number"
        },
        "clicksTotalPriorWeight": {
          "format": "double",
          "type": "number"
        },
        "ctrwiInterval": {
          "format": "double",
          "type": "number"
        },
        "ctrwiPriorWeight": {
          "format": "double",
          "type": "number"
        },
        "dwellsInterval": {
          "format": "double",
          "type": "number"
        },
        "dwellsPriorWeight": {
          "format": "double",
          "type": "number"
        },
        "luDwellsInterval": {
          "format": "double",
          "type": "number"
        },
        "luDwellsPriorWeight": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorAgeWeightedCoverageData": {
      "description": "Accumulated coverage data for an url using a constant half-life time. Next tag: 28",
      "id": "IndexingSignalAggregatorAgeWeightedCoverageData",
      "properties": {
        "averageChanceTime": {
          "description": "Weighted averged timestamps of the decayed chances.",
          "format": "double",
          "type": "number"
        },
        "chances": {
          "description": "Numbers below are all total in the decayed manner. To get rate of impression/clicks, divide by chances.",
          "format": "double",
          "type": "number"
        },
        "clicksBad": {
          "format": "double",
          "type": "number"
        },
        "clicksGood": {
          "format": "double",
          "type": "number"
        },
        "clicksImage": {
          "format": "double",
          "type": "number"
        },
        "clicksTotal": {
          "format": "double",
          "type": "number"
        },
        "clicksUnclassified": {
          "format": "double",
          "type": "number"
        },
        "coverageTimestamp": {
          "description": "Epoch seconds at which this weighted coverage data was calculated.",
          "format": "int64",
          "type": "string"
        },
        "ctrWeightedImpressions": {
          "format": "double",
          "type": "number"
        },
        "dwells": {
          "description": "Dwells from KnowledgePanel and WebAnswers.",
          "format": "double",
          "type": "number"
        },
        "firstBaseCoverageTimestamp": {
          "description": "Epoch seconds at which this url first gets coverage in BASE.",
          "format": "int64",
          "type": "string"
        },
        "firstCoveragePagerankNs": {
          "description": "The pagerank when the url was serving for the first time.",
          "format": "int32",
          "type": "integer"
        },
        "firstCoverageTimestamp": {
          "description": "Epoch seconds at which this url first gets coverage data.",
          "format": "int64",
          "type": "string"
        },
        "firstseen": {
          "format": "int64",
          "type": "string"
        },
        "impressions": {
          "format": "double",
          "type": "number"
        },
        "intervalData": {
          "$ref": "IndexingSignalAggregatorAdaptiveIntervalData",
          "description": "Interval Data to track the average time between clicks_total, clicks_good, and ctr_weighted_impression."
        },
        "language": {
          "format": "int32",
          "type": "integer"
        },
        "lastDwellDateInDays": {
          "description": "Indicates the date when this document received the last KnowledgePanel or WebAnswer dwell. Note: The date is identified in terms of number of days since Epoch.",
          "format": "int32",
          "type": "integer"
        },
        "lastGoodClickDateInDays": {
          "description": "Indicates the date when this document received the last good click. Note: The date is identified in terms of number of days since Epoch.",
          "format": "int32",
          "type": "integer"
        },
        "lastImpressionDateInDays": {
          "description": "Indicates the date when this document received the last impression. Note: The date is identified in terms of number of days since Epoch.",
          "format": "int32",
          "type": "integer"
        },
        "lastLuDwellDateInDays": {
          "description": "Indicates the date when this document received the last LocalUniversal dwell. Note: The date is identified in terms of number of days since Epoch.",
          "format": "int32",
          "type": "integer"
        },
        "lastPseudoImpressionsDateInDays": {
          "description": "Indicates the date when this document received the last pseudo-impression. I.e., when it was retrieved as a result but GWS would not show it because of the document's age in the index. Note: The date is identified in terms of number of days since Epoch.",
          "format": "int32",
          "type": "integer"
        },
        "luDwells": {
          "description": "Dwells from LocalUniversal.",
          "format": "double",
          "type": "number"
        },
        "repid": {
          "description": "Repid in Alexandria pipeline.",
          "format": "byte",
          "type": "string"
        },
        "totalChances": {
          "description": "Total number of chances on this urls (not decayed).",
          "format": "int64",
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "urlfp": {
          "description": "Temporary variable, only used during mapreduce.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorAggregatedScore": {
      "description": "Aggregated signal used by NumericSignalAggregator. Next field id: 25",
      "id": "IndexingSignalAggregatorAggregatedScore",
      "properties": {
        "deviation": {
          "description": "A number reflecting the deviation of Url scores.",
          "format": "double",
          "type": "number"
        },
        "m2": {
          "description": "State variables for West & Chan variance algorithm used to be stored here directly. Now they are stored inside RunningMeanAndVarianceInternalState.",
          "format": "double",
          "type": "number"
        },
        "maxScoreUrl": {
          "$ref": "IndexingSignalAggregatorUrlScore",
          "description": "Input UrlScore with max score."
        },
        "mean": {
          "format": "double",
          "type": "number"
        },
        "meanScore": {
          "description": "Overall stats that are only available in final aggregation results. The aggregated score.",
          "format": "double",
          "type": "number"
        },
        "minScoreUrl": {
          "$ref": "IndexingSignalAggregatorUrlScore",
          "description": "Input UrlScore with min score."
        },
        "numImportantUrls": {
          "format": "int64",
          "type": "string"
        },
        "numUrlsMatched": {
          "description": "Final Stats that are also available in intermediate output. Number of Urls matching the class.",
          "format": "int64",
          "type": "string"
        },
        "numUrlsWithSignal": {
          "description": "Not every matching url has a signal.",
          "format": "int64",
          "type": "string"
        },
        "patternLayer": {
          "description": "Experimental layer of the corresponding pattern.",
          "enum": [
            "PRODUCTION",
            "EXPERIMENTAL_LAYER_A",
            "EXPERIMENTAL_LAYER_B",
            "NEXT_LAYER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Reserved for the next layer."
          ],
          "type": "string"
        },
        "patternsUsedInMediation": {
          "description": "Optionally populated in mediators. A list of patterns that actually contributed to the final mediated signal.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "percentile": {
          "description": "Score percentile of matching urls. If present, it has N entries for buckets of roughly equal number of urls. N is specified the aggregation. The value is the min score in that bucket.",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "runningMeanAndVarianceInternalState": {
          "$ref": "IndexingSignalAggregatorRunningMeanAndVarianceInternalState"
        },
        "samples": {
          "description": "Random samples.",
          "items": {
            "$ref": "IndexingSignalAggregatorUrlScore"
          },
          "type": "array"
        },
        "scores": {
          "description": "for calculating percentile",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "signalId": {
          "description": "For debugging purposes, this is an id of the signal associated with this AggregatedScore. For pattern score, this may be the length of the pattern.",
          "format": "int32",
          "type": "integer"
        },
        "singleUrlScore": {
          "$ref": "IndexingSignalAggregatorUrlScore",
          "description": "If this field presents, it is for a single url. No other field should appear."
        },
        "totalScore": {
          "description": "summation varaible used to get mean",
          "format": "double",
          "type": "number"
        },
        "totalScoreLow": {
          "description": "low-order part of total_score",
          "format": "double",
          "type": "number"
        },
        "totalScoreSqr": {
          "description": "summation variable for calculating deviation note, these are now only used for legacy and debugging purposes",
          "format": "double",
          "type": "number"
        },
        "totalScoreSqrLow": {
          "description": "low order part of total_score_sq",
          "format": "double",
          "type": "number"
        },
        "totalWeight": {
          "description": "for calculating weighted mean/dev",
          "format": "double",
          "type": "number"
        },
        "totalWeightLow": {
          "description": "low order part of total_weight",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorRunningMeanAndVarianceInternalState": {
      "description": "Internal state of the West & Chan running variance algorithm. Fields of this proto should not be accessed directly; instead, please use RunningMeanAndVarianceUtil. The fields of this message only have meaning in the context of the West & Chan algorithm, which is documented (or Wikipedia-linked) in the doc comments of RunningMeanAndVarianceUtil. We do however give some explanation of the meanings of these fields in the context of the algorithm (i.e. if you have the Wikipedia page open and are ready to do some math). Also see the file doc of RunningMeanAndVarianceUtil for a specification and more info about the algorithm. Notation: The data set is X = {(x_1, w_1), ..., (x_n, w_n)}. It consists of n weighted data points. The ith data point has value x_i and weight w_i. REQUIRES: x_i is finite for each i. w_i is finite for each i. w_i >= 0 for each i.",
      "id": "IndexingSignalAggregatorRunningMeanAndVarianceInternalState",
      "properties": {
        "m2": {
          "description": "The variable which in the Wikipedia page is referred to as M_2: m2 = w_1 * (x_1 - mean)^2 + ... + w_n * (x_n - mean)^2. The algorithm implemented in RunningMeanAndVarianceUtil provides a way to update m2 in a numerically stable way when the data set grows. If total_weight = 0, then m2 is meaningless, and its value is unspecified, except that it must be finite and >= 0.",
          "format": "double",
          "type": "number"
        },
        "mean": {
          "description": "Mean of the data set, mean = (w_1 * x_1 + ... + w_n * x_n) / total_weight. The algorithm implemented in RunningMeanAndVarianceUtil provides a way to update this mean in a numerically stable way when the data set grows. If total_weight = 0, then mean is meaningless, and its value is unspecified, except that it must be finite.",
          "format": "double",
          "type": "number"
        },
        "totalWeight": {
          "description": "Total weight of the data set, total_weight = w_1 + ... + w_n.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorSccData": {
      "id": "IndexingSignalAggregatorSccData",
      "properties": {
        "parentPattern": {
          "$ref": "IndexingSignalAggregatorSccSignal"
        },
        "pattern": {
          "$ref": "IndexingSignalAggregatorSccSignal",
          "description": "The most immediate pattern data."
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorSccSignal": {
      "id": "IndexingSignalAggregatorSccSignal",
      "properties": {
        "clicksBad": {
          "format": "double",
          "type": "number"
        },
        "clicksImage": {
          "format": "double",
          "type": "number"
        },
        "clicksTotal": {
          "format": "double",
          "type": "number"
        },
        "debugInfo": {
          "description": "For debugging purpose only.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "numImageUrls": {
          "description": "This represents the number of urls with image clicks. A url can have both image and non-image clicks, in which case we set num_image_urls to be the ratio of image_clicks vs total clicks. For example, if a url has 10 total clicks and 7 image clicks, num_image_urls will be set to 0.7.",
          "format": "double",
          "type": "number"
        },
        "numUrls": {
          "format": "int64",
          "type": "string"
        },
        "pattern": {
          "description": "For debugging purpose only.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorUrlPatternSignals": {
      "description": "Contains only the signals necessary to perform per-URL click prediction. Used by Index Selection for scoring. NEXT ID TO USE: 7",
      "id": "IndexingSignalAggregatorUrlPatternSignals",
      "properties": {
        "coverage": {
          "$ref": "IndexingSignalAggregatorAgeWeightedCoverageData"
        },
        "pagerankScore": {
          "$ref": "IndexingSignalAggregatorAggregatedScore"
        },
        "patternScore": {
          "$ref": "IndexingSignalAggregatorAggregatedScore"
        },
        "priorSignal": {
          "items": {
            "$ref": "IndexingSignalAggregatorUrlPatternSignalsPriorSignal"
          },
          "type": "array"
        },
        "regexpPatternScore": {
          "$ref": "IndexingSignalAggregatorAggregatedScore"
        },
        "sccData": {
          "$ref": "IndexingSignalAggregatorSccData"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorUrlPatternSignalsPriorSignal": {
      "description": "This message provides a container for any signal used in scoring, and allows UrlPatternSignals to extend beyond (regexp_)pattern_score and pagerank_score.",
      "id": "IndexingSignalAggregatorUrlPatternSignalsPriorSignal",
      "properties": {
        "aggregatedScore": {
          "$ref": "IndexingSignalAggregatorAggregatedScore"
        },
        "priorSignalId": {
          "enum": [
            "PRIOR_SIGNAL_PAGERANK",
            "PRIOR_SIGNAL_PATTERN",
            "PRIOR_SIGNAL_REGEXP_PATTERN",
            "PRIOR_SIGNAL_CLICKRANK",
            "PRIOR_SIGNAL_LENGTH",
            "PRIOR_SIGNAL_SIBYL",
            "PRIOR_SIGNAL_TENSORFLOW"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingSignalAggregatorUrlScore": {
      "description": "Representation of numeric signal of a url.",
      "id": "IndexingSignalAggregatorUrlScore",
      "properties": {
        "dsacNumWeeklyPerfRecords": {
          "description": "The number of weekly performance records if the UrlScore is extracted from the DSAC data. It should be used in case a URL is no longer served. As of 2014-10-14, this field is for the evaluation purpose only.",
          "format": "int32",
          "type": "integer"
        },
        "eligibleExperimentalLayer": {
          "description": "If this field is set, it indicates the url is eligible to be aggregated to one of the experimental layers.",
          "enum": [
            "PRODUCTION",
            "EXPERIMENTAL_LAYER_A",
            "EXPERIMENTAL_LAYER_B",
            "NEXT_LAYER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Reserved for the next layer."
          ],
          "type": "string"
        },
        "firstServedTimestamp": {
          "description": "The timestamp of the first time this document is served anywhere.",
          "format": "int64",
          "type": "string"
        },
        "isImportant": {
          "description": "Whether this url has important signal. Used for keeping patterns that match too few URLs but some of them have good clicks.",
          "type": "boolean"
        },
        "score": {
          "description": "score might be missing if the url does not have signal.",
          "format": "double",
          "type": "number"
        },
        "url": {
          "description": "url might be missing if we can get it from sstable key.",
          "type": "string"
        },
        "weight": {
          "description": "weight for this url.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingSpeechSpeechPropertiesProto": {
      "description": "The information about spoken content that's based on purely the media resource contents (and not the embedding page or context, etc).",
      "id": "IndexingSpeechSpeechPropertiesProto",
      "properties": {
        "audioDuration": {
          "description": "Duration of audio in processed fragment (including non-speech), in seconds.",
          "format": "int32",
          "type": "integer"
        },
        "audioOnly": {
          "description": "If true, the media file is audio-only. If false, also has video track(s).",
          "type": "boolean"
        },
        "estimatedAudioDuration": {
          "description": "Estimated duration of audio in the whole file (including non-speech), in seconds. If this is greater than 0, then it will either be equal to audio_duration (when truncated_file is false), or to the length of the content (audio or video) according to the file header (when truncated_file is true).",
          "format": "int32",
          "type": "integer"
        },
        "estimatedAudioDurationConfidence": {
          "description": "Our confidence in the duration estimate, on a scale from 0 (not confident) to 1 (very confident). An estimate should have a confidence of at least 0.5 if it is to be shown to users.",
          "format": "float",
          "type": "number"
        },
        "languageCode": {
          "description": "The spoken language, see i18n/identifiers/languagecode.h and go/gl2014. This may or may not match the language of the written page. (Examples: \"en\", \"sv\", \"zh-CN\").",
          "type": "string"
        },
        "numWords": {
          "description": "Total number of recognized words in processed fragment.",
          "format": "int32",
          "type": "integer"
        },
        "recognizerAccuracy": {
          "description": "Measure of the estimated output accuracy from the speech recognition code, from 0 to 1. Based on word-level confidence and possibly other factors.",
          "format": "float",
          "type": "number"
        },
        "speechDuration": {
          "description": "Duration of speech in processed fragment, in seconds.",
          "format": "int32",
          "type": "integer"
        },
        "truncatedFile": {
          "description": "If true, we may have processed a truncated file (most likely due to a size-cutoff when crawling). As a result, the audio duration is a lower bound and the other fields reflect only the processed prefix of the file.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeBigTreeBranch": {
      "description": "Representing a dominating branch of the URL tree.",
      "id": "IndexingUrlPatternUrlTreeBigTreeBranch",
      "properties": {
        "features": {
          "$ref": "IndexingUrlPatternUrlTreeUrlFeatures"
        },
        "patternId": {
          "description": "The fingerprint of the features string.",
          "format": "uint64",
          "type": "string"
        },
        "payload": {
          "$ref": "Proto2BridgeMessageSet"
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeUrlFeature": {
      "id": "IndexingUrlPatternUrlTreeUrlFeature",
      "properties": {
        "fingerprint": {
          "format": "uint64",
          "type": "string"
        },
        "fingerprintWithGroupInType": {
          "description": "If consider position when calculating fingerprint of url feature.",
          "type": "boolean"
        },
        "groupInType": {
          "description": "Used together w/ type field to group features, for finding features with too many possible values.",
          "type": "string"
        },
        "type": {
          "enum": [
            "HOST_SEGMENT",
            "PATH_SEGMENT",
            "DOCUMENT_NAME_SEGMENT",
            "QUERY_NAME",
            "QUERY_VALUE",
            "HOST_SEGMENT_COUNT",
            "PATH_SEGMENT_COUNT",
            "QUERY_COUNT",
            "GMAIL_SUBJECT",
            "GMAIL_BODY_TEXT",
            "GMAIL_BODY_TREE",
            "PROTOCOL",
            "PACKAGE_ID",
            "SCHEME",
            "AUTHORITY",
            "APP_URI_PATH_SEGMENT",
            "APP_URI_PATH_SEGMENT_COUNT",
            "APP_URI_DOCUMENT_NAME_SEGMENT",
            "APP_URI_QUERY_NAME",
            "APP_URI_QUERY_VALUE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "app uri: :////",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeUrlFeatures": {
      "id": "IndexingUrlPatternUrlTreeUrlFeatures",
      "properties": {
        "feature": {
          "items": {
            "$ref": "IndexingUrlPatternUrlTreeUrlFeature"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeUrlTree": {
      "id": "IndexingUrlPatternUrlTreeUrlTree",
      "properties": {
        "bigBranch": {
          "description": "Keeping information for dominating branches separately, to prevent docs on smaller branches from being dropping during sampling.",
          "items": {
            "$ref": "IndexingUrlPatternUrlTreeBigTreeBranch"
          },
          "type": "array"
        },
        "debugInfo": {
          "$ref": "IndexingUrlPatternUrlTreeUrlTreeDebugInfo"
        },
        "key": {
          "$ref": "IndexingUrlPatternUrlTreeUrlTreeKey"
        },
        "node": {
          "description": "node(0) is root.",
          "items": {
            "$ref": "IndexingUrlPatternUrlTreeUrlTreeNode"
          },
          "type": "array"
        },
        "retrievalTimestamp": {
          "description": "Used in url pattern matcher for cache invalidation.",
          "format": "uint32",
          "type": "integer"
        },
        "site": {
          "description": "The key for this UrlTree, also will be the key in sstable. The old format is site, while the new format will be UrlTreeKey. Only one field can be set in the same time for site and key.",
          "type": "string"
        },
        "timestamp": {
          "description": "The time when this UrlTree is built, encoded as seconds past the epoch (Jan 1, 1970).",
          "format": "int32",
          "type": "integer"
        },
        "treeInfo": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Any additional information."
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeUrlTreeDebugInfo": {
      "id": "IndexingUrlPatternUrlTreeUrlTreeDebugInfo",
      "properties": {
        "innerSimilarity": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeUrlTreeKey": {
      "description": "A UID of URL Tree. There is a hash function and a equality function for UrlTreeKey in //indexing/url_pattern/url_tree/util/url-tree-key-util.h. When adding or deprecating a field in this proto, please also update the hash function and the equality function. LINT.IfChange",
      "id": "IndexingUrlPatternUrlTreeUrlTreeKey",
      "properties": {
        "crawlerId": {
          "enum": [
            "UNKNOWN",
            "DESKTOP",
            "SMARTPHONE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "hostname": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "IndexingUrlPatternUrlTreeUrlTreeNode": {
      "id": "IndexingUrlPatternUrlTreeUrlTreeNode",
      "properties": {
        "indexOfSubTreeWithSplittingFeature": {
          "format": "int32",
          "type": "integer"
        },
        "indexOfSubTreeWithoutSplittingFeature": {
          "format": "int32",
          "type": "integer"
        },
        "parent": {
          "format": "int32",
          "type": "integer"
        },
        "pathFromRoot": {
          "description": "The path from root to current node. This is only used for debugging.",
          "type": "string"
        },
        "patternId": {
          "description": "This is only used in leaf nodes which represents a url pattern. It is the fingerprint of the splitting url features from root to the leaf.",
          "format": "uint64",
          "type": "string"
        },
        "payload": {
          "$ref": "Proto2BridgeMessageSet"
        },
        "splittingFeature": {
          "$ref": "IndexingUrlPatternUrlTreeUrlFeature"
        },
        "splittingFeatureScore": {
          "description": "The information gain of content features when selecting this splitting feature to split the node.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "IndexingVideosAsrTranscriptRepairAnnotation": {
      "description": "This proto captures the output of analyses that ran on Automatic Speech Recogntion produced by the recognizer.",
      "id": "IndexingVideosAsrTranscriptRepairAnnotation",
      "properties": {
        "gibberishResult": {
          "enum": [
            "UNDEFINED_GIBBERISH_RESULT",
            "NOT_GIBBERISH",
            "IS_GIBBERISH",
            "GIBBERISH_UNSUPPORTED_LANGUAGE",
            "GIBBERISH_DECLINED",
            "GIBBERISH_DETECTION_FAILED"
          ],
          "enumDescriptions": [
            "The status of this document is unknown.",
            "",
            "The transcript is gibberish and should not be used.",
            "Gibberish detection was not run because the language is not supported. Consider this not gibberish.",
            "Gibberish detection declined to run for an unspecified reason. Consider this not gibberish.",
            "Gibberish detection ran, but failed. Consider this not gibberish."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KaltixPerDocData": {
      "id": "KaltixPerDocData",
      "properties": {
        "KaltixRank": {
          "description": "approx. 2 bytes for top 1B",
          "format": "int32",
          "type": "integer"
        },
        "LocalKaltixRank": {
          "description": "empty for now",
          "format": "int32",
          "type": "integer"
        },
        "SiteKaltixRank": {
          "description": "empty for now",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "KeGovernanceTypedRegions": {
      "description": "Wrapper message containing list of regions and their corresponding type of region signal to use in data governance.",
      "id": "KeGovernanceTypedRegions",
      "properties": {
        "regionType": {
          "description": "The particular type of region should be explicitly set to disambiguate.",
          "enum": [
            "UNKNOWN",
            "FRONTEND_REGION_CODE",
            "TRUSTED_LOCATION_VIEW_REGION_CODE"
          ],
          "enumDescriptions": [
            "",
            "Region code as seen by search frontend (FrontendRequest::region_code). This is based on the user's physical location, and can be overridden by both the region picker in search settings and the gl url param. Among Oolong location views, this corresponds to the unique jurisdiction view, i.e. JurisdictionLocationView::createUnique if the LocationContext is fetched by GWS.",
            "This represents a trusted location that is hard to spoof and can be used for legal purposes such as applying restrictions based on the user's \"physical\" location. Among Oolong's location views, this corresponds to TrustedLocationView."
          ],
          "type": "string"
        },
        "regions": {
          "description": "Values are go/iii RegionCode in capital case. It is a good practice to keep elements in this list unique, although not enforced. In case of duplicated entries, they'll be treated as if there were only one entry of the same value.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersAnyType": {
      "description": "Accepts any non-empty value. This is meant for special cases allowing any value or any composition to be valid in a slot. If you are thinking of using this, please contact mrf-team@.",
      "id": "KnowledgeAnswersAnyType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersAttributeType": {
      "description": "An attribute type configures a value whose type is intended to be a attribute defined in the schema.",
      "id": "KnowledgeAnswersAttributeType",
      "properties": {
        "attribute": {
          "description": "Use in parsing: the value filled with must be in the list of this. If no attribute ids are specified, this value can be filled with any attribute.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "pivotEntitySlot": {
          "description": "If exist, the attribute will be applied on the given pivot slot. This helps type checking when qrewrite constructs function calls with an attribute-typed slot.",
          "type": "string"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersBooleanType": {
      "description": "A BooleanType configures a yes/no value.",
      "id": "KnowledgeAnswersBooleanType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersCollectionType": {
      "description": "A CollectionType configures a value whose type is intended to be a collection.",
      "id": "KnowledgeAnswersCollectionType",
      "properties": {
        "collection": {
          "description": "The collection this value is filled with must be one of these collections (denoted by a /collection/* id). If no collections are specified, this value can be filled with any collection.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersCompoundType": {
      "description": "A CompoundType configures a value composed of multiple answer values.",
      "id": "KnowledgeAnswersCompoundType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersContainerType": {
      "id": "KnowledgeAnswersContainerType",
      "properties": {
        "slotNames": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersDateType": {
      "description": "A DateType configures a value whose type is intended to be a date. LINT.IfChange Next id: 16",
      "id": "KnowledgeAnswersDateType",
      "properties": {
        "allowAllRangeResolutions": {
          "description": "If true, will allow all resolutions that are ranges.",
          "type": "boolean"
        },
        "allowAllResolutions": {
          "description": "If true, overrides all other options in this message and allows any kind of DateTime annotation.",
          "type": "boolean"
        },
        "allowAllResolutionsExceptHolidays": {
          "description": "If true, will allow all resolutions except holidays.",
          "type": "boolean"
        },
        "allowAllResolutionsWithout4digit24hrTime": {
          "description": "If true, will allow resolutions that aren't contiguous sequences of 4 digits annotated as 24-hr times. These are often mis-interpreted years or postcodes.",
          "type": "boolean"
        },
        "allowAllResolutionsWithoutTime": {
          "description": "If true, will allow resolutions without an explicit hour. Symbolic ranges such as [this evening] are not considered as explicit hour, but the range [1-3pm] is considered as explicit.",
          "type": "boolean"
        },
        "allowDayResolution": {
          "description": "If true, will parse a mention to DateTime of resolution day. This allows parsing strings like \"August 30th\", \"2012-12-25\";",
          "type": "boolean"
        },
        "allowDayResolutionExceptHolidaysOrOrdinal": {
          "description": "If true, will allow day resolutions except holidays or ordinal numbers, such as \"today\", \"December 13\", but \"Christmas\", \"first\" are not allowed.",
          "type": "boolean"
        },
        "allowHourResolution": {
          "description": "If true, will allow resolutions with an explicit hour such as \"8am\", \"5pm\".",
          "type": "boolean"
        },
        "allowMonthResolution": {
          "description": "If true, will parse a mention to DateTime of resolution month. This allows parsing strings like \"this August\", \"2012-12\";",
          "type": "boolean"
        },
        "allowNowResolution": {
          "description": "If true, will allow \"now\" resolutions, but not any other time",
          "type": "boolean"
        },
        "allowSymbolicTime": {
          "description": "If true, will allow symbolic time resolutions such as \"tonight\".",
          "type": "boolean"
        },
        "allowTimeResolutionsWithoutExplicitTimezone": {
          "description": "If true, will allow time resolutions without an explicit timezone.",
          "type": "boolean"
        },
        "allowYearResolution": {
          "description": "If true, will parse a mention to DateTime of resolution year. This allows parsing strings like \"Next year \", \"2010\";",
          "type": "boolean"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "subType": {
          "enum": [
            "DATE_TIME_DEFAULT",
            "DATE_ONLY",
            "DATE_WITH_DAY_OF_WEEK",
            "DATE_YEAR_ONLY",
            "DATE_MONTH_ONLY"
          ],
          "enumDescriptions": [
            "By default, formats as precise as possible based on the answer's datetime value. E.g., [oscar award date] -> March 27,2022 at 5:00 PM PDT",
            "Only keeps the date even if answer value has the time. E.g., [Top gun release date] -> May 27, 2022",
            "Only keeps the date and add the day of the week. E.g., [presidential election vote date] -> Tuesday, November 8, 2022",
            "Only keeps the year even if answer value has the full date or time. E.g., [bond movies] -> 1962",
            "Only keeps the month even if answer value has the full date or time. E.g., [Obama birth Month] -> August"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersDependencyType": {
      "id": "KnowledgeAnswersDependencyType",
      "properties": {
        "containerType": {
          "$ref": "KnowledgeAnswersContainerType"
        },
        "intersectType": {
          "$ref": "KnowledgeAnswersIntersectType"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "sameType": {
          "$ref": "KnowledgeAnswersSameType"
        },
        "unionType": {
          "$ref": "KnowledgeAnswersUnionType"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersDialogReferentialResolution": {
      "description": "How a piece of data was resolved through external data (either elsewhere in the query, or from a previous query). Examples: [obama and his age] -> \"his\" is resolved from the Obama entity obama -> \"he\" is resolved from the Obama entity starbucks -> Q2 is resolved from the list of shops",
      "id": "KnowledgeAnswersDialogReferentialResolution",
      "properties": {
        "refersToFullMrf": {
          "description": "True iff this ReferentialResolution is part of an intent and refers to the full MRF subtree (rather than just the intent).",
          "type": "boolean"
        },
        "resolutionType": {
          "enum": [
            "NONE",
            "SAFT_PRONOUN",
            "NOUN_PHRASE",
            "LOCAL_SEMANTIC_FUNCTION_MERGE",
            "CONTEXTUAL_SUBGRAMMAR_ANNOTATION",
            "RIPPLES_LIST_SELECTION"
          ],
          "enumDescriptions": [
            "No referential resolution.",
            "A referential pronoun like \"she\" was used to resolve a matching entity.",
            "A phrase like \"this man\" or \"that movie\" was used to resolve a matching entity.",
            "Legacy Local SemanticFn logic was used to combine the previous interpretation with the current one.",
            "The Location subgrammar produced an annotation from an AttentionalEntity.",
            "Ripples performed a list selection when the user issues a query like \"the third one\"."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersDurationType": {
      "description": "A DurationType configures a value whose type is a duration.",
      "id": "KnowledgeAnswersDurationType",
      "properties": {
        "rangeConstraint": {
          "$ref": "KnowledgeAnswersRangeConstraint",
          "description": "Range constraint limits the set of durations accepted. The values of the range are in milliseconds. Currently, this constraint is only enforced in Loose Parser."
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersEntityType": {
      "description": "An EntityType configures a value whose type is intended to be an entity. Entities may be specified using either the collection(s) to which they belong, or explicitly via a list of KG-ids. Both collections and ids can be specified, in which case the type will be the union of the id(s) and all mids within the collection(s). Next available tag: 9",
      "id": "KnowledgeAnswersEntityType",
      "properties": {
        "collection": {
          "description": "This field specifies that containing entity must be: - in *any* 'collection' if 'in_all_collections' is false (default) - in *every* 'collection' if 'in_all_collections' is true. The collection field contains strings of the form '/collection/'. If no collections are specified, this value can be filled with any entity. A collection specified as an empty string has a special meaning for Aqua induction, which is that the type includes all entities.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "excludedCollection": {
          "description": "The entity that this value is filled with must not be any of these collections (denoted by a /collection/* id). This restriction does not affect parsing; it is used only to filter attributes in the extraction flow.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "id": {
          "description": "The entity that this value is filled with must be one of the following explicitly specified KG-ids.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "identifier": {
          "description": "The entity that this value is filled with must be of the explicit type and/or contain the explicitly specified id. This field can not be used for kg mids, which should directly use the id field above.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryIdentifier"
          },
          "type": "array"
        },
        "inAllCollections": {
          "type": "boolean"
        },
        "includeGeolocationData": {
          "description": "If this is set to true for a slot and the entity is a location, the latitude and longitude will be available in variables $SlotName_Latitude and $SlotName_Longitude, respectively. The latitude and longitude data comes from KG.",
          "type": "boolean"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "stbrDomain": {
          "description": "This field is deprecated. It is not removed completely since this proto was saved with this field in proto text files used by the Grammy tool.",
          "items": {
            "enum": [
              "UNKNOWN",
              "DEFAULT",
              "SPORTS",
              "FINANCE"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentModifiers": {
      "description": "Modifiers decorate a Meaning Expression (i.e. intent FunctionCall) with signals that depend on the source language's grammar and syntax. See go/intent-modifiers for details. NOTE: Modifiers don't necessarily impact go/intent-resolution semantics. LINT.IfChange",
      "id": "KnowledgeAnswersIntentModifiers",
      "properties": {
        "alternateLanguage": {
          "description": "Language of all of the non-annotation tokens of the query interpretation, if it is different than |language|. This can happen with English smearing, e.g. [height rousseau] will trigger as \"fr\" when issued in fr/FR, but really the language is \"en\". This can also happen when we have extra information about the language model, e.g. language=\"zh\", alternate_language=\"zh-Hant\".",
          "type": "string"
        },
        "definiteness": {
          "enum": [
            "UNKNOWN_DEFINITENESS",
            "DEFINITE",
            "INDEFINITE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "language": {
          "description": "Language of parsed query.",
          "type": "string"
        },
        "mood": {
          "description": "Since there's only IMPERATIVE, consider using Marker.command instead.",
          "enum": [
            "UNKNOWN_MOOD",
            "IMPERATIVE"
          ],
          "enumDescriptions": [
            "",
            "E.g. [turn on the light] Other possible values: Interrogative, Subjunctive, ..."
          ],
          "type": "string"
        },
        "plurality": {
          "enum": [
            "UNKNOWN_PLURALITY",
            "SINGULAR",
            "PLURAL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "polarQuestion": {
          "description": "Whether or not the question is a polar (yes/no) question.",
          "type": "boolean"
        },
        "sentiment": {
          "$ref": "SentimentSentiment",
          "description": "Sentiment analysis attached to an intent implies the sentiment user expressed behind that query. This is generated by the Empathetic Servlet in the QRewrite."
        },
        "tense": {
          "enum": [
            "UNKNOWN_TENSE",
            "PRESENT",
            "FUTURE",
            "PAST"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryAnnotationLayerSignals": {
      "description": "Signals coming from the Annotation Layer of TUIG. See more details at http://go/unified-intent-generation-apis.",
      "id": "KnowledgeAnswersIntentQueryAnnotationLayerSignals",
      "properties": {
        "customVehicleActionArgumentAnnotatorSignals": {
          "$ref": "KnowledgeAnswersIntentQueryCustomVehicleActionArgumentAnnotatorSignals"
        },
        "freetextAnnotationSignals": {
          "$ref": "KnowledgeAnswersIntentQueryFreetextAnnotationSignals"
        },
        "nimbleAnnotationSignals": {
          "$ref": "KnowledgeAnswersIntentQueryNimbleAnnotationSignals"
        },
        "ntprAnnotationSignals": {
          "$ref": "KnowledgeAnswersIntentQueryNTPRAnnotationSignals"
        },
        "qrefAnnotationSignals": {
          "$ref": "KnowledgeAnswersIntentQueryQrefAnnotationSignals"
        },
        "semanticAnnotationSignals": {
          "$ref": "KnowledgeAnswersIntentQuerySemanticAnnotationSignals"
        },
        "teleportArgumentAnnotatorSignals": {
          "$ref": "KnowledgeAnswersIntentQueryTeleportArgumentAnnotatorSignals"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgPath": {
      "id": "KnowledgeAnswersIntentQueryArgPath",
      "properties": {
        "components": {
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryArgPathComponent"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgPathComponent": {
      "description": "LINT.IfChange(ArgPath) Given a FunctionCall and an Argument somewhere in it, an ArgPath is a list of name-index pairs that uniquely determines the path down to that Argument. For each pair, the |index|, starting from zero, distinguishes between \"sibling\" (i.e. belonging to the same sub-FunctionCall) Arguments with the same name. For example, given the following FunctionCall: A(X=D(W=5), Z=B(Z=6), Z=C(Y=7)) The path to the Z=6 argument is {{\"Z\", 0}, {\"Z\", 0}} It's the first of two Z \"siblings\" under A, then the only Z under B. The path to the Y=7 argument is {{\"Z\", 1}, {\"Y\", 0}} It's the second of two Z \"siblings\" under A, then the only Y under C. The path to the Z=B(...) argument is {{\"Z\", 0}} It's the first of two Z \"siblings\" under A.",
      "id": "KnowledgeAnswersIntentQueryArgPathComponent",
      "properties": {
        "argName": {
          "type": "string"
        },
        "index": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgument": {
      "description": "A message representing the function argument. Next ID: 9 Important: If you add new fields that do not reflect signals data, but actual semantics of the FunctionCall, please also update CreateFuncallCopyWithoutSignals and CreateFuncallCopyWithArgumentSignals in function_call_utils. LINT.IfChange",
      "id": "KnowledgeAnswersIntentQueryArgument",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field is used inside Aqua and outside Aqua for identifying the token indices and/or byte offsets of this argument"
        },
        "heuristicEvalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Eval_data was not derived at parsing time (i.e. is not expected to be produced by the IG), but heuristically determined by matching the ArgumentValue to an annotation/query fragment."
        },
        "key": {
          "$ref": "KnowledgeAnswersMeaningSchemaSlotKey",
          "description": "Slot schema key for this Argument. Note: This is still under development and not available for general use. Contact meaning-platform-eng@ for questions. Note: Currently MeaningSchemaSlotKey proto has both mid and unique_id. In future, only mid will be present in it. We are in the process of moving \"unique_id\" out of it. See (b/168907943). Note: The logged version of intent_query will only have \"mid\" populated in it to save space and avoid data duplication."
        },
        "modifiers": {
          "$ref": "KnowledgeAnswersIntentModifiers",
          "description": "A flattened representation of all intent modifiers that apply to this argument."
        },
        "name": {
          "description": "Name of this argument. If this Argument is part of a FunctionCall, it must have a name or it is not well-formed. If this Argument is from an Annotator, the name field should be empty.",
          "type": "string"
        },
        "signals": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentSignals",
          "description": "Signals associated with this argument."
        },
        "value": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentValue",
          "description": "The value of this argument."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenance": {
      "description": "NextId: 11",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenance",
      "properties": {
        "anaphor": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceQueryAnaphor",
          "description": "If populated, the current query contains an anaphor that refers to the value. For example: U: Weather in Paris. [Weather(location=paris)] G: 65 degrees and sunny. U: How many people live there? [Population(city=paris)] The \"there\" in the current query would have the \"anaphor\" field set. NOTE: after a string rewrite this field will not be populated anymore if the rewrite replaced the anaphor with the corresponding value. For example, if we rewrite [How many people there] to [How many people in Paris], the CurrentQuerySignals for \"paris\" will not contain an \"anaphor\" message anymore in the following turns. It will only contain an eval_data for the span that corresponds to \"paris\" in the query."
        },
        "attentionalEntity": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceAttentionalEntity"
        },
        "currentQuery": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceCurrentQuery",
          "description": "NOTE: PreviousQuery is used for values that originate directly from QRef entities annotated in the user query. AttentionalEntity is used for values that come from the system (entities published by a dialog). These values could also originate from an entity annotated by QRef in the query, but this is not necessarily the case. SearchAnswerValue is used for values that come from the system as part of the answer of the user query. For example: U: Wife of Barack Obama G: Barack Obama's wife is Michelle Obama Here \"Barack Obama\" can have an ArgumentProvenance of PreviousQuery, or AttentionalEntity if a dialog publishes that entity and the interpretation pulls the value from it. \"Michelle Obama\" can have an ArgumentProvenance of SearchAnswerValue, or AttentionalEntity if the dialog publishes that entity and the interpretation pulls the value it."
        },
        "injectedContextualSchema": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceInjectedContextualSchema"
        },
        "previousQuery": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousQuery"
        },
        "previousResponseMeaning": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousResponseMeaning"
        },
        "previousTaskState": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskState"
        },
        "searchAnswerValue": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceSearchAnswerValue"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenanceAttentionalEntity": {
      "description": "The value is carried over from an attentional entity. For example, in a dialog about a movie that publishes an attentional entity for /m/matrix: U: What is the cast. [Cast(location=/m/matrix)] G: The cast includes Keanu Reeves and others. U: Great, buy some tickets. [BuyTickets(movie=/m/matrix)] On the second user query, the \"movie\" argument would have a provenance of ATTENTIONAL_ENTITY.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenanceAttentionalEntity",
      "properties": {
        "attentionalEntityKey": {
          "description": "This key can be used to recover the attentional entity from the corresponding attentional_entities::EntityCache.",
          "format": "uint64",
          "type": "string"
        },
        "mentionProperties": {
          "$ref": "AttentionalEntitiesMentionProperties",
          "description": "Source information from the AttentionalEntityReader."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenanceCurrentQuery": {
      "description": "NOTE: These comments should stay in sync with the comments in logs/proto/knowledge/interpretation/intent_query.proto LINT.IfChange The argument comes from the current query. For example: U: Book a hotel in Paris. [BookHotel(location=/m/paris)] The \"location\" argument would have a provenance of CURRENT_QUERY.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenanceCurrentQuery",
      "properties": {
        "evalData": {
          "description": "The span(s) in the query where the value comes from. Note that if the argument is split across the current and previous query, this message should *NOT* be populated. Please use PreviousQuery below, populating it's eval-data fields accordingly.",
          "items": {
            "$ref": "NlpSemanticParsingAnnotationEvalData"
          },
          "type": "array"
        },
        "neuralLocationAnnotator": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceNeuralLocationAnnotator"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenanceInjectedContextualSchema": {
      "description": "The value is carried from injected contextual schema. Such schemas can be injected by go/qu-biasing-config for particular clients when their biasing configs are triggered for their traffic Config: (if QRewrite source == CARS_IMMERSIVE then inject LocalCarListings and Cars) Context: (QRewrite source == CARS_IMMERSIVE) U: Red [LocalCarListings(Cars() & RelatedTo(/m/red))] In this case, both LocalCarListings and Cars are spanless injected contextual schemas.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenanceInjectedContextualSchema",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenanceNeuralLocationAnnotator": {
      "description": "The value is used for CurrentQuery.annotator and PreviousQuery.annotator to indicate what annotator annotated the argument",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenanceNeuralLocationAnnotator",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenancePreviousQuery": {
      "description": "The value is carried over from either the previous winning IntentQuery or an entity annotated by QRef in a previous query. For example: U: How old is Obama. [Age(person=/m/obama)] G: Barack Obama is 56 years old. U: Who is his wife. [Spouse(person=/m/obama)] The \"person\" argument would have a provenance of PREVIOUS_QUERY. However, if a dialog publishes an attentional entity for \"Obama\", the \"person\" argument can have a provenance of ATTENTIONAL_ENTITY instead. This includes arguments with provenance that spans both the current and previous query.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousQuery",
      "properties": {
        "currentQueryEvalData": {
          "description": "The span(s) in the current query where the value comes from. This is used when the argument spans both the current and previous query. Eg jfk death -> [death, when] spans both queries.",
          "items": {
            "$ref": "NlpSemanticParsingAnnotationEvalData"
          },
          "type": "array"
        },
        "evalData": {
          "description": "The span(s) in the query where the value comes from.",
          "items": {
            "$ref": "NlpSemanticParsingAnnotationEvalData"
          },
          "type": "array"
        },
        "eventId": {
          "$ref": "EventIdMessage",
          "description": "The event ID of the query where this value was pulled from."
        },
        "neuralLocationAnnotator": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenanceNeuralLocationAnnotator"
        },
        "role": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousQueryRole"
        },
        "source": {
          "enum": [
            "UNKNOWN",
            "QUERY_STRING",
            "INTERPRETATION",
            "QUERY_JOIN",
            "PROMPT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenancePreviousQueryRole": {
      "description": "The role that this data played in the previous query.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousQueryRole",
      "properties": {
        "intentId": {
          "type": "string"
        },
        "slotName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenancePreviousResponseMeaning": {
      "id": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousResponseMeaning",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskState": {
      "description": "Value is derived from previous task state (go/taskstates).",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskState",
      "properties": {
        "argumentName": {
          "description": "Argument names in the DialogIntentState that the argument corresponds to. This is repeated so it can handle complex argument update paths. (ordered from outermost argument to innermost argument)",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "currentQueryEvalData": {
          "description": "The span(s) in the current query (if any) used to resolve the previous query's DIS. Example: U: Barack Obama G: Do you want his age or his height? U: The first one. G: Age(/m/obama) In this example, the intent is derived from the previous query's DIS, but also needs to be resolved in the current query since the user was presented with multiple options.",
          "items": {
            "$ref": "NlpSemanticParsingAnnotationEvalData"
          },
          "type": "array"
        },
        "dialogIntentStateId": {
          "description": "The id of the specific DialogIntentState instance that the argument corresponds to.",
          "type": "string"
        },
        "intentName": {
          "description": "Intent name of the DialogIntentState that the argument corresponds to.",
          "type": "string"
        },
        "listCandidate": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskStateListCandidate"
        },
        "previousFunctionCall": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskStatePreviousFunctionCall"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskStateListCandidate": {
      "description": "The value is carried over from a field_candidate in a DialogIntentState. For example: U: Send a message to John. G: Which John do you want to message? U: John A. [ListPresentationIntent(contact_disambiguation.person=0)] On the second user query, the \"contact_disambiguation.person\" argument would have a provenance of PREVIOUS_TASK_STATE_LIST_CANDIDATE.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskStateListCandidate",
      "properties": {
        "candidateIndex": {
          "description": "The presented_index of the field_candidate in the DialogIntentState field_signals that the argument corresponds to.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskStatePreviousFunctionCall": {
      "description": "The value was carried over from the previous function call. For example: U: Create an alarm titled \"Wake\". [CreateAlarm(title=Wake)] G: Sure, at what time? U: 5 am. [CreateAlarm(title=Wake,time=5am)] On the second user query, the \"title\" argument would have a provenance of PREVIOUS_TASK_STATE.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenancePreviousTaskStatePreviousFunctionCall",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenanceQueryAnaphor": {
      "description": "Signals about an anaphor in the query: for example an occurrence of the pronoun \"it\".",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenanceQueryAnaphor",
      "properties": {
        "evalData": {
          "description": "If populated, the spans in the current query where this value was annotated. This is a repeated field because some values can be annotated from a set of discontiguous spans (e.g. some intent phrases), but in most cases this field will contain only one item or it will be empty (for values inferred from context without the use of anaphora).",
          "items": {
            "$ref": "NlpSemanticParsingAnnotationEvalData"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentProvenanceSearchAnswerValue": {
      "description": "The value was carried over from a SearchAnswerValue triggered by a previous query (go/search-answer-values). For example: U: Movies with Tom Cruise. [Movies(actor=/m/tom_cruise)] G: Tom Cruise's movies include Top Gun, The Mummy, and 52 others. U: Reviews for the second one. [Reviews(movie=/m/the_mummy)] The \"movie\" argument in the last query would have a provenance of SEARCH_ANSWER_VALUE.",
      "id": "KnowledgeAnswersIntentQueryArgumentProvenanceSearchAnswerValue",
      "properties": {
        "eventId": {
          "$ref": "EventIdMessage",
          "description": "This identifies the SearchAnswerValues where this value was pulled from."
        },
        "metadataValueIndex": {
          "description": "Each SearchAnswerValue can have a primary value and a list of metadata values. If this index is set, this value was pulled from the metadata value at this index, otherwise it was pulled from the primary value.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "The display text of this answer value. It's taken from the search answer value display text if present, or the canonical name if it's an entity.",
          "type": "string"
        },
        "valueIndex": {
          "description": "The index of the SearchAnswerValue where this value was pulled from.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentSignals": {
      "description": "A message representing the signals associated with an argument. NEXT ID TO USE: 57 For //depot/google3/logs/proto/knowledge/interpretation/intent_query.proto in the \"ThenChange\", fields under Argument.signals in the serving proto are stored directly under Argument on the logging side. For example, see http://google3/nlp/semantic_parsing/data_management/logs/web_logs/semantic_logging_converters/semantic_logging_request_argument_converter.cc?l=58&rcl=322925428. LINT.IfChange",
      "id": "KnowledgeAnswersIntentQueryArgumentSignals",
      "properties": {
        "addedByCloseAnswers": {
          "description": "Whether this argument was added by CloseAnswers in Postref. This bit is used to mark the corresponding interpretation/intent query as such by setting is_close_interpretation bit.",
          "type": "boolean"
        },
        "allowedFuzzyMatch": {
          "description": "For this argument, backend performed fuzzy match.",
          "type": "boolean"
        },
        "annotatedRelationship": {
          "description": "Relationships between entities",
          "items": {
            "$ref": "LogsSemanticInterpretationIntentQueryWebrefEntityRelationship"
          },
          "type": "array"
        },
        "annotationLayerSignals": {
          "$ref": "KnowledgeAnswersIntentQueryAnnotationLayerSignals",
          "description": "Signals to facilitate orchestration of TUIG annotations."
        },
        "chainId": {
          "description": "One or more ChainIds from a ChainAnnotation whose \"organization_mid\" matches the MID. As of 2021-01 multiple chain_ids may be specified if the organization for MID controls multiple chains. See go/chains-lckp-robust-triggering for motivation.",
          "items": {
            "$ref": "LocalsearchChainId"
          },
          "type": "array"
        },
        "clusterInfo": {
          "$ref": "QualityViewsExtractionClusterInfo",
          "description": "If the literal.obj_type of the argument value is ID (Entity), this stores cluster scoring information for that entity, if the entity belongs to a cluster."
        },
        "collectionMembership": {
          "description": "If the literal.obj_type of the argument value is ID (Entity), this represents the collection that the entity in this argument is a member of.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryCollectionMembership"
          },
          "type": "array"
        },
        "contextResolution": {
          "description": "How this argument was resolved through context from a previous query. Examples: obama -> \"he\" is resolved from the Obama entity starbucks -> Q2 is resolved from the list of shops (Attentional Entities)",
          "enum": [
            "NONE",
            "SAFT_PRONOUN",
            "NOUN_PHRASE",
            "LOCAL_SEMANTIC_FUNCTION_MERGE",
            "CONTEXTUAL_SUBGRAMMAR_ANNOTATION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "deprecatedFreebaseType": {
          "description": "If the literal.obj_type of the argument value is ID (Entity), this represents freebase types of the entity in this argument.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "deprecatedSupportingMid": {
          "description": "A list of mids that \"support\" this argument in voting, i.e, results that support these mids will be treated as if they support the argument. This field has been deprecated in favor of related_entity. b/27363861",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "entityNumber": {
          "description": "Signals about what other entities this entity implies / is implied by. This is useful for grounding. Example: b/138388207: suppressing song intents if the artist entity doesn't link to the song title. This value specifies the order of annotations in a QRef annotation chain so they can refer to each other.",
          "format": "int32",
          "type": "integer"
        },
        "entityRelationship": {
          "description": "Signals about what other entities this entity implies / is implied by. This is useful for grounding. Example: b/138388207: suppressing song intents if the artist entity doesn't link to the song title.",
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotationEntityRelationship"
          },
          "type": "array"
        },
        "expressionStatus": {
          "$ref": "NlpSemanticParsingExpressionStatus",
          "description": "Status indicating whether the user has completely expressed the semantics of the argument."
        },
        "fromManualSymbolAnnotation": {
          "description": "Whether the argument entity comes from a manual graphic symbol annotation. This is later used as a heuristic for poor web result quality.",
          "type": "boolean"
        },
        "fromSymbolAnnotation": {
          "description": "Whether the argument entity comes from a graphic symbol annotation. This is later used as a heuristic for poor web result quality.",
          "type": "boolean"
        },
        "gaiaId": {
          "description": "The gaia id for the entity (person or plus page).",
          "format": "uint64",
          "type": "string"
        },
        "groundingSignals": {
          "$ref": "KnowledgeAnswersIntentQueryGroundingSignals"
        },
        "isAUngroundedTypeOf": {
          "description": "If the argument is entity, the ungrounded type the entity is. For example, the entity argument is /m/0p83l (Jasmine), the value of this field should be \"Plant\" if it is present.",
          "type": "string"
        },
        "isDefaultValue": {
          "description": "If true, the value of the argument is populated with the default value specified by the system if the value can't be inferred from the input query. In IntentConfig case, the default value is specified by using IntentConfig.slot.default_value.",
          "type": "boolean"
        },
        "isEnum": {
          "description": "Set when the argument has an enum value - a normalized_string_type from the intent catalog.",
          "type": "boolean"
        },
        "isEvalDataHeuristic": {
          "description": "Set when the eval_data was not derived at parsing time, but heuristically determined by matching the ArgumentValue to an annotation/query fragment.",
          "type": "boolean"
        },
        "isGenieAnnotation": {
          "description": "Whether this annotation was propagated as part of a Genie rewrite (go/genie-aqua).",
          "type": "boolean"
        },
        "isIntentgenAnnotation": {
          "description": "Whether this argument was annotated by Intentgen QUIK model (go/intentgen-quik)",
          "type": "boolean"
        },
        "isNimbleAnnotation": {
          "description": "Whether this argument was annotated by nimble (go/nimble-annotator)",
          "type": "boolean"
        },
        "location": {
          "$ref": "GeostorePointProto",
          "description": "Entity location information (latitude/longitude) from freebase."
        },
        "locationMarkersSignals": {
          "$ref": "KnowledgeAnswersIntentQueryLocationMarkersSignals",
          "description": "The usual semantic role associated with the signal from lightweight tokens attached to this argument span."
        },
        "mediaEntitySignals": {
          "$ref": "KnowledgeAnswersIntentQueryMediaEntitySignals",
          "description": "Signals about the media entity for this argument."
        },
        "mergedImpliedEntity": {
          "description": "List of QRef implied entities merged into this entity during parsing. Clients should not rely on the order, as it is derivation-dependent.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryImpliedEntity"
          },
          "type": "array"
        },
        "midEquivalentToCollection": {
          "description": "For collection arguments, it is useful to save what was the original mid that qref annotated. For example, if the collection is /collection/films, we'll have the mid for /en/film here (/m/02vxn).",
          "type": "string"
        },
        "multipleHorizontalListSelectionMatches": {
          "description": "Whether there were multiple equally good matches from horizontal_list_selection.",
          "type": "boolean"
        },
        "muninSignals": {
          "$ref": "KnowledgeAnswersIntentQueryMuninSignals",
          "description": "Signals derived from Munin Function call annotations."
        },
        "onDeviceAnnotationSignals": {
          "$ref": "KnowledgeAnswersIntentQueryOnDeviceAnnotationSignals",
          "description": "Additional signals for on-device annotations."
        },
        "oysterId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The oyster feature id. NOTE: As of Mar 2017, the cell ID field of the feature ID might not be set. See http://b/35447230#comment10"
        },
        "parsedDueToExperiment": {
          "description": "Experiment ID for experiments that were used to parse this FunctionCall. Empty indicates no experiments used.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "personalEntity": {
          "description": "Personal entities are compound entities made up of entities and their attributes, where the entities can be compound too. E.g., \"my father's mother\" can have a summary node annotation of \"Mother(Father(Myself))\"",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryPersonalEntity"
          },
          "type": "array"
        },
        "provenance": {
          "description": "Information about where the value of this argument came from. For example, it could have been explicitly provided in the query, pulled in from the previous state, or pulled from attentional entities.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryArgumentProvenance"
          },
          "type": "array"
        },
        "qrefConfidenceScore": {
          "description": "The QRef confidence score for an entity argument.",
          "format": "float",
          "type": "number"
        },
        "qrefInterpretationIndex": {
          "description": "The index of the QueryJoin interpretation from which this annotation is taken. We copy over the value given by nlp.semantic_parsing.annotators.QrefAnnotator. The value will be \"-1\" if the annotation is coming from low confidence Qref annotations. NOTE - this is generated from as QRef's interetation_number.",
          "format": "int32",
          "type": "integer"
        },
        "rawQueryText": {
          "description": "A copy of the span of canonical (raw) parser input text corresponding to this annotation.",
          "type": "string"
        },
        "relatedEntity": {
          "description": "List of entities that are semantically related to the argument as well as details of the relationship.",
          "items": {
            "$ref": "NlpSemanticParsingRelatedEntity"
          },
          "type": "array"
        },
        "relatednessSignals": {
          "$ref": "KnowledgeAnswersIntentQueryRelatednessSignals",
          "description": "Relatedness Matrix signals about this argument, e.g., query_popularity."
        },
        "resolvedFromContext": {
          "description": "Whether this argument was resolved through context from a previous query. Examples: obama -> \"he\" is resolved from the Obama entity starbucks -> Q2 is resolved from the list of shops",
          "type": "boolean"
        },
        "resolvedFromPronoun": {
          "description": "Whether this argument was resolved from a pronoun mention in the query. Eg: [how old was obama when *he* became president]",
          "type": "boolean"
        },
        "resultSupport": {
          "description": "The list of result supports for this Argument.",
          "items": {
            "$ref": "UniversalsearchNewPackerKnowledgeResultSupport"
          },
          "type": "array"
        },
        "saftSignals": {
          "$ref": "KnowledgeAnswersIntentQuerySaftSignals",
          "description": "Signals derived from SAFT."
        },
        "shoppingIds": {
          "$ref": "KnowledgeAnswersIntentQueryShoppingIds",
          "description": "Equivalent shopping ids for the argument."
        },
        "supportTransferRules": {
          "description": "go/stbr supportthis is an",
          "items": {
            "$ref": "LogsSemanticInterpretationIntentQuerySupportTransferRule"
          },
          "type": "array"
        },
        "supportTransferSignals": {
          "$ref": "KnowledgeAnswersIntentQuerySupportTransferSignals",
          "description": "Support Transfer signals for this entity."
        },
        "ungroundedValueType": {
          "$ref": "KnowledgeAnswersValueType",
          "description": "Type of ungrounded argument. It is exclusively used when simple_value.ungrounded_value is populated."
        },
        "webrefEntitiesIndex": {
          "description": "Webref entity index for this argument, necessary for interpreting the relationship structure, and the list to index into. Specifically we need this to understand qref implications since they edges are represented with entity indexes.",
          "format": "uint32",
          "type": "integer"
        },
        "webrefListSource": {
          "description": "This represents which list entities index refers to.",
          "enum": [
            "UNSET",
            "INTERPRETATION_LIST",
            "ANNOTATION_LIST",
            "CANDIDATE_LIST"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryArgumentValue": {
      "description": "A message representing the value of an argument. All types in the \"value\" oneof should have a corresponding field in the ValueType or OpaqueType protos defined in knowledge/answers/config/value.proto. This is specified by annotating each ArgumentValue type with options of the form (value_type_name) = A unit test ensure that this field is set and is valid for all types in ArgumentValue. A small number of special cases (such as funcall and simple_value) are allowed to omit the annotation. See intent_query_proto_test.cc for details. Note: If you are trying to add a new OpaqueType, stop; OpaqueType is deprecated, refer to go/opaque_type for details. If you think this is the only way to implement your feature, attend an office hours (go/meaning-help) and discuss with the MRF team. Next Id: 41",
      "id": "KnowledgeAnswersIntentQueryArgumentValue",
      "properties": {
        "aogSlot": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleAogSlot",
          "description": "Custom type used by actions-on-google in-dialog queries. See go/3p-custom-intents-wrt-meaning-catalog"
        },
        "appAnnotation": {
          "$ref": "NlpSemanticParsingAppAnnotation",
          "description": "Device actions custom types."
        },
        "audio": {
          "$ref": "NlpSemanticParsingModelsMediaAudio"
        },
        "calendarEvent": {
          "$ref": "AssistantApiCoreTypesCalendarEvent",
          "description": "Calendar custom types. Details in go/cal-ref."
        },
        "calendarEventWrapper": {
          "$ref": "AssistantApiCoreTypesCalendarEventWrapper",
          "description": "Details in go/multi-account-event-representation."
        },
        "calendarReference": {
          "$ref": "QualityQrewriteCalendarReference"
        },
        "complexQueriesRewrite": {
          "$ref": "QualityGenieComplexQueriesComplexQueriesOutputRewrite",
          "description": "Custom type used by Complex Queries. This is populated based on the output of the RPC to the Complex Queries Boq node."
        },
        "componentReference": {
          "$ref": "RepositoryWebrefComponentReference",
          "description": "Component reference between WebrefEntity and Mention. This should only ever be set in argument values in WebrefEntities (e.g. in a QueryJoin). The processing expectation is that the value including the component reference is discarded altogether and replaced by reference target. Use QueryJoinToMeaningStructConverter to perform the replacement. An example value parallel to this reference may exist, but it's meant purely for human consumption and should not be used."
        },
        "coreference": {
          "$ref": "KnowledgeAnswersIntentQueryCoreference",
          "description": "A value that is a coreference or variable binding to some other part of the tree. See go/mrf-variables."
        },
        "dateTime": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "*** Opaque types that are likely to become fully supported: *** Represents: date and time expressions. Annotated by: datetime subgrammar."
        },
        "device": {
          "$ref": "NlpSemanticParsingModelsMediaCastDeviceAnnotation",
          "description": "Media custom types. For example use, see go/valyrian-media-dd."
        },
        "deviceId": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "DeviceId custom types. Details in go/reply-broadcast"
        },
        "deviceUserIdentity": {
          "$ref": "AssistantApiCoreTypesDeviceUserIdentity",
          "description": "DeviceUserIdentity custom types. Details in go/reply-broadcast"
        },
        "duration": {
          "$ref": "NlpSemanticParsingDatetimeDuration",
          "description": "Represents: duration expressions (e.g. 5 minutes). Annotated by: datetime subgrammar."
        },
        "funcall": {
          "$ref": "KnowledgeAnswersIntentQueryFunctionCall",
          "description": "*** Fully supported types *** An argument can also be a function call."
        },
        "homeAutomationDevice": {
          "$ref": "AssistantVerticalsHomeautomationProtoHomeAutomationDevice",
          "description": "HomeAutomation custom types. Details in go/smarthome_with_monastery."
        },
        "location": {
          "$ref": "NlpSemanticParsingLocalLocation",
          "description": "Represents: location expressions. Annotated by: location subgrammar."
        },
        "media": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotation"
        },
        "messageNotification": {
          "$ref": "AssistantApiCoreTypesMessageNotification",
          "description": "Custom type used by tap-to-read for embedding a MessageNotification message in a GetMessageContent intent."
        },
        "money": {
          "$ref": "NlpSemanticParsingModelsMoneyMoney",
          "description": "Represents: money expressions (e.g. 25$). Annotated by: number subgrammar."
        },
        "narrativeNewsProvider": {
          "$ref": "NlpSemanticParsingModelsNarrativeNewsNewsProvider",
          "description": "Custom type used by NarrativeNews. This is populated by the narrative news provider annotator, and it differs semantically from a mid for a news brand in that it doesn't refer to the field of widely known news brands but rather but to the specific audio news RSS feeds that the narrative news feature serves. (There is of course substantial overlap between those two concepts)"
        },
        "number": {
          "$ref": "NlpSemanticParsingNumberNumber",
          "description": "Represents: number expressions. Annotated by: number subgrammar."
        },
        "onDevice": {
          "$ref": "NlpSemanticParsingModelsOnDevice",
          "description": "OnDevice custom types. Device on which an intent should be fulfilled. Differs semantically from device fields used by Media and HomeAutomation: this is annotated by the on_device subgrammar, and will not output any metadata beyond what the subgrammar outputs. See go/on_device_induction_quality."
        },
        "person": {
          "$ref": "NlpSemanticParsingModelsPersonPerson",
          "description": "Represents: structured person names, including common names and personal contacts. Annotated by: go/person-subgrammar."
        },
        "personalIntelligenceEntity": {
          "$ref": "NlpSemanticParsingPersonalIntelligenceEntity",
          "description": "Entity parsed from manual grammar interpretation in the Personal Intelligence domain."
        },
        "productivityListItem": {
          "$ref": "AssistantProductivityListItem"
        },
        "recurrence": {
          "$ref": "NlpSemanticParsingModelsRecurrence",
          "description": "Represents: intervals of recurrence for repeated tasks. See go/recurrence-subgrammar Annotated by: recurrence subgrammar."
        },
        "reminder": {
          "$ref": "QualityActionsReminder"
        },
        "sensitiveValue": {
          "$ref": "KnowledgeAnswersIntentQuerySensitiveArgumentValueGuard",
          "description": "Sensitive value, see go/sensitive-intents and go/a4w-multi-turn-dialog"
        },
        "sensitivity": {
          "description": "Argument level query sensitivities. 1) Statically defined Sensitivity is copied from IntentSlot at serving time so it can be propagated along with FunctionCall to places where the Intent Catalog is not available. See go/sensitive-intents for details. 2) For the same reason, contextual sensitivites (eg., from AttentionalEntity mentions) are populated here too. See go/tagging-sensitive-ae for details.",
          "items": {
            "$ref": "KnowledgeAnswersSensitivitySensitivity"
          },
          "type": "array"
        },
        "shoppingMerchant": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantMerchant"
        },
        "shoppingOffer": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantOffer",
          "description": "Shopping custom types. See go/sopa-attentional."
        },
        "shoppingProduct": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProduct"
        },
        "shoppingProductExpression": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductExpression"
        },
        "shoppingStore": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantStore"
        },
        "simpleValue": {
          "$ref": "KnowledgeAnswersIntentQuerySimpleValue",
          "description": "When literal is a datetime, it's really just an ISO 8601 datetime string. This case will eventually be replaced with the date_time field, which is more expressive and can also represent recurrences, ranges, etc. Likewise, simple_value will replace the other types of simple values that literal is currently being used to represent."
        },
        "timer": {
          "$ref": "QualityActionsTimer",
          "description": "Productivity custom types. Team: go/productivity-assistance."
        },
        "timezone": {
          "$ref": "NlpSemanticParsingDatetimeTimeZone",
          "description": "Represents: timezone expressions (e.g. Eastern Daylight Time). Annotated by: datetime subgrammar."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryAttributeSignal": {
      "description": "Contains an attribute id and it's completion score.",
      "id": "KnowledgeAnswersIntentQueryAttributeSignal",
      "properties": {
        "attributeId": {
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryCollectionMembership": {
      "description": "A message representing the collection membership of an entity.",
      "id": "KnowledgeAnswersIntentQueryCollectionMembership",
      "properties": {
        "collectionId": {
          "description": "Human readable id of the collection.",
          "type": "string"
        },
        "collectionMid": {
          "description": "Identifier of the collection, usually a MID (/m/xyz or /g/zyw).",
          "type": "string"
        },
        "collectionScore": {
          "description": "The collection score for a entity.",
          "format": "float",
          "type": "number"
        },
        "score": {
          "description": "Different types of scores for the collection. Each score type has at most one score.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryCollectionScore"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryCollectionScore": {
      "id": "KnowledgeAnswersIntentQueryCollectionScore",
      "properties": {
        "scoreType": {
          "enum": [
            "UNKNOWN",
            "GENERAL"
          ],
          "enumDescriptions": [
            "",
            "The collection score is for general use. It is not context based."
          ],
          "type": "string"
        },
        "scoreValue": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryCoreference": {
      "description": "A message representing a coreferenced value defined elsewhere in the meaning struct.",
      "id": "KnowledgeAnswersIntentQueryCoreference",
      "properties": {
        "argPath": {
          "$ref": "KnowledgeAnswersIntentQueryArgPath",
          "description": "A coreference is represented by an argument path starting from the root of the whole tree to the referenced value."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryCustomVehicleActionArgumentAnnotatorSignals": {
      "description": "Signals associated with CustomVehicleActionArgumentAnnotator annotations.",
      "id": "KnowledgeAnswersIntentQueryCustomVehicleActionArgumentAnnotatorSignals",
      "properties": {
        "additionalAnnotationData": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Stores any additional data which is required only at the intent fulfilment phase.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryFreetextAnnotationSignals": {
      "description": "Signals associated with FreetextAnnotator annotations. Empty. The signal being present is enough for the conformance checking library to be able to check.",
      "id": "KnowledgeAnswersIntentQueryFreetextAnnotationSignals",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryFunctionCall": {
      "description": "A message representing the function call of an answers intent query. Next ID: 19 Important: If you add new fields that do not reflect signals data, but actual semantics of the FunctionCall, please also update CreateFuncallCopyWithoutSignals and CreateFuncallCopyWithArgumentSignals in function_call_utils. LINT.IfChange",
      "id": "KnowledgeAnswersIntentQueryFunctionCall",
      "properties": {
        "argument": {
          "description": "A list of arguments of this function call.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryArgument"
          },
          "type": "array"
        },
        "catalogVersion": {
          "description": "The corresponding meaning catalog version that was used to generate this FunctionCall.",
          "format": "int64",
          "type": "string"
        },
        "contextualSensitivity": {
          "description": "Contextual Sensitivity (go/contextual-sensitivity) metadata indicating that a policy- or privacy- sensitive conversation context (previous queries, rewritten user queries, and previous system responses, like attentional entities) is used to generate this FunctionCall. This needs propagation (1) from Interp to DialogIntentState (DIS) (see b/148479837) and (2) from QRewrite/QUS down to Assistant Server's memory finalizer. One can use knowledge/answers/sensitivity/sensitivity_reader.h to parse this proto. NOTE(b/149091449): This is part of the migration of contextual sensitivity protos from Interp sensitivity extension. (nlp::semantic_parsing::sensitivity) to this proto field. See the bug to track the migration progress and for more details.",
          "items": {
            "$ref": "KnowledgeAnswersSensitivitySensitivity"
          },
          "type": "array"
        },
        "enabledRemodelings": {
          "$ref": "NlpMeaningMeaningRemodelingControl",
          "description": "Contains data about which remodelings are being used for this funcall. For more information see go/meaning-remodeling-framework."
        },
        "ignoredTokens": {
          "description": "A list of token lists that were ignored during parsing because they are known context phrases for this interpretation. For example, for query [tell me how tall height of Obama really], assuming \"tell me\", \"tall\", \"of\", \"really\" are explained and thus ignored, with corresponding prior 0.9, 0.8, 0.7, 0.6, following ignored tokens will be populated: { ignored_tokens { token { ngram: \"tell me\", prior: 0.9} score: 0.9 } ignored_tokens { token { ngram: \"tall\", prior: 0.8} token { ngram: \"of\", prior: 0.7} score: 0.56 // currently score = prior1 * prior2 * ... * prior N } ignored_tokens { token { ngram: \"really\", prior: 0.6} score: 0.6 } } These tokens can serve two purpose: 1) debug info to show why an interpretation is generated; 2) carry the signals for downstream usage. Note: This field is under active development, and significant changes could happen. Please contact porky-pig@ if you want to use it.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryTokens"
          },
          "type": "array"
        },
        "key": {
          "$ref": "KnowledgeAnswersMeaningSchemaKey",
          "description": "The primary key for this FunctionCall. Note: This is still under development and not available for general use. Contact meaning-platform-eng@ for questions."
        },
        "marker": {
          "$ref": "KnowledgeAnswersMarker",
          "description": "The marker specifies the purpose of this meaning struct / function call: Is it asking a question, and if yes, for which slot(s)? Is it a command, statement, etc? This corresponds to a (very coarse) notion of dialog acts. In the absence of this field, it will be inferred using the following algorithm (subject to marker applicability rules specified in marker.proto, see also go/requested-slots): 1) Use the underlying Meaning Schema's default marker, if applicable. 2) Assume that the Meaning Struct is polar or a statement. The presence of a marker will affect the value type of this function call."
        },
        "modifiers": {
          "$ref": "KnowledgeAnswersIntentModifiers",
          "description": "A flattened representation of all intent modifiers that apply to this function call."
        },
        "name": {
          "description": "Name of this function call. The name must be present. If it is omitted, the FunctionCall is not well-formed.",
          "type": "string"
        },
        "sensitivity": {
          "$ref": "KnowledgeAnswersSensitivitySensitivity",
          "description": "Intent level query sensitivity (go/sensitive-intents). This metadata comes directly from Intent Catalog, indicating a single-shot query sensitivity without putting context into considerations. Therefore, this requires a one-to-one match with each intent registered in Intent Catalog."
        },
        "signals": {
          "$ref": "KnowledgeAnswersIntentQueryFunctionCallSignals",
          "description": "Signals at the function call level"
        },
        "unexplainedTokens": {
          "description": "A list of tokens that were ignored during parsing that cannot be explained by context phrases.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryTokens"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryFunctionCallSignals": {
      "description": "Next ID: 36",
      "id": "KnowledgeAnswersIntentQueryFunctionCallSignals",
      "properties": {
        "argumentComposingMid": {
          "description": "The argument mid that was used to compose the entity for a concept interpretation, along with the intent_composing_mid (one of the intent's equivalent MIDs).",
          "type": "string"
        },
        "attributeSignals": {
          "description": "The attributes from which this intent was generated during execution of AttributeSignalsProvider. |attribute_signals| is only populated for single entity funcalls.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryAttributeSignal"
          },
          "type": "array"
        },
        "conceptEntityMid": {
          "description": "An entity that represents the concept of an entity-attribute intent by being composed of an intent equivalent MID and the argument MID.",
          "type": "string"
        },
        "confidenceLevel": {
          "enum": [
            "UNKNOWN",
            "LOW",
            "MEDIUM",
            "HIGH",
            "ALWAYS_TRIGGER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "dedupedFuncalls": {
          "description": "FunctionCall-s that this funcall was deduped against.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryFunctionCall"
          },
          "type": "array"
        },
        "expressionStatus": {
          "$ref": "NlpSemanticParsingExpressionStatus",
          "description": "Status indicating whether the user has completely expressed their intended semantics. (See go/streaming-nlu-fulfilment-protocol-v1 for more info. )"
        },
        "freefolksTrigger": {
          "enum": [
            "NONE_FREEFOLKS_TRIGGER",
            "LOW_CONF_FREEFOLKS_TRIGGER",
            "HIGH_CONF_FREEFOLKS_TRIGGER"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "groundingSignals": {
          "$ref": "KnowledgeAnswersIntentQueryGroundingSignals",
          "description": "Grounding signals for ranking/filtering, as well as whether to use Grounding Box and PGRP in AnswersRewriter. See comment on GroundingSignals for details."
        },
        "highConfidence": {
          "description": "Used to indicate that an interpretation is high confidence and triggers different voting behavior. This bit should only be set for verticals. DEPRECATED. Use confidence_level instead.",
          "type": "boolean"
        },
        "intentAnnotationSources": {
          "items": {
            "enum": [
              "UNKNOWN_SOURCE",
              "ORBIT",
              "LEXICON"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "intentComposingMid": {
          "description": "An intent_relevant_mid that was used to compose the entity for a concept interpretation, along with argument_composing_mid (the question's argument MID).",
          "type": "string"
        },
        "intentProvenance": {
          "description": "Information about where the value of this intent came from. For example, it could have been explicitly provided in the query, pulled in from the previous dialog state, or pulled from previous queries.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryArgumentProvenance"
          },
          "type": "array"
        },
        "intentRelevantMid": {
          "description": "KG mids of entities that represent this intent. These entities are seen as equivalent to the Intent definition, and are specified in the Intent Catalog as relevant_mid.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isCloseInterpretation": {
          "description": "Whether the interpretation was generated using similar queries in POSTREF. In case POSTREF_AQUA generated the same entity-attribute interpretation, this is still set to true.",
          "type": "boolean"
        },
        "isDisambiguationCardIntent": {
          "description": "Denotes whether this is an intent being fulfilled from user tapping a disambiguation card. More info in go/cardea-deck.",
          "type": "boolean"
        },
        "isDisambiguationIntent": {
          "description": "Denotes whether this is a sub-intent of an ambiguous SystemUncertain intent go/intent-disambiguation.",
          "type": "boolean"
        },
        "isNeuralCategoricalInterpretation": {
          "description": "Whether the interpretation was generated from the neural categorical parser.",
          "type": "boolean"
        },
        "isUiCompositionIntent": {
          "description": "Denotes this is a sub-intent used for composing an Assistant UI response. The assistant dialog should output ui_composition_shelf in the SystemResponse if it can fulfill the intent. More info in go/davinci-design and go/davinci-di-fulfillment",
          "type": "boolean"
        },
        "localSignals": {
          "$ref": "KnowledgeAnswersIntentQueryLocalSignals",
          "description": "Information about Local results to be used in the Packer for Local Categorical derived intent deduplication and conformance."
        },
        "osrpJourneyTag": {
          "description": "A tag to annotate user's journey (e.g., JourneyFollowCampusUpdates). This will be used for Journey OSRP demo (go/josrp-sprint). !!NOTE!! This field is reserved for Journey OSRP demo, and will be deprecated shortly after its completion. DO NOT USE.",
          "type": "string"
        },
        "parsedDueToExperiment": {
          "description": "Experiments that caused this FunctionCall to parse, without which this would not have parsed.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "parsingSignals": {
          "$ref": "KnowledgeAnswersIntentQueryParsingSignals",
          "description": "Parsing signals for ranking/filtering."
        },
        "prefulfillmentRankingScore": {
          "description": "Identifies a score, determined before fulfillment but after grounding. Written by the Prefulfillment Ranker, and used as a signal for ACE Ranking.",
          "format": "float",
          "type": "number"
        },
        "prefulfillmentSignals": {
          "$ref": "AssistantPrefulfillmentRankerPrefulfillmentSignals",
          "description": "All the input signals to the Prefulfillment Ranker."
        },
        "referentialResolution": {
          "$ref": "KnowledgeAnswersDialogReferentialResolution",
          "description": "Describes how this intent was resolved via external data (either elsewhere in the query, or in a previous query)."
        },
        "refxSummaryNodeId": {
          "description": "The id of the summary node if this funcall represents an mdvc interpretation",
          "type": "string"
        },
        "responseMeaningSignals": {
          "$ref": "KnowledgeAnswersIntentQueryResponseMeaningSignalsResponseMeaningSignals",
          "description": "Signal data from SRM generation. Solely used internally. See: go/srm-design."
        },
        "resultSupport": {
          "description": "The list of result supports for this FunctionCall.",
          "items": {
            "$ref": "UniversalsearchNewPackerKnowledgeResultSupport"
          },
          "type": "array"
        },
        "role": {
          "enum": [
            "UNKNOWN_ROLE",
            "QUERY_INTERPRETATION",
            "DERIVED_INTENT"
          ],
          "enumDescriptions": [
            "",
            "MRF expression is from a QI, and represents the user's primary intent.",
            "MRF expression is a generated DI."
          ],
          "type": "string"
        },
        "selectedByPrefulfillmentRanking": {
          "description": "Identifies whether the Prefulfillment Ranker selected this intent for emission. This is needed temporarily while migrating intent emitters from ACE to QUS/PFR. See go/pfr-intent-emitter for more info",
          "type": "boolean"
        },
        "shoppingIds": {
          "$ref": "KnowledgeAnswersIntentQueryShoppingIds",
          "description": "Equivalent shopping ids for the function call."
        },
        "signalsFallbackIntents": {
          "description": "Additional intents to be used for intent scoring. This field must only be populated when we cannot find a single unified intent. For example, when we compute signals for a LocalEntities function call, this means we could not find a unified intent to capture all the local results. In this case, we add a fallback intent for each local result (e.g. GeoSchool, GeoRestaurant, and GeoBank if those are the results we show).",
          "items": {
            "$ref": "KnowledgeAnswersIntentQuerySignalComputationFallbackIntent"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryGroundingSignals": {
      "description": "Grounding-related signals to be propagated down stream. Next ID: 12",
      "id": "KnowledgeAnswersIntentQueryGroundingSignals",
      "properties": {
        "addedByGrounding": {
          "description": "True if the argument was added during grounding. This signal is intended to be used with ArgumentSignals. Note that the added argument's value must be a FunctionCall that only contains resolutions, i.e. grounding cannot add/modify/delete any ungrounded values.",
          "type": "boolean"
        },
        "groundabilityScore": {
          "description": "Score indicating how grounded the intent is, populated by the Grounding Box, used by the pre-fulfillment ranker, see http://go/prefulfillment-ranker.",
          "format": "double",
          "type": "number"
        },
        "numConstraints": {
          "description": "Sum of the number of constraints used by the Grounding Box to ground each variable.",
          "format": "double",
          "type": "number"
        },
        "numConstraintsSatisfied": {
          "description": "Sum of the number of constraints satisfied for each variable. Depending on the match score for a constraint, this number can be fractional and is in the range [0, num_constraints].",
          "format": "double",
          "type": "number"
        },
        "numGroundableArgs": {
          "description": "Number of groundable arguments in the parsed intent.",
          "format": "double",
          "type": "number"
        },
        "numGroundedArgs": {
          "description": "Number of arguments that got actually grounded.",
          "format": "double",
          "type": "number"
        },
        "numVariables": {
          "description": "Number of arguments, possibly nested, that the Grounding Box tried to ground.",
          "format": "double",
          "type": "number"
        },
        "numVariablesGrounded": {
          "description": "Number of arguments, possibly nested, that the Grounding Box was able to ground. This includes ambiguously grounded arguments.",
          "format": "double",
          "type": "number"
        },
        "pgrpOutputFormat": {
          "description": "PGRP outputs PROD_INTENT_FACTORY intent format by default. See go/intent-conversion-locations-in-sage. Experimental flags can change or make PGRP output additional intents formatted for PORTMON_FULFILLMENT (e.g. with RDs). This is used by the PortMon/ARM dark launch (go/arm-dark-launch-infra). Longer term, this will be replaced by DGS system-internal transformations (go/if-dgs).",
          "enum": [
            "INTENT_FORMAT_UNSPECIFIED",
            "PROD_INTENT_FACTORY",
            "PORTMON_FULFILLMENT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "usesGroundingBox": {
          "description": "If true, then GroundingBox and PGRP are used in AnswersRewriter to process the intent. Other post-processing steps, including IGDP, are adjusted accordingly. Note this will be removed once GroundingBox is fully launched and all prod traffic goes through it. Before that happens, each IG that needs to go through GB and PGRP (post GB ranking pruning) will need to explicitly set this field to true. See http://go/gb-impl and http://go/gb-post-ranker-pruner for details.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryIdentifier": {
      "description": "Identifiers are references to a specific entity of a specified type, such as a TIMER_ID XXX. For more backround and uses see go/grounding-common-ids.",
      "id": "KnowledgeAnswersIntentQueryIdentifier",
      "properties": {
        "id": {
          "type": "string"
        },
        "idType": {
          "enum": [
            "UNKNOWN_ID_TYPE",
            "ALARM",
            "CALENDAR",
            "CALENDAR_EVENT",
            "KG",
            "LIST",
            "LIST_ITEM",
            "NOTE",
            "PROVIDER",
            "STOPWATCH",
            "TIMER",
            "DEVICE",
            "DEVICE_SETTING",
            "ROOM",
            "STRUCTURE",
            "ZONE",
            "REMINDER",
            "RECIPE",
            "PERSON",
            "COMM_ENDPOINT",
            "CALL_LOG",
            "NEWS",
            "MEDIA",
            "CONCEPT",
            "RELATION",
            "ATTENTIONAL_ENTITY",
            "AUDIO_MESSAGE_METADATA_ID",
            "BROADCAST",
            "MESSAGE_CONTENT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Calendar Event Id, see go/acal-portable-id.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "An go/identifier-for-generalized-device generalized device ID",
            "An identifier type for device settings. Its value is a stringified nlp_semantic_parsing.models.device.DeviceSetting enum plus optionally a field path that points to a specific part of the device setting. Examples: \"AIRPLANE_MODE\" (a device setting) \"BRIGHTNESS_LEVEL\" (a device setting) \"AIRPLANE_MODE.status\" (the \"status\" field of AIRPLANE_MODE). \"BRIGHTNESS_LEVEL.level\" (the \"level\" field of BRIGHTNESS_LEVEL). While the device setting itself is represented by the DeviceSetting enum mentioned above, the names of fields depend on how the setting is modeled, and can vary from implementation to implementation.",
            "An assistant.context.RoomId aka DeviceId.home_graph_device_id",
            "An assistant.context.StructureId aka DeviceId.home_graph_device_id",
            "An identifier for a zone. See: go/zone-gp and go/smarthome-zones",
            "",
            "",
            "Comms specific id types. go/call-object-iff",
            "",
            "Redial/Callback specific id to identify call log entry.",
            "",
            "Media specific id types. go/media-gb-data",
            "Concept and relation identifiers (go/discovered-not-designed)",
            "",
            "",
            "A secondary speech id for Audio Message Metadata go/audio-message-gp.",
            "Broadcast feature identifier go/routines-broadcast-device-gp",
            "Message content identifier for send/reply message go/message-content-grounding"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryImpliedEntity": {
      "description": "Signals for $QRefImpliedEntities that are merged into entity arguments during parsing.",
      "id": "KnowledgeAnswersIntentQueryImpliedEntity",
      "properties": {
        "annotatedSpan": {
          "description": "A copy of the span of canonical (raw) parser input text corresponding to this annotation. Copied from QRefAnnotation.annotated_span.",
          "type": "string"
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field is used inside Aqua for evaluation purposes."
        },
        "isUngroundedValue": {
          "description": "TODO (b/143536264): Create a new ImpliedTokens message and remove this. Whether the implied entity is ungrounded value, set to true when the entity doesn't have a KG mid.",
          "type": "boolean"
        },
        "mid": {
          "description": "The KG mid of the implied entity.",
          "type": "string"
        },
        "qrefConfidenceScore": {
          "description": "The QRef confidence (in [0, 1]) of the entity being correctly annotated.",
          "format": "float",
          "type": "number"
        },
        "shoppingIds": {
          "$ref": "KnowledgeAnswersIntentQueryShoppingIds",
          "description": "All ShoppingIds for this implied entity that need to be copied to IntentQuery (FunctionCall) if this implied entity is used in intent generation. See go/iql-shopping-ids for details."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryIndexingIQLAttachment": {
      "description": "Mustang/Kgraph attachment to encode IQL expressions annotated by Webref, Pianno, and other applications. This is currently a prototype implementation. The attachment is not yet output in production. Please contact simonz@ for more info. The planned use-cases include: - Pianno page-level intents (go/pianno-design). - Compound entity representations (go/compounds-in-refx). See go/iql-in-wma for more details about IQL attachment and its encoding design. Next available tag: 5",
      "id": "KnowledgeAnswersIntentQueryIndexingIQLAttachment",
      "properties": {
        "iqlEncodingVersion": {
          "description": "The version of encoder for the IQL FunctionCalls. We bump up the version when, but not limited to, we change how an IQL is converted to a byte array, or the change of byte compression algorithm.",
          "format": "uint32",
          "type": "integer"
        },
        "iqlFuncalls": {
          "description": "A compressed byte array that represents IQL FunctionCalls. A list of IQL FunctionCalls are first encoded as a byte array. The byte array is then compressed. For more details on the encoding, see go/iql-in-wma.",
          "format": "byte",
          "type": "string"
        },
        "piannoConfidenceScoreE2": {
          "description": "The Pianno confidence scores of all intents of the IQL FunctionCalls. For space reasons this is stored as a [0, 100] integer that represents the confidence up to two decimal points (fixed point). Convert it to confidence_score using the following formula: float pianno_confidence_score = pianno_confidence_score_e2 / 100.0f It should have the same number of elements as the IQL expressions after decoding. For non-Pianno top level intents, this score is 0.",
          "items": {
            "format": "uint32",
            "type": "integer"
          },
          "type": "array"
        },
        "piannoIqlBitmap": {
          "description": "A bit map indicating if the intents in the IQL FunctionCalls are top level intents for Pianno (go/pianno). This is a repeated field. In the event of more than 32 intents, the first uint32/ represents the 1st to the 32nd intents, and the second uint32 represents/ the 33rd to the 64th intents, and so on. Within each uint32, the bits are in reversed order, i.e. the right-most bit of the first uint32 indicating if the first intent in IQL expressions is a top level intent for Pianno. The prevailing (unused) bits of the last uint32 are filled with 0s.",
          "items": {
            "format": "uint32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryLocalResultSignals": {
      "description": "A message that stores signals relating to a Local result.",
      "id": "KnowledgeAnswersIntentQueryLocalResultSignals",
      "properties": {
        "gcidIntent": {
          "description": "Geo intents corresponding to the gcids obtained from the Local result.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "salientTermSet": {
          "$ref": "QualitySalientTermsSalientTermSet",
          "description": "Salient terms associated with this Local result based on the result gcids."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryLocalSignals": {
      "description": "A message that stores information about Local results to be used in the Packer for Local Categorical derived intent deduplication and conformance.",
      "id": "KnowledgeAnswersIntentQueryLocalSignals",
      "properties": {
        "localResultSignals": {
          "description": "Signals relating to each Local result.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryLocalResultSignals"
          },
          "type": "array"
        },
        "minSalientTermSimilarity": {
          "description": "Minimum salient term similarity between Local results.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryLocationMarkersSignals": {
      "description": "Signals from LightweightToken. The span for an argument may have been extended to include lightweight token markers such as FROM or TO. This signal provides the semantics for the range extension.",
      "id": "KnowledgeAnswersIntentQueryLocationMarkersSignals",
      "properties": {
        "type": {
          "description": "The type of the lightweight token match.",
          "enum": [
            "UNKNOWN",
            "SOURCE",
            "GOAL"
          ],
          "enumDescriptions": [
            "",
            "The semantic role of the linguist marker is that of \"source\" or \"origin,\" often indicated by the preposition \"from\" in the English language.",
            "The semantic role of the linguist marker is that of \"goal\" or \"destination,\" often indicated by the preposition \"to\" in the English language."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryMediaEntitySignals": {
      "description": "Signals about the media entity.",
      "id": "KnowledgeAnswersIntentQueryMediaEntitySignals",
      "properties": {
        "artistTitle": {
          "description": "For songs, this is the name of the primary artist, i.e. \"Shallow\" would \"Lady Gaga\" set.",
          "type": "string"
        },
        "name": {
          "description": "Name of the media entity, i.e. \"Lady Gaga\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryMuninSignals": {
      "description": "Signals derived from Munin Function call annotations.",
      "id": "KnowledgeAnswersIntentQueryMuninSignals",
      "properties": {
        "isIsolated": {
          "description": "If the modifier is only a good soft modifier by itself, then we would trigger only if it's the only modifier",
          "type": "boolean"
        },
        "softModifierCollection": {
          "description": "Signals for $ListQueryRuleWithSoftModifier. Collections allowed by the soft modifier.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "textIsGenerated": {
          "description": "If true, the text for this argument did not come from the query, but was generated somehow else.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryNTPRAnnotationSignals": {
      "description": "Signals associated with NTPRAnnotator annotations. Empty. The signal being present is enough for the conformance checking library to be able to check.",
      "id": "KnowledgeAnswersIntentQueryNTPRAnnotationSignals",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryNimbleAnnotationSignals": {
      "description": "Signals associated with NimbleAnnotator annotations.",
      "id": "KnowledgeAnswersIntentQueryNimbleAnnotationSignals",
      "properties": {
        "annotationSource": {
          "description": "Where the annotation has been read from.",
          "enum": [
            "SSTABLE",
            "LG",
            "TS",
            "PRIVATE_SSTABLE"
          ],
          "enumDescriptions": [
            "Annotation was obtained from SStable.",
            "Annotation was obtained from Livegraph snapshot (see go/nimble-from-lg).",
            "Annotation was obtained from Topic Server.",
            "Annotation was obtained from Private SStable."
          ],
          "type": "string"
        },
        "type": {
          "description": "A client-controlled identifier that the client can use to distinguish between different sets of annotations.",
          "type": "string"
        },
        "version": {
          "description": "Version identifier used to isolate different clients from each other. A client should intersect this list of versions with the ones the client is interested in, and use the annotation if the intersection is non-empty.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryOnDeviceAnnotationSignals": {
      "description": "Signals coming from on-device annotators.",
      "id": "KnowledgeAnswersIntentQueryOnDeviceAnnotationSignals",
      "properties": {
        "provenance": {
          "description": "Provenance of the annotator. Equivalent to the `provenance` field in OnDeviceParserInput::AnnotationInfo. This is used to map from AnnotationInfo to nlp_sage.ScoredAnnotation, since nlp_sage.ScoredAnnotation doesn't have a native `provenance` field. Note in the (very) long term, we'd like to replace ScoredAnnotation with Argument altogether.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryParsingSignals": {
      "description": "Parsing-related signals. Only horizontal signals should appear directly as fields on this message. Each domain should create their own extension for anything that they need to propagate down stream from AQUA. Note that this proto is not the same as the Superroot proto ParsingSignals (http://google3/knowledge/proto/scoring-signals.proto), which is a Superroot-specific signal used in Scoring. Next ID: 7",
      "id": "KnowledgeAnswersIntentQueryParsingSignals",
      "properties": {
        "calibratedParsingScore": {
          "description": "A parsing score that is independently calibrated by each parser/IG, used by pre-fulfillment ranker, see http://go/prefulfillment-ranker.",
          "format": "double",
          "type": "number"
        },
        "effectiveArgSpanLength": {
          "description": "The total effective length of the spans for the arguments used to construct the parse. May include vertical specific adjustments. Eg: For the query [delete my 7 p.m. alarm called chicken] and intent Delete_alarm(alarm_object=RD(category=AlarmObject( label=\"chicken\", trigger_time_datetime=<< 7 PM >>))), the effective argument span is \"7 p.m.\" + \"chicken\" (total length of 13).",
          "format": "float",
          "type": "number"
        },
        "inQueryMaxEffectiveArgSpanLength": {
          "description": "This is a cross-intent feature which is calculated by iterating all intent candidates. This feature should be populated in post-IG stage (before GB).",
          "format": "float",
          "type": "number"
        },
        "qrewriteCallPathInfo": {
          "$ref": "NlpLoggingQRewriteClientCallPathInfo",
          "description": "This proto holds the complete call path info of the QRewrite client (e.g. the QUS's phase like \"RBT\",\"QBT\"; the QUS's candidate type like \"Identity\"; and the ACE's candidate type like \"FuzzyMatcher\")."
        },
        "qrewriteCallPathInfoFingerprint": {
          "description": "This proto holds the fingerprint of the call path info of QRewrite client (e.g. the QUS's phase like \"RBT\",\"QBT\"; the QUS's candidate type like \"Identity\"; and the ACE's candidate type like \"FuzzyMatcher\").",
          "format": "uint64",
          "type": "string"
        },
        "source": {
          "description": "The parser that calibrated the parsing score below.",
          "enum": [
            "UNKNOWN_PARSING_SOURCE",
            "SAGE",
            "UNSTRUCTURED_INTENTS",
            "NSP",
            "AQUA",
            "PHONE_GENIE"
          ],
          "enumDescriptions": [
            "",
            "Score is calibrated by Sage IG.",
            "The FunctionCall is produced by the Unstructured Intent IG. See go/unstructured-intents-ig.",
            "The FunctionCall is produced by NSP in TUIG. This is consumed in QUS, to route behavior specific to NSP.",
            "The FunctionCall is produced by Aqua.",
            "The FunctionCall is produced by PhoneGenie in TUIG. See go/phone-genie-tuig"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryPersonalEntity": {
      "description": "A message encapsulating all \"/collection/personal_memory\" annotations from QRef annotator. These annotations are present in personal_summary_node_child proto field of input QRefAnnotation proto. NEXT ID TO USE: 5",
      "id": "KnowledgeAnswersIntentQueryPersonalEntity",
      "properties": {
        "attributeId": {
          "description": "Attribute ID of a personal_summary_node_child.",
          "type": "string"
        },
        "entityRelationship": {
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryPersonalEntityEntityRelationship"
          },
          "type": "array"
        },
        "freebaseMid": {
          "description": "The mid of the entity in freebase associated with this span.",
          "type": "string"
        },
        "personalEntityChild": {
          "description": "Every PersonalEntity might itself rescursively contain related Personal Entities, e.g. for, \"my father's mother\" a parent Personal Entity for 'Mother()' contains a child Personal Entity of the form 'Mother(Myself)'.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryPersonalEntity"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryPersonalEntityEntityRelationship": {
      "description": "The relationship information from QRef. Only included if the QRefAnnotator is initialised with include_annotated_relationships.",
      "id": "KnowledgeAnswersIntentQueryPersonalEntityEntityRelationship",
      "properties": {
        "entityIndex": {
          "description": "The index of the other entity in the relationship.",
          "format": "int32",
          "type": "integer"
        },
        "linkPropertyName": {
          "description": "Names of the relationship links.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryQrefAnnotationSignals": {
      "description": "Signals associated with Qref annotations.",
      "id": "KnowledgeAnswersIntentQueryQrefAnnotationSignals",
      "properties": {
        "score": {
          "description": "Numeric value associated with each annotation within the Qref servlet output.",
          "format": "double",
          "type": "number"
        },
        "trustedNameConfidence": {
          "description": "Trusted name confidence signal https://g3doc.corp.google.com/repository/webref/preprocessing/names/tnc_classifier/README.md",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryRelatednessSignals": {
      "description": "Relatedness Matrix signals for FunctionCall Arguments.",
      "id": "KnowledgeAnswersIntentQueryRelatednessSignals",
      "properties": {
        "queryPopularity": {
          "format": "float",
          "type": "number"
        },
        "youtubeViews": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryResponseMeaningSignalsResponseMeaningSignals": {
      "description": "SRM signal data. Properties here should be nonsemantic. Semantic properties should be modeled directly in the SRM.",
      "id": "KnowledgeAnswersIntentQueryResponseMeaningSignalsResponseMeaningSignals",
      "properties": {
        "propertyValue": {
          "items": {
            "$ref": "FreebasePropertyValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySaftSignals": {
      "description": "Signals derived from overlapping saft annotations.",
      "id": "KnowledgeAnswersIntentQuerySaftSignals",
      "properties": {
        "entityType": {
          "enum": [
            "UNMARKED",
            "PERSON",
            "NOMINAL_PERSON",
            "ORGANIZATION",
            "LOCATION",
            "OTHER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "isHeadOfIntent": {
          "type": "boolean"
        },
        "isVerb": {
          "description": "Saft often marks verbs as head of intent and we may want to ignore those.",
          "type": "boolean"
        },
        "number": {
          "enum": [
            "UNKNOWN",
            "SINGULAR",
            "PLURAL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySemanticAnnotationSignals": {
      "description": "Signals associated with nlp_ig::v1::SemanticAnnotator.",
      "id": "KnowledgeAnswersIntentQuerySemanticAnnotationSignals",
      "properties": {
        "category": {
          "description": "Name of the subgrammar category this annotation is associated with.",
          "type": "string"
        },
        "domain": {
          "description": "Name of the subgrammar domain.",
          "type": "string"
        },
        "features": {
          "items": {
            "$ref": "KnowledgeAnswersIntentQuerySemanticAnnotationSignalsFeature"
          },
          "type": "array"
        },
        "score": {
          "description": "Numeric value associated with each subgrammar annotation. Used for in-domain ranking inside the Aqua Analyzer. This field is not guaranteed to be in any range. Furthermore, this field should never be compared for annotations with differing 'domain' value. The field is included here for making the Aqua Analyzer work with subgrammar annotations that have been generated in a different Aqua Analyzer (typically by TUIG SemanticAnnotationServlet). TL;DR: Consumers of this message are STRONGLY DISCOURAGED from using this field.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySemanticAnnotationSignalsFeature": {
      "description": "Aqua features exported from a subgrammar. Primarily added here for External Subgrammar Annotations to work. See go/esa-exported-features for details. NOTE: Feature names can change and the existence of any feature is not guaranteed. Get in touch with ig-eng@ before using these features.",
      "id": "KnowledgeAnswersIntentQuerySemanticAnnotationSignalsFeature",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySensitiveArgumentValueGuard": {
      "id": "KnowledgeAnswersIntentQuerySensitiveArgumentValueGuard",
      "properties": {
        "doNotUseDebugOnlyDecryptedValue": {
          "$ref": "KnowledgeAnswersIntentQueryArgumentValue",
          "description": "Decrypted and deserialized contents of |encrypted_value|. This field should never be populated in prod. This is only provided for easier human inspection when using dev builds (dev keys are public)."
        },
        "encryptedValue": {
          "description": "Encrypted protobuffer of type ArgumentValue.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryShoppingIds": {
      "description": "Additional shopping identifiers related to an entity or IQL function call. This must be passed along to the shopping backend (go/o4) to aid in fulfillment. Because the shopping data models do not always line up 1-1 with KG entities and are not always reconciled with each other, the message may contain multiple ids. Next id: 8 LINT.IfChange",
      "id": "KnowledgeAnswersIntentQueryShoppingIds",
      "properties": {
        "aspectClusterIds": {
          "description": "A shopping aspect cluster id. These are attributes mined from mentions in web articles.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "brandEntityId": {
          "description": "Brand entity id. Brands are fully reconciled with KG entities so there should never be ambiguity as to which brand applies (those would be separate MIDs). ",
          "format": "uint64",
          "type": "string"
        },
        "bxCategoryIds": {
          "description": "A category in the shopping browseonomy, a taxonomy of product types that can be found at go/bx. This field is expected to contain the deepest node in the browseonomy that the intent or argument pertains to, which may be an internal node. It does not contain the entire path of categories.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "measures": {
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryShoppingIdsMeasureValue"
          },
          "type": "array"
        },
        "merchantIds": {
          "description": "List of merchant customer account IDs associated with a merchant entity in KG. NOTE: Soon to be deprecated, see go/merchant_mids_in_indexer design",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "merchantSourceIds": {
          "description": "A shopping merchant source id, i.e. the key used to identify Shopping Merchants as they are imported into KG. For reference, these IDs are populated in: * CommerceDB under BusinessIdentification.knowledge_graph.source_id * KG using the /shopping/merchant/id predicate",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "tagIds": {
          "description": "Moka attributes of a product. This includes color tags but currently not brand. We allow the possibility for multiple tag ids, as multiple Moka tag ids may map to the same mid, and we may not be able to find a single matching Moka tag. Also, cross-category Moka colors intentionally map a single color mentioned in the query to an expansion of many tags representing points in LAB color space (although this representation is expected to change).",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryShoppingIdsMeasureValue": {
      "description": "A measured value of a product (e.g. Hard drive size = 1 TB). The value is measured in the facet's base unit. This does not necessarily match the unit expressed by the user in the query. The exact unit is known to the O4 server and is used in fulfillment.",
      "id": "KnowledgeAnswersIntentQueryShoppingIdsMeasureValue",
      "properties": {
        "facetId": {
          "format": "int64",
          "type": "string"
        },
        "value": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySignalComputationFallbackIntent": {
      "description": "A message representing an intent to use for intent scoring if the root intent is invalid.",
      "id": "KnowledgeAnswersIntentQuerySignalComputationFallbackIntent",
      "properties": {
        "intent": {
          "description": "The intent name of the fallback intent.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySimpleValue": {
      "description": "A message representing a simple literal value.",
      "id": "KnowledgeAnswersIntentQuerySimpleValue",
      "properties": {
        "boolValue": {
          "type": "boolean"
        },
        "doubleValue": {
          "format": "double",
          "type": "number"
        },
        "identifier": {
          "$ref": "KnowledgeAnswersIntentQueryIdentifier"
        },
        "intValue": {
          "format": "int64",
          "type": "string"
        },
        "stringValue": {
          "type": "string"
        },
        "ungroundedValue": {
          "description": "Ungrounded value contains the part of the query (or web snippet, etc.) that was not understood. For more information on this field, see the \"Ungrounded value\" item in the table of contents of go/iql-v1",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQuerySupportTransferSignals": {
      "description": "Signals indicating whether this entity received or transferred support (and from which entities).",
      "id": "KnowledgeAnswersIntentQuerySupportTransferSignals",
      "properties": {
        "supportTransferSource": {
          "description": "Entities that transferred support to this entity (mids).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "supportTransferTarget": {
          "description": "Entities that received support from this entity (mids).",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryTeleportArgumentAnnotatorSignals": {
      "description": "Signals associated with TeleportArgumentAnnotator annotations. Empty. The signal being present is enough for the conformance checking library to be able to check.",
      "id": "KnowledgeAnswersIntentQueryTeleportArgumentAnnotatorSignals",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryToken": {
      "description": "A token represents an ngram with relevant information about it. If the token is a context phrase, it will have a prior score associated with it. The prior is computed via knowledge/answers/query_generalization/ word_prior/word_prior_from_examples_lib.cc, and ranges between 0 and 1. Stopwords and intent tokens (primary and component) have a score of 1.0.",
      "id": "KnowledgeAnswersIntentQueryToken",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field is used inside Aqua and outside Aqua for identifying the token indices and/or byte offsets of this Token."
        },
        "ngram": {
          "description": "|ngram| should be populated with a string from the raw query, not the normalized tokens. E.g. The ngram in the ignored token for the Height intent on the query [Height of barack obama], will be \"Height\". The ngram in the ignored token for the Videos intent on the query [vid\u00e9os] will be \"vid\u00e9os\".",
          "type": "string"
        },
        "parsedDueToExperiment": {
          "description": "Experiments that caused this Token to parse, without which this would not have parsed.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "prior": {
          "format": "float",
          "type": "number"
        },
        "provenance": {
          "enum": [
            "UNKNOWN",
            "INTENT_PRIMARY",
            "INTENT_COMPONENT",
            "STOPWORD",
            "CONTEXT_INTENT",
            "CONTEXT_ANSWER_TYPE",
            "CONTEXT_ENTITY_TYPE",
            "PUNCTUATION",
            "LOCATION_ALIAS_ANNOTATION",
            "OPTIONALIZED"
          ],
          "enumDescriptions": [
            "We don't know how this token was explained. This will be the provenance for unexplained tokens.",
            "This is a PRIMARY or core token in the Intent Annotation. This is currently NOT USED by the LooseParser.",
            "This token is a part of the Intent Annotation, one of the tokens that helped us identify the intent of the query and create a parse. eg. [wife] in [who is obama' wife]",
            "This token was explained away as safe-to-ignore after the parse. eg. [is] in [who is obama's wife]",
            "This token is a context phrase for the intent in the parse. eg. [who] in [who is obama's wife]",
            "This token is a context phrase, and indicates how the context phrase was learned for the intent (by sharing context phrases between intents with the same answer type). This is currently NOT USED by the LooseParser.",
            "This is currently NOT USED by the LooseParser.",
            "This token is punctuation, and so is explained as safe-to-ignore.",
            "This token's data was derived directly from an alias-type Location annotation. For example, the Location subgrammar generates an annotation with {type: ALIAS alias_location: HERE} for [where am i] (http://screen/BhuAnCgtujUG9Pu), so LooseParser may use this annotation's byte information in generating tokens downstream.",
            "Term is not a hard coded stopword, but online scoring considered it not important for term explanation."
          ],
          "type": "string"
        },
        "provenanceId": {
          "description": "Unique identifiers for the provenance of this token, for example, NLP Repository Example IDs.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "provenanceLanguage": {
          "type": "string"
        },
        "synonyms": {
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryTokenSynonym"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryTokenSynonym": {
      "description": "A TokenSynonym contains information about synonyms of a Token's ngram. The synonyms were the ones used during parsing for token explanation in place of the original ngrams. Example 1: [present population of nyc] We can generate interpretation kc:/location/statistical_region:population by converting \"present\" to its synonym \"current\", which is a context phrase for the intent. The ngram for this token would be \"present\" and the string \"current\" would be stored in synonym_ngram. Example 2: [nys important cities] We can generate interpretation kc:/location/us_state:cities by converting \"important\" to its synonym \"major\" or its synonym \"biggest\", because both \"major cities\" and \"biggest cities\" are attribute phrases for the intent. In this case, the ngram in this Token is \"important cities\", and the token_synonyms (specifically, the synonym_ngram field) would store \"major cities\" and \"biggest cities\", since those are the actual synonym ngrams that match the attribute phrases. For context phrases, we generally should have only one matched_squery_synonyms, since we try to find the best synonyms to use using the context phrase score. However, for attribute phrase we don't really have enough info to determine which synonym is better if they both trigger the same intent, and hence we will propagate both synonyms.",
      "id": "KnowledgeAnswersIntentQueryTokenSynonym",
      "properties": {
        "source": {
          "enum": [
            "UNKNOWN",
            "SQUERY"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "synonymNgram": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntentQueryTokens": {
      "description": "Tokens includes a list of tokens, with an aggregated score of the priors of the tokens, if any.",
      "id": "KnowledgeAnswersIntentQueryTokens",
      "properties": {
        "score": {
          "description": "Score for this group of tokens is currently product of priors.",
          "format": "float",
          "type": "number"
        },
        "token": {
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryToken"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersIntersectType": {
      "id": "KnowledgeAnswersIntersectType",
      "properties": {
        "slotNames": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersMarker": {
      "description": "A Marker specifies a Meaning Expression's (i.e. intent FunctionCall) purpose. NOTE: Markers always impact go/intent-resolution semantics.",
      "id": "KnowledgeAnswersMarker",
      "properties": {
        "command": {
          "$ref": "KnowledgeAnswersMarkerCommand"
        },
        "openQuestion": {
          "$ref": "KnowledgeAnswersMarkerOpenQuestion"
        },
        "polarQuestion": {
          "$ref": "KnowledgeAnswersMarkerPolarQuestion"
        },
        "stateOfAffairs": {
          "$ref": "KnowledgeAnswersMarkerStateOfAffairs"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersMarkerCommand": {
      "description": "Indicates a command, instructing someone to do something which might be explicit (e.g. [call me]) or implicit (e.g. [can you call me]).",
      "id": "KnowledgeAnswersMarkerCommand",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersMarkerOpenQuestion": {
      "description": "Indicates a question, requesting the value of a specified slot. Not applicable if the requested slot simultaneously appears as an argument. See go/requested-slots for details. Next ID: 3",
      "id": "KnowledgeAnswersMarkerOpenQuestion",
      "properties": {
        "slotKey": {
          "$ref": "KnowledgeAnswersMeaningSchemaSlotKey",
          "description": "Note: This is still under development and not available for general use. Contact meaning-platform-eng@ for questions."
        },
        "slotName": {
          "description": "One or multiple slots may be requested by the marker. See go/mrf-multiple-output-slots for details on requesting multiple output slots.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersMarkerPolarQuestion": {
      "description": "Indicates a question, requesting the truth-value/actualness of a state of affairs denoted by the expression encompassed by the FunctionCall this appears on. Often this is a yes/no question, e.g. [was tom cruise in top gun] : ActedIn.polar(Movie=/m/top_gun, Actor=/m/tom_cruise) Not all polar questions will necessarily have a yes/no answer; the expected resolution of a polar question is a StateOfAffairs. e.g. [is chocolate good for you] : FoodItemAttribute.polar(/m/chocolate, /m/healthy) which may not have a simple yes/no answer. See go/mrf-polar-questions for details.",
      "id": "KnowledgeAnswersMarkerPolarQuestion",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersMarkerStateOfAffairs": {
      "description": "Indicates a reference to a particular state of affairs denoted by the expression encompassed by the FunctionCall this appears on. The state may be actual e.g. [new york is a city] : IsA.state(/m/new_york, /m/city) or not e.g. [1+1=3] : Addition.state(Sum=3, Addend=1, Addend=1) The state can also represent an proposition of an action, e.g. [cinar gave jason a cookie] : Give.state(Giver=cinar, Receiver=jason, Object=cookie) See go/mrf-polar-questions for details.",
      "id": "KnowledgeAnswersMarkerStateOfAffairs",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersMeaningSchemaKey": {
      "description": "The primary key for an intent. Next ID: 3",
      "id": "KnowledgeAnswersMeaningSchemaKey",
      "properties": {
        "deprecatedVersion": {
          "description": "The version has been changed to be defined as a horizontal version on the entire meaning catalog instead of per-schema.",
          "format": "int64",
          "type": "string"
        },
        "mid": {
          "description": "The minted MID for an intent.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersMeaningSchemaSlotKey": {
      "description": "The primary key for a MeaningSchema slot. Next ID: 3 For //depot/google3/logs/proto/knowledge/interpretation/intent_query.proto in the \"ThenChange\", please update Argument.SlotKey. LINT.IfChange",
      "id": "KnowledgeAnswersMeaningSchemaSlotKey",
      "properties": {
        "mid": {
          "description": "The minted MID for the slot. This ID uniquely identifies the slot globally.",
          "type": "string"
        },
        "uniqueId": {
          "description": "A stable unique ID for this intent minted from go/uniqueid. NOTE: This is considered a private field used only for internal Intent Catalog purposes (i.e. as a source ID for generating this intent's associated MID). Additionally, this field is only populated on the schema. TODO (b/168907943): Move \"unique_id\" out of MeaningSchemaSlotKey proto message. Note: Please do not use this field. It is going to be moved out of this proto message.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersMeasurementType": {
      "description": "A MeasurementType configures a value that consists of a measurement. The expected value should have a number and a mid representing the unit. Note: this is currently only used for attribute answer value types. Configuration intent slot as measurement is yet to be supported (or instead we should universally use SemanticType).",
      "id": "KnowledgeAnswersMeasurementType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersNormalizedStringType": {
      "description": "A NormalizedStringType configures a value that is one of the listed normalized_values. An arbitrary mapping from input strings to normalized_values can be specified in the local intent config. Only alphabetical strings can be used as normalized_values. This type should NOT be used for: - Mids, ids, dates, or other structured data. Use an annotator instead, and address any quality issues at the annotator level. - Simplifying grammar rules. If you are not using the normalized_values in your question semantics, you should remove the slot. Use additional query_examples instead.",
      "id": "KnowledgeAnswersNormalizedStringType",
      "properties": {
        "normalizedValue": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersNumberType": {
      "description": "A NumberType configures a value whose type is intended to be numeric.",
      "id": "KnowledgeAnswersNumberType",
      "properties": {
        "keepAsString": {
          "description": "If true, the semantics of the NumberType argument are retained as a string, rather than being converted to a float-type object. This option is particularly useful in cases where leading 0s in the user input are meaningful, e.g. for zip codes or sports jersey numbers. For the user- specified value \"01\", for instance, the PathQuery semantics will be: def $Slot \"01\"",
          "type": "boolean"
        },
        "rangeConstraint": {
          "$ref": "KnowledgeAnswersRangeConstraint",
          "description": "Range constraint limits the set of numbers accepted by this type. The constraint applies to all subtypes. Currently, this constraint is only enforced in Loose Parser."
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "subType": {
          "description": "sub_type is a list of the NumberSubTypes which are accepted. If the list is empty, that means all numeric or ordinal values are accepted. If multiple values are specified, then this value accepts any of the sub_types in the list.",
          "items": {
            "enum": [
              "NONE",
              "ORDINAL",
              "NUMERIC",
              "INTEGER",
              "FLOAT"
            ],
            "enumDescriptions": [
              "Matches either numeric or ordinal values.",
              "Matches only ordinal numbers.",
              "Matches only numeric values (e.g. \"1\", but not \"1st\" or \"first\"). This matches either integers or floating-point numbers.",
              "This matches ONLY integers.",
              "This matches ONLY floating-point numbers."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersOpaqueAogType": {
      "description": "Custom opaque type used by actions-on-google in-dialog queries. See go/3p-custom-intents-wrt-meaning-catalog",
      "id": "KnowledgeAnswersOpaqueAogType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueAppAnnotationType": {
      "id": "KnowledgeAnswersOpaqueAppAnnotationType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueAudioType": {
      "id": "KnowledgeAnswersOpaqueAudioType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueCalendarEventType": {
      "id": "KnowledgeAnswersOpaqueCalendarEventType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueCalendarEventWrapperType": {
      "description": "Used for sensitive calendar events that require additional BUILD visibility protection. See go/multi-account-event-representation.",
      "id": "KnowledgeAnswersOpaqueCalendarEventWrapperType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueCalendarReferenceType": {
      "id": "KnowledgeAnswersOpaqueCalendarReferenceType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueComplexQueriesRewriteType": {
      "id": "KnowledgeAnswersOpaqueComplexQueriesRewriteType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueComponentReferenceIndexType": {
      "id": "KnowledgeAnswersOpaqueComponentReferenceIndexType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueDeviceIdType": {
      "id": "KnowledgeAnswersOpaqueDeviceIdType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueDeviceType": {
      "id": "KnowledgeAnswersOpaqueDeviceType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueDeviceUserIdentityType": {
      "id": "KnowledgeAnswersOpaqueDeviceUserIdentityType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueHomeAutomationDeviceType": {
      "id": "KnowledgeAnswersOpaqueHomeAutomationDeviceType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueLocationType": {
      "id": "KnowledgeAnswersOpaqueLocationType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueMediaType": {
      "id": "KnowledgeAnswersOpaqueMediaType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueMessageNotificationType": {
      "id": "KnowledgeAnswersOpaqueMessageNotificationType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueMoneyType": {
      "id": "KnowledgeAnswersOpaqueMoneyType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueNewsProviderType": {
      "id": "KnowledgeAnswersOpaqueNewsProviderType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueOnDeviceType": {
      "id": "KnowledgeAnswersOpaqueOnDeviceType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaquePersonType": {
      "id": "KnowledgeAnswersOpaquePersonType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaquePersonalIntelligenceEntityType": {
      "description": "Entity parsed from manual grammar interpretation in the Personal Intelligence domain.",
      "id": "KnowledgeAnswersOpaquePersonalIntelligenceEntityType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueProductivityListItemType": {
      "id": "KnowledgeAnswersOpaqueProductivityListItemType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueRecurrenceType": {
      "id": "KnowledgeAnswersOpaqueRecurrenceType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueReminderType": {
      "id": "KnowledgeAnswersOpaqueReminderType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueShoppingMerchantType": {
      "id": "KnowledgeAnswersOpaqueShoppingMerchantType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueShoppingOfferType": {
      "id": "KnowledgeAnswersOpaqueShoppingOfferType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueShoppingProductExpressionType": {
      "id": "KnowledgeAnswersOpaqueShoppingProductExpressionType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueShoppingProductType": {
      "id": "KnowledgeAnswersOpaqueShoppingProductType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueShoppingStoreType": {
      "id": "KnowledgeAnswersOpaqueShoppingStoreType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueTimerType": {
      "id": "KnowledgeAnswersOpaqueTimerType",
      "properties": {},
      "type": "object"
    },
    "KnowledgeAnswersOpaqueType": {
      "description": "Note: OpaqueType is deprecated and addition of new fields is not allowed. Refer to go/opaque_type for details. If you think this is the only way to implement your feature, attend an office hours (go/meaning-help) and discuss with the MRF team. An OpaqueType configures a value whose type is only interpretable by _specific_ clients of the intent catalog. This means horizontal 'features' like pretty printing, correct logging, intent blacklisting and signal aggregation will not work for opaque value types. It has a field for each type in IntentQuery that is not covered by a non-opaque type (specifically: protocol messages). The fields are themselves messages declared in this file. The specific opaque value types must be empty messages. If you find a need to add any fields to these messages, make them non-opaque and implement all of the code to treat them as first class types. It is allowable for a value to have more than one of the opaque types. See http://go/opaque-type-for-value-type. LINT.IfChange Next Id: 31",
      "id": "KnowledgeAnswersOpaqueType",
      "properties": {
        "aogType": {
          "$ref": "KnowledgeAnswersOpaqueAogType"
        },
        "appAnnotationType": {
          "$ref": "KnowledgeAnswersOpaqueAppAnnotationType"
        },
        "audioType": {
          "$ref": "KnowledgeAnswersOpaqueAudioType"
        },
        "calendarEventType": {
          "$ref": "KnowledgeAnswersOpaqueCalendarEventType"
        },
        "calendarEventWrapperType": {
          "$ref": "KnowledgeAnswersOpaqueCalendarEventWrapperType"
        },
        "calendarReferenceType": {
          "$ref": "KnowledgeAnswersOpaqueCalendarReferenceType"
        },
        "complexQueriesRewriteType": {
          "$ref": "KnowledgeAnswersOpaqueComplexQueriesRewriteType"
        },
        "componentReferenceType": {
          "$ref": "KnowledgeAnswersOpaqueComponentReferenceIndexType"
        },
        "deviceIdType": {
          "$ref": "KnowledgeAnswersOpaqueDeviceIdType"
        },
        "deviceType": {
          "$ref": "KnowledgeAnswersOpaqueDeviceType"
        },
        "deviceUserIdentityType": {
          "$ref": "KnowledgeAnswersOpaqueDeviceUserIdentityType"
        },
        "homeAutomationDeviceType": {
          "$ref": "KnowledgeAnswersOpaqueHomeAutomationDeviceType"
        },
        "locationType": {
          "$ref": "KnowledgeAnswersOpaqueLocationType"
        },
        "mediaType": {
          "$ref": "KnowledgeAnswersOpaqueMediaType"
        },
        "messageNotificationType": {
          "$ref": "KnowledgeAnswersOpaqueMessageNotificationType"
        },
        "moneyType": {
          "$ref": "KnowledgeAnswersOpaqueMoneyType"
        },
        "narrativeNewsProviderType": {
          "$ref": "KnowledgeAnswersOpaqueNewsProviderType"
        },
        "onDeviceType": {
          "$ref": "KnowledgeAnswersOpaqueOnDeviceType"
        },
        "personType": {
          "$ref": "KnowledgeAnswersOpaquePersonType"
        },
        "personalIntelligenceEntityType": {
          "$ref": "KnowledgeAnswersOpaquePersonalIntelligenceEntityType"
        },
        "productivityListItemType": {
          "$ref": "KnowledgeAnswersOpaqueProductivityListItemType"
        },
        "recurrenceType": {
          "$ref": "KnowledgeAnswersOpaqueRecurrenceType"
        },
        "reminderType": {
          "$ref": "KnowledgeAnswersOpaqueReminderType"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "shoppingMerchantType": {
          "$ref": "KnowledgeAnswersOpaqueShoppingMerchantType"
        },
        "shoppingOfferType": {
          "$ref": "KnowledgeAnswersOpaqueShoppingOfferType"
        },
        "shoppingProductExpressionType": {
          "$ref": "KnowledgeAnswersOpaqueShoppingProductExpressionType"
        },
        "shoppingProductType": {
          "$ref": "KnowledgeAnswersOpaqueShoppingProductType"
        },
        "shoppingStoreType": {
          "$ref": "KnowledgeAnswersOpaqueShoppingStoreType"
        },
        "timerType": {
          "$ref": "KnowledgeAnswersOpaqueTimerType"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersPlexityRequirement": {
      "description": "Plexity is a conceptual distinction between viewing something (a slot filler, for example) as a single individual, or as a complex concept consisting of multiple individuals or subparts. Note that plexity is not the same as (or correlated with) either grammatical number or with distributive and collective interpretations of the slot. The PlexityRequirement proto and Plexity enum are defined outside ValueType as we may move the plexity specification to a different place in the intent protos in future.",
      "id": "KnowledgeAnswersPlexityRequirement",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "simplePlexity": {
          "description": "Simple plexity: the slot's filler must allow the specified plexity value, for example it must contain multiple individuals if the plexity is MULTIPLEX.",
          "enum": [
            "UNSPECIFIED_PLEXITY",
            "UNIPLEX",
            "MULTIPLEX",
            "ANY_PLEXITY"
          ],
          "enumDescriptions": [
            "Plexity is unknown or unspecified.",
            "Viewed as a single individual. Potential example: the output slot of Ordinal, i.e. the meaning of [the third spielberg movie].",
            "Viewed as consisting of multiple individuals or subparts. Example: the Last.list slot \"game in NBA season\" in [last game in NBA season].",
            "Either uniplex or multiplex. Example: the Buy.product slot for [buy] in [buy a book], [buy a book and a magazine], [buy everything grimm wrote]."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersPolarQuestionType": {
      "description": "A special type representing a polar question.",
      "id": "KnowledgeAnswersPolarQuestionType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersRangeConstraint": {
      "id": "KnowledgeAnswersRangeConstraint",
      "properties": {
        "max": {
          "$ref": "KnowledgeAnswersRangeConstraintRangeEndpoint"
        },
        "min": {
          "$ref": "KnowledgeAnswersRangeConstraintRangeEndpoint"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersRangeConstraintRangeEndpoint": {
      "id": "KnowledgeAnswersRangeConstraintRangeEndpoint",
      "properties": {
        "isExclusive": {
          "description": "If true, then this endpoint's value is not included in the range.",
          "type": "boolean"
        },
        "value": {
          "description": "The value of this endpoint",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSameType": {
      "id": "KnowledgeAnswersSameType",
      "properties": {
        "slotName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSemanticType": {
      "description": "A SemanticType configures a value determined by another source, in particular another intent or a semantic frame. See go/unifying-intents and go/framery.",
      "id": "KnowledgeAnswersSemanticType",
      "properties": {
        "allowAll": {
          "description": "If true, is compatible with a schema whose answer_type is any semantic_type including empty (since by default schemas return themselves as semantic_types (b/211438997). This is used primarily for slot composition. Example: for the slot name: Operand type { semantic_type { allow_all: true } entity_type {} } * An entity_type or a schema with answer_type 'entity_type' can fill Operand. * A schema with either (a) no answer_type or (b) answer_type with !semantic_type.names().empty() can fill Operand * A schema with answer_type 'date' CAN NOT fill Operand. Note that when there is an explicit answer_type, the 'self' semantic_type is not considered.",
          "type": "boolean"
        },
        "includesContainingIntent": {
          "description": "Determines whether or not the meaning schema that contains this semantic_type conforms to a function call with the name and arguments taken from the meaning schema. As it refers to the \"containing_intent\", this field should only be set in a semantic_type declared in an intent's type_members field. The behavior of this field is undefined in other cases, for example, declaring the type of an intent slot. On Assistant, we use meaning schemas for argument types to represent both function call values as well as a reusable tool to host other argument values (opaque types, normalized strings, subsets of entities) across intents. Teams need this information to run conformance checks and annotate new data. Example: If the intents below are in the intent catalog, then: - Intent(slot=\"some string\") is conformant, because Type has string_type{} in its type_members. - Intent(slot=Type()) is not conformant, because Type has set semantic_type.includes_containing_intent to false. - Intent(slot=SubType()) is conformant, because type_members is not inherited. { id: \"Intent\" slot: { name: \"slot\" type: { semantic_type { name: \"Type\" }} } } { id: \"Type\" type_members { string_type{} semantic_type { includes_containing_intent: false } } } { id: \"SubType\" parent { id: \"Type\" relationship_type: SUBTYPE } }",
          "type": "boolean"
        },
        "name": {
          "description": "Names of valid sources of the semantics (for example: a frame or an intent).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "nameRemodelings": {
          "description": "Contains data about current schema remodelings at the SemanticType name level. The \"name\" field contains all possible semantic type names and \"semantic_type_name_remodelings\" acts as an overlay to determine which ones to surface based on which schema remodeling IDs are requested. For more information see go/meaning-remodeling-framework.",
          "items": {
            "$ref": "NlpMeaningSemanticTypeNameMeaningRemodelings"
          },
          "type": "array"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityArgumentEvalPolicy": {
      "description": "Policy controlling argument level eval.",
      "id": "KnowledgeAnswersSensitivityArgumentEvalPolicy",
      "properties": {
        "policyName": {
          "description": "Optional cannery policy name. If it presents then Intent Scrubber will use the corresponding Cannery rule for argument scrubbing and redaction instead. It should only be used for existing complex argment value types such as HomeAutomationDevice.",
          "type": "string"
        },
        "redactQuerySpan": {
          "description": "Redact corresponding span of the string query.",
          "type": "boolean"
        },
        "replacement": {
          "description": "Customized replacement phrase, if missing ${ArgumentName}_REDACTED is used as default.",
          "type": "string"
        },
        "scrubArgumentValue": {
          "description": "Scrub argument value and signals before saving to eval storage. If not set, 1) inherit the policy from the outer argument if there is one (for nested intents); 2) finally default to type based scrubbing: see go/argument-type-scrubbing.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityInstruction": {
      "description": "Instructions (eg., logging, disambiguation, ads serving) of handling a sensitive intent and its data. LINT.IfChange NextId: 8",
      "id": "KnowledgeAnswersSensitivityInstruction",
      "properties": {
        "argument": {
          "$ref": "KnowledgeAnswersSensitivityInstructionArgument"
        },
        "intent": {
          "$ref": "KnowledgeAnswersSensitivityInstructionIntent"
        },
        "legacyAssistantSensitivity": {
          "$ref": "SearchPolicyRankableSensitivity",
          "description": "This field is for backward compatibility."
        },
        "multiAccountAllowed": {
          "description": "Controls whether a top-level intent is multi-account approved. NLU will do go/cross-account-understanding only for intents with this bit on. Also, this bit should be propagated to user turn Attentionl Entities to extend protection of cross-account data to next turns. In principle fulfillment services (e.g., Monastery) should only dispatch such intents to multi-account approved fulfillers (schemas), at least when the user has a linked dasher account. The Assistant runtime policy engine should treat a query as dasher data if 1) this bit is true in the string redaction, and 2) the user has a linked dasher account, and apply a more restrictive rule for whitelisting, regardless of the actual account provenance in Sensitivity. Example: [User logged in to their personal gmail account.] Q1: \"Schedule a meeting tiltled okr review at 3pm\". Assistant: \"Should I scheduled it on your xyz@gmail.com account?\" Q2: \"No, add it to my xyz@bigcorp.com account.\" We don't know Q1 is dasher data until Q2. To prevent leaking of Q1 to non-dasher approved binaries, this bit should be used as a proactive measure. It might introduce some over-triggering (e.g., user says \"Yes\" in Q2), but is much better than blindly treating every query as dasher, not considering whether it actually triggers any multi-account capable intents or not (see b/164420114 for example).",
          "type": "boolean"
        },
        "previousQuery": {
          "$ref": "KnowledgeAnswersSensitivityInstructionPreviousQuery"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityInstructionArgument": {
      "description": "Slot/Argument level instructions.",
      "id": "KnowledgeAnswersSensitivityInstructionArgument",
      "properties": {
        "eval": {
          "$ref": "KnowledgeAnswersSensitivityArgumentEvalPolicy"
        },
        "logging": {
          "$ref": "KnowledgeAnswersSensitivityLoggingPolicy"
        },
        "serving": {
          "$ref": "KnowledgeAnswersSensitivityServingPolicy"
        },
        "storage": {
          "$ref": "KnowledgeAnswersSensitivityStoragePolicy"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityInstructionIntent": {
      "description": "Intent level instructions apply to the entire intent and all its argument values.",
      "id": "KnowledgeAnswersSensitivityInstructionIntent",
      "properties": {
        "eval": {
          "$ref": "KnowledgeAnswersSensitivityIntentEvalPolicy"
        },
        "footprints": {
          "$ref": "KnowledgeAnswersSensitivityMyActivityPolicy"
        },
        "logging": {
          "$ref": "KnowledgeAnswersSensitivityLoggingPolicy"
        },
        "serving": {
          "$ref": "KnowledgeAnswersSensitivityServingPolicy"
        },
        "storage": {
          "$ref": "KnowledgeAnswersSensitivityStoragePolicy"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityInstructionPreviousQuery": {
      "description": "Instructions for knowledge_context.PreviousQuery. See go/apps-userdata-guidelines.",
      "id": "KnowledgeAnswersSensitivityInstructionPreviousQuery",
      "properties": {
        "logging": {
          "$ref": "KnowledgeAnswersSensitivityLoggingPolicy"
        },
        "serving": {
          "$ref": "KnowledgeAnswersSensitivityServingPolicy"
        },
        "storage": {
          "$ref": "KnowledgeAnswersSensitivityStoragePolicy"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityIntentEvalPolicy": {
      "description": "Policy controlling intent level eval.",
      "id": "KnowledgeAnswersSensitivityIntentEvalPolicy",
      "properties": {
        "allArguments": {
          "$ref": "KnowledgeAnswersSensitivityArgumentEvalPolicy",
          "description": "Policy for all arguments, so no need to repeat on every argument."
        },
        "enabled": {
          "description": "Controls whether to enabled limited logging (rpc whitelisting + GWS log query redaction) if the intent wins post-fulfillment ranking.",
          "type": "boolean"
        },
        "nestedIntentOnly": {
          "description": "The eval policy won't apply if the annotated intent is a root. This check is majorly to prevent calling IntentScrubber halfway from InterpretationScrubber via nested intents.",
          "type": "boolean"
        },
        "scrubEntireIntent": {
          "description": "Scrub entire intent before saving to eval storage, leaving only intent name and sensitivity info.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityLoggingPolicy": {
      "description": "Policies controlling the logging.",
      "id": "KnowledgeAnswersSensitivityLoggingPolicy",
      "properties": {
        "scrubArgumentValue": {
          "description": "The contents of the argument value should be scrubbed before being written to logs.",
          "type": "boolean"
        },
        "scrubContext": {
          "description": "If this is set to true, this Sensitivity's presence will result in QRewrite to enable AS logging to scrub any discourse context.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityMyActivityPolicy": {
      "description": "Policy controlling MyActivity.",
      "id": "KnowledgeAnswersSensitivityMyActivityPolicy",
      "properties": {
        "myActivityRedactedAction": {
          "enum": [
            "UNKNOWN_ACTION",
            "REPLY_TO_BROADCAST",
            "INITIATE_CALL",
            "SEARCH_EMAIL",
            "SEND_SMS",
            "SEND_MESSAGE",
            "SEND_EMAIL",
            "SEND_CHAT_MESSAGE",
            "VIEW_AGENDA",
            "SHOW_CALENDAR_EVENT",
            "ADD_CALENDAR_EVENT",
            "DELETE_CALENDAR_EVENT",
            "MODIFY_CALENDAR_EVENT",
            "SEARCH_CALENDAR",
            "SEARCH_TEXT_MESSAGE",
            "REPLY_TO_MESSAGE",
            "REPLY_TO_NOTIFICATION",
            "READ_MESSAGE_NOTIFICATION",
            "REPLY_TO_READ_MESSAGE_NOTIFICATION",
            "SEARCH_GMAIL",
            "YOUTUBE_KIDS",
            "SEND_DIGITAL_OBJECT",
            "SEND_FEEDBACK",
            "SHARE_PHOTO",
            "SHARE_VIDEO",
            "SHARE_MUSIC",
            "SHARE_SCREENSHOT",
            "SHARE_WEBPAGE",
            "REDIAL_CALL",
            "RETURN_CALL",
            "RETURN_MISSED_CALL",
            "ROUTINE",
            "DIAL_INTO_MEETING",
            "SHARE_DIGITAL_OBJECT",
            "COMPOSE_EMAIL",
            "FIND_ON_APP_OR_BROWSER",
            "KEYBOARD_DICTATION",
            "SEARCH_GSUITE",
            "JOIN_MEETING",
            "CREATE_MEETING",
            "CREATE_MEMORY",
            "IN_CALL_PUNT",
            "TELL_MY_FAMILY",
            "ADD_REMINDER",
            "SHOW_REMINDER",
            "UPDATE_REMINDER",
            "DELETE_REMINDER",
            "SHOW_LIST",
            "MODIFY_LIST",
            "SHOW_NOTE",
            "MODIFY_NOTE",
            "READ_SLEEP",
            "WRITE_SLEEP",
            "READ_ACTIVITY",
            "WRITE_ACTIVITY",
            "READ_NUTRITION",
            "WRITE_NUTRITION",
            "READ_WELLNESS",
            "WRITE_WELLNESS",
            "MAKE_BROADCAST"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "myActivityRedactionKey": {
          "description": "This field will be translated by footprints and is used to describe the content that was redacted that will be displayed to the user in MyActivity.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivitySensitivity": {
      "description": "Canonical representation of query sensitivites. See go/sensitive-intents for more details.",
      "id": "KnowledgeAnswersSensitivitySensitivity",
      "properties": {
        "accountProvenance": {
          "description": "Used to annotate the provenace of cross-account personal data. See go/cross-account-understanding. Sensitivity could be annotated at query, intent, and argument levels. Query and intent could have data from multiple accounts, so this field is repeated. A sensitive knowledge_context.PreviousQuery might be dropped to prevent leaking cross-account data via Genie rewrite. For arguments, the best practice is to not blend multi-account data, and this field should be treated as singular to make ownership clear. When publishing attentional entities, contextual NLU might drop an argument that contains data from a different account for data protection. Mixing multi-account data in one argument will cause data from the primary account to be dropped altogether, which is an unnecessary quality loss.",
          "items": {
            "$ref": "QualityQrewriteAccountProvenance"
          },
          "type": "array"
        },
        "instruction": {
          "$ref": "KnowledgeAnswersSensitivityInstruction",
          "description": "Instruction of handling sensitive intent/argument data. Can be specified in Intent Catalog."
        },
        "source": {
          "description": "This should be systematically added without requiring the feature developers to add a source. This is for debug purpose as to whether the Sensitivity's trace/path included any of landmark code path helpful for tracing back the sensitivity sources. One should add a new source when one sees fits. It's chronological order as to which source is added first. One should not manually add a source. The same source can be repeated if the Sensitivity object went through the same code path twice.",
          "items": {
            "enum": [
              "UNKNOWN_SOURCE",
              "INTENT_CATALOG",
              "GENIE_REWRITER",
              "FUNCTION_CALL_ARGUMENT_VALUE",
              "ATTENTIONAL_ENTITY",
              "PII_DETECTOR",
              "DIALOG_STATE",
              "ON_DEVICE",
              "FUNCTION_CALL",
              "END_OF_QREWRITE",
              "SYSTEM_RESPONSE",
              "DIALOG_INTENT_STATE",
              "ANALYZER_POST_PROCESSOR",
              "SAGE",
              "ANNOTATION_ARGUMENT_VALUE",
              "DIALOG_INTENT_STATE_INTENT",
              "DIALOG_INTENT_STATE_INTENT_CONTEXTUAL",
              "IGDP"
            ],
            "enumDescriptions": [
              "",
              "This is reserved for Intent (FunctionCall.sensitivity) Sensitivity that comes from intent catalog's definition.See go/sensitive-intents.",
              "Sensitivity of the current query can be pulled from sensitive context, such as a previous query and attentional entities, by Genie Rewriter. See go/sensitive-ae#heading=h.t81b1cz8i2l2.",
              "Sensitivity of the current query can be due to intent_query's Argument.value.sensitivity proto field as opposed to the free-form legacy interp extension's free-form value. Argument.value.sensitivity May be set due to IntentCatalog definition or to inheritance from an attentional entity that replaced the argument's value. In that case, we shall see both sources present in the repeated field. Ex: source: INTENT_CATALOG source: ATTENTIONAL_ENTITY source: FUNCTION_CALL_ARGUMENT_VALUE",
              "Sensitivity of the current query can be due to inheriting the sensitivity of either system-turn or user-turn attentional entity. User-turn AE sensitivity may come from intent catalog but becomes AE when AttentionalEntityReader converts the user-turn argument value as an AE. Ex: source: INTENT_CATALOG source: FUNCTION_CALL_ARGUMENT_VALUE source: ATTENTIONAL_ENTITY",
              "Until its complete deprecation, the legacy SensitivityMode created by PiiDetector in QRewrite is wrapped around knowledge::answers::Sensitivity and is attached to Interpretation as a repeated extension.",
              "Sensitivity can arise due to the current query being a follow-on query in a dialog.",
              "This is set if a SensitivityMode is set on device (like Marble) and the server is converting it into a full Sensitivity proto. This includes only previous queries marked by the device.",
              "Whether the sensitivity is read from FunctionCall.sensitivity",
              "When Interp Sensitivity is finalized before outputing from QRewrite.",
              "When Sensitivity is created or tagged based on the system response, such as components in the fulfillment stage.",
              "When the sensitivity is copied to DialogIntentState.",
              "When the sensitivity is propagated by AnalyzerResponseHackPostProcessor.",
              "When the sensitivity is propagated by Sage.",
              "When the sensitivity is from Annotation.argument.value.sensitivity.",
              "When the sensitivity is from DialogIntentState.intent.sensitivity.",
              "When the sensitivity is from DialogIntentState.intent.contextual_sensitivity.",
              "When the sensitivity is propagated by IGDP via intent conversion."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "type": {
          "description": "Sensitivity type. See the enum definition below.",
          "enum": [
            "UNKNOWN_TYPE",
            "INTENT",
            "CONTEXTUAL"
          ],
          "enumDescriptions": [
            "",
            "go/sensitive-intents or cs/f:pii_detector.cc",
            "go/contextual-sensitivity"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityServingPolicy": {
      "description": "Policies controlling RPC Whitelist at serving time.",
      "id": "KnowledgeAnswersSensitivityServingPolicy",
      "properties": {
        "enableRpcWhitelist": {
          "description": "If this is set to true, QRewrite will enable RPC Whitelist to be applied in Assistant Server and Genie Rewriter.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersSensitivityStoragePolicy": {
      "description": "Policies controlling the storage.",
      "id": "KnowledgeAnswersSensitivityStoragePolicy",
      "properties": {
        "encryptArgumentValue": {
          "description": "The contents of the argument value should be encrypted before being written to a persistent storage (even if the storage has short time-to-live). No-op when specified at intent level.",
          "type": "boolean"
        },
        "encryptQueryAnnotationData": {
          "description": "If this is set true, we encrypt QueryAnnotationDataProto prior to writing it to Footprint ASSISTANT_EPHEMERAL corpus. This enables restricting ACL to the data.",
          "type": "boolean"
        },
        "scrubAuxiliaryFieldsInConversationSnapshot": {
          "description": "If this is set to true, the following fields in ConversationSnapshot are scrubbed: * circulated_state.squery * spoken_query * All client_op arguments |from_assistant| interactions",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersStateOfAffairsType": {
      "description": "A special type representing a StateOfAffairs. Currently (as of 2021Q2) this is duplicative with semantic_type { name: \"StateOfAffairs\" } but we (mrf-team) will encourage clients to migrate to this new type.",
      "id": "KnowledgeAnswersStateOfAffairsType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersStringType": {
      "description": "A StringType configures a value whose type is intended to be arbitrary text.",
      "id": "KnowledgeAnswersStringType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "singleToken": {
          "description": "If true, this value will match a single token. If false, this value will match any nonzero number of tokens.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersTimeZoneType": {
      "description": "A TimeZoneType configures a value whose type is a timezone.",
      "id": "KnowledgeAnswersTimeZoneType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersTrackingNumberType": {
      "description": "A TrackingNumberType configures a value whose type is a TrackingNumber.",
      "id": "KnowledgeAnswersTrackingNumberType",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersTypeTrait": {
      "description": "A TypeTrait configures a value that has a property with any of the given trait_id. In practice this means: - any entity that has a metadata ID defined in the KP type_schema, - any intent that has a slot with the given ID. When comparing trait_id to metadata IDs or slot IDs, we lowercase and normalize for comparison.",
      "id": "KnowledgeAnswersTypeTrait",
      "properties": {
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings",
          "description": "Contains data about current schema remodelings at this ValueType level. For more information see go/meaning-remodeling-framework."
        },
        "traitId": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersUnionType": {
      "id": "KnowledgeAnswersUnionType",
      "properties": {
        "slotNames": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeAnswersValueType": {
      "description": "Specifies the allowed type(s) that a value can have, e.g. for a Slot. For example, having both entity_type and string_type present in a ValueType field of a Slot means that the Slot can take _either_ an an EntityType _or_ StringType as a value, and nothing else. It may be helpful to think of this proto as being called something like AllAllowedValueTypes. Next tag id: 25 LINT.IfChange",
      "id": "KnowledgeAnswersValueType",
      "properties": {
        "anyType": {
          "$ref": "KnowledgeAnswersAnyType",
          "description": "This type is meant to accept \"any\" type and allow any and all composition. As such, it should not be used for any composition algorithms, e.g. in Loose Parser. See more detailed discussion at go/any-type-in-mrf. This type may appear on an answer_type, implying that the output of that Meaning Schema is allowed to nest in any other slot. However, support for this is NOT implemented in Loose Parser due to risk of overcomposition, but the MRF Conformance checker allows for this. If you are thinking of using this, please contact mrf-team@."
        },
        "attributeType": {
          "$ref": "KnowledgeAnswersAttributeType"
        },
        "booleanType": {
          "$ref": "KnowledgeAnswersBooleanType"
        },
        "collectionType": {
          "$ref": "KnowledgeAnswersCollectionType"
        },
        "compoundType": {
          "$ref": "KnowledgeAnswersCompoundType"
        },
        "dateType": {
          "$ref": "KnowledgeAnswersDateType"
        },
        "dependencyType": {
          "$ref": "KnowledgeAnswersDependencyType",
          "description": "Used for configuring dynamic types to allow for type transparency. See: go/type-dependencies"
        },
        "durationType": {
          "$ref": "KnowledgeAnswersDurationType"
        },
        "entityType": {
          "$ref": "KnowledgeAnswersEntityType"
        },
        "inputCompositionConfig": {
          "description": "When specified on a slot's type, restricts composition based on the enum value. This does not mean anything when the value type is to be interpreted as an output_type.",
          "enum": [
            "UNSPECIFIED_COMPOSITION",
            "ALL_COMPOSITION",
            "PRIMITIVES_ONLY_COMPOSITION",
            "PRIMITIVES_AND_OPERATORS_OF_PRIMITIVES_COMPOSITION",
            "PRIMITIVES_AND_SEMANTIC_TYPES_COMPOSITION"
          ],
          "enumDescriptions": [
            "An unspecified value is required by enum best practices. It will not be used anywhere as the default is ALL_COMPOSITION.",
            "",
            "",
            "To handle cases where we have a Group of entities",
            "Allows primitives only, or specific FunctionCalls with explicitly listed semantic_types."
          ],
          "type": "string"
        },
        "measurementType": {
          "$ref": "KnowledgeAnswersMeasurementType"
        },
        "normalizedStringType": {
          "$ref": "KnowledgeAnswersNormalizedStringType",
          "description": "Note that normalized_string_type is NOT supported in the loose parser. A slot with this type will cause the intent to not be parsed."
        },
        "numberType": {
          "$ref": "KnowledgeAnswersNumberType"
        },
        "opaqueType": {
          "$ref": "KnowledgeAnswersOpaqueType"
        },
        "plexityRequirement": {
          "$ref": "KnowledgeAnswersPlexityRequirement"
        },
        "pluralityType": {
          "enum": [
            "ALL",
            "PLURAL_ONLY",
            "SINGULAR_ONLY"
          ],
          "enumDescriptions": [
            "Value can be singular or plural.",
            "Value is always plural.",
            "Value is always singular."
          ],
          "type": "string"
        },
        "polarQuestionType": {
          "$ref": "KnowledgeAnswersPolarQuestionType"
        },
        "semanticType": {
          "$ref": "KnowledgeAnswersSemanticType"
        },
        "stateOfAffairsType": {
          "$ref": "KnowledgeAnswersStateOfAffairsType"
        },
        "stringType": {
          "$ref": "KnowledgeAnswersStringType"
        },
        "timezoneType": {
          "$ref": "KnowledgeAnswersTimeZoneType"
        },
        "trackingNumberType": {
          "$ref": "KnowledgeAnswersTrackingNumberType"
        },
        "withTrait": {
          "$ref": "KnowledgeAnswersTypeTrait",
          "description": "Extra trait information for compound value types. Note: currently the semantics of having both the data type (e.g. \"entity_type\") and \"with_trait\" is an OR operation. Eg. HorizontalDateRestrict has a SetToModify slot that accepts some collections like /collection/films. And also intent queries with_trait date, start_date, etc."
        }
      },
      "type": "object"
    },
    "KnowledgeGraphDateTimeProto": {
      "description": "/////////// DATE //////////",
      "id": "KnowledgeGraphDateTimeProto",
      "properties": {
        "days": {
          "description": "A day of month, 1-31. If present, year and month must be present as well, and must form a valid date.",
          "format": "int32",
          "type": "integer"
        },
        "hours": {
          "description": "Hour of the day, 0-23",
          "format": "int32",
          "type": "integer"
        },
        "microseconds": {
          "description": "Microsecond, in the interval [0, 999999]. If present, seconds have to be present as well.",
          "format": "int32",
          "type": "integer"
        },
        "minutes": {
          "description": "Minute, 0-59. If present, hours have to be present as well.",
          "format": "int32",
          "type": "integer"
        },
        "months": {
          "description": "A month, 1-12. If present, year must be present as well.",
          "format": "int32",
          "type": "integer"
        },
        "seconds": {
          "description": "Second, in the interval [0, 60], where 60 is an exceptional value reserved for leap seconds. If present, minutes have to be present as well.",
          "format": "int32",
          "type": "integer"
        },
        "tzOffset": {
          "description": "Timezone offset in seconds (can be positive/negative). If present, hours have to be present as well If absent, we expect the time above to be in local time (a.k.a. civil time, go/httat#civil_time).",
          "format": "int64",
          "type": "string"
        },
        "years": {
          "description": "A year.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphNestedStruct": {
      "description": "A nested struct is a recursive tree structure for storing a set of triples. more info can be found at go/nested-struct-primer",
      "id": "KnowledgeGraphNestedStruct",
      "properties": {
        "predicateObjs": {
          "description": "predicate_objs.pred should be unique within the list.",
          "items": {
            "$ref": "KnowledgeGraphNestedStructPredicateObjs"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphNestedStructPredicateObjs": {
      "id": "KnowledgeGraphNestedStructPredicateObjs",
      "properties": {
        "objs": {
          "items": {
            "$ref": "KnowledgeGraphTripleObj"
          },
          "type": "array"
        },
        "pred": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphQualifier": {
      "description": "A qualifier represents an extra piece of context about an assertion/fact. See go/qualifiers-in-kg for more details.",
      "id": "KnowledgeGraphQualifier",
      "properties": {
        "pred": {
          "description": "The qualifier pred must be a qualifier property defined in KG schema as applying to the predicate of the triple this qualifier is attached to.",
          "type": "string"
        },
        "value": {
          "$ref": "KnowledgeGraphTripleObj"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphQualifierSet": {
      "description": "A QualifierSet represents a grouping of qualifiers that together with an SPO make up a logical assertion or fact. One triple can contain multiple qualifier sets and thus represent several different assertions about the same SPO.",
      "id": "KnowledgeGraphQualifierSet",
      "properties": {
        "qualifiers": {
          "items": {
            "$ref": "KnowledgeGraphQualifier"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphTriple": {
      "description": "A Triple is a representation of data with a Subject, a Predicate, and an Object, For example: (Triple, IS-A, \"data representation\"). Triples are a very good representation of data where the relationship between data points is significant, because the Object of a Triple can be the Subject of another Triple: (Triple, HAS-A, Subject) (Subject, IS-A, \"Term of a proposition\") The ease with which Triples can represent relationships makes them an excellent candidate for representing graphs. Next id: 21",
      "id": "KnowledgeGraphTriple",
      "properties": {
        "isNegation": {
          "description": "If is_negation is set to true then this triple is considered a statement that the fact is false. This allows for the storage of both what we know to be true and what we know to be false.",
          "type": "boolean"
        },
        "obj": {
          "$ref": "KnowledgeGraphTripleObj",
          "description": "obj is the value of a relationship."
        },
        "pred": {
          "description": "pred is an arbitrary node id representing the predicate (name) of a graph relationship.",
          "type": "string"
        },
        "provenance": {
          "items": {
            "$ref": "KnowledgeGraphTripleProvenance"
          },
          "type": "array"
        },
        "qualifierSets": {
          "description": "WARNING: This is currently defined for experimentation purposes only. Please do not set. Data set in this field will not be published to any systems downstream of Livegraph. Together with the SPO of this triple, each qualifier set here represents a different logical assertion/fact.",
          "items": {
            "$ref": "KnowledgeGraphQualifierSet"
          },
          "type": "array"
        },
        "sub": {
          "description": "sub is an arbitrary node id representing the source entity of a graph relationship.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphTripleObj": {
      "id": "KnowledgeGraphTripleObj",
      "properties": {
        "boolValue": {
          "type": "boolean"
        },
        "datetimeValue": {
          "$ref": "KnowledgeGraphDateTimeProto"
        },
        "doubleValue": {
          "format": "double",
          "type": "number"
        },
        "durationValue": {
          "description": "seconds",
          "format": "int64",
          "type": "string"
        },
        "idValue": {
          "description": "An id representing an entity (mid or hrid)",
          "type": "string"
        },
        "int64Value": {
          "format": "int64",
          "type": "string"
        },
        "locale": {
          "description": "The language code for the object value. It must be a BCP 47-compliant language tag (b/10005172). See also go/kg-data-l10n.",
          "type": "string"
        },
        "nestedStructValue": {
          "$ref": "KnowledgeGraphNestedStruct"
        },
        "protoValue": {
          "$ref": "KnowledgeGraphTripleObjProto"
        },
        "s2cellId": {
          "format": "uint64",
          "type": "string"
        },
        "stringValue": {
          "description": "A UTF-8 string value to be used for the following expected schema types: - /type/rawstring - /type/text - /type/key",
          "type": "string"
        },
        "uint64Value": {
          "format": "uint64",
          "type": "string"
        },
        "uriValue": {
          "description": "A UTF-8 string value to be used for expected type /type/uri - b/68760994.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphTripleObjProto": {
      "id": "KnowledgeGraphTripleObjProto",
      "properties": {
        "data": {
          "description": "The encoded proto data.",
          "format": "byte",
          "type": "string"
        },
        "descriptorFullName": {
          "description": "The full name of the proto descriptor, such as 'music.AlbumSummary'.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "KnowledgeGraphTripleProvenance": {
      "description": "Message containing information about the source of this triple. See go/kg-provenance for an explanation of the fields.",
      "id": "KnowledgeGraphTripleProvenance",
      "properties": {
        "accessRequired": {
          "description": "Specifies the contract or legal visibility required to see the Triple. See go/kg-triple-level-access-controls for details and background. Note that we use an int32 here so that we won't lose values when decoding on a stale binary. The int32 references to the enum storage_graph_bfg.Triple.Provenance.AccessRequirement.",
          "format": "int32",
          "type": "integer"
        },
        "creator": {
          "description": "Historically, this field was used to encode the Freebase User ID, Google username, or Google MDB group that was responsible for the pipeline that is producing this data. However, there is currently no horizontal validation in place, and as of Q3 2018, this field is used essentially as a free-form string by multiple data providers. NOTE: Do not use this field in new pipelines without first consulting with the OWNERS of this proto. ",
          "type": "string"
        },
        "datasetMid": {
          "description": "The dataset which asserted this data. Must be a valid mid. See go/kg-provenance",
          "format": "uint64",
          "type": "string"
        },
        "isSupportingData": {
          "description": "Indicates that the corresponding data is supporting evidence for reconciliation only, and is *not* an assertion that should be visible to other systems or to external users. Note that this also means that no provenances indicating supporting data will be visible in the composed graph. Please see go/supporting-kg-triples-design-doc for additional details and background.",
          "type": "boolean"
        },
        "lgMetadata": {
          "$ref": "StorageGraphBfgLivegraphProvenanceMetadata",
          "description": "Internal metadata used by Livegraph and possibly other horizontal KG infra systems. This is not part of the logical triple or its provenance, and contents may not be visible downstream of LG."
        },
        "policyMetadata": {
          "$ref": "StorageGraphBfgPolicyMetadata",
          "description": "Metadata specifying data governance policies. This information will be processed and enforced in KE systems. For more context, see go/ke-triple-dg-policy-and-metadata. WARNING: This field is WIP and please do not populate it without consulting ke-data-governance@."
        },
        "process": {
          "description": "An identifier for the process that asserted this triple.",
          "type": "string"
        },
        "restrictions": {
          "items": {
            "enum": [
              "REQUIRES_CITATION",
              "REQUIRES_PCOUNSEL_REVIEW",
              "UNRESTRICTED_WITHIN_GOOGLE_NO_3P_USE"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "sourceCategory": {
          "description": "Used to measure impact of 3P contributions. See go/ke-metrics.",
          "enum": [
            "THIRD_PARTY",
            "CURATION",
            "PARTNER_FEED",
            "EXTRACTION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "sourceDocId": {
          "description": "The websearch doc_id of the source_url. Used in conjunction with source_category for measuring 3P contributions.",
          "format": "int64",
          "type": "string"
        },
        "sourceUrl": {
          "description": "If the triple was extracted from the web, the source URL where the assertion was found. Used for citation if needed (see restrictions field below).",
          "type": "string"
        },
        "spiiCertification": {
          "$ref": "StorageGraphBfgSpiiCertification",
          "description": "A fact about potentially sensitive personal info (http://what/SPII) can be \"certified\" iff it meets specific requirements. See go/kg-spii-certification for details."
        }
      },
      "type": "object"
    },
    "KnowledgeVerticalsWeatherProtoUserSpecifiedLocation": {
      "description": "A user specified location to trigger weather for a specific location. Also it can be generalized for other verticals.",
      "id": "KnowledgeVerticalsWeatherProtoUserSpecifiedLocation",
      "properties": {
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "(Mandatory) Oyster ID."
        },
        "latLng": {
          "$ref": "GoogleTypeLatLng",
          "description": "(Mandatory) Coordinates of the location for which weather is requested."
        },
        "locationName": {
          "description": "The name to display. If specified it will override the formatted address of \"feature_id\".",
          "type": "string"
        },
        "mid": {
          "description": "MID corresponding to the location from feature_id.",
          "type": "string"
        },
        "timezone": {
          "description": "The timezone to display the current conditions observation time. Optional and will override the timezone of \"feature_id\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LegalCitation": {
      "id": "LegalCitation",
      "properties": {
        "CountryCode": {
          "description": "For Courts, the country the court is in. For Statues,? 3 leter country code ISO 3166 alpha2",
          "type": "string"
        },
        "ParseType": {
          "format": "int32",
          "type": "integer"
        },
        "State": {
          "description": "State or province of the court or statue (if applicable) What standard?",
          "type": "string"
        },
        "Type": {
          "description": "DocType",
          "format": "int32",
          "type": "integer"
        },
        "courtdocument": {
          "$ref": "LegalCitationCourtDocument"
        },
        "law": {
          "$ref": "LegalCitationLaw"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocument": {
      "description": "Information about a published version of the document. Not all references/documents will have this because some will be vendor and/or media neutral.",
      "id": "LegalCitationCourtDocument",
      "properties": {
        "ArguedBefore": {
          "description": "One entry per judge who listened to the case in this court",
          "items": {
            "$ref": "LegalPerson"
          },
          "type": "array"
        },
        "ArguedDate": {
          "$ref": "LegalDate"
        },
        "CertiorariCourtName": {
          "description": "For an appeal, the name of the lower court that sent this up Abbreviation form? Verbose form?",
          "type": "string"
        },
        "CertiorariRelationship": {
          "format": "int32",
          "type": "integer"
        },
        "CourtTerm": {
          "description": "Usually the name of a month. Not sure really what it means.",
          "type": "string"
        },
        "DecidedDate": {
          "$ref": "LegalDate",
          "description": "Various dates related to the generation of document most of these are opinion-centric"
        },
        "FiledDate": {
          "$ref": "LegalDate"
        },
        "MemoID": {
          "description": "Not sure what this is. But I've seen it.",
          "type": "string"
        },
        "ModifiedDate": {
          "$ref": "LegalDate"
        },
        "Syllabus": {
          "description": "A summary of the document or a syllabus for this document",
          "type": "string"
        },
        "court": {
          "$ref": "LegalCitationCourtDocumentCourt"
        },
        "opinioninfo": {
          "items": {
            "$ref": "LegalCitationCourtDocumentOpinionInfo"
          },
          "type": "array"
        },
        "perdocketinfo": {
          "items": {
            "$ref": "LegalCitationCourtDocumentPerDocketInfo"
          },
          "type": "array"
        },
        "pub": {
          "items": {
            "$ref": "LegalCitationCourtDocumentPub"
          },
          "type": "array"
        },
        "unknowndate": {
          "items": {
            "$ref": "LegalCitationCourtDocumentUnknownDate"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocumentCourt": {
      "id": "LegalCitationCourtDocumentCourt",
      "properties": {
        "DisplayName": {
          "description": "The name of the court to be displayed to users.",
          "type": "string"
        },
        "Level": {
          "description": "Maybe be redundant with the Name. We can remove this later if we don't find it useful. Court Level",
          "format": "int32",
          "type": "integer"
        },
        "Name": {
          "description": "Court id for matching records; \"name\" is a historic misnomer.",
          "type": "string"
        },
        "OriginalName": {
          "description": "The name of the court as taken directly from the source document",
          "type": "string"
        },
        "namecomponent": {
          "items": {
            "$ref": "LegalCitationCourtDocumentCourtNameComponent"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocumentCourtNameComponent": {
      "description": "The name broken down into its various components, such as core court, state, and district",
      "id": "LegalCitationCourtDocumentCourtNameComponent",
      "properties": {
        "Text": {
          "type": "string"
        },
        "Type": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocumentOpinionInfo": {
      "description": "A variety of opinions may be published as a single document. We have one OpinionInfo for each opinion About the \"CONCURRING\" opinion type: It means that a judge \"concurs\" to the conclusion (judegment) of the majority of the court, however, he may not agree with the argument in the primary opinion. If multiple judges \"concur\" or \"dissent\" the primary opinion, then one judge delivers their opinion, and other judges are said to \"join\" him.",
      "id": "LegalCitationCourtDocumentOpinionInfo",
      "properties": {
        "Bench": {
          "format": "int32",
          "type": "integer"
        },
        "DeliveredBy": {
          "$ref": "LegalPerson",
          "description": "if Type == PER_CURIAM, then DeliveredBy is unnecessary since it is delivered by the full court. Who delivered the opinion?"
        },
        "JoinedBy": {
          "$ref": "LegalPerson",
          "description": "Who agrees with the opinion"
        },
        "Type": {
          "description": "OpinionType",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocumentPerDocketInfo": {
      "description": "Information associated with a docket. Note that multiple dockets can be combined and argued as one and produce a single opinion",
      "id": "LegalCitationCourtDocumentPerDocketInfo",
      "properties": {
        "DocketID": {
          "description": "An alpha-numeric (usually, mostly numeric) string used to identify the case by the court",
          "type": "string"
        },
        "Petitioner": {
          "description": "Who is bringing the action? (X in X vs. Y)",
          "items": {
            "$ref": "LegalPerson"
          },
          "type": "array"
        },
        "PetitionerCounsel": {
          "description": "Who represents the petitioner?",
          "items": {
            "$ref": "LegalPerson"
          },
          "type": "array"
        },
        "Respondent": {
          "description": "Who is responding to the action? (Y in X vs. Y)",
          "items": {
            "$ref": "LegalPerson"
          },
          "type": "array"
        },
        "RespondentCounsel": {
          "description": "Who represents the respondent?",
          "items": {
            "$ref": "LegalPerson"
          },
          "type": "array"
        },
        "Topic": {
          "description": "The \"in re\" or \"matter of\" field.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocumentPub": {
      "id": "LegalCitationCourtDocumentPub",
      "properties": {
        "Page": {
          "description": "Page number",
          "type": "string"
        },
        "Paragraph": {
          "description": "Paragraph number",
          "type": "string"
        },
        "Reporter": {
          "description": "The publisher of the opinion. For example, 'U.S.' - United States Reports 'S. Ct.' - Supreme Court Reporter 'L. Ed. 2d' - Lawyers Edition Second Series",
          "type": "string"
        },
        "Volume": {
          "description": "For documents published by a court reporter. Vendor/Media neutral citations will probably not have this.",
          "format": "int32",
          "type": "integer"
        },
        "Year": {
          "description": "This is the publication year. In many citations, there is one year listed and it is typically the year the opinion was handed down. For example: Roe v. Wade, 410 U.S. 113 (1973) Occasionally, the publication year of the reporter is included. This happens typically when the law reporter volume numbers are numbered within a calendar year. For example, Swiss Bank Corp. v. Air Canada, [1988] 1 F.C. 71. It some (most?) areas, publication date is denoted by [] while opinion date is denoted by ().",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "LegalCitationCourtDocumentUnknownDate": {
      "description": "Dates that we didn't fully parse, so we don't know exactly what they are, but we are keeping in case it's all we have.",
      "id": "LegalCitationCourtDocumentUnknownDate",
      "properties": {
        "Date": {
          "$ref": "LegalDate"
        },
        "Description": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "LegalCitationLaw": {
      "id": "LegalCitationLaw",
      "properties": {
        "RevisionDate": {
          "$ref": "LegalDate"
        },
        "Status": {
          "description": "LawStatus",
          "format": "int32",
          "type": "integer"
        },
        "Type": {
          "description": "LawType",
          "format": "int32",
          "type": "integer"
        },
        "collectionname": {
          "$ref": "LegalCitationLawCollectionName"
        },
        "level": {
          "items": {
            "$ref": "LegalCitationLawLevel"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LegalCitationLawCollectionName": {
      "description": "this is used to store information about law collections Normalized is the normalized name for the law (e.g., USC for USCA and USCS) Source is the text that represents the law in the citation",
      "id": "LegalCitationLawCollectionName",
      "properties": {
        "Normalized": {
          "type": "string"
        },
        "Source": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "LegalCitationLawLevel": {
      "description": "Law have tree-like sturcture (title, section, etc), but the levels and their names are not fixed. e.g., we could have: US Constitution -> Article 3 -> Section 4, OR, US Code -> Title 12 -> Chapter 6 -> Sub-chapter I -> Section 602, OR, US Code -> Title 10 -> Sub-title A -> Part 2 -> Chapter 32 -> Section 523. We use a repeated group to represent this structure. NOTE: Always insert higher levels before lower levels,",
      "id": "LegalCitationLawLevel",
      "properties": {
        "Depth": {
          "description": "A counter that specifies the depth of the level in the parse",
          "format": "int32",
          "type": "integer"
        },
        "LevelTypeNormalized": {
          "description": "\"SECTION, TITLE, PART, etc.\"",
          "type": "string"
        },
        "LevelTypeSourceText": {
          "description": "\"Section, Sect., \u00a7, etc\"",
          "type": "string"
        },
        "LevelTypeString": {
          "description": "deprecated",
          "type": "string"
        },
        "Name": {
          "description": "The name of the chapter/section/etc.",
          "type": "string"
        },
        "Type": {
          "description": "deprecated",
          "format": "int32",
          "type": "integer"
        },
        "Value": {
          "description": "\"3\", \"42(a)\", etc",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LegalDate": {
      "id": "LegalDate",
      "properties": {
        "Day": {
          "format": "int32",
          "type": "integer"
        },
        "Month": {
          "format": "int32",
          "type": "integer"
        },
        "Year": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "LegalPerson": {
      "id": "LegalPerson",
      "properties": {
        "Description": {
          "type": "string"
        },
        "LastName": {
          "type": "string"
        },
        "OtherNames": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStyleAestheticsScoreSignals": {
      "description": "Aesthetics score of a style image. Check http://go/styleai-indexing-g3doc#aesthetic-model for more details about the Style AI Aesthetics Model.",
      "id": "LensDiscoveryStyleAestheticsScoreSignals",
      "properties": {
        "discretizedAestheticsScore": {
          "description": "Aesthetics score discretized into range [0, 100].",
          "format": "int32",
          "type": "integer"
        },
        "version": {
          "enum": [
            "VERSION_UNKNOWN",
            "AESTHETICS_V1",
            "AESTHETICS_V2"
          ],
          "enumDescriptions": [
            "",
            "V1 model is deprecated.",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStyleBoundingBox": {
      "description": "Bounding box with absolute integer coordinates.",
      "id": "LensDiscoveryStyleBoundingBox",
      "properties": {
        "x1": {
          "format": "int32",
          "type": "integer"
        },
        "x2": {
          "format": "int32",
          "type": "integer"
        },
        "y1": {
          "format": "int32",
          "type": "integer"
        },
        "y2": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStylePersonAttributes": {
      "description": "This message holds person attributes from the Person Interpreter model (go/person-interpreter) and the Style AI Iconic Person Scorer (go/styleai-indexing-g3doc#iconic-person-scorer) for the most iconic person in a style image. Discretization of float values is recommended by CDS for cheaper and more efficient storage. Next ID: 11",
      "id": "LensDiscoveryStylePersonAttributes",
      "properties": {
        "discretizedFaceVisibilityScore": {
          "description": "The visibility of the face of the most iconic person in the image discretized into range [0, 100].",
          "format": "int32",
          "type": "integer"
        },
        "discretizedFemaleConfidence": {
          "format": "int32",
          "type": "integer"
        },
        "discretizedMaleConfidence": {
          "description": "Male and female confidence scores are discretized into the [0, 100] range.",
          "format": "int32",
          "type": "integer"
        },
        "discretizedPredictedAge": {
          "description": "Age prediction is rounded to the first decimal place and multiplied by 10 (e.g. 12.3 -> 123). *** Not populated in Amarna for legal reasons. ***",
          "format": "int32",
          "type": "integer"
        },
        "discretizedVisualSaliencyScore": {
          "description": "The area ratio of the most iconic person to the whole image discretized into range [0, 100].",
          "format": "int32",
          "type": "integer"
        },
        "personBoundingBox": {
          "$ref": "LensDiscoveryStyleBoundingBox",
          "description": "Bounding box of the most iconic person in the image."
        },
        "personVisibilityScores": {
          "$ref": "LensDiscoveryStylePersonAttributesPersonVisibilityScores"
        },
        "predictedAgeBucket": {
          "description": "Bucketed version of the predicted age.",
          "enum": [
            "PERSON_AGE_UNKNOWN",
            "PERSON_AGE_YOUNG_ADULT",
            "PERSON_AGE_20_29",
            "PERSON_AGE_30_49",
            "PERSON_AGE_50_64",
            "PERSON_AGE_65_74",
            "PERSON_AGE_ABOVE_75"
          ],
          "enumDescriptions": [
            "",
            "",
            "Between 20 and 29 years old (inclusive).",
            "Between 30 and 49 years old (inclusive).",
            "Between 50 and 64 years old (inclusive).",
            "Between 65 and 74 years old (inclusive).",
            ""
          ],
          "type": "string"
        },
        "version": {
          "enum": [
            "VERSION_UNKNOWN",
            "LOOKNET_PERSON_V2B",
            "PERSON_INTERPRETATION_V1"
          ],
          "enumDescriptions": [
            "",
            "LookNet-Person v2b uses Person Visibility v1 model's outputs for person visibility predictions.",
            "Person Interpreter v1 (go/person-interpreter-v1) uses LookNet-Person v3 for person visibility predictions and replaces the dependence on three VSS modules: person_detection, person_pose and person_templates."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStylePersonAttributesPersonVisibilityScores": {
      "id": "LensDiscoveryStylePersonAttributesPersonVisibilityScores",
      "properties": {
        "discretizedPersonVisibilityScore": {
          "description": "A measure of the visibility of the most iconic person between [0, 100], derived by combining all label predictions by the Person Visibility model according to go/person-visibility-formula. Higher values indicate greater visibility while lower values indicate lesser visibility.",
          "format": "int32",
          "type": "integer"
        },
        "personVisibilityPredictions": {
          "description": "Repeated for # of PersonVisibility types.",
          "items": {
            "$ref": "LensDiscoveryStylePersonAttributesPersonVisibilityScoresPersonVisibilityPrediction"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStylePersonAttributesPersonVisibilityScoresPersonVisibilityPrediction": {
      "id": "LensDiscoveryStylePersonAttributesPersonVisibilityScoresPersonVisibilityPrediction",
      "properties": {
        "discretizedIconicPersonVisibilityConfidence": {
          "description": "Confidence score of the visibility type prediction discretized into range [0, 100].",
          "format": "int32",
          "type": "integer"
        },
        "iconicPersonVisibilityType": {
          "description": "Classification of how much of the body of the most iconic person in the image is visible.",
          "enum": [
            "PERSON_VISIBILITY_UNKNOWN",
            "PERSON_VISIBILITY_HEAD_AND_SHOULDERS_ONLY",
            "PERSON_VISIBILITY_HALF_LENGTH",
            "PERSON_VISIBILITY_THREE_QUARTER_LENGTH",
            "PERSON_VISIBILITY_FULL_LENGTH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStylePersonDetectionSignals": {
      "description": "This message holds bounding boxes of detected people in the image. Next ID: 3",
      "id": "LensDiscoveryStylePersonDetectionSignals",
      "properties": {
        "detectedPersons": {
          "description": "Information of all detected people in the image, sorted by decreasing size of the bounding box. We store a maximum of 10 detected people.",
          "items": {
            "$ref": "LensDiscoveryStylePersonDetectionSignalsDetectedPerson"
          },
          "type": "array"
        },
        "version": {
          "enum": [
            "VERSION_UNKNOWN",
            "FASTER_RCNN",
            "PERSON_INTERPRETATION_V1"
          ],
          "enumDescriptions": [
            "",
            "Faster-RCNN model is used with the LookNet-Person v2b person attributes model.",
            "Retrieved from person_interpretation module (go/person-interpreter-v1)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStylePersonDetectionSignalsDetectedPerson": {
      "description": "Holds information about a detected person in the image.",
      "id": "LensDiscoveryStylePersonDetectionSignalsDetectedPerson",
      "properties": {
        "boundingBox": {
          "$ref": "LensDiscoveryStyleBoundingBox",
          "description": "Bounding box of the detected person."
        }
      },
      "type": "object"
    },
    "LensDiscoveryStyleStyleImageTypeSignals": {
      "description": "Prediction of a style image type: Stage, Stock, Street or Outfits. Check http://go/styleai-indexing-g3doc#style-image-type-classifier for more details about the Style AI Style Image Type Classifier.",
      "id": "LensDiscoveryStyleStyleImageTypeSignals",
      "properties": {
        "styleImageTypePredictions": {
          "description": "Repeated for # of StyleImageType types.",
          "items": {
            "$ref": "LensDiscoveryStyleStyleImageTypeSignalsStyleImageTypePrediction"
          },
          "type": "array"
        },
        "version": {
          "enum": [
            "VERSION_UNKNOWN",
            "STYLE_IMAGE_TYPE_V1"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LensDiscoveryStyleStyleImageTypeSignalsStyleImageTypePrediction": {
      "id": "LensDiscoveryStyleStyleImageTypeSignalsStyleImageTypePrediction",
      "properties": {
        "discretizedStyleImageTypeConfidence": {
          "description": "Style image type confidence discretized into range [0, 100].",
          "format": "int32",
          "type": "integer"
        },
        "styleImageType": {
          "description": "Predicted style image type.",
          "enum": [
            "TYPE_UNKNOWN",
            "TYPE_STAGE",
            "TYPE_STOCK",
            "TYPE_STREET",
            "TYPE_OUTFITS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ListSnippetResponse": {
      "description": "Data to generate the list snippets UI.",
      "id": "ListSnippetResponse",
      "properties": {
        "header": {
          "$ref": "ListSnippetResponseRow"
        },
        "isTable": {
          "description": "Should list be formatted as a table?",
          "type": "boolean"
        },
        "row": {
          "items": {
            "$ref": "ListSnippetResponseRow"
          },
          "type": "array"
        },
        "totalRows": {
          "description": "The number of rows annotated in the doc, of which 'row' is a subset.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ListSnippetResponseRow": {
      "id": "ListSnippetResponseRow",
      "properties": {
        "column": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LocalWWWInfo": {
      "description": "Next Id: 36",
      "id": "LocalWWWInfo",
      "properties": {
        "address": {
          "items": {
            "$ref": "LocalWWWInfoAddress"
          },
          "type": "array"
        },
        "brickAndMortarStrength": {
          "format": "double",
          "type": "number"
        },
        "cluster": {
          "items": {
            "$ref": "LocalWWWInfoCluster"
          },
          "type": "array"
        },
        "docid": {
          "format": "uint64",
          "type": "string"
        },
        "geotopicality": {
          "$ref": "RepositoryAnnotationsGeoTopicality",
          "description": "Information about geo locations, rather than individual businesses."
        },
        "hours": {
          "items": {
            "$ref": "LocalWWWInfoOpeningHours"
          },
          "type": "array"
        },
        "isLargeChain": {
          "description": "Does this LocalWWWInfo represent a widely-distributed chain?",
          "type": "boolean"
        },
        "isLargeLocalwwwinfo": {
          "type": "boolean"
        },
        "phone": {
          "items": {
            "$ref": "LocalWWWInfoPhone"
          },
          "type": "array"
        },
        "siteSiblings": {
          "description": "These are per-document signals independent of any particular address.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "description": "These are for convenience during intermediate data processing, and should be cleared before the data gets into doc-joins.",
          "type": "string"
        },
        "wrapptorItem": {
          "items": {
            "$ref": "LocalWWWInfoWrapptorItem"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LocalWWWInfoAddress": {
      "description": "These are the addresses, phone numbers, and opening hours related to this document, or the local businesses mentioned on this document. We currently populate these fields from web extractions, i.e, from the data present explicitly on the document, but in future, they can also be filled with data coming from the local index. We populate addresses and phone numbers only if there are <= 4 addresses and phone numbers on the document, respectively. This is primarily for space reasons. ",
      "id": "LocalWWWInfoAddress",
      "properties": {
        "addrFprint": {
          "format": "uint64",
          "type": "string"
        },
        "address": {
          "$ref": "GeostoreAddressProto"
        },
        "latE7": {
          "format": "uint32",
          "type": "integer"
        },
        "lngE7": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "LocalWWWInfoCluster": {
      "id": "LocalWWWInfoCluster",
      "properties": {
        "addrFprint": {
          "format": "uint64",
          "type": "string"
        },
        "annotationConfidence": {
          "description": "Confidence score for business mention annotations which is copied from LocalEntityAnnotations::location_confidence.",
          "format": "float",
          "type": "number"
        },
        "clusterdocid": {
          "format": "uint64",
          "type": "string"
        },
        "clusterid": {
          "type": "string"
        },
        "confidence": {
          "description": "Probability that this is the authority page of the business. Same as LocalListing.authority_page_probability, only set for pages with page_type_flags & AUTHORITY.",
          "format": "float",
          "type": "number"
        },
        "featureType": {
          "description": "Feature type for this listing, from LocalListing::info::related_feature. A geostore::FeatureProto::TypeCategory. Intended primarily to indicate POI-ness (i.e., TYPE_ESTABLISHMENT_POI).",
          "format": "int32",
          "type": "integer"
        },
        "hours": {
          "$ref": "GeostoreTimeScheduleProto",
          "description": "Opening hours for the business, from Local attributes and/or extracted annotations."
        },
        "hoursSource": {
          "enum": [
            "LOCAL",
            "EXTRACTED_ONPAGE"
          ],
          "enumDescriptions": [
            "Data comes from attributes in the Local index.",
            "Data comes from annotations on this page."
          ],
          "type": "string"
        },
        "includeInIndex": {
          "type": "boolean"
        },
        "isPlusbox": {
          "description": "TODO(local-universal) Consider deleting is_plusbox once the new scheme that uses make_plusbox_visible rolled out.",
          "type": "boolean"
        },
        "latitudeE6": {
          "format": "int32",
          "type": "integer"
        },
        "level": {
          "description": "DEPRECATED / NO LONGER WRITTEN. URL path level from actual references to this webpage.",
          "format": "int32",
          "type": "integer"
        },
        "longitudeE6": {
          "format": "int32",
          "type": "integer"
        },
        "makePlusboxVisible": {
          "description": "A hint for frontend to decide whether this plusbox should be visible or not.",
          "type": "boolean"
        },
        "menuUrl": {
          "description": "Menu link for the business. Currently only comes from Local attributes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "pageTypeFlags": {
          "description": "Type of the web reference.",
          "format": "int32",
          "type": "integer"
        },
        "phoneFprint": {
          "format": "uint64",
          "type": "string"
        },
        "phoneNumber": {
          "$ref": "TelephoneNumber"
        },
        "postalAddress": {
          "$ref": "PostalAddress"
        },
        "relevance": {
          "description": "DEPRECATED / NO LONGER WRITTEN. How relevant the webpage is to the business (clustering distance). Same as LocalListing::Reference.relevance. Typically only set for pages with (page_type_flags & WEB_EXTRACTION && !AUTHORITY).",
          "format": "float",
          "type": "number"
        },
        "showInSnippets": {
          "type": "boolean"
        },
        "source": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "LocalWWWInfoOpeningHours": {
      "description": "Populated from StoreHoursAnnotations.",
      "id": "LocalWWWInfoOpeningHours",
      "properties": {
        "hours": {
          "$ref": "GeostoreTimeScheduleProto"
        },
        "hoursFprint": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LocalWWWInfoPhone": {
      "id": "LocalWWWInfoPhone",
      "properties": {
        "phoneFprint": {
          "format": "uint64",
          "type": "string"
        },
        "phoneNumber": {
          "$ref": "TelephoneNumber"
        }
      },
      "type": "object"
    },
    "LocalWWWInfoWrapptorItem": {
      "description": "A single WrapptorItem, with a business name, an address and a phone number. We keep only the fingerprints of address and phone number. The full address and phone protos will be elsewhere within LocalWWWInfo.",
      "id": "LocalWWWInfoWrapptorItem",
      "properties": {
        "addrFprint": {
          "format": "uint64",
          "type": "string"
        },
        "bizName": {
          "type": "string"
        },
        "phoneFprint": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LocalsearchChainId": {
      "description": "An unique identification of a chain. The following are the possible chain id forms: 1) prominent_entity_id only: The entity uniquely represents a chain, which may have multiple sitechunks. 2) sitechunk only: The sitechunk uniquely represents a chain while the chain currently does not have an entity in KG. 3) prominent_entity_id + sitechunk: The chain could be represented by the entity, but not merged at last, and the sitechunks represents the chain better. 4) prominent_entity_id + category: There are multiple subchains for the prominent entity, and category is used to differentiate subchains. NOTE: the size and complexity of the ChainId proto has implications in the serving system and should be thoughtfully kept under control.",
      "id": "LocalsearchChainId",
      "properties": {
        "category": {
          "description": "The category associated with this chain, currently only used for subchains.",
          "type": "string"
        },
        "prominentEntityId": {
          "description": "The Knowledge Graph (KG) entity of the chain, found and used in chain mining.",
          "type": "string"
        },
        "sitechunk": {
          "description": "The website sitechunk/domain that is owned by the chain.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LocalsearchDocInfo": {
      "description": "Next tag: 23",
      "id": "LocalsearchDocInfo",
      "properties": {},
      "type": "object"
    },
    "LocalsearchProtoInternalFoodOrderingActionMetadata": {
      "description": "* Proto representing the metadata associated with food ordering internal action. Next ID: 13",
      "id": "LocalsearchProtoInternalFoodOrderingActionMetadata",
      "properties": {
        "actionType": {
          "description": "The action type of this action metadata.",
          "enum": [
            "UNKNOWN_ACTION_TYPE",
            "E2E",
            "TOA",
            "AUTOBOT",
            "PAS"
          ],
          "enumDescriptions": [
            "Unknown type.",
            "Actions lead users to Food Ordering site (orderfood.google.com), powered by end to end partners that signed the full integration contact with Google. This is the default action type for most cases. go/fopa-order-button-placesheet",
            "TOA actions lead users to TOA site (eg. https://ordering.app/cuba512/downtown/contact/). go/payfood-entrypoint-experiments",
            "DEPRECATED(b/261496948): Autobot has been sunset. Autobot actions lead users to 3p site that support Autobot. go/fo-autobot-triggering",
            "PAS actions lead users to Food Ordering site (orderfood.google.com), but powered by PAS partners. Note that if one restaurant is supported by both E2E and PAS partners, the action type should still be E2E. go/fo-pas-integration"
          ],
          "type": "string"
        },
        "hasPrimarilyFoodIntent": {
          "description": "If true, it indicates that the merchant has a primarily food intent. This field will only be set when enable_food_gcid_strict_check in FoodOrderingRestrictionProto is true, see go/togo-unified:overlapping-for-le. See go/togo-unified-gcid for how this is calculated.",
          "type": "boolean"
        },
        "isOutOfOperationalHours": {
          "description": "If set, indicates that the food ordering service is out of operational hours. This could only be populated if the request explicitly asks for ignore_operational_hours in request (universalsearch/rpc/geo/food_ordering_restriction.proto). Design doc: go/fo-persistent-v1.",
          "type": "boolean"
        },
        "isWhitelistedExternalRestaurant": {
          "description": "When true, indicates that this is a whitelisted restaurant from a first party (but non FO) partner, i.e. a merchant from the orderig app, who is Google owned first party food ordering platform. Design doc: go/onboard-mavn-to-fo. Tracking bug: b/150331855",
          "type": "boolean"
        },
        "nextOpeningTime": {
          "description": "Next opening time when the food ordering service will be available. This is only present if the unavailability reason is OUT_OF_OPERATIONAL_HOURS.",
          "format": "google-datetime",
          "type": "string"
        },
        "onlyOrderAheadServicesAvailable": {
          "description": "Indicates whether only order ahead services are available. Order ahead services allow only to place order for future and ASAP order can not be placed via them.",
          "type": "boolean"
        },
        "serviceInfo": {
          "description": "Aggregated service information by service type. Each service type would only have one ServiceInfo. Optional.",
          "items": {
            "$ref": "LocalsearchProtoInternalFoodOrderingActionMetadataServiceInfo"
          },
          "type": "array"
        },
        "supportedServiceType": {
          "description": "Food ordering service type.",
          "enum": [
            "UNKNOWN_TYPE",
            "DELIVERY",
            "PICKUP",
            "ANY_TYPE"
          ],
          "enumDescriptions": [
            "Default enum value should never be used explicitly as default value field gets cleared from the final response. This can be returned only when all the partners supporting the business are log only partners.",
            "Delivery service type.",
            "Pick up service type.",
            "ANY_TYPE means that there is no restriction on the service type and both delivery/pickup are fine."
          ],
          "type": "string"
        },
        "unavailabilityReason": {
          "description": "Reason for unavailability of internal food ordering action. This is only present when FOPA is unavailable for a particular restaurant. When this is set, all other fields in this proto will not be populated. Note(fo-search): If there are log only partners and this particular restaurant is only supported because of log only partners, this field will not be set to NOT_INTEGRATED_WITH_FOPA.",
          "enum": [
            "UNKNOWN_REASON",
            "NOT_INTEGRATED_WITH_FOPA",
            "OUT_OF_OPERATIONAL_HOURS",
            "OUT_OF_SERVICE_AREA",
            "PERMANENTLY_CLOSED",
            "BLACKLISTED",
            "TEMPORARILY_CLOSED"
          ],
          "enumDescriptions": [
            "Catch-all for unrecognized enum values. See go/protodosdonts.",
            "Indicates the restaurant is not integrated with any partner.",
            "Indicates that the food ordering service is considered as not available due to out of operational hours. This could only be populated if ignore_operational_hours is set to false in the request (universalsearch/rpc/geo/food_ordering_restriction.proto).",
            "Unable to deliver to requested address due to border rules etc.",
            "Indicates that the resutaurant is permanently closed.",
            "Blacklist file: /googledata/superroot/food_ordering/fopa_blacklisted_chains.txt /googledata/superroot/food_ordering/fopa_blacklisted_restaurants.txt",
            "Indicates that the resutaurant is temporarily closed."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LocalsearchProtoInternalFoodOrderingActionMetadataAvailablePartnerInfo": {
      "description": "Includes all partners that are either open now or supporting order ahead.",
      "id": "LocalsearchProtoInternalFoodOrderingActionMetadataAvailablePartnerInfo",
      "properties": {
        "availablePartnerId": {
          "description": "Available partner's id.",
          "format": "int64",
          "type": "string"
        },
        "logOnly": {
          "description": "Indicates whether the partner is log only.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "LocalsearchProtoInternalFoodOrderingActionMetadataServiceInfo": {
      "id": "LocalsearchProtoInternalFoodOrderingActionMetadataServiceInfo",
      "properties": {
        "availablePartnerInfo": {
          "description": "Information about Food Ordering partner, which is used for whitelisting the partner in Food Ordering entry points such as Placesheet.",
          "items": {
            "$ref": "LocalsearchProtoInternalFoodOrderingActionMetadataAvailablePartnerInfo"
          },
          "type": "array"
        },
        "maxWaitTimeSec": {
          "description": "Maximum max_wait_time in second.",
          "format": "int64",
          "type": "string"
        },
        "minDeliveryFee": {
          "$ref": "GoogleTypeMoney",
          "description": "Only present for delivery case, service fee is not included."
        },
        "minWaitTimeSec": {
          "description": "Minimum min_wait_time in second.",
          "format": "int64",
          "type": "string"
        },
        "serviceType": {
          "description": "Food ordering service type. Please note that only ServiceType.PICKUP and ServiceType.DELIVERY are valid values for this field.",
          "enum": [
            "UNKNOWN_TYPE",
            "DELIVERY",
            "PICKUP",
            "ANY_TYPE"
          ],
          "enumDescriptions": [
            "Default enum value should never be used explicitly as default value field gets cleared from the final response. This can be returned only when all the partners supporting the business are log only partners.",
            "Delivery service type.",
            "Pick up service type.",
            "ANY_TYPE means that there is no restriction on the service type and both delivery/pickup are fine."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LogsProtoIndexingCrawlerIdCrawlerIdProto": {
      "description": "Proto-representation of the Crawler-ID in Web-Search (Alexandria-Scope). The string-representation (covered in //indexing/crawler_id/scope/alexandria/crawler_id.h) and the proto-representation are identical in meaning. For more information in regard to the crawler_id, please look at //depot/google3/indexing/crawler_id Used within the following components: - WebMirror: To understand the parsed crawler-ID and apply attributes within their own tables. - Serving : to identify the crawler-ID within the GenericSearchResponse, which implies being stored in the MDU and returned by ascorer to Superroot. - QSessions: To store the crawler-ID in all logged events for analysis. The default values represent the 'empty string' crawler-ID for the Alexandria-scope.",
      "id": "LogsProtoIndexingCrawlerIdCrawlerIdProto",
      "properties": {
        "country": {
          "description": "The country to crawl the country from, defaults to the default non-specified crawling node (which is interpreted by most web-servers as USA). When specified, the crawling will fetch the document from a node in that country instead.",
          "enum": [
            "NO_COUNTRY",
            "AUSTRALIA",
            "CANADA",
            "GREAT_BRITAIN",
            "MEXICO",
            "RUSSIA"
          ],
          "enumDescriptions": [
            "",
            "The countries are sorted by alphabet for convenience.",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "deviceType": {
          "description": "The device type, which maps into the useragent to be set when initiating the fetch-request, e.g. desktop-googlebot vs. smartphone-googlebot.",
          "enum": [
            "DESKTOP",
            "SMARTPHONE",
            "MOBILE",
            "JPMOBILE",
            "IMAGE",
            "VIDEO",
            "APP",
            "ANDROID_APP",
            "IOS_APP",
            "PIDGIN"
          ],
          "enumDescriptions": [
            "",
            "SMARTPHONE refers to the Android user agent as used for web browsing on Android. It is used in general to get the version of a webpage as returned to smartphones, being both Android or iOS.",
            "MOBILE refers to old-styled mobile phones (WAP browsers). No longer used for new data.",
            "JPMOBILE refers to old-styled mobile phones (CHTML, mainly in japan). No longer used for new data.",
            "IMAGE/VIDEO are specific user-agents used for the image and video crawl on the web, variations of the GoogleBot, essentially.",
            "",
            "APP is for app-uris, which is using in Aquarius v1. go/aquarius-design",
            "ANDROID_APP and IOS_APP are for universal links, which are using in Calypso / Aquarius universal pipeline. go/v4-indexing",
            "",
            "PIDGIN is for synthetic docs served using the Horizon pipeline. go/pidgin-design."
          ],
          "type": "string"
        },
        "indexGrowthExptType": {
          "description": "Specifies whether the document is a duplicated document from the index growth experiment, detailed at go/indexsize_exp, defaults to not in any experiment.",
          "enum": [
            "INDEX_GROWTH_EXPERIMENT_TYPE_DEFAULT",
            "INDEX_GROWTH_EXPERIMENT_TYPE_DUPLICATED"
          ],
          "enumDescriptions": [
            "",
            "Denotes a document that is a duplicate."
          ],
          "type": "string"
        },
        "language": {
          "description": "The language being set by the crawler. Defaults to UNKNOWN_LANGUAGE which indicates to not apply an accept-language header on the FetchRequest. When a language is specified, on crawling this language is converted into an accept-language header (e.g. GERMAN -> \"Accept-language: de\"). Script variations, e.g. ZH-HANS vs. ZH-HANT, are handled as different enum values (e.g. CHINESE vs. CHINESE_T).",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "languageCode": {
          "description": "Language-code used for identifying the locale of the document. 'language' and 'country' above are used for web-based documents, representing the detected language of the document and the country it was crawled from. The language code here, however, rather represents an artifical language_code applied to manually translated webpages (e.g. feeds), for instance for the pidgin-usecase. They are limited to the set of III-codes being supported by the client, yet are beyond the enum in 'language', e.g. to support variants of English across different countries.",
          "enum": [
            "LANGCODE_UNKNOWN",
            "LANGCODE_EN_US",
            "LANGCODE_EN_AU",
            "LANGCODE_EN_CA",
            "LANGCODE_DE_DE",
            "LANGCODE_FR_FR",
            "LANGCODE_FR_CA"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LogsSemanticInterpretationIntentQueryEntityLinkMetadata": {
      "description": "Logs version of the repository_webref.EntityLinkMetadata proto Used to represent QRef implications",
      "id": "LogsSemanticInterpretationIntentQueryEntityLinkMetadata",
      "properties": {
        "aggregateFlags": {
          "$ref": "LogsSemanticInterpretationIntentQueryLinkKindFlags"
        },
        "kindInfo": {
          "items": {
            "$ref": "LogsSemanticInterpretationIntentQueryLinkKindInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LogsSemanticInterpretationIntentQueryLinkKindFlags": {
      "description": "Logs version of the repository_webref.LinkKindFlags proto Used to represent QRef implications Next available tag: 8",
      "id": "LogsSemanticInterpretationIntentQueryLinkKindFlags",
      "properties": {
        "cluster": {
          "enum": [
            "NO_CLUSTER",
            "CLUSTER_CHILD_OF",
            "CLUSTER_PARENT_OF"
          ],
          "enumDescriptions": [
            "",
            "The main entity is a child of the linked entity.",
            "The main entity is a parent of the linked entity."
          ],
          "type": "string"
        },
        "geoContainment": {
          "enum": [
            "NO_CONTAINMENT",
            "CONTAINED_BY",
            "CONTAINS",
            "PARTIAL_OVERLAP",
            "HAS_STREET_NUMBER",
            "LOCATED_ON_STREET"
          ],
          "enumDescriptions": [
            "",
            "The main entity is a geographically contained by",
            "the linked entity. The main entity is a geographical container of",
            "the linked entity. The main entity partially overlaps with the",
            "linked entity. The main entity is a street and contains the",
            "street number that is represented by the linked entity. The main entity is a street number and is"
          ],
          "type": "string"
        },
        "implication": {
          "enum": [
            "NO_IMPLICATION",
            "IMPLIED_BY",
            "IMPLIES",
            "BIDIRECTIONAL_IMPLICATION",
            "UNDERMERGED"
          ],
          "enumDescriptions": [
            "",
            "The main entity is implied by the linked entity.",
            "The main entity implies the linked entity.",
            "Both entities imply each other.",
            "Both entities are the same concept."
          ],
          "type": "string"
        },
        "latentEntity": {
          "enum": [
            "NO_LATENT_ENTITY",
            "LATENT_ENTITY",
            "MANIFEST_ENTITY",
            "LATENT_ENTITY_V2",
            "MANIFEST_ENTITY_V2"
          ],
          "enumDescriptions": [
            "There is no latent entity relationship between the entities. Default value, should not be explicitly set.",
            "The relationship points to a latent entity. For example, if \"Lionel Messi\" has latent entity \"FC Barcelona\", this should be populated on the relationship from Messi to Barcelona.",
            "The reverse of LATENT_ENTITY, e.g. from \"FC Barcelona\" to \"Lionel Messi\".",
            "Links pointing to latent entities according to the new hierarchy. See go/refx-latent-entities.",
            "Links pointing to manifest entities according to the new hierarchy."
          ],
          "type": "string"
        },
        "mdvc": {
          "enum": [
            "NO_MDVC",
            "MDVC_SPECIALIZATION_OF",
            "MDVC_GENERALIZATION_OF",
            "MDVC_DIMENSION_VALUE",
            "MDVC_DIMENSION_VALUE_OF",
            "MDVC_RESOLUTION",
            "MDVC_EXPANDED_OUTPUT"
          ],
          "enumDescriptions": [
            "",
            "(Transitive) descendant in MDVC hierarchy.",
            "(Transitive) ancestor in MDVC hierarchy.",
            "MDVC attribute.",
            "MDVC attribute owner.",
            "MDVC resolution.",
            "MDVC_EXPANDED_OUTPUT is used to mark the link between annotated entities and the entities that were added by output expansion, e.g. from a car model to the latest model year."
          ],
          "type": "string"
        },
        "property": {
          "enum": [
            "NO_PROPERTY",
            "EQUIVALENT_TOPIC",
            "EQUIVALENT_PROPERTY"
          ],
          "enumDescriptions": [
            "There is no property relationship between the entities. Default value, should not be explicitly set.",
            "The relationship points from a property to its equivalent topic. For example, from /people/person/parents to /m/Parent.",
            "The relationship points from a topic to an equivalent property. For example, from /m/Parent to /people/person/parents."
          ],
          "type": "string"
        },
        "resolution": {
          "enum": [
            "NO_RESOLUTION",
            "MAY_BE_RESOLVED_FROM",
            "MAY_RESOLVE_TO",
            "RESOLVED_FROM",
            "RESOLVES_TO"
          ],
          "enumDescriptions": [
            "",
            "The link type is such that we may add a",
            "RESOLVED_FROM attribute to it later. The link type is such that we may add a",
            "RESOLVES_TO attribute to it later. The current entity is resolved from the linked",
            "entity (e.g. the link goes from to ). The current entity is one of the entities that"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "LogsSemanticInterpretationIntentQueryLinkKindInfo": {
      "description": "Logs version of the repository_webref.LinkKindInfo proto Used to represent QRef implications",
      "id": "LogsSemanticInterpretationIntentQueryLinkKindInfo",
      "properties": {
        "flags": {
          "$ref": "LogsSemanticInterpretationIntentQueryLinkKindFlags"
        },
        "kcLinkName": {
          "type": "string"
        },
        "topicPropertyName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "LogsSemanticInterpretationIntentQuerySupportTransferRule": {
      "description": "Logs version of the repository_webref.SupportTransferRule proto Non-logs version supports go/stbr",
      "id": "LogsSemanticInterpretationIntentQuerySupportTransferRule",
      "properties": {
        "allowWildcardIntents": {
          "type": "boolean"
        },
        "domain": {
          "type": "string"
        },
        "isReverseLink": {
          "type": "boolean"
        },
        "mentionsOnly": {
          "type": "boolean"
        },
        "supportShare": {
          "type": "boolean"
        },
        "targetCollection": {
          "type": "string"
        },
        "userCountry": {
          "type": "string"
        },
        "userLanguage": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "LogsSemanticInterpretationIntentQueryWebrefEntityRelationship": {
      "description": "Logs version of the repository_webref.WebrefEntityRelationship proto Used to represent QRef implications",
      "id": "LogsSemanticInterpretationIntentQueryWebrefEntityRelationship",
      "properties": {
        "entityIndex": {
          "format": "int32",
          "type": "integer"
        },
        "linkMetadata": {
          "$ref": "LogsSemanticInterpretationIntentQueryEntityLinkMetadata"
        },
        "linkWeight": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "LongStructuredSnippet": {
      "description": "An experimental long snippet. The protocol allows any permutation of headers and plain text paragraphs, but typical responses are just paragraphs or alternating headers and paragraphs.",
      "id": "LongStructuredSnippet",
      "properties": {
        "entry": {
          "items": {
            "$ref": "LongStructuredSnippetEntry"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "LongStructuredSnippetEntry": {
      "id": "LongStructuredSnippetEntry",
      "properties": {
        "header": {
          "description": "Is this a header or normal paragraph?",
          "type": "boolean"
        },
        "text": {
          "description": "The text of the header or paragraph.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "MajelContactInformationShortcutInformation": {
      "description": "The information on whether the contact is related to an app shortcut. Next ID: 2",
      "id": "MajelContactInformationShortcutInformation",
      "properties": {
        "shortcutContactType": {
          "enum": [
            "UNSPECIFIED",
            "NON_SHORTCUT",
            "INDIVIDUAL",
            "GROUP"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "MapsQualitySpecialWordsFlags": {
      "description": "Flags that describe the information about a special word. If you add another flag please add it to the special words implemenation in google3/maps/quality/internal/special_words.cc. -- Next available id: 22 --",
      "id": "MapsQualitySpecialWordsFlags",
      "properties": {
        "isAlleyAffix": {
          "description": "An affix that indicates an alley. Alleys are unnamed, numbered routes that are always linked to a \"parent street\". As these parent streets can be named e.g. \"7th street\" and alleys might be referred to as \"7th alley\", we need to be able to distinguish those affixes. For more details about alleys see go/vn-alley-geocoding.",
          "type": "boolean"
        },
        "isCommonWord": {
          "description": "Common words E.g.: center, park, etc.",
          "type": "boolean"
        },
        "isDeconstructible": {
          "description": "Whether this special word is part of a name without a separator (like e.g. suffix \"strasse\" in Freigutstrasse).",
          "type": "boolean"
        },
        "isDirectionalModifier": {
          "description": "Directional modifier. E.g.: north, south, etc.",
          "type": "boolean"
        },
        "isDistanceMarker": {
          "description": "An affix that indicates distance marker on a route, e.g., 'km'.",
          "type": "boolean"
        },
        "isForbiddenWord": {
          "description": "Whether geo paths are forbidden to contain this word.",
          "type": "boolean"
        },
        "isHouseIdIdentifier": {
          "description": "A keyword for a house id.",
          "type": "boolean"
        },
        "isIntersectionConnector": {
          "description": "Intersection. E.g.: and, at, corner.",
          "type": "boolean"
        },
        "isLandmarkIdentifier": {
          "description": "An affix that indicates a landmark, e.g. \"opposite\", \"near\" etc.",
          "type": "boolean"
        },
        "isLanguageIndicator": {
          "description": "Language indicator. E.g.: platz in German, straat in Dutch.",
          "type": "boolean"
        },
        "isNameSynonym": {
          "description": "Whether this is a name synonym and should be allowed to be matched on when searching (that is, added to the retrieval query with the name/ prefix).",
          "type": "boolean"
        },
        "isNotForLegacyStreetNumberDetection": {
          "description": "Terms which are not allowed to be used by the legacy street number detection.",
          "type": "boolean"
        },
        "isNotOptionalizable": {
          "description": "Terms which are not allowed to be treated as optional.",
          "type": "boolean"
        },
        "isNumber": {
          "description": "Numbers. E.g.: 1, one, 2, two.",
          "type": "boolean"
        },
        "isNumberSuffix": {
          "description": "E.g. suffixes in French: bis, ter.",
          "type": "boolean"
        },
        "isOptional": {
          "description": "Is this special word optional?",
          "type": "boolean"
        },
        "isOrdinalNumber": {
          "description": "E.g.: 1st, first.",
          "type": "boolean"
        },
        "isPenalizedIfMissing": {
          "description": "Optional terms that should not geocode by themselves.",
          "type": "boolean"
        },
        "isPersonalTitle": {
          "description": "Personal titles (e.g. doctor, professor, general, etc.)",
          "type": "boolean"
        },
        "isStopWord": {
          "description": "E.g.: the, in, near, where.",
          "type": "boolean"
        },
        "isStreetNumberIdentifier": {
          "description": "A keyword that denotes a street number, e.g. \"number\", \"unit\" etc.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "MapsQualitySpecialWordsProto": {
      "description": "The goal of the special words are to: - Canonicalize the user query by rewriting abbreviations into the canonical version that is indexed. - Figure out at index time for each element which tokens are important. We use this to decide if an address component is matched or not. For instance in \"1600 Pennsylvania Ave NW\" since \"NW\" is recognised as a directional (and \"Ave\" is recognised as a street visible type), \"Pennsylvania\" becomes the name and you can't match this street by just specifying \"avenue\" or \"NW\". ",
      "id": "MapsQualitySpecialWordsProto",
      "properties": {
        "alternate": {
          "description": "Alternate versions of this canonical form. This is mainly abbreviations of the canonical form e.g. \"St\", \"NE\", etc. This should be present as it is used in the specified language with the correct capitalization, accents, etc. in UTF-8.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "canonical": {
          "description": "Canonical versions: the version which is in oyster. This should be present as it is used in the specified language with the correct capitalization, accents, etc. in UTF-8. The canonical can be a single or a multi-token string. There can be several canonicals, e.g. \"center\" and \"centre\" in English.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "country": {
          "description": "If empty, apply this rule to any country. Otherwise, a list of ISO 3166-1 alpha-2 (2-letter uppercase) country codes that this description applies to.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "flags": {
          "$ref": "MapsQualitySpecialWordsFlags",
          "description": "Boolean flags indicating what type of special word this is."
        },
        "language": {
          "description": "The III language code of the language that this description applies to. No language means that this applies worldwide. This could be useful for codes like country codes or airport codes or for displayed language neutral icons. A special word with a language code here also applies to the regional variants of that language (e.g. \"en\" applies to \"en-GB\" and \"en-US\" as well).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "position": {
          "enum": [
            "AFFIX",
            "PREFIX",
            "SUFFIX"
          ],
          "enumDescriptions": [
            "",
            "the special word comes before the name",
            "the special word comes after the name"
          ],
          "type": "string"
        },
        "visibleTypeId": {
          "description": "visible_type_id from VisibleTypeProto for visible types converted to the special words. For original special words this field is empty.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MediaIndexBoundingbox": {
      "description": "Stores coordinates corresponding to the dimensions of the box surrounding the region of interest. Coordinates may be normalized or absolute depending on the implementation and signal corresponding to this field.",
      "id": "MediaIndexBoundingbox",
      "properties": {
        "areaFraction": {
          "description": "The area of the region as a fraction of the image. The value is in the range (0, 1).",
          "format": "float",
          "type": "number"
        },
        "xmax": {
          "format": "float",
          "type": "number"
        },
        "xmin": {
          "format": "float",
          "type": "number"
        },
        "ymax": {
          "format": "float",
          "type": "number"
        },
        "ymin": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "MediaIndexEntityField": {
      "description": "Packages entity id and score together for a given source.",
      "id": "MediaIndexEntityField",
      "properties": {
        "customSource": {
          "description": "The custom source should only be a-z[0-9] dashes, underscores, and colons. Special characters should be avoided.",
          "type": "string"
        },
        "entityId": {
          "type": "string"
        },
        "quantizedScore": {
          "format": "int64",
          "type": "string"
        },
        "source": {
          "enum": [
            "UNKNOWN",
            "ICA_LABELS",
            "VISUAL_DICTIONARY",
            "VISUAL_SEARCH_LANDMARK",
            "WEBREF_ANNOTATIONS",
            "KG_KP",
            "SMEARED_VISUAL_DICTIONARY",
            "SMEARED_VISUAL_SEARCH_LANDMARK",
            "CURATED_SIGNAL",
            "LAVD_BONES",
            "ICA_H_TOPICALITY",
            "WEBREF_CONFIDENCE",
            "LAVD_TRAVEL_SNAPWIRE",
            "LAVD_TRAVEL_500PX",
            "LAVD_TRAVEL_ALAMY",
            "LAVD_TRAVEL_EYEEM",
            "LAVD_TRAVEL_SHUTTERSTOCK",
            "LAVD_TRAVEL_GETTY",
            "PROVIDED_PEOPLE",
            "KG_AUTOMOTIVE",
            "SMEARED_NAVBOOST",
            "KIWI_ENTITY_VISUAL_SCORE",
            "KIWI_ENTITY_RANK",
            "KIWI_ENTITY_VISUAL_SCORE_EXP",
            "KIWI_ENTITY_RANK_EXP"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "MediaIndexFrameIdentifier": {
      "description": "Identifier for frames associated with a video.",
      "id": "MediaIndexFrameIdentifier",
      "properties": {
        "previewFrameZeroVariant": {
          "$ref": "MediaIndexFrameIdentifierPreviewFrameZeroVariant"
        },
        "timestampMs": {
          "description": "Offset of the frame from the beginning of the video (in milliseconds).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "MediaIndexFrameIdentifierPreviewFrameZeroVariant": {
      "description": "This variant defines the frame to be the first frame of the video's generated preview.",
      "id": "MediaIndexFrameIdentifierPreviewFrameZeroVariant",
      "properties": {
        "previewLength": {
          "enum": [
            "UNSPECIFIED",
            "THREE_SECONDS",
            "SIX_SECONDS"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "xtagList": {
          "$ref": "MediaIndexXtagList",
          "description": "All xtags used in the generation of the preview. The same frame generated from the same preview with different xtags will likely have different bytes (such as, for example, resulting from a different aspect ratio)."
        }
      },
      "type": "object"
    },
    "MediaIndexRegion": {
      "description": "Metadata associated with a region in an image. NEXT_ID: 14",
      "id": "MediaIndexRegion",
      "properties": {
        "boundingBox": {
          "$ref": "MediaIndexBoundingbox",
          "description": "The bounding box corresponding to the region."
        },
        "entityFields": {
          "description": "Detected Entities found within this region.",
          "items": {
            "$ref": "MediaIndexEntityField"
          },
          "type": "array"
        },
        "labels": {
          "$ref": "MediaIndexSparseFloatVector",
          "description": "The labels associated with the region encoded as a SparseFloatVector to facilitate dot product computation during sorting. The columns are the fingerprints of the labels and the values are the corresponding confidence scores. The vector is L2 normalized."
        },
        "primiApparelFeaturesV2": {
          "description": "PRIMI Apparel Features v2 embedding and tokens.",
          "format": "byte",
          "type": "string"
        },
        "primiApparelTokensV2": {
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "primiGenericFeaturesV25": {
          "description": "PRIMI Generic Features v2.5 embedding and tokens.",
          "format": "byte",
          "type": "string"
        },
        "primiGenericTokensV25": {
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "starburstFeaturesV4": {
          "description": "Starburst v4 embedding and tokens.",
          "format": "byte",
          "type": "string"
        },
        "starburstFeaturesV5": {
          "description": "Starburst v5 embedding and tokens.",
          "format": "byte",
          "type": "string"
        },
        "starburstTokensV4": {
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "starburstTokensV5": {
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "starburstV4": {
          "$ref": "ImageContentStarburstVersionGroup"
        },
        "starburstV5": {
          "$ref": "ImageContentStarburstVersionGroup"
        }
      },
      "type": "object"
    },
    "MediaIndexSparseFloatVector": {
      "id": "MediaIndexSparseFloatVector",
      "properties": {
        "columns": {
          "description": "Parallel arrays of column / value. Exactly one of those columns vector should be set. Columns must be in monotonically increasing order.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "columnsInt16": {
          "format": "byte",
          "type": "string"
        },
        "columnsInt32": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "columnsInt64": {
          "description": "Columns are fixed integers, used for accelerated parse.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "columnsInt8": {
          "format": "byte",
          "type": "string"
        },
        "values": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MediaIndexVideoCentroid": {
      "description": "Data about the behavior of the video across the pages it is embedded in.",
      "id": "MediaIndexVideoCentroid",
      "properties": {
        "domainScores": {
          "items": {
            "$ref": "MediaIndexVideoCentroidDomainScore"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MediaIndexVideoCentroidDomainScore": {
      "description": "See go/video-centroid-domain-score.",
      "id": "MediaIndexVideoCentroidDomainScore",
      "properties": {
        "domain": {
          "description": "The domain this score was generated for.",
          "type": "string"
        },
        "numDocs": {
          "description": "Number of pages from the domain used to generate this DomainScore.",
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "description": "In general, lower scores indicate the video is appearing on more diverse pages.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "MediaIndexVideoCoreSignals": {
      "description": "Core signals for video content corpus which will be fetched for every query. If a signal is required only for a subset of search queries then it should be added as a separate field in the schema.",
      "id": "MediaIndexVideoCoreSignals",
      "properties": {
        "centroid": {
          "$ref": "MediaIndexVideoCentroid"
        },
        "videoFrames": {
          "items": {
            "$ref": "MediaIndexVideoFrame"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MediaIndexVideoFrame": {
      "description": "Data about a frame associated with the video.",
      "id": "MediaIndexVideoFrame",
      "properties": {
        "docid": {
          "description": "The canonical docid of the frame.",
          "format": "uint64",
          "type": "string"
        },
        "frameIdentifier": {
          "$ref": "MediaIndexFrameIdentifier"
        },
        "regions": {
          "description": "Metadata associated with regions within this frame.",
          "items": {
            "$ref": "MediaIndexRegion"
          },
          "type": "array"
        },
        "starburstFeaturesV4": {
          "description": "Starburst v4 embedding and tokens.",
          "type": "string"
        },
        "starburstTokensV4": {
          "description": "Note: due to the migration to Golden7-source Starburst v4 embedding, no starburst_tokens_v4 will be provided in video content corpus (go/video-content-corpus). But this field is kept in case other purposes may still use it in the proto.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "thumbnailType": {
          "description": "Set of available thumbnail types for this frame. Should be valid image_base.ThumbnailType values (enumerated at http://google3/image/base/thumbnail-type.proto).",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MediaIndexVideoFrames": {
      "description": "Data about multiple video frames associated with the video.",
      "id": "MediaIndexVideoFrames",
      "properties": {
        "videoFrames": {
          "items": {
            "$ref": "MediaIndexVideoFrame"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MediaIndexXtag": {
      "id": "MediaIndexXtag",
      "properties": {
        "name": {
          "description": "Names are all stored case-sensitive, and no case-folding is done for comparisons.",
          "type": "string"
        },
        "value": {
          "description": "The value associated with this Xtag. Values are all stored case-sensitive, and no case-folding is done for comparisons.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "MediaIndexXtagList": {
      "description": "XtagList -- a collection of Xtag instances with unique names. This would be associated with one specific piece of content.",
      "id": "MediaIndexXtagList",
      "properties": {
        "xtags": {
          "items": {
            "$ref": "MediaIndexXtag"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MobilePerDocData": {
      "description": "Note: This message is also in the RTUpdate protocol buffer.",
      "id": "MobilePerDocData",
      "properties": {
        "flags": {
          "format": "int32",
          "type": "integer"
        },
        "mobileurl": {
          "description": "DEPRECATED: Url of the mobile version of the document. This is set during canonicalization if we do not know that the Web url also serves the mobile version.",
          "type": "string"
        },
        "transcodedPageScore": {
          "description": "DEPRECATED: The transcoded page quality repesented in 7-bits range from 0 to 127.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "MultiscaleFieldPresence": {
      "description": "Defines the presence of a field. This can help distinguish between empty vs. not-present annotations.",
      "id": "MultiscaleFieldPresence",
      "properties": {
        "present": {
          "description": "Whether the field (data field or pointer) is defined.",
          "type": "boolean"
        },
        "wellDefined": {
          "enum": [
            "WD_UNDEFINED",
            "WD_WELL_DEFINED",
            "WD_PARTIAL"
          ],
          "enumDescriptions": [
            "proto3 default value.",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "MultiscaleLayerPresence": {
      "description": "Defines the presence of a layer (previously called \"scale\").",
      "id": "MultiscaleLayerPresence",
      "properties": {
        "implicitLength": {
          "description": "If the layer is not materialized but things point into it, this gives the effective length.",
          "format": "int32",
          "type": "integer"
        },
        "present": {
          "description": "Whether the layer is present.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "MultiscalePointerIndex": {
      "description": "Pointer to a single node in a target scale. `pointer.Index` fields should be annotated with a `(pointer.to)` annotation, indicating what scale they point at.",
      "id": "MultiscalePointerIndex",
      "properties": {
        "index": {
          "description": "The index of the node that this pointer points to.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "MultiscalePointerSpan": {
      "description": "Pointer to a contiguous range of nodes in a target scale. `pointer.Span` fields should be annotated with a `(pointer.to)` annotation, indicating what scale they point at.",
      "id": "MultiscalePointerSpan",
      "properties": {
        "limit": {
          "description": "The exclusive end index for the span of nodes that this pointer points to -- i.e., one plus the index of the last node in the span. Must be greater than or equal to `start`. If equal to `start`, then the target span is empty.",
          "format": "int32",
          "type": "integer"
        },
        "start": {
          "description": "The inclusive start index for the span of nodes that this pointer points to -- i.e., the index of the first node in the span.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "MustangReposWwwSnippetsCandidateFeature": {
      "description": "CandidateFeature contains a pair of feature name and score for a snippet candidate.",
      "id": "MustangReposWwwSnippetsCandidateFeature",
      "properties": {
        "name": {
          "description": "Name corresponds to the names in WebChooserScorer::FeatureNames.",
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "MustangReposWwwSnippetsOrganicListSnippetResponse": {
      "description": "Data to generate the list preview for organic list snippets.",
      "id": "MustangReposWwwSnippetsOrganicListSnippetResponse",
      "properties": {
        "header": {
          "description": "The texts of header and listing items.",
          "type": "string"
        },
        "headerTitleRedundancy": {
          "description": "The ratio of header tokens covered by title.",
          "format": "float",
          "type": "number"
        },
        "headerUsedInSnippet": {
          "description": "If the header being used in organic snippet.",
          "type": "boolean"
        },
        "items": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "originalTotalItems": {
          "description": "The number of items in the original list.",
          "format": "int32",
          "type": "integer"
        },
        "radishScore": {
          "description": "The score of the radish signal.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "MustangReposWwwSnippetsSnippetCandidate": {
      "description": "This message contains features for candidates at the chooser level. For each snippet candidate, we also log the final score as the last candidate feature.",
      "id": "MustangReposWwwSnippetsSnippetCandidate",
      "properties": {
        "dataSourceType": {
          "description": "data_source_type corresponds to the ChosenSnippet::SnippetType enum.",
          "format": "int32",
          "type": "integer"
        },
        "features": {
          "items": {
            "$ref": "MustangReposWwwSnippetsCandidateFeature"
          },
          "type": "array"
        },
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "MustangReposWwwSnippetsSnippetsRanklabFeatures": {
      "description": "This is a protocol buffer to export into flatfiles in ranklab. All fields are converted into flatfiles with some specific prefix and a field name like 'snippet_features_snippet_data_source_type'.",
      "id": "MustangReposWwwSnippetsSnippetsRanklabFeatures",
      "properties": {
        "browserWidth": {
          "description": "Browser width.",
          "format": "int32",
          "type": "integer"
        },
        "candidates": {
          "description": "Features for snippets candidates, generated by both old and new scorer. Currently only features for chosen candidate is generated.",
          "items": {
            "$ref": "MustangReposWwwSnippetsSnippetCandidate"
          },
          "type": "array"
        },
        "displaySnippet": {
          "$ref": "QualityPreviewRanklabSnippet",
          "description": "Snippet features for the final chosen snippet. This field is firstly populated by Muppet, and then overwriten by Superroot if SnippetBrain is triggered."
        },
        "documentLanguage": {
          "description": "locale of the document.",
          "type": "string"
        },
        "originalQueryTermCoverages": {
          "$ref": "QualityPreviewSnippetQueryTermCoverageFeatures",
          "description": "Original query term coverage in titles and / or snippets."
        },
        "queryLanguage": {
          "description": "locale of the query,",
          "type": "string"
        },
        "snippetDataSourceType": {
          "description": "Snippet data source.",
          "format": "int32",
          "type": "integer"
        },
        "snippetQueryTermCoverage": {
          "description": "Query term coverage in snippets.",
          "format": "float",
          "type": "number"
        },
        "snippets": {
          "description": "Snippet features for Muppet snippet candidates. In production, only the data for chosen snippet will be recorded.",
          "items": {
            "$ref": "QualityPreviewRanklabSnippet"
          },
          "type": "array"
        },
        "titleDataSourceType": {
          "description": "Title data source.",
          "format": "int32",
          "type": "integer"
        },
        "titleQueryTermCoverage": {
          "description": "Query term coverage in titles.",
          "format": "float",
          "type": "number"
        },
        "titleSnippetQueryTermCoverage": {
          "description": "Query term coverage in titles and snippets.",
          "format": "float",
          "type": "number"
        },
        "titles": {
          "description": "Per-candidate title features for ranklab models, sorted from the best candidate to the worst candidate (i.e., the first element is the actually selected title).",
          "items": {
            "$ref": "QualityPreviewRanklabTitle"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MustangSnippetsRenderedToken": {
      "description": "Tidbit token rendered in generating snippet/title.",
      "id": "MustangSnippetsRenderedToken",
      "properties": {
        "bolded": {
          "description": "Is the rendered token bolded (insided )",
          "type": "boolean"
        },
        "byteOffsetBegin": {
          "description": "Byte offset range in the rendered text that corresponds to this token. [byte_offset_begin, byte_offset_end) inclusive",
          "format": "int32",
          "type": "integer"
        },
        "byteOffsetEnd": {
          "description": "exclusive",
          "format": "int32",
          "type": "integer"
        },
        "section": {
          "description": "Section and TokenPos of the token.",
          "enum": [
            "UNKNOWN",
            "BODY_WITH_SOFT_TOKEN",
            "GWD",
            "META"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "tokenPos": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NSRVersionedItem": {
      "description": "Message representing a versioned NSR score used for experimentation. This protobuf is copied from quality_nsr::NSRVersionedItem.",
      "id": "NSRVersionedItem",
      "properties": {
        "value": {
          "description": "The NSR value corresponding to this version.",
          "format": "float",
          "type": "number"
        },
        "versionId": {
          "description": "The version id.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NetFabricRpcVirtualNetworkId": {
      "description": "Globally unique identifier for a virtual network.",
      "id": "NetFabricRpcVirtualNetworkId",
      "properties": {
        "id": {
          "description": "required",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpLoggingQRewriteClientCallPathInfo": {
      "description": "The proto that holds the complete call path info of the QRewrite client (e.g. the QUS's phase like \"RBT\",\"QBT\"; the QUS's candidate type like \"Identity\"; and the ACE's candidate type like \"FuzzyMatcher\"). Next ID: 5 ACE tags",
      "id": "NlpLoggingQRewriteClientCallPathInfo",
      "properties": {
        "qrewriteCandidateId": {
          "$ref": "QualityQrewriteCandidateId",
          "description": "Indicates the type of candidate rewritten by QRewrite. This field is filled within QRewrite instead of QRewrite clients, and we add this here so this proto is able to hold all tags to form the identifier."
        },
        "qusCandidateId": {
          "$ref": "QualityQrewriteCandidateId",
          "description": "QUS tags Indicates the type of the candidate in QUS that sends the QRewrite request."
        },
        "qusClientCallPathInfo": {
          "$ref": "NlpLoggingQusClientCallPathInfo",
          "description": "Upstream call path before QUS."
        },
        "qusPhase": {
          "description": "Indicates which QUS phase sends the QRewrite request. Note if the QRewrite response is reused in succeeding phases, this field should not be overridden and it is always the phase that initially sends the RPC.",
          "enum": [
            "QU_PHASE_UNSPECIFIED",
            "QU_PHASE_REQUEST",
            "QU_PHASE_QREWRITE",
            "QU_PHASE_QBT",
            "QU_PHASE_PROBE_QUERY",
            "QU_PHASE_MULTI_ACCOUNT",
            "QU_PHASE_CQBT",
            "QU_PHASE_QBT_RESOLUTION",
            "QU_PHASE_HIGH_PRECISION",
            "QU_PHASE_COMBINED_RBT_RESOLUTION",
            "QU_PHASE_ANALYZER_INPUT",
            "QU_PHASE_NAGE"
          ],
          "enumDescriptions": [
            "Invalid value to use as a default.",
            "Phase in which the QueryUnderstandingRequest for a non-identity Candidate is generated. Produces QueryCandidateInfo.",
            "Phase in which QUS calls QRewrite. Produces QRewrite's reply.",
            "Phase in which QBT interpretations are ranked. Produces ranked QBT interpretations.",
            "Phase in which QUS does a probe query for incomplete search results and produces ranked RBT interpretations on the basis of these. Only runs if understand_mode is PRE_RESULT_AND_PROBE_QUERY.",
            "Phase in which QUS does cross-account understanding. Produces AnalyzerResponse whose interpretations contain personal data from multiple accounts.",
            "Deprecated, but see go/qus-contextual-ig for original purpose.",
            "Phase in which QUS calls resolution service to perform slow intent resolution. Produces resolved intents.",
            "Phase in which QUS calls the fast HighPrecision workflow. Only runs if understand_mode is PRE_RESULT_AND_HIGH_PRECISION.",
            "Phase in which QUS combines the RBT result and Slow Resolution result. Only runs if understand_mode is PRE_RESULT_AND_PROBE_QUERY_AND_RESOLUTION.",
            "Phase in which QUS returns the AnalyzerInput as a separate Phase. It copies the AnalyzerInput from QU_PHASE_QREWRITE and returns it as a QueryUnderstandingStreamingResult for the purpose of logging in ACE. See go/analyzerinput-new-qus-phase.",
            "Phase in which QUS runs NSP in the QUS."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpLoggingQusClientCallPathInfo": {
      "description": "The proto that holds the complete call path info of the QUS client (e.g. the candidate type like \"Identity\", \"FuzzyMatcher\"; The intent generator like \"QUS_IG\" in ACE).",
      "id": "NlpLoggingQusClientCallPathInfo",
      "properties": {
        "rewriterType": {
          "description": "rewriter_type forms part of a unique key to be used to label QUS Requests from ACE. The need to distinguish between the variety of calls from AS into QUS is for two reasons: (a) currently, assistant eval can do NLU Eval only on certain rewrites (b) later AS Hermetic and NLU Eval can be integrated In the furure, the unique key will be expanded to add intent_generator_type or something similar. There are ongoing discussions to confirm these plans",
          "enum": [
            "UNKNOWN_REWRITER_TYPE",
            "GENIE",
            "FUZZY_MATCHER_HC",
            "FUZZY_MATCHER",
            "FUZZY_MATCHER_ADDITIONAL_1",
            "FUZZY_MATCHER_ADDITIONAL_2",
            "IDENTITY",
            "MONDEGREEN_ASSISTANT",
            "MONDEGREEN",
            "SYNTHETIC",
            "SPEECH_RECOGNITION",
            "SPEECH_MISRECOGNITION",
            "SPELL_CORRECTION",
            "AUTO_TRANSLATION",
            "AUTO_TRANSLATION_ARGUMENT_TRANSFER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "Additional FuzzyMatcher branches, see go/afm-additional-branches",
            "",
            "",
            "Mondegreen Assistant is used in Media queries, Mondegreen is used for YouTube/Voz. See go/project-mondegreen-media",
            "",
            "",
            "",
            "Rewriter for misrecognition quick-fixes, see go/pop-ranking-misrecognition-rewriter",
            "QUS rewriters.",
            "",
            "Auto Translate with argument transfer. go/missandei-argument-transfer-through-qus"
          ],
          "type": "string"
        },
        "temporaryAceTag": {
          "description": "The timestamp when QUS request is built in ACE. For now we don't care about the actual meaning of this tag, and only want to guarantee its uniqueness per QUS call.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpMeaningMeaningRemodeling": {
      "id": "NlpMeaningMeaningRemodeling",
      "properties": {
        "deletion": {
          "description": "This field can be set to true to indicate that the associated part of the schema is being deleted as part of the remodeling.",
          "type": "boolean"
        },
        "id": {
          "description": "The remodeling ID. Each remodeling has a unique ID that is used to associate changes with that remodeling.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpMeaningMeaningRemodelingControl": {
      "description": "This is the FunctionCall counterpart to the \"MeaningRemodelings\" structure. When present, it is used for typechecking the FunctionCall against the schema with the remodelings enabled.",
      "id": "NlpMeaningMeaningRemodelingControl",
      "properties": {
        "remodelingId": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpMeaningMeaningRemodelings": {
      "description": "This proto will be added as a field to part of a schema to indicate it is being remodeled.",
      "id": "NlpMeaningMeaningRemodelings",
      "properties": {
        "remodeling": {
          "items": {
            "$ref": "NlpMeaningMeaningRemodeling"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpMeaningSemanticTypeNameMeaningRemodelings": {
      "description": "Associates remodeling data with a semantic type name.",
      "id": "NlpMeaningSemanticTypeNameMeaningRemodelings",
      "properties": {
        "name": {
          "description": "Semantic type name.",
          "type": "string"
        },
        "remodelings": {
          "$ref": "NlpMeaningMeaningRemodelings"
        }
      },
      "type": "object"
    },
    "NlpSaftAnnotatedPhrase": {
      "description": "Representation of a phrase in the document with a particular annotation. Provides the ability to annotate arbitrary spans in the document. This is intended for representing spans that SAFT does NOT consider to be mentions of entities within a SAFT document.",
      "id": "NlpSaftAnnotatedPhrase",
      "properties": {
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Annotation for this phrase."
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "Contains start and end pointers to the token array for this span."
        }
      },
      "type": "object"
    },
    "NlpSaftConstituencyNode": {
      "description": "Constituency parse tree node with tokens as the leaf nodes.",
      "id": "NlpSaftConstituencyNode",
      "properties": {
        "child": {
          "description": "An arbitrary number of children, ordered from left to right; empty for preterminals. Represented via indices into Document.constituency_node.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "label": {
          "description": "The label of the current node.",
          "type": "string"
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "A phrase that contains information about the span and the (optional) head token. For terminal nodes the head of the phrase holds the word."
        }
      },
      "type": "object"
    },
    "NlpSaftDocument": {
      "description": "A document contains the raw text contents of the document as well as an analysis. The document can be split into tokens which can contain information about POS tags and dependency relations. The document can also contain entities and mentions of these entities in the document. Next available id: 36",
      "id": "NlpSaftDocument",
      "properties": {
        "annotatedPhrase": {
          "description": "Annotated phrases in the document that are not semantically well-defined mentions of entities.",
          "items": {
            "$ref": "NlpSaftAnnotatedPhrase"
          },
          "type": "array"
        },
        "annotations": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Generic annotations."
        },
        "author": {
          "description": "Document author(s).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "bylineDate": {
          "description": "Document's byline date, if available: this is the date that will be shown in the snippets in web search results. It is stored as the number of seconds since epoch. See segindexer/compositedoc.proto",
          "format": "int64",
          "type": "string"
        },
        "constituencyNode": {
          "description": "Constituency parse tree nodes for the sentences in this document.",
          "items": {
            "$ref": "NlpSaftConstituencyNode"
          },
          "type": "array"
        },
        "constituencyRoot": {
          "description": "The root node of the constituency tree for each sentence. If non-empty, the list of roots will be aligned with the sentences in the document. Note that some sentences may not have been parsed for various reasons; these sentences will be annotated with placeholder \"stub parses\". For details, see //nlp/saft/components/constituents/util/stub-parse.h.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "contentFirstseen": {
          "description": "Stores minimum of first time google successfully crawled a document, or indexed the document with contents (i.e, not roboted). It is stored as the number of seconds since epoch. See quality/historical/signals/firstseen/firstseen.proto",
          "format": "int64",
          "type": "string"
        },
        "contentType": {
          "description": "Optional document content_type (from webutil/http/content-type.proto). Used for setting the content_type when converting the SAFT Document to a CompositeDoc. Will be inferred if not given here.",
          "format": "int32",
          "type": "integer"
        },
        "contentage": {
          "description": "Age of the content of the document. For details, see: quality/historical/shingle/signals/contentage.proto The format has been translated to a canonical timestamp (seconds since epoch).",
          "format": "int64",
          "type": "string"
        },
        "date": {
          "description": "Document anchor date in YYYYMMDDhhmmss format.",
          "type": "string"
        },
        "docid": {
          "description": "Identifier for document.",
          "type": "string"
        },
        "entity": {
          "description": "Entities in the document.",
          "items": {
            "$ref": "NlpSaftEntity"
          },
          "type": "array"
        },
        "entityLabel": {
          "description": "Entity labels used in this document. This field is used to define labels for the Entity::entity_type_probability field, which contains corresponding probabilities. WARNING: This field is deprecated. go/saft-replace-deprecated-entity-type",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "focusEntity": {
          "description": "Focus entity. For lexicon articles, like Wikipedia pages, a document is often about a certain entity. This is the local entity id of the focus entity for the document.",
          "format": "int32",
          "type": "integer"
        },
        "golden": {
          "description": "Flag for indicating that the document is a gold-standard document. This can be used for putting additional weight on human-labeled documents in contrast to automatically labeled annotations.",
          "type": "boolean"
        },
        "httpHeaders": {
          "description": "HTTP header for document. If the HTTP headers field is set it should be the complete header including the HTTP status line and the trailing cr/nl. HTTP headers are not required to be valid UTF-8. Per the HTTP/1.1 Syntax (RFC7230) standard, non-ASCII octets should be treated as opaque data.",
          "format": "byte",
          "type": "string"
        },
        "hyperlink": {
          "description": "The hyperlinks in the document. Multiple hyperlinks are sorted in left-to-right order.",
          "items": {
            "$ref": "NlpSaftHyperlink"
          },
          "type": "array"
        },
        "labeledSpans": {
          "additionalProperties": {
            "$ref": "NlpSaftLabeledSpans"
          },
          "description": "Generic labeled spans (produced by the span labeling framework, go/saft-span-labeling). The map key identifies spans of the same type. By convention, it should be of the form \"team_name/span_type_name\".",
          "type": "object"
        },
        "language": {
          "description": "Document language (default is English). This field's value maps cleanly to the i18n.languages.Language proto enum (i18n::languages::Language in C++).",
          "format": "int32",
          "type": "integer"
        },
        "lastSignificantUpdate": {
          "description": "Last significant update of the page content, in the same format as the contentage field, and also derived from ContentAge.last_significant_update in quality/historical/shingle/signals/contentage.proto.",
          "format": "int64",
          "type": "string"
        },
        "measure": {
          "description": "Measures in the documents. This covers both time expressions as well as physical quantities.",
          "items": {
            "$ref": "NlpSaftMeasure"
          },
          "type": "array"
        },
        "privacySensitive": {
          "description": "True if this document contains privacy sensitive data. When the document is transferred in RPC calls the RPC should use SSL_PRIVACY_AND_INTEGRITY security level.",
          "type": "boolean"
        },
        "relation": {
          "description": "Relations between entities in the document.",
          "items": {
            "$ref": "NlpSaftRelation"
          },
          "type": "array"
        },
        "rpcError": {
          "description": "True if some RPC which touched this document had an error.",
          "type": "boolean"
        },
        "semanticNode": {
          "description": "The semantic nodes for the document represent arbitrary types of higher-level abstractions beyond entity mention coreference and binary relations between entities. These may include: n-ary relations, semantic frames or events. The semantic nodes for a document are the nodes in a directed acyclic graph, with an adjacency list representation.",
          "items": {
            "$ref": "NlpSaftSemanticNode"
          },
          "type": "array"
        },
        "subsection": {
          "description": "Sub-sections for document for dividing a document into volumes, parts, chapters, sections, etc.",
          "items": {
            "$ref": "NlpSaftDocument"
          },
          "type": "array"
        },
        "syntacticDate": {
          "description": "Document's syntactic date (e.g. date explicitly mentioned in the URL of the document or in the document title). It is stored as the number of seconds since epoch. See quality/timebased/syntacticdate/proto/syntactic-date.proto",
          "format": "int64",
          "type": "string"
        },
        "text": {
          "description": "Raw text contents of document. (In docjoin attachments from the SAFT goldmine annotator this field will be empty.)",
          "type": "string"
        },
        "title": {
          "description": "Optional document title.",
          "type": "string"
        },
        "token": {
          "description": "Tokenization of the document.",
          "items": {
            "$ref": "NlpSaftToken"
          },
          "type": "array"
        },
        "topic": {
          "items": {
            "$ref": "NlpSaftDocumentTopic"
          },
          "type": "array"
        },
        "trace": {
          "description": "Whether to enable component tracing during analysis of this document. See http://go/saft-tracing for details.",
          "type": "boolean"
        },
        "url": {
          "description": "Source document URL.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftDocumentTopic": {
      "description": "Document topic(s).",
      "id": "NlpSaftDocumentTopic",
      "properties": {
        "name": {
          "description": "Topic name or identifier.",
          "type": "string"
        },
        "score": {
          "description": "Topic score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSaftEntity": {
      "description": "Named entities in the document.",
      "id": "NlpSaftEntity",
      "properties": {
        "antecedent": {
          "description": "Antecedent for entity. This is used to make coreference chains before the mentions in the document are grouped by entity.",
          "format": "int32",
          "type": "integer"
        },
        "entityType": {
          "description": "Entity type (e.g. PER, ORG, LOC). WARNING: This field is deprecated. go/saft-replace-deprecated-entity-type",
          "type": "string"
        },
        "entityTypeProbability": {
          "description": "Probability distribution over entity types. These values correspond to Document.entity_label values: doc.entity[e].entity_type_probability[n] is the probability that the correct label for doc.entity[e] is doc.entity_label[n]. These probabilities sum to 1.0 (with possible rounding error). WARNING: This field is deprecated. go/saft-replace-deprecated-entity-type",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "gender": {
          "description": "Gender for entity.",
          "enum": [
            "MASCULINE",
            "FEMININE",
            "NEUTER",
            "PLURAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "deprecated on 2014/7/7"
          ],
          "type": "string"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this entity."
        },
        "mention": {
          "description": "Mentions of the entity in the document.",
          "items": {
            "$ref": "NlpSaftMention"
          },
          "type": "array"
        },
        "name": {
          "description": "Representative entity name.",
          "type": "string"
        },
        "profile": {
          "$ref": "NlpSaftEntityProfile",
          "description": "Profile for entity."
        },
        "referent": {
          "$ref": "NlpSaftReferent",
          "description": "Referent information for discourse context entities that are not mentioned in the document. These can be merged with mentioned entities during analysis if they are deemed to be coreferent. Entities with referents should not have any mentions if they do not corefer with anything. For example, when adding context entities to an input document prior to SAFT analysis, those entities should have a referent and no mentions."
        },
        "representativeMention": {
          "description": "Representative mention, as an index into mention.",
          "format": "int32",
          "type": "integer"
        },
        "salience": {
          "description": "Score indicating the saliency (centrality) of this entity to the document.",
          "format": "double",
          "type": "number"
        },
        "type": {
          "description": "Entity types of the entity. These can include SAFT types (/saft/location, /saft/art, /saft/other/living_thing, etc), collections types (/collection/tv_personalities, /collection/statistical_regions, etc), and more. This refers to the type of the entity itself: in \"She is on TV\", \"She\" refers to a specific actor, with type \"/collection/tv_personalities\". Cf. Mention.Type, which is the type of the referring mention.",
          "items": {
            "$ref": "NlpSaftEntityType"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityProfile": {
      "description": "An entity profile contains a summary of the information about a single unique entity. Next available index: 46.",
      "id": "NlpSaftEntityProfile",
      "properties": {
        "alternate": {
          "items": {
            "$ref": "NlpSaftEntityProfileAlternate"
          },
          "type": "array"
        },
        "annotations": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Generic annotations."
        },
        "attribute": {
          "description": "List of attributes for the entity.",
          "items": {
            "$ref": "NlpSaftEntityProfileAttribute"
          },
          "type": "array"
        },
        "canonicalName": {
          "description": "Canonical entity name.",
          "type": "string"
        },
        "collectionScoreType": {
          "enum": [
            "COLLECTION_GIVEN_ENTITY",
            "ENTITY_GIVEN_COLLECTION"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "disambiguation": {
          "description": "Disambiguation phrase. The combination of entity name and disambiguation phrase should be unique within the corpus.",
          "type": "string"
        },
        "embedding": {
          "description": "Entity embeding vector, representing the entity in a dense low-dimensional embedding space.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "frame": {
          "description": "Profile frame in binary SLING encoding.",
          "format": "byte",
          "type": "string"
        },
        "gender": {
          "description": "Gender of the entity.",
          "enum": [
            "MASCULINE",
            "FEMININE",
            "NEUTER",
            "PLURAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "deprecated on 2014/7/7"
          ],
          "type": "string"
        },
        "id": {
          "description": "Unique global id for entity.",
          "format": "int64",
          "type": "string"
        },
        "identifier": {
          "description": "External identifiers for entity.",
          "items": {
            "$ref": "NlpSaftIdentifier"
          },
          "type": "array"
        },
        "keyword": {
          "items": {
            "$ref": "NlpSaftEntityProfileKeyword"
          },
          "type": "array"
        },
        "mid": {
          "description": "Freebase MID for entity. This field should be the same as FREEBASE_MID identifier for the entity profile.",
          "type": "string"
        },
        "name": {
          "description": "Representative name for entity.",
          "type": "string"
        },
        "nameLanguage": {
          "description": "Language for the name and disambiguation.",
          "format": "int32",
          "type": "integer"
        },
        "nature": {
          "description": "Nature of the entity.",
          "enum": [
            "UNKNOWN",
            "CONCEPT",
            "THING",
            "ESTABLISHMENT",
            "INDIVIDUAL",
            "GIVEN_NAME",
            "FAMILY_NAME"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "reference": {
          "items": {
            "$ref": "NlpSaftEntityProfileReference"
          },
          "type": "array"
        },
        "related": {
          "items": {
            "$ref": "NlpSaftEntityProfileRelated"
          },
          "type": "array"
        },
        "type": {
          "description": "Entity type.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityProfileAlternate": {
      "description": "Alternative names for entity.",
      "id": "NlpSaftEntityProfileAlternate",
      "properties": {
        "count": {
          "format": "int32",
          "type": "integer"
        },
        "form": {
          "description": "see nlp/saft/resolution/name-form.h for values",
          "format": "int32",
          "type": "integer"
        },
        "frame": {
          "description": "frame in SLING encoding",
          "format": "byte",
          "type": "string"
        },
        "language": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "sources": {
          "description": "(1 << SRC_DEFAULT)",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityProfileAttribute": {
      "id": "NlpSaftEntityProfileAttribute",
      "properties": {
        "boolValue": {
          "description": "Boolean attribute value, e.g. for IsDeceased.",
          "type": "boolean"
        },
        "floatValue": {
          "description": "Double attribute value, e.g. for height/weight.",
          "format": "double",
          "type": "number"
        },
        "intValue": {
          "description": "Integer attribute value, e.g. IntId(\"April\").",
          "format": "int64",
          "type": "string"
        },
        "language": {
          "description": "Language, in case the attribute value is a string.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "String name of the type of attribute, e.g. /birth/date",
          "type": "string"
        },
        "typeId": {
          "description": "Any id of the type of the attribute, e.g. IntId(/birth/date)",
          "format": "int32",
          "type": "integer"
        },
        "value": {
          "description": "String attribute value, e.g. \"April 2010\" or \"3,235,121\".",
          "type": "string"
        },
        "valueType": {
          "description": "The type of the value.",
          "enum": [
            "ATTRIBUTE_TYPE_STRING",
            "ATTRIBUTE_TYPE_INT",
            "ATTRIBUTE_TYPE_FLOAT",
            "ATTRIBUTE_TYPE_BOOL",
            "ATTRIBUTE_TYPE_DATETIME"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityProfileKeyword": {
      "description": "Keywords and key phrases for entity.",
      "id": "NlpSaftEntityProfileKeyword",
      "properties": {
        "count": {
          "format": "int32",
          "type": "integer"
        },
        "language": {
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "description": "Score associated with the keyword. For fine-grained types this is a probability.",
          "format": "double",
          "type": "number"
        },
        "term": {
          "type": "string"
        },
        "type": {
          "enum": [
            "CONTEXT",
            "MENTION",
            "HEADLINE",
            "TOPIC",
            "TEMPORAL",
            "FREEBASE_TYPE",
            "FREEBASE_NOTABLE_TYPE",
            "FREEBASE_NOTABLE_FOR",
            "FINE_TYPE",
            "KG_COLLECTION",
            "HYPERNYM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityProfileReference": {
      "description": "References to entity.",
      "id": "NlpSaftEntityProfileReference",
      "properties": {
        "docid": {
          "type": "string"
        },
        "entity": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityProfileRelated": {
      "description": "Related entities.",
      "id": "NlpSaftEntityProfileRelated",
      "properties": {
        "count": {
          "description": "Number of occurrences.",
          "format": "int32",
          "type": "integer"
        },
        "inverse": {
          "description": "Inverse relations can be marked in a bidirectional graph.",
          "type": "boolean"
        },
        "relationId": {
          "description": "Optional integer id for the relation.",
          "format": "int32",
          "type": "integer"
        },
        "relationIdentifier": {
          "$ref": "NlpSaftIdentifier",
          "description": "Optional external identifier for the relation."
        },
        "score": {
          "description": "Score for related entity, i.e. p(e->r | e).",
          "format": "float",
          "type": "number"
        },
        "targetId": {
          "description": "Profile id of related entity.",
          "format": "int64",
          "type": "string"
        },
        "targetIdentifier": {
          "$ref": "NlpSaftIdentifier",
          "description": "Optional external identifier for the target entity."
        },
        "targetName": {
          "description": "Name of related entity.",
          "type": "string"
        },
        "type": {
          "description": "Type of relation.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftEntityType": {
      "description": "A generic type description for an entity.",
      "id": "NlpSaftEntityType",
      "properties": {
        "basedOnMention": {
          "description": "This field can be used to specify if the entity type has been annotated or predicted from a specific mention of the entity. However, the entity type does still apply to the entity as a whole, and not just a specific mention.",
          "format": "int32",
          "type": "integer"
        },
        "domain": {
          "description": "A domain name for the set that this particular type belongs to.",
          "enum": [
            "UNSPECIFIED",
            "SAFT",
            "SAFT_FINE",
            "SAFT_FINE_MENTION",
            "COLLECTIONS",
            "FREEBASE",
            "FIGER",
            "ISA"
          ],
          "enumDescriptions": [
            "",
            "Coarse entity types, like \"/saft/organization\".",
            "Fine entity types, like \"/saft/organization/education\".",
            "Mention-level fine entity types. These are annotated in cases when the entity-level type does not apply to all mentions, like in \"Bob is an animal.\" The based_on_mention value is populated correspondingly.",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this entity type."
        },
        "name": {
          "description": "The type name, like \"/saft/person\". See README.entity-types for the inventory of SAFT type tags.",
          "type": "string"
        },
        "score": {
          "description": "A score for this type.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSaftHyperlink": {
      "description": "A link on an HTML page.",
      "id": "NlpSaftHyperlink",
      "properties": {
        "anchorText": {
          "description": "Clean anchor text (no HTML markup).",
          "type": "string"
        },
        "byteEnd": {
          "description": "note: inclusive",
          "format": "int32",
          "type": "integer"
        },
        "byteStart": {
          "description": "begin/end options are for goldmine AnnotationsFinder to locate the offsets of saft tokens. Start is inclusive by default and end is marked. The indices of the first and last byte covered by the hyperlink.",
          "format": "int32",
          "type": "integer"
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "The indices of the first and last token covered by the hyperlink."
        },
        "url": {
          "description": "(Absolute) URL that the links to.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftIdentifier": {
      "description": "External identifier. An external identifier is a persistent identifier for an object within a domain.",
      "id": "NlpSaftIdentifier",
      "properties": {
        "domain": {
          "description": "Domain for the identifier.",
          "enum": [
            "WIKIPEDIA_ARTICLE_NAME",
            "WEBREFERENCES_ID",
            "FREEBASE_MID",
            "WIKIPEDIA_ARTICLE_ID",
            "CANONICAL_URL",
            "FREEBASE_TOPIC",
            "FREEBASE_MID_CHAIN",
            "FREEBASE_ID",
            "OYSTER_FEATURE_ID",
            "WORDNET_SENSE_KEY",
            "EXACT_STRING_MATCH",
            "GOOGLE_PLAY_ID",
            "GOOGLE_PLAY_DEVELOPER",
            "GOOGLE_PLAY_TITLE",
            "OXFORD_ID",
            "NOUN_COMPOUND"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "id of the app on play store",
            "name of the developer",
            "title of the app",
            "",
            ""
          ],
          "type": "string"
        },
        "id": {
          "description": "Identifier within domain.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftLabeledSpan": {
      "description": "A generic span, possibly with an associated label. The span may be defined by either byte-level or token-level boundaries.",
      "id": "NlpSaftLabeledSpan",
      "properties": {
        "byteEnd": {
          "description": "note: inclusive",
          "format": "int32",
          "type": "integer"
        },
        "byteStart": {
          "description": "The indices of the first and last byte covered by the span.",
          "format": "int32",
          "type": "integer"
        },
        "label": {
          "description": "The label associated with the span.",
          "type": "string"
        },
        "labelScores": {
          "additionalProperties": {
            "format": "float",
            "type": "number"
          },
          "description": "Optionally stores alternative labels with associated scores for the span.",
          "type": "object"
        },
        "score": {
          "description": "A score associated with the span.",
          "format": "float",
          "type": "number"
        },
        "tokenEnd": {
          "description": "note: inclusive",
          "format": "int32",
          "type": "integer"
        },
        "tokenStart": {
          "description": "The indices of the first and last token covered by the span.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSaftLabeledSpans": {
      "description": "A list of labeled spans of the same type.",
      "id": "NlpSaftLabeledSpans",
      "properties": {
        "labeledSpan": {
          "items": {
            "$ref": "NlpSaftLabeledSpan"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSaftMeasure": {
      "description": "Measures in the documents. This covers both time expressions as well as physical quantities.",
      "id": "NlpSaftMeasure",
      "properties": {
        "canonical": {
          "description": "Canonical value for measurement.",
          "format": "double",
          "type": "number"
        },
        "granularity": {
          "description": "Granularity for measurement.",
          "format": "double",
          "type": "number"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this measure."
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "Phrase containing the measure."
        },
        "type": {
          "enum": [
            "NUMBER",
            "PERCENT",
            "ORDINAL",
            "DATE",
            "TIME",
            "PERIOD",
            "CURRENCY",
            "LENGTH",
            "AREA",
            "VOLUME",
            "MASS",
            "TEMPERATURE",
            "ANGLE",
            "BRIGHTNESS",
            "CHARGE",
            "DATA",
            "DATA_RATE",
            "DURATION",
            "ENERGY",
            "FREQUENCY",
            "FUEL_EFFICIENCY",
            "POWER",
            "PRESSURE",
            "SPEED",
            "VOLTAGE",
            "RESISTANCE",
            "FORCE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "unit": {
          "type": "string"
        },
        "value": {
          "description": "Measurement value and unit.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftMention": {
      "description": "Mentions of the entity in the document.",
      "id": "NlpSaftMention",
      "properties": {
        "confidence": {
          "description": "Estimate of the confidence that this mention is in the correct cluster. Zero means this mention is probably in the wrong cluster, 1 means this mention is probably in the correct cluster. See nlp/saft/components/coreference/coreference-confidence.h for details about what \"correct cluster\" might mean.",
          "format": "double",
          "type": "number"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this mention."
        },
        "kind": {
          "enum": [
            "UNSPECIFIED_KIND",
            "REFERENTIAL",
            "ATTRIBUTIVE",
            "MODIFIER"
          ],
          "enumDescriptions": [
            "",
            "referential mention",
            "attributive mention",
            "modifier mention"
          ],
          "type": "string"
        },
        "nestingRelation": {
          "enum": [
            "UNSPECIFIED_RELATION",
            "ALIAS",
            "NESTED_MODIFIER",
            "EPONYM",
            "CONJUNCTION",
            "IN_CREATIVE_WORK",
            "SPECIFIED_HEAD"
          ],
          "enumDescriptions": [
            "",
            "This mention refers to the same entity as the enclosing mention. E.g.: [[Google] Inc.]",
            "This mention refers to an entity that is used as a modifier to specify or identify the enclosing mention's entity. E.g.: [[California] DMV]",
            "This mention refers to an entity that the enclosing mention's entity is named after. E.g.: [[George Washington] Bridge]",
            "This mention refers to an entity that forms a co-equal part that makes up the enclosing mention. E.g.: [[Roe] v [Wade]]",
            "The enclosing mention is the name/title of a creative work. E.g.: [[Batman] Returns]",
            "The enclosing mention is a specific instance or member of the more general entity identified by this mention. E.g.: [2008 [Winter Olympics]]"
          ],
          "type": "string"
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "Phrase for the mention."
        },
        "resolution": {
          "$ref": "NlpSaftMentionResolution",
          "description": "Mention-level resolution. This is used for encoding the meaning of the mention rather than the entity. For example, definite references and appositions are resolved to the mid for the concept rather than the entity."
        },
        "role": {
          "enum": [
            "UNSPECIFIED",
            "CONJUNCTION_ITEM"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "type": {
          "enum": [
            "NAM",
            "NOM",
            "PRE",
            "PRO",
            "CMC",
            "NRP",
            "VRB",
            "IMP"
          ],
          "enumDescriptions": [
            "name mention (proper noun)",
            "nominal mention (common noun)",
            "pre-nominal mention",
            "pronominal mention",
            "conjoined mention construction",
            "mention of a non-referential pronoun",
            "Verbal mention (head of verb phrase antecedents in discourse deixis).",
            "Implicit mention (e.g., elliptical subjects in pro-drop languages). The facet in the phrase indicates its role with respect to the phrase token."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftMentionResolution": {
      "description": "Mention resolution for encoding the concept id (e.g. mid) for a mention.",
      "id": "NlpSaftMentionResolution",
      "properties": {
        "profile": {
          "$ref": "NlpSaftEntityProfile",
          "description": "Profile for mention information."
        },
        "type": {
          "enum": [
            "MATCH",
            "BROADER_MATCH"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftMorphology": {
      "description": "Message that stores information about the morphology of a token.",
      "id": "NlpSaftMorphology",
      "properties": {
        "attrValue": {
          "description": "A list of morphology attribute-value pairs.",
          "items": {
            "enum": [
              "OTHER",
              "ATTR_ANIMACY",
              "UNSP_ANIMACY",
              "ANIMATE",
              "INANIMATE",
              "IRRATIONAL",
              "RATIONAL",
              "PERSONAL",
              "ATTR_ASPECT",
              "UNSP_ASPECT",
              "PERFECT",
              "IMPERFECT",
              "PROGRESSIVE",
              "ATTR_CASE",
              "UNSP_CASE",
              "NOMINATIVE",
              "ACCUSATIVE",
              "DATIVE",
              "GENITIVE",
              "PREPOSITIONAL",
              "INSTRUMENTAL",
              "VOCATIVE",
              "ADVERBIAL",
              "COMPLEMENTIVE",
              "LOCATIVE",
              "OBLIQUE",
              "PARTITIVE",
              "REFLEXIVE_CASE",
              "RELATIVE_CASE",
              "DIRECT_CASE",
              "ERGATIVE",
              "ATTR_DEFINITENESS",
              "UNSP_DEFINITENESS",
              "DEFINITE",
              "INDEFINITE",
              "ATTR_DEGREE",
              "UNSP_DEGREE",
              "COMPARATIVE",
              "SUPERLATIVE",
              "POSITIVE",
              "ABSOLUTE_DEGREE",
              "RELATIVE_DEGREE",
              "ATTR_FORM",
              "UNSP_FORM",
              "ADNOMIAL",
              "AUXILIARY",
              "COMPLEMENTIZER",
              "FINAL_ENDING",
              "GERUND",
              "IRREALIS",
              "LONG_FORM",
              "ORDER_FORM",
              "REALIS",
              "SHORT_FORM",
              "SPECIFIC_FORM",
              "ATTR_GENDER_AGR",
              "UNSP_GENDER_AGR",
              "FEMININE_AGR",
              "MASCULINE_AGR",
              "NEUTER_AGR",
              "ATTR_GENDER",
              "UNSP_GENDER",
              "FEMININE",
              "MASCULINE",
              "NEUTER",
              "PLURALE_TANTUM",
              "COMMON",
              "ATTR_MOOD",
              "UNSP_MOOD",
              "CONDITIONAL_MOOD",
              "IMPERATIVE",
              "INDICATIVE",
              "INTERROGATIVE",
              "JUSSIVE",
              "SUBJUNCTIVE",
              "SUBJUNCTIVE1",
              "SUBJUNCTIVE2",
              "OPTATIVE",
              "ATTR_NUMBER_AGR",
              "UNSP_NUMBER_AGR",
              "SINGULAR_AGR",
              "PLURAL_AGR",
              "ATTR_NUMBER",
              "UNSP_NUMBER",
              "SINGULAR",
              "PLURAL",
              "DUAL",
              "ATTR_PERSON",
              "UNSP_PERSON",
              "FIRST",
              "SECOND",
              "THIRD",
              "REFLEXIVE_PERSON",
              "ATTR_PROPER",
              "UNSP_PROPER",
              "NOT_PROPER",
              "PROPER",
              "ATTR_RECIPROCITY",
              "UNSP_RECIPROCITY",
              "NON_RECIPROCAL",
              "RECIPROCAL",
              "ATTR_TENSE",
              "UNSP_TENSE",
              "CONDITIONAL_TENSE",
              "FUTURE",
              "PAST",
              "PRESENT",
              "PLUPERFECT",
              "IMPERFECT_TENSE",
              "ATTR_VOICE",
              "UNSP_VOICE",
              "ACTIVE",
              "CAUSATIVE",
              "PASSIVE",
              "ATTR_GENDER_ANTECEDENT",
              "UNSP_GENDER_ANTECEDENT",
              "FEMININE_ANTECEDENT",
              "MASCULINE_ANTECEDENT",
              "NEUTER_ANTECEDENT",
              "ATTR_NUMBER_ANTECEDENT",
              "UNSP_NUMBER_ANTECEDENT",
              "SINGULAR_ANTECEDENT",
              "PLURAL_ANTECEDENT",
              "ATTR_HONORIFIC",
              "UNSP_HONORIFIC",
              "HONORIFIC",
              "ATTR_FORMALITY",
              "UNSP_FORMALITY",
              "FORMAL",
              "INFORMAL",
              "ATTR_INFLECTION_TYPE",
              "UNSP_INFLECTION_TYPE",
              "WEAK_INFLECTION",
              "STRONG_INFLECTION",
              "MIXED_INFLECTION"
            ],
            "enumDescriptions": [
              "Defaults. not in list",
              "Animacy.",
              "animacy=unsp_r",
              "animacy=anim",
              "animacy=inan",
              "animacy=irrat",
              "animacy=rat",
              "animacy=pers",
              "Aspect.",
              "aspect=unsp_a",
              "aspect=perf",
              "aspect=imperf",
              "aspect=prog",
              "Case.",
              "case=unsp_c",
              "case=nom",
              "case=acc",
              "case=dat",
              "case=gen",
              "case=prep",
              "case=ins",
              "case=voc",
              "case=advb",
              "case=comp",
              "case=loc",
              "case=obl",
              "case=par",
              "case=reflex",
              "case=rel",
              "case=dir",
              "case=erg",
              "Definiteness.",
              "definiteness=unsp_d",
              "definiteness=def",
              "definiteness=indef",
              "Degree.",
              "degree=unsp_d",
              "degree=cmp",
              "degree=sup",
              "degree=pos",
              "degree=sup_a",
              "degree=sup_r",
              "Form.",
              "form=unsp_f",
              "form=adn",
              "form=aux",
              "form=compl",
              "form=fin",
              "form=ger",
              "form=irr",
              "form=long",
              "form=ord",
              "form=real",
              "form=short",
              "form=spcf",
              "Gender agreement.",
              "gender_agr=unsp_a",
              "gender_agr=fem_a",
              "gender_agr=masc_a",
              "gender_agr=neut_a",
              "Gender.",
              "gender=unsp_g",
              "gender=fem",
              "gender=masc",
              "gender=neut",
              "gender=pl_tantum",
              "gender=com",
              "Mood.",
              "mood=unsp_m",
              "mood=cnd",
              "mood=imp",
              "mood=ind",
              "mood=inter",
              "mood=jus",
              "mood=sub",
              "mood=sub1",
              "mood=sub2",
              "mood=opt",
              "Number agreement.",
              "number_agr=unsp_a",
              "number_agr=sing_a",
              "number_agr=plur_a",
              "Number.",
              "number=unsp_n",
              "number=sing",
              "number=plur",
              "number=dual",
              "Person.",
              "person=unsp_p",
              "person=1",
              "person=2",
              "person=3",
              "person=reflex",
              "Proper name.",
              "proper=unsp_p",
              "proper=false",
              "proper=true",
              "Reciprocity.",
              "reciprocity=unsp_r",
              "reciprocity=non-rcp",
              "reciprocity=rcp",
              "Tense.",
              "tense=unsp_t",
              "tense=cnd",
              "tense=fut",
              "tense=past",
              "tense=pres",
              "tense=plup",
              "tense=impf",
              "Voice.",
              "voice=unsp_v",
              "voice=act",
              "voice=cau",
              "voice=pass",
              "Gender antecedent.",
              "gender_antecedent=unsp_a",
              "gender_antecedent=fem_a",
              "gender_antecedent=masc_a",
              "gender_antecedent=neut_a",
              "Number antecedent.",
              "number_antecedent=unsp_a",
              "number_antecedent=sing_a",
              "number_antecedent=plur_a",
              "Honorific.",
              "honorific=unsp_h",
              "honorific=hon",
              "Formality.",
              "formality=unsp_f",
              "formality=fml",
              "formality=ifml",
              "Inflection type (also known as Declension)",
              "inflection_type=unsp_i",
              "inflection_type=weak",
              "inflection_type=strong",
              "inflection_type=mixed"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSaftPhrase": {
      "description": "A document phrase marks a range of tokens in a document as a phrase. The indices are token positions in the document.",
      "id": "NlpSaftPhrase",
      "properties": {
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "facet": {
          "enum": [
            "EXPLICIT",
            "SUBJ",
            "DOBJ"
          ],
          "enumDescriptions": [
            "explicit phrase, with no implicit facet",
            "subject of the phrase token",
            "direct object of the phrase token"
          ],
          "type": "string"
        },
        "head": {
          "description": "The head token in the phrase is the id of the top-most token within the phrase. It either has an arc from outside the phrase going to it, or it is a root token of the sentence. A value of -1 indicates that the head has not yet been computed for the phrase (not the same semantics as the head of a token!). Note that even when it is uniquely defined, there is no guarantee that the head is set for entities and measurements within a document: you may need to explicitly compute it.",
          "format": "int32",
          "type": "integer"
        },
        "start": {
          "description": "First and last token in the phrase. The phrase goes from start to end (inclusive).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSaftReferent": {
      "description": "A referent contains information about what a discourse context entity is referring to. It acts like a canonical mention of the entity.",
      "id": "NlpSaftReferent",
      "properties": {
        "distance": {
          "description": "Distance of this referent from the markables in the Document. Smaller values imply that the referent is more accessible to be an antecedent for a markable in the Document. The expectation is that this field would increase with every new Document in which this referent is not mentioned.",
          "format": "double",
          "type": "number"
        },
        "explicitness": {
          "enum": [
            "NAMED",
            "DEFINITE",
            "INDEFINITE"
          ],
          "enumDescriptions": [
            "mentioned by the actual name",
            "refers to a particular object, e.g., \"the dog\"",
            "groups of objects, e.g., \"dogs\""
          ],
          "type": "string"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this referent."
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "Entity name phrase. The phrase indices are relative to the token array above. The phrase should normally cover all the tokens in the name and the head must be set to be the head token of the name."
        },
        "prominence": {
          "description": "Prominence score for referent. This is roughly equivalent to the number of previous mentions of the referent.",
          "format": "double",
          "type": "number"
        },
        "role": {
          "enum": [
            "CONTEXT",
            "NARRATOR",
            "ADDRESSEE",
            "SUBJECT"
          ],
          "enumDescriptions": [
            "Entity that has been mentioned previously in the discourse context.",
            "The narrator of the discourse. This can be coreferent with first-person non-quoted pronouns in the discourse.",
            "The recipient of the message in the discourse. This can be coreferent with non-quoted second-person pronouns in the discourse.",
            "Prominent subject of the discourse context. This can be coreferent with referential third-person pronouns in the discourse that don't have any other possible antecedents in the discourse."
          ],
          "type": "string"
        },
        "token": {
          "description": "Tokenized representation for the canonical name of the referent entity.",
          "items": {
            "$ref": "NlpSaftToken"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSaftRelation": {
      "description": "Relations between entities in the document. A relation is between two different entities in the document. A relation can have a number of mentions in the document. Next available id: 11",
      "id": "NlpSaftRelation",
      "properties": {
        "identifier": {
          "$ref": "NlpSaftIdentifier",
          "description": "External identifier for relation."
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this relation."
        },
        "kind": {
          "enum": [
            "ENTITY",
            "ATTRIBUTE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "mention": {
          "description": "Mentions of the relation in the document.",
          "items": {
            "$ref": "NlpSaftRelationMention"
          },
          "type": "array"
        },
        "score": {
          "description": "Relation score.",
          "format": "float",
          "type": "number"
        },
        "source": {
          "description": "Source and target entity indices. These are indices into the entity array in the document. If this is an attribute relation the target is the index of a measure in the document.",
          "format": "int32",
          "type": "integer"
        },
        "target": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "Relation type.",
          "type": "string"
        },
        "typeId": {
          "description": "Relation type id.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSaftRelationMention": {
      "description": "Mentions of relations in the document. A relation mention is between a mention of the source entity and a mention of the target entity.",
      "id": "NlpSaftRelationMention",
      "properties": {
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this relation mention."
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "Phrase in the document that indicates the relation mention."
        },
        "source": {
          "description": "Source and target mention indices. These are indices into the mention arrays for their respective entities. The target is not used for attributes.",
          "format": "int32",
          "type": "integer"
        },
        "sourceInfo": {
          "description": "The info of the source models or systems of the relation mention.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "target": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSaftSemanticNode": {
      "description": "Semantic node for annotating semantic constructions in documents. A set of SemanticNode instances represents a directed acyclic graph with an adjacency list representation. Each node can optionally be connected to some existing type system, such as PropBank. Each node can optionally be connected to one or more concrete elements in a SAFT document, specifically, an entity mention, a measure and/or a token span (Phrase). Next available id: 23",
      "id": "NlpSaftSemanticNode",
      "properties": {
        "arc": {
          "description": "The arcs from this node. For example, if this node is the root of a subgraph representing a predicate-argument structure, this node will typically refer to the predicate, and there will typically be one arc per argument.",
          "items": {
            "$ref": "NlpSaftSemanticNodeArc"
          },
          "type": "array"
        },
        "confidence": {
          "description": "Confidence score for the annotation.",
          "format": "float",
          "type": "number"
        },
        "description": {
          "description": "Human-readable description of the information in the subgraph represented by this node. This field is only meant for display purposes.",
          "type": "string"
        },
        "entity": {
          "description": "The entity and mention fields specify a unique entity mention referred to by this semantic node.",
          "format": "int32",
          "type": "integer"
        },
        "implicit": {
          "description": "Indicates whether the semantic node is not explicit (grounded) in the text (e.g. pro-drop for a text author or an implicit predicate node for interpreting a compound noun), rather than any explicit phrase or text inside the document.",
          "type": "boolean"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this node."
        },
        "kind": {
          "description": "Encodes the kind of this node and, possibly, the entire subgraph rooted at this node. For example, if this node represents a predicate-argument structure in PropBank, then this node's kind will be PROPBANK, its phrase field will be set to correspond to the span of tokens corresponding to the predicate (such as a verb) and it will have one arc per argument. If the kind is MONOTONIC this node corresponds to a semantic graph node, and arcs correspond to semantic graph edges outgoing from the node. If the kind field is not set, then this node is not directly connected to any type system. In such a case, this node may still optionally have a concrete \"payload\" in the form of references to an entity mention, measure or span of tokens (Phrase) in a SAFT document. The values or existence of the kind field need not be identical in any subgraph. For example, even if this node's kind field is not set, it may still be the destination node of an arc from some other node whose kind field is set.",
          "enum": [
            "PROPBANK",
            "MONOTONIC",
            "FRAMENET",
            "OPEN_RELATION",
            "PATTERN_CLUSTERS",
            "OED_WORD_SENSE",
            "EVENT",
            "NAME",
            "TIME_EXPRESSION",
            "MOLECULE",
            "WORDNET",
            "HYPERNYM",
            "DIALOGUE",
            "ANAPHOR",
            "SENSE_ANTECEDENT",
            "NOUN_COMPOUND",
            "ISTA"
          ],
          "enumDescriptions": [
            "",
            "Semantic node in the monotonic graphical semantics notation.",
            "FrameNet: frame + frame elements.",
            "Semantic node representing an open relation extraction.",
            "Semantic node representing an event derived from patterns learned from news clusters.",
            "Word senses denoted by OED lexids.",
            "Semantic node representing an event or event mention.",
            "Semantic node representing a proper name.",
            "Semantic node representing a time expression.",
            "",
            "Word senses denoted by WordNet Word Sense.",
            "Semantic node representing the hypernym of a mention. Each mention can have multiple hypernyms (each stored in its own SemanticNode), and these hypernyms are not necessarily mutually exclusive. go/hyperpedia, go/contextual-hp-design-doc",
            "Semantic node representing a dialogue annotation, indicating lines of direct speech, entities who speak these lines, or entire conversations consisting of these lines and speakers. For a detailed reference on the schema for this annotation, see nlp/descartes/dialogue/proto/dialogue.proto.",
            "Semantic node representing an anaphoric phrase whose interpretation depends on another phrase with which it is not coreferent and to which it is linked by an arc. E.g., He bought a blue car and she bought [one] too.",
            "Semantic node representing a phrase whose sense (not referent) is the antecedent of an anaphoric phrase such as \"one\". E.g., He bought a [blue car] and she bought one too.",
            "Representing the semantic relation between the components of a noun compound chosen from a fixed inventory of abstract relations.",
            "Semantic node representing a term in the short-text (iSTA) parse of the document."
          ],
          "type": "string"
        },
        "measure": {
          "description": "The index of the measure referred to by this semantic node.",
          "format": "int32",
          "type": "integer"
        },
        "mention": {
          "format": "int32",
          "type": "integer"
        },
        "phrase": {
          "$ref": "NlpSaftPhrase",
          "description": "Phrase (span of text) for this node. This field does not need to be set, but if it is, this node has a textual \"payload\" corresponding to the specified token span. For example, if this node is the root of a subgraph corresponding to a predicate-argument structure, then the phrase field will be set to be the span of tokens corresponding to the predicate (e.g., a verb)."
        },
        "type": {
          "description": "Arbitrary type string for this semantic node, or for the subgraph rooted at this node. This type string might come from an external resource, type system or ontology that contains a predefined set of types.",
          "type": "string"
        },
        "value": {
          "description": "Arbitrary value string for this semantic node.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftSemanticNodeArc": {
      "description": "An arc contained by a source node pointing to a destination node in a directed acyclic graph.",
      "id": "NlpSaftSemanticNodeArc",
      "properties": {
        "description": {
          "description": "Human-readable description of this arc's type (for display purposes).",
          "type": "string"
        },
        "implicit": {
          "description": "Indicates the arc is for an implicit semantic relation between nodes, for example one that does not correspond to a grammatical relation in the text.",
          "type": "boolean"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Application-specific information about this arc."
        },
        "semanticNode": {
          "description": "Index of the semantic node pointed to by this arc.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "Arc type (akin to an edge label, or semantic operator).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSaftToken": {
      "description": "A document token marks a span of bytes in the document text as a token or word. Next available index: 16.",
      "id": "NlpSaftToken",
      "properties": {
        "breakLevel": {
          "enum": [
            "NO_BREAK",
            "SPACE_BREAK",
            "LINE_BREAK",
            "SENTENCE_BREAK",
            "PARAGRAPH_BREAK",
            "SECTION_BREAK",
            "CHAPTER_BREAK"
          ],
          "enumDescriptions": [
            "No separation between tokens.",
            "Tokens separated by space.",
            "Tokens separated by line break.",
            "Tokens separated by sentence break.",
            "Tokens separated by paragraph break.",
            "Tokens separated by section break.",
            "Tokens separated by chapter break."
          ],
          "type": "string"
        },
        "breakSkippedText": {
          "description": "Whether the break skipped over non-tag text (excluding script/style).",
          "type": "boolean"
        },
        "category": {
          "description": "Coarse-grained word category for token. See README.categories for category inventory.",
          "type": "string"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "head": {
          "description": "Head of this token in the dependency tree: the id of the token which has an arc going to this one. If it is the root token of a sentence, then it is set to -1.",
          "format": "int32",
          "type": "integer"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Annotation for this token."
        },
        "label": {
          "description": "Label for dependency relation between this token and its head. See README.labels for label inventory.",
          "type": "string"
        },
        "lemma": {
          "description": "Word lemma. This is only filled if the lemma is different from the word form.",
          "type": "string"
        },
        "morph": {
          "$ref": "NlpSaftMorphology",
          "description": "Morphology information."
        },
        "scriptCode": {
          "description": "A string representation (typically four letters, sometimes longer) of the token's Unicode script code, based on BCP 47/CLDR, capitalized according to ISO 15924. See i18n/identifiers/scriptcode.h for details.",
          "type": "string"
        },
        "start": {
          "description": "[start, end] describe the inclusive byte range of the UTF-8 encoded token in document.text. End gives the index of the last byte, which may be a UTF-8 continuation byte, and the length in bytes is end - start + 1. begin/end options are for goldmine AnnotationsFinder to locate the offsets of saft tokens. Start is inclusive by default and end is marked.",
          "format": "int32",
          "type": "integer"
        },
        "tag": {
          "description": "Part-of-speech tag for token. See README.tags for tag inventory.",
          "type": "string"
        },
        "tagConfidence": {
          "description": "Confidence score for the tag prediction -- should be interpreted as a probability estimate that the tag is correct.",
          "format": "float",
          "type": "number"
        },
        "textProperties": {
          "format": "uint32",
          "type": "integer"
        },
        "word": {
          "description": "Token word form. This may not be identical to the original. For example, in goldmine annotation we do UTF-8 normalization and punctuation normalization. The punctuation normalization includes inferring the directionality of straight doublequotes -- that is, we map \" to open quote (``) or close quote (''), and sometimes we get it wrong. SAFT processing in other contexts (such as queries in qrewrite) involves different normalizations.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitArticleData": {
      "description": "A copy of the text of an article along with references to internal figures and external citations, datasets, etc. Next available ID: 19",
      "id": "NlpSciencelitArticleData",
      "properties": {
        "analyzedText": {
          "$ref": "NlxDataSchemaScaleSet",
          "description": "All the text in this article, separated into Sections and Paragraphs. See nlp_sciencelit.ScaleSetExtensions for the extensions to ScaleSet used."
        },
        "articleId": {
          "items": {
            "$ref": "NlpSciencelitArticleId"
          },
          "type": "array"
        },
        "citation": {
          "description": "All references from this article (Bibliography).",
          "items": {
            "$ref": "NlpSciencelitCitationData"
          },
          "type": "array"
        },
        "earliestPubDate": {
          "description": "The result of selecting the earliest date from various metadata (PMC, PubMed Metadata, scholar citations).",
          "type": "string"
        },
        "metadata": {
          "$ref": "NlpSciencelitArticleMetadata"
        },
        "nonAbstractWordCount": {
          "format": "int64",
          "type": "string"
        },
        "parsedFrom": {
          "description": "Path of the source document from which this was parsed.",
          "type": "string"
        },
        "pubDate": {
          "description": "All dates from the PMC article metadata Year/Mon/Day.",
          "items": {
            "$ref": "NlpSciencelitPubDate"
          },
          "type": "array"
        },
        "referencedBlock": {
          "description": "All figure captions within this article.",
          "items": {
            "$ref": "NlpSciencelitReferencedBlock"
          },
          "type": "array"
        },
        "scholarCitation": {
          "$ref": "ScienceCitation",
          "description": "Citation for this article."
        },
        "scholarDocument": {
          "description": "DocJoins with full text article.",
          "items": {
            "$ref": "CompositeDoc"
          },
          "type": "array"
        },
        "scholarSignal": {
          "$ref": "ScienceIndexSignal",
          "description": "May also add the Scholar index signal information:"
        },
        "source": {
          "description": "Source of this article data (e.g., PubMed, scholar index, other source.).",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "wordCount": {
          "description": "Number of words in the entire article and everywhere outside of abstract sections.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitArticleId": {
      "description": "Article IDs associated with an article (e.g., PMID, DOI, PMC).",
      "id": "NlpSciencelitArticleId",
      "properties": {
        "id": {
          "type": "string"
        },
        "idType": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitArticleMetadata": {
      "description": "Next available ID: 20.",
      "id": "NlpSciencelitArticleMetadata",
      "properties": {
        "abstract": {
          "$ref": "NlpSciencelitTokenizedText",
          "description": "Abstract of article from metadata."
        },
        "articleId": {
          "items": {
            "$ref": "NlpSciencelitArticleId"
          },
          "type": "array"
        },
        "author": {
          "description": "Author of article.",
          "items": {
            "$ref": "NlpSciencelitAuthor"
          },
          "type": "array"
        },
        "dataset": {
          "description": "Datasets referenced from this article.",
          "items": {
            "$ref": "NlpSciencelitDataset"
          },
          "type": "array"
        },
        "dateStr": {
          "description": "Most recent date YYYY-MM-DD.",
          "type": "string"
        },
        "deleted": {
          "description": "Citation for flagged for deletion by source.",
          "type": "boolean"
        },
        "heading": {
          "description": "Mesh Terms.",
          "items": {
            "$ref": "NlpSciencelitMeshHeading"
          },
          "type": "array"
        },
        "issue": {
          "type": "string"
        },
        "journal": {
          "description": "Title of journal. For books: Journal = Publisher Volume = Collection",
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "lastRevisedDateStr": {
          "description": "Last entry revision date YYYY-MM-DD.",
          "type": "string"
        },
        "metadataSource": {
          "items": {
            "enum": [
              "UNKNOWN",
              "PUBMED",
              "PMC",
              "SCHOLAR",
              "CORD"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "parsedFrom": {
          "description": "Source Pubmed/Medline XML file.",
          "type": "string"
        },
        "pmid": {
          "description": "PMID of article (for non-pubmed data, this is the docid).",
          "type": "string"
        },
        "publicationType": {
          "items": {
            "$ref": "NlpSciencelitPublicationType"
          },
          "type": "array"
        },
        "scamRestrictTokens": {
          "$ref": "ResearchScamV3Restrict",
          "description": "Optional ScaM restrict tokens to be added to all GFVs generated from this article's data."
        },
        "title": {
          "description": "Title of article.",
          "type": "string"
        },
        "url": {
          "description": "URL(s) for the document. If possible, order by decreasing desirability.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "volume": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitAuthor": {
      "id": "NlpSciencelitAuthor",
      "properties": {
        "firstName": {
          "type": "string"
        },
        "lastName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitCitationData": {
      "description": "Next available ID: 8",
      "id": "NlpSciencelitCitationData",
      "properties": {
        "articleId": {
          "items": {
            "$ref": "NlpSciencelitArticleId"
          },
          "type": "array"
        },
        "author": {
          "items": {
            "$ref": "NlpSciencelitAuthor"
          },
          "type": "array"
        },
        "externalLink": {
          "type": "string"
        },
        "fullText": {
          "type": "string"
        },
        "reference": {
          "description": "Reference used in text (e.g., PMC rid).",
          "type": "string"
        },
        "scholarCitation": {
          "$ref": "ScienceCitation",
          "description": "Scholar citation information from scholar index."
        },
        "title": {
          "description": "Optional information about the publication.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitDataset": {
      "id": "NlpSciencelitDataset",
      "properties": {
        "association": {
          "enum": [
            "UNKNOWN",
            "DATABANK",
            "CITATION",
            "MATCH"
          ],
          "enumDescriptions": [
            "",
            "Associated DataBank marked up by PubMed https://www.nlm.nih.gov/bsd/medline_databank_source.html",
            "Scholar citation from the article to the dataset Extracted from ScholarCitations in science_search dataset metadata",
            "Dataset likely created together with the article Extracted from MatchingArticle in science_search dataset metadata"
          ],
          "type": "string"
        },
        "datasetMetadata": {
          "$ref": "ResearchScienceSearchReconciledMetadata"
        }
      },
      "type": "object"
    },
    "NlpSciencelitMeshHeading": {
      "description": "A full Mesh Heading containing a descriptor and optionally multiple qualifiers. https://www.nlm.nih.gov/bsd/licensee/elements_descriptions.html#meshheadinglist",
      "id": "NlpSciencelitMeshHeading",
      "properties": {
        "meshDescriptor": {
          "$ref": "NlpSciencelitSubjectHeading"
        },
        "meshQualifier": {
          "items": {
            "$ref": "NlpSciencelitSubjectHeading"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSciencelitPubDate": {
      "description": "Pubdate extracted from PMC article metadata.",
      "id": "NlpSciencelitPubDate",
      "properties": {
        "dateStr": {
          "type": "string"
        },
        "pubType": {
          "description": "\"ppub\" for a print ISSN and \"epub\" for an electronic ISSN.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitPublicationType": {
      "id": "NlpSciencelitPublicationType",
      "properties": {
        "name": {
          "description": "Display name for the publication type, e.g. \"Journal Article\"",
          "type": "string"
        },
        "ui": {
          "description": "MeSH unique identifiers for publication types, e.g. \"D016428\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitReferencedBlock": {
      "description": "Data associate with the ReferencesBlock. Next available ID: 5",
      "id": "NlpSciencelitReferencedBlock",
      "properties": {
        "caption": {
          "$ref": "NlpSciencelitTokenizedText",
          "description": "Caption tokens - all text in the caption other than the block."
        },
        "reference": {
          "description": "Reference used from the text to point to this figure.",
          "type": "string"
        },
        "title": {
          "$ref": "NlpSciencelitTokenizedText",
          "description": "Title tokens - these come from a block within a caption."
        },
        "type": {
          "description": "Type of figure (table, figure, etc.).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitRetrievalQueryEncodingDebugInfo": {
      "id": "NlpSciencelitRetrievalQueryEncodingDebugInfo",
      "properties": {
        "scamQueryEncoding": {
          "$ref": "ResearchScamGenericFeatureVector",
          "description": "The query encoding sent to scam for retrieval."
        }
      },
      "type": "object"
    },
    "NlpSciencelitRetrievalSearchResultDebugInfo": {
      "description": "Returned by Delver API in SearchResult.debug_info.",
      "id": "NlpSciencelitRetrievalSearchResultDebugInfo",
      "properties": {
        "articleData": {
          "$ref": "NlpSciencelitArticleData",
          "description": "Only set if RequestOptions.debug_return_article_data is true."
        },
        "goldDocid": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "goldSnippets": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isGold": {
          "description": "Not set by server; only used by evals.",
          "type": "boolean"
        },
        "rerankingScore": {
          "description": "See SearchResultInternal.reranking_score.",
          "format": "float",
          "type": "number"
        },
        "reverseRerankingOrder": {
          "description": "See SearchResultInternal.reverse_reranking_order.",
          "format": "int32",
          "type": "integer"
        },
        "sectionIrScore": {
          "additionalProperties": {
            "format": "float",
            "type": "number"
          },
          "description": "See SearchResultInternal.section_ir_score.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "NlpSciencelitRetrievalSearchResultSetDebugInfo": {
      "description": "Optionally returned by Delver API in the response's debug_info field.",
      "id": "NlpSciencelitRetrievalSearchResultSetDebugInfo",
      "properties": {
        "queryEncoding": {
          "$ref": "NlpSciencelitRetrievalQueryEncodingDebugInfo"
        },
        "scamResponse": {
          "$ref": "ResearchScamQueryResponse"
        }
      },
      "type": "object"
    },
    "NlpSciencelitRetrievalSnippetDebugInfo": {
      "description": "Returned by Delver API in Snippet.debug_info.",
      "id": "NlpSciencelitRetrievalSnippetDebugInfo",
      "properties": {
        "goldHighlightSentenceIndices": {
          "description": "Which highlights have sentence overlap with gold snippets. Not ordered. Might only be set for the first gold highlight.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "highlightIdxToOverlap": {
          "additionalProperties": {
            "format": "float",
            "type": "number"
          },
          "description": "Map of highlight index to best overlap with any gold snippet [0,1].",
          "type": "object"
        },
        "highlightIdxToSentenceOverlap": {
          "additionalProperties": {
            "format": "float",
            "type": "number"
          },
          "description": "Map of highlight index to best overlap with any gold sentence [0,1].",
          "type": "object"
        },
        "isGold": {
          "description": "Not set by server; only used by certain evals. Might only be set for the first gold snippet.",
          "type": "boolean"
        },
        "offsetWithinSection": {
          "description": "Byte index of text within the full section text (or within title).",
          "format": "int32",
          "type": "integer"
        },
        "sectionIndex": {
          "description": "Section within the document. -1 if title.",
          "format": "int32",
          "type": "integer"
        },
        "sectionIrScore": {
          "description": "IR score of the section the snippet is coming from.",
          "format": "float",
          "type": "number"
        },
        "snippetBleuScore": {
          "description": "BLEU score for the entire snippet.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSciencelitSubjectHeading": {
      "description": "A subject heading from Mesh",
      "id": "NlpSciencelitSubjectHeading",
      "properties": {
        "id": {
          "type": "string"
        },
        "majorTopic": {
          "type": "boolean"
        },
        "term": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSciencelitTokenizedText": {
      "description": "Tokenized text with optional original representation.",
      "id": "NlpSciencelitTokenizedText",
      "properties": {
        "text": {
          "type": "string"
        },
        "token": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingAnnotationEvalData": {
      "description": "Annotators whose semantics are represented via a protocol message should add to that message a field or extension of this type and set it using Annotator::PopulateAnnotationEvalData to enable span-based evaluation metrics in training. Evaluation is done based on token spans. The byte span aligns with the token span and is used when saving examples. Background: In some settings, the examples used to induce/train a grammar do not specify complete semantics of an annotation. For example, some examples that come from Ewok specify only the span associated with each annotation. This message allows evaluation metrics to test the span by embedding it in the semantics. LINT.IfChange",
      "id": "NlpSemanticParsingAnnotationEvalData",
      "properties": {
        "additionalSpans": {
          "description": "Additional spans after the first. Empty in all additional_spans.",
          "items": {
            "$ref": "NlpSemanticParsingAnnotationEvalData"
          },
          "type": "array"
        },
        "numBytes": {
          "format": "int32",
          "type": "integer"
        },
        "numTokens": {
          "format": "int32",
          "type": "integer"
        },
        "startByte": {
          "description": "Byte position within the utterance. Safe to use across different components of the NLU stack as long as said components have access to the same query.",
          "format": "int32",
          "type": "integer"
        },
        "startToken": {
          "description": "Token position. This is cleared when normalizing examples for storage because tokenization changes over time. DO NOT use these two fields across components that use different tokenizations.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingAppAnnotation": {
      "description": "The App annotator annotates potential app name in the parser's input and outputs the proto with the details about app(s).",
      "id": "NlpSemanticParsingAppAnnotation",
      "properties": {
        "appInfo": {
          "description": "The app_info is to store specific information about installed/uninstalled apps annotated by app annotator servlet. It contains app name, package name, confidence, and source.",
          "items": {
            "$ref": "QualityActionsAppInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDateTimeAnnotation": {
      "description": "Example: \"Remind me to go to the store on (Friday) (9am)\" would output two non-overlapping and unrelated annotations. One would have a start_date = Friday and the other would have start_time = 9am. It's possible for Friday to be one of several upcoming Friday's, so start_date is a repeated field. Next ID: 10",
      "id": "NlpSemanticParsingDateTimeAnnotation",
      "properties": {
        "dateType": {
          "enum": [
            "UNKNOWN_DATE_TYPE",
            "TODAY",
            "TOMORROW",
            "WEEKEND",
            "WEEK"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "A whole weekend, from Friday to Monday.",
            "A whole week, from Sunday to the next Sunday."
          ],
          "type": "string"
        },
        "endDate": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "endTime": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "endWeekday": {
          "enum": [
            "UNKNOWN_DAY",
            "SUNDAY",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "rawText": {
          "type": "string"
        },
        "startDate": {
          "description": "NOTE: None of these are co-indexed. If the query is 'morning', there could be multiple start_time's, start_date's, end_date's, and end_time's, and they do not correspond to one another in any structured way.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "startTime": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "startWeekday": {
          "enum": [
            "UNKNOWN_DAY",
            "SUNDAY",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "timeType": {
          "enum": [
            "UNKNOWN_TIME_TYPE",
            "MORNING",
            "AFTERNOON",
            "EVENING",
            "NIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeAbsoluteDateTime": {
      "description": "AbsoluteDateTime represents the resolved date/time expressions that need no further calculation. It has a section for date and a section for time. The date section will always be filled; if the time section is filled, hour is always filled; for (minute, second, partial_second), they are optional with a zero default value. But if partial_second is filled, (minute, second) must be filled, even they are 0s; if second is filled, minute must be filled. Next field#: 22.",
      "id": "NlpSemanticParsingDatetimeAbsoluteDateTime",
      "properties": {
        "allowPersonal": {
          "description": "allow_personal determines if personal datetimes are allowed to be used in the resolution of the personal datetime. If allow_personal is false and a personal date exists, the entire parse will be thrown out.",
          "type": "boolean"
        },
        "day": {
          "format": "int32",
          "type": "integer"
        },
        "deleted11": {
          "description": "Deprecated fields. Do NOT use.",
          "enum": [
            "NONE",
            "YEAR",
            "YEAR_MONTH",
            "YEAR_MONTH_DAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "holiday": {
          "$ref": "NlpSemanticParsingDatetimeHoliday",
          "description": "season, quarters and holidays will be soon handled as fetched relative datetimes and will be removed from the AbsoluteDateTime message."
        },
        "hour": {
          "description": "Time is 24-hour military time.",
          "format": "int32",
          "type": "integer"
        },
        "hourState": {
          "description": "Note: This is marked as deprecated as we are moving into explicit parses using the `meridiem` field, and leave the inference over implicit parses to the grounding/resolution libraries.",
          "enum": [
            "UNAMBIGUOUS",
            "AMBIGUOUS",
            "CHANGEABLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "Changeable means that by itself, the hour should be unambiguous, but it can be changed through context. Eg. \"09:00\" vs \"09:00pm\"."
          ],
          "type": "string"
        },
        "isBc": {
          "description": "|is_bc| is true if and only the date is Before Christ/Common Era. If |is_bc| is true, only year is meaningful in this proto, as Gregorian calendar is only meaningful for A.D. date/times.",
          "type": "boolean"
        },
        "meridiem": {
          "description": "For expressions such as \"am\", \"pm\". Note: the name \"meridiem\" has been taken by a field in message ResolutionProperties. Examples: * \"9 am\": point { hour: 9 meridiem: AM hour_state: UNAMBIGUOUS }",
          "enum": [
            "INVALID_MERIDIEM",
            "AM",
            "PM"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "minute": {
          "format": "int32",
          "type": "integer"
        },
        "modifier": {
          "description": "For expressions such as \"around 2 pm\".",
          "enum": [
            "NO_MOD",
            "BEFORE",
            "AFTER",
            "ON_OR_BEFORE",
            "ON_OR_AFTER",
            "LESS_THAN",
            "MORE_THAN",
            "EQUAL_OR_LESS",
            "EQUAL_OR_MORE",
            "START",
            "MID",
            "END",
            "APPROX",
            "ADD",
            "SUBTRACT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Identifies additive or subtractive duration quantities as in [10 more min].",
            ""
          ],
          "type": "string"
        },
        "month": {
          "enum": [
            "NO_MONTH",
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "nonGregorianDate": {
          "$ref": "NlpSemanticParsingDatetimeNonGregorianDate",
          "description": "If present then: 1) the incoming non-Gregorian datetime will be converted to Gregorian. 2) exported DateTimeProperty fields will contain the converted Gregorian datetime. 3) DateTimeProperty.source_calendar will be set to the calendar-system that was used to specify the non-Gregorian date."
        },
        "partialSecond": {
          "format": "double",
          "type": "number"
        },
        "properties": {
          "$ref": "NlpSemanticParsingDatetimeDateTimeProperty"
        },
        "quarter": {
          "enum": [
            "INVALID_QUARTER",
            "FIRST_QUARTER",
            "SECOND_QUARTER",
            "THIRD_QUARTER",
            "FOURTH_QUARTER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "rangeModifier": {
          "description": "Modifier that return the appropriate subrange. For more information, see the description of RangeOfDateTimeModifier. Example: * *early* 2020 * *early* on March 20th When a point have a range_modifier field, the resolution library will expand the point into the widest range in contains. For example, in the case of a single date point like \"April 22nd, 2022\", the point will be transformed into a range with: - \"begin: April 22nd 2022 00:00:00h\" - \"end: April 22nd 2022 23:59:59h\" The modifier will then be applied over that range.",
          "enum": [
            "RANGE_MODIFIER_NONE",
            "RANGE_MODIFIER_EARLY",
            "RANGE_MODIFIER_MIDDLE",
            "RANGE_MODIFIER_LATE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "season": {
          "enum": [
            "INVALID_SEASON",
            "SPRING",
            "SUMMER",
            "FALL",
            "WINTER",
            "EARLY_SPRING",
            "MID_SPRING",
            "LATE_SPRING",
            "EARLY_SUMMER",
            "MID_SUMMER",
            "LATE_SUMMER",
            "EARLY_FALL",
            "MID_FALL",
            "LATE_FALL",
            "EARLY_WINTER",
            "MID_WINTER",
            "LATE_WINTER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Deprecated values. Do not use.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "second": {
          "format": "int32",
          "type": "integer"
        },
        "timezone": {
          "description": "A string representation of the timezone information, see i18n/identifiers/timezones.{h,cc}.",
          "type": "string"
        },
        "weekday": {
          "description": "The |weekday| field is populated to indicate that a day-of-the-week is explicitly mentioned in an absolute date utterance, such as [Tuesday, July 6th, 2021]. Note that when a day-of-the-week is included in other, non-absolute-date expressions, such as [on Tuesday], then this this field is not populated (and in fact an AbsoluteDateTime is not used at all.) Note: This field is populated only when the original expression contains a day-of-the-week. It is not populated by the grounding library to indicate that the date happens to be a Tuesday. Examples: * \"Tuesday, July 6th 2021\" --> the day of the week is part of an absolute date expression, so this field is populated: point { year: 2021 month: JULY day: 6 weekday: TUESDAY } * \"on Tuesday\" --> the day of the week is not part of an absolute date expression, so it is interpreted as a relative datetime: relative { fetched { target { weekday: TUESDAY } } }",
          "enum": [
            "NO_DAY_OF_WEEK",
            "SUNDAY",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "WEEKEND"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Sometimes resembles Monday etc. E.g., \"2nd weekend.\""
          ],
          "type": "string"
        },
        "year": {
          "description": "Date.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeDateTime": {
      "description": "The top-level DATE/TIME representation. It can represent either (1) one or multiple Date/Time ranges, or (2) one or multiple of Date/Time points, or (3) a recurrent date/time expression. Next available ID: 12. Only one of |range|, |point| and |recurrent| will be set: |range| contains a list of resolved Date/Time ranges. |point| contains a list of resolved Date/Time points. |recurrent| contains the representation for periodical dates/times. |range| and |point| are repeated to accommodate the need when the date/time expression under one non-terminal is resolved to a list of correct values. For example, \"Mondays in April, 2014\" may have 4 correct dates.",
      "id": "NlpSemanticParsingDatetimeDateTime",
      "properties": {
        "compositionElement": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "For temporal expressions that consist of components with different types, the elements in the composition are nested according to the order they should be grounded/resolved. For example, \"tomorrow at 8am\" has a relative component [tomorrow] and an absolute datetime component [8am] so the annotation will be represented in the following way, indicating that the relative datetime for tomorrow should be grounded first, and then resolve the actual 8am point for that given date: point { hour: 8 hour_state: UNAMBIGUOUS properties { time_format: AM_PM_TOKEN } } composition_element { relative { fetched { ordinal: 1 target { unit: DAY } base_type: CURRENT_DATETIME } } grounding_stage: UNGROUNDED } grounding_stage: UNGROUNDED_COMPOSITION The composition_element field will be populated only when the grounding_stage is set to UNGROUNDED_COMPOSITION and it will hold the nested DateTime value for the rest the compositional expression. More details in: go/datetime-resolution-decoupling."
        },
        "deleted7": {
          "description": "Deprecated fields. Do NOT use.",
          "type": "boolean"
        },
        "deleted8": {
          "type": "boolean"
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field of the DateTime message should not in general be used by outside clients of the grammar. It is intended to be used internally in Aqua for evaluation purposes. The rationale is that token counts depend on the particular tokenization used in Aqua which may be different from the one used by the client and may change from time to time. Outside clients should not create a dependency on the current tokenization used in Aqua."
        },
        "groundingStage": {
          "enum": [
            "UNKNOWN_GROUNDING_STAGE",
            "UNGROUNDED",
            "UNGROUNDED_COMPOSITION",
            "RESOLVED",
            "PARTIALLY_GROUNDED",
            "FULLY_GROUNDED"
          ],
          "enumDescriptions": [
            "Default value of DateTime messages for which it is unknown if they are representing a datetime expression as it was explicitly expressed in a document/user query or if it is representing a complete & unambiguous datetime value.",
            "DateTime messages that are created to represent an explicit datetime expression as it was expressed in a document/user query have their grounding_stage field assigned to UNGROUNDED. Even if the user's query contains an expression referring to a complete & unambiguous datetime value, it is expected that every interpretation generation parser will still create them having the grounding stage as UNGROUNDED and apply the grounding logic implemented in the DateTimeGrounder class.",
            "When a datetime expression expressed in a document/user query is a composition of other simpler datetime expressions (e.g. \"monday morning next week\" is the composition \"next week(monday(morning))\") it is parsed into a nested composition of DateTime messages which have their grounding_stage fields as UNGROUNDED_COMPOSITION except for the inner-most message which will be set to UNGROUNDED. The grounding logic will compose them and ground their compositions cascading the grounding logic in bottom-up.",
            "During the grounding process, DateTime messages that were resolved but not completed yet will have their grounding_stage field as RESOLVED. This is mainly for internal handling during the grounding process, it is not expected to have DateTime messages with their grounding_stage as RESOLVED being used in a final interpretation.",
            "During the grounding process, it may happen that we have an intermediate DateTime message that has a subcomponent already resolved, in that case its grounding_stage field will be PARTIALLY_GROUNDED. This is mainly for internal handling during the grounding process, it is not expected to have DateTime messages with their grounding_stage as PARTIALLY_GROUNDED being used in a final interpretation.",
            "DateTime messages which were fully grounded (composed, resolved and completed) with DateTimeGrounder class will have FULLY_GROUNDED as their grounding stage. Every DateTime message used in a final interpretation is expected to have its grounding_stage field to be FULLY_GROUNDED."
          ],
          "type": "string"
        },
        "point": {
          "items": {
            "$ref": "NlpSemanticParsingDatetimeAbsoluteDateTime"
          },
          "type": "array"
        },
        "properties": {
          "$ref": "NlpSemanticParsingDatetimeResolutionProperties"
        },
        "range": {
          "description": "Note that there is a difference between this scenario and an ambiguous date/time expression. The latter is resolved to multiple proto messages, not multiple values within one proto message. To be concrete, consider \"Monday\" in \"Monday football\". It is ambiguous and can be reasonably resolved to \"Monday last week,\" \"Monday this week\" and \"Monday next week.\" The 3 values are represented as 3 separate DateTime messages, not 3 values within one DateTime message.",
          "items": {
            "$ref": "NlpSemanticParsingDatetimeRange"
          },
          "type": "array"
        },
        "recurrent": {
          "$ref": "NlpSemanticParsingDatetimeRecurrent"
        },
        "relative": {
          "$ref": "NlpSemanticParsingDatetimeRelativeDateTime"
        },
        "span": {
          "$ref": "NlpSemanticParsingDatetimeSpan",
          "description": "See comments of Span."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeDateTimeProperty": {
      "description": "DateTimeProperty contains various metadata about the DateTime interpretation. Next field: 13",
      "id": "NlpSemanticParsingDatetimeDateTimeProperty",
      "properties": {
        "dateFormat": {
          "enum": [
            "DEFAULT_DATE_FORMAT",
            "NUM_MONTH_DAY",
            "NUM_DAY_MONTH"
          ],
          "enumDescriptions": [
            "",
            "Numerical month followed by day: 5/6 = 6th of May",
            "Numerical day followed by month: 5/6 = 5th of June"
          ],
          "type": "string"
        },
        "expandYearToCurrent": {
          "type": "boolean"
        },
        "hourStatus": {
          "enum": [
            "HOUR_NONE",
            "HOUR_UNAMBIGUOUS",
            "HOUR_AMBIGUOUS_ORIGINAL",
            "HOUR_AMBIGUOUS_INFERRED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "inferredDateValue": {
          "enum": [
            "NONE",
            "YEAR",
            "YEAR_MONTH",
            "YEAR_MONTH_DAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "description": "Note: this may be changed to a repeated field in the future.",
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "personalReferenceMetadata": {
          "$ref": "CopleyPersonalReferenceMetadata",
          "description": "Metadata about the personal reference if the date was generated from a personal reference."
        },
        "relationToReference": {
          "enum": [
            "UNDEFINED",
            "CLOSEST_FUTURE",
            "CLOSEST_PAST",
            "OTHER_FUTURE",
            "OTHER_PAST"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "relative": {
          "$ref": "NlpSemanticParsingDatetimeRelativeDateTime",
          "description": "Expresses the relative DateTime query that gave rise to these grounded semantics."
        },
        "sourceCalendar": {
          "enum": [
            "GREGORIAN",
            "BUDDHIST",
            "CHINESE",
            "COPTIC",
            "ETHIOPIC",
            "HEBREW",
            "INDIAN_NATIONAL",
            "ISLAMIC",
            "JAPANESE",
            "PERSIAN",
            "ISLAMIC_UMALQURA"
          ],
          "enumDescriptions": [
            "Selected values from ECalType in third_party/icu/source/i18n/calendar.cpp",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "sourceTypeList": {
          "$ref": "CopleySourceTypeList",
          "description": "If the annotation was created by using personal data, we record the provenance for that data here."
        },
        "timeFormat": {
          "items": {
            "enum": [
              "DEFAULT",
              "SEPARATED_HMS",
              "AM_PM_TOKEN",
              "WITH_TIMEWORD"
            ],
            "enumDescriptions": [
              "",
              "e.g. \"7:15\"",
              "e.g. \"7pm\"",
              "e.g. \"7 o'clock\""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "timezoneIsExplicit": {
          "description": "True iff the timezone value in AbsoluteDateTime is explicit in the annotated text or not. In the following examples the timezone is explicit: Query Timezone -------------------------- -------- 10pst Pacific Standard Time 10 utc UTC 10 sydney time Australia Eastern Time",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeDuration": {
      "description": "To represent unanchored durations - the length of a date/time expression not related to calendar in local context. E.g., \"play first (DURATION: 5 minutes) of Yellow Submarine\", \"it takes (DURATION: more than 3 days) to finish.\" In contrast, queries like: \"wake me up in 5 minutes\" will be resolved to a AbsoluteDateTime since the query indicates that the reference is now. A duration can be turned into a range if either end is anchored.",
      "id": "NlpSemanticParsingDatetimeDuration",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field of the Duration message should not in general be used by outside clients of the grammar. It is intended to be used internally in Aqua for evaluation purposes. The rationale is that token counts depend on the particular tokenization used in Aqua which may be different from the one used by the client and may change from time to time. Outside clients should not create a dependency on the current tokenization used in Aqua."
        },
        "modifier": {
          "description": "For expressions such as \"about 2 hrs\".",
          "enum": [
            "NO_MOD",
            "BEFORE",
            "AFTER",
            "ON_OR_BEFORE",
            "ON_OR_AFTER",
            "LESS_THAN",
            "MORE_THAN",
            "EQUAL_OR_LESS",
            "EQUAL_OR_MORE",
            "START",
            "MID",
            "END",
            "APPROX",
            "ADD",
            "SUBTRACT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Identifies additive or subtractive duration quantities as in [10 more min].",
            ""
          ],
          "type": "string"
        },
        "quantity": {
          "$ref": "NlpSemanticParsingDatetimeQuantity"
        },
        "span": {
          "$ref": "NlpSemanticParsingDatetimeSpan",
          "description": "See comments of Span."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeEvent": {
      "description": "This message is defined to be a representation of events that could interact with datetimes expressions through composition by shifting or fetching. For \"native\" datetime events like sunset, sunrise, etc the type is enough, but this should be extended as needed to represent richer event information.",
      "id": "NlpSemanticParsingDatetimeEvent",
      "properties": {
        "holiday": {
          "enum": [
            "UNKNOWN_HOLIDAY",
            "AIDS_DAY",
            "AIR_FORCES_DAY",
            "ALL_SAINTS_DAY",
            "ALL_SOULDS_DAY",
            "ANZAC_DAY",
            "APARECIDA_DAY",
            "APPLE_SAVIOUR_DAY",
            "ARBOR_DAY",
            "ARMED_FORCES_DAY",
            "ARMISTICE_DAY",
            "ASCENSION_DAY",
            "ASH_WEDNESDAY",
            "ASSUMPTION_OF_MARY",
            "ATATURK_DAY",
            "BERCHTOLDS_DAY",
            "BLACK_DAY",
            "BLACK_FRIDAY",
            "BRAZIL_PROCLAMATION_DAY",
            "CABOTAGE_DAY",
            "CAMBODIAN_CORONATION_DAY",
            "CANDLEMAS",
            "CARINTHIAN_PLEBISCITE_DAY",
            "CHAKRI_DAY",
            "CHILDRENS_DAY",
            "CHINA_COMMUNIST_PARTY_DAY",
            "CHINA_GRAVE_SWEEPING_FESTIVAL",
            "CHINA_HUMILIATION_DAY",
            "LUNAR_NEW_YEAR",
            "CHRISTMAS",
            "CHRISTMAS_EVE",
            "CHULA_MEMORIAL_DAY",
            "CIVIL_SERVANT_DAY",
            "COLUMBUS_DAY",
            "COMING_OF_AGE_DAY",
            "CONFUCIUS_DAY",
            "CONSTITUTION_MEMORIAL_DAY",
            "CONSUMERS_DAY",
            "COPTIC_CHRISTMAS",
            "CORPUS_CRISTI",
            "CULTURE_DAY",
            "CYBER_MONDAY",
            "CZECH_FREEDOM_DEMOCRACY_DAY",
            "DOCTORS_DAY",
            "EARTH_DAY",
            "EASTER",
            "EASTERN_ANNUNCIATION_DAY",
            "EASTER_MONDAY",
            "ELECTION_DAY",
            "ELECTION_DAY_RUNOFF",
            "EPIPHANY",
            "FATHERLAND_DEFENDER_DAY",
            "FATHERS_DAY",
            "FIRST_ADVENT_SUNDAY",
            "FLAG_DAY",
            "FLEMISH_COMMUNITY_DAY",
            "FOOLS_DAY",
            "FOURTH_ADVENT_SUNDAY",
            "FREEDOM_DAY",
            "FRENCH_COMMUNITY_DAY",
            "GERMAN_COMMUNITY_DAY",
            "GOOD_FRIDAY",
            "GRAND_FATHERS_DAY",
            "GRAND_MOTHERS_DAY",
            "GRAND_PARENTS_DAY",
            "GREAT_PRAYER_DAY",
            "GREENERY_DAY",
            "GROUNDHOG_DAY",
            "HALLOWEEN",
            "HEALTH_DAY",
            "HIDIRELLEZ",
            "HOLY_SATURDAY",
            "HONEY_SAVIOUR_DAY",
            "HONG_KONG_HANDOVER_DAY",
            "HUMAN_RIGHTS_DAY",
            "IMMACULATE_CONCEPTION_DAY",
            "INDEPENDENCE_DAY",
            "INDEPENDENCE_MOVEMENT_DAY",
            "INTERCESSION_DAY",
            "INTERNATIONAL_WORKERS_DAY",
            "INTERNATIONA_WOMEN_DAY",
            "JAPANESE_EMPERORS_BIRTHDAY",
            "JESUS_BAPTISM",
            "JOHN_HUS_DAY",
            "JOURNALIST_DAY",
            "KINGS_DAY",
            "KING_OF_CAMBODIAS_BIRTHDAY",
            "KING_OF_CAMBODIA_FATHERS_BIRTHDAY",
            "KING_OF_CAMBODIA_MOTHERS_BIRTHDAY",
            "KING_RAMA_IX_DEATH_ANNIVERSARY",
            "KING_RAMA_X_BIRTHDAY",
            "KNOWLEDGE_DAY",
            "KOREAN_ALPHABET_DAY",
            "KOREAN_MEMORIAL_DAY",
            "KUPALA_NIGHT",
            "KVEN_NATIONAL_DAY",
            "LABOUR_DAY",
            "LABOUR_THANKSGIVING_DAY",
            "LIBERATION_DAY",
            "LITTLE_CHRISTMAS_EVE",
            "MACAU_DAY",
            "MARDI_GRAS",
            "MARTIAL_DAY",
            "MARTIN_LUTHER_KING_DAY",
            "MAUNDY_THURSDAY",
            "MAY_DAY",
            "MEDICINE_DAY",
            "MELBOURNE_CUP",
            "MEMORIAL_DAY",
            "MIDSUMMER_DAY",
            "MIDSUMMER_EVE",
            "MOTHERING_SUNDAY",
            "MOTHERS_DAY",
            "NATIONAL_DAY",
            "NATIONAL_FOUNDATION_DAY",
            "NEW_YEAR",
            "NEW_YEARS_EVE",
            "NURSE_DAY",
            "OBON_FESTIVAL",
            "OCEAN_DAY",
            "OCTOBER_REVOLUTION_DAY",
            "ORTHODOX_CHRISTMAS",
            "ORTHODOX_EASTER",
            "ORTHODOX_NEW_YEAR",
            "ORTHODOX_NEW_YEARS_EVE",
            "PALM_SUNDAY",
            "PARATROOPERS_DAY",
            "PARENTS_DAY",
            "PARIS_PEACE_AGREEMENTS_DAY",
            "PARLIAMNET_DAY",
            "PEACE_DAY",
            "PENTECOST",
            "PENTECOST_EVE",
            "PEPERO_DAY",
            "PERSIAN_NEW_YEAR",
            "PLOUGHING_CEREMONY_DAY",
            "POLICE_DAY",
            "POLISH_MAY_HOLIDAYS",
            "PORTUGAL_PROCLAMATION_DAY",
            "PRESIDENT_DAY",
            "REFORMATION_DAY",
            "REMEMBRANCE_AND_SORROW_DAY",
            "REMEMBRANCE_DAY",
            "REPENTANCE_AND_PRAYER_DAY",
            "REPUBLIC_DAY",
            "RESPECT_FOR_THE_ELDERLY_DAY",
            "ROSE_DAY",
            "RUSSIAN_GUARD_DAY",
            "SAINT_CYRIL_METHODIUS_DAY",
            "SAINT_FLORIAN_DAY",
            "SAINT_FRANCIS_DAY",
            "SAINT_JOHN_DAY",
            "SAINT_JOHN_EVE",
            "SAINT_JOSEPH",
            "SAINT_LEOPOLD_DAY",
            "SAINT_LUCY_DAY",
            "SAINT_MARTIN_DAY",
            "SAINT_NICHOLAS_DAY",
            "SAINT_OLAF_DAY",
            "SAINT_RUPERT_DAY",
            "SAINT_STEPHEN_DAY",
            "SAMI_NATIONAL_DAY",
            "SCOUTING_DAY",
            "SECOND_ADVENT_SUNDAY",
            "SECOND_CHRISTMAS_DAY",
            "SHOWA_DAY",
            "SINAI_DAY",
            "SINGLES_DAY",
            "SONGKRAN_DAY",
            "SPORTS_DAY",
            "SUNFLOWER_MOVEMENT_DAY",
            "TATIANA_DAY",
            "TEACHERS_DAY",
            "THAI_CORONATION_DAY",
            "THAI_PONGAL_DAY",
            "THANKSGIVING_DAY",
            "THIRD_ADVENT_SUNDAY",
            "TIRADENTES_DAY",
            "UNITY_DAY",
            "VALENTINE_DAY",
            "VETERANS_DAY",
            "VICTORY_DAY",
            "VIETNAMESE_REUNIFICATION_DAY",
            "VIETNAM_COMMUNIST_PARTY_DAY",
            "VIETNAM_REWVOLUATIONARY_PRESS_DAY",
            "WALPURGIS_NIGHT",
            "WENCESLAUS_DAY",
            "WESTERN_ANNUNCIATION_DAY",
            "WHITE_DAY",
            "WHIT_MONDAY",
            "WOMEN_RIGHTS_DAY",
            "YOUTH_DAY"
          ],
          "enumDescriptions": [
            "",
            "https://en.wikipedia.org/wiki/World_AIDS_Day",
            "https://en.wikipedia.org/wiki/Air_Force_Day",
            "https://en.wikipedia.org/wiki/All_Saints'_Day",
            "https://en.wikipedia.org/wiki/All_Souls'_Day",
            "https://en.wikipedia.org/wiki/Anzac_Day",
            "https://en.wikipedia.org/wiki/Our_Lady_of_Aparecida",
            "https://en.wikipedia.org/wiki/Apple_Feast_of_the_Saviour",
            "https://en.wikipedia.org/wiki/Arbor_Day#Around_the_world",
            "https://en.wikipedia.org/wiki/Armed_Forces_Day",
            "https://en.wikipedia.org/wiki/Armistice_Day",
            "https://en.wikipedia.org/wiki/Feast_of_the_Ascension",
            "https://en.wikipedia.org/wiki/Ash_Wednesday",
            "https://en.wikipedia.org/wiki/Assumption_of_Mary",
            "https://en.wikipedia.org/wiki/Commemoration_of_Atat%C3%BCrk,_Youth_and_Sports_Day",
            "https://en.wikipedia.org/wiki/Berchtoldstag",
            "https://en.wikipedia.org/wiki/Black_Day_(South_Korea)",
            "https://en.wikipedia.org/wiki/Black_Friday_(shopping)",
            "https://en.wikipedia.org/wiki/Proclamation_of_the_Republic_(Brazil)",
            "https://en.wikipedia.org/wiki/Cabotage_Day",
            "https://en.wikipedia.org/wiki/Public_holidays_in_Cambodia",
            "Candlemas / Chandeleur / Presentation day: February 2nd https://en.wikipedia.org/wiki/Candlemas",
            "https://en.wikipedia.org/wiki/1920_Carinthian_plebiscite",
            "https://en.wikipedia.org/wiki/Chakri_dynasty",
            "https://en.wikipedia.org/wiki/Children's_Day",
            "https://en.wikipedia.org/wiki/Chinese_Communist_Party",
            "https://en.wikipedia.org/wiki/Qingming_Festival",
            "China's National Humiliation Day: September 18th",
            "https://en.wikipedia.org/wiki/Lunar_New_Year",
            "https://en.wikipedia.org/wiki/Christmas",
            "https://en.wikipedia.org/wiki/Christmas",
            "https://en.wikipedia.org/wiki/Chulalongkorn",
            "https://en.wikipedia.org/wiki/UN_Public_Service_Day",
            "https://en.wikipedia.org/wiki/Columbus_Day",
            "https://en.wikipedia.org/wiki/Coming_of_Age_Day https://en.wikipedia.org/wiki/Coming_of_age",
            "https://en.wikipedia.org/wiki/Confucius%27_Birthday",
            "https://en.wikipedia.org/wiki/Constitution_Memorial_Day https://en.wikipedia.org/wiki/Constitution_Day",
            "https://en.wikipedia.org/wiki/Consumers_International#World_Consumer_Rights_Day",
            "https://en.wikipedia.org/wiki/Christmas",
            "https://en.wikipedia.org/wiki/Feast_of_Corpus_Christi",
            "https://en.wikipedia.org/wiki/Culture_Day",
            "https://en.wikipedia.org/wiki/Cyber_Monday",
            "https://en.wikipedia.org/wiki/Struggle_for_Freedom_and_Democracy_Day",
            "https://en.wikipedia.org/wiki/National_Doctors%27_Day",
            "https://en.wikipedia.org/wiki/Earth_Day",
            "https://en.wikipedia.org/wiki/Easter",
            "https://en.wikipedia.org/wiki/Feast_of_the_Annunciation",
            "https://en.wikipedia.org/wiki/Easter_Monday",
            "https://en.wikipedia.org/wiki/Election_day",
            "https://en.wikipedia.org/wiki/Election_day",
            "https://en.wikipedia.org/wiki/Epiphany_(holiday)",
            "https://en.wikipedia.org/wiki/Defender_of_the_Fatherland_Day",
            "https://en.wikipedia.org/wiki/Father's_Day",
            "https://en.wikipedia.org/wiki/Advent_Sunday",
            "https://en.wikipedia.org/wiki/Flag_Day",
            "Day of the Flemish commumity (Jul 11, Belgian holiday) https://en.wikipedia.org/wiki/Day_of_the_Flemish_Community",
            "https://en.wikipedia.org/wiki/April_Fools'_Day",
            "https://en.wikipedia.org/wiki/Advent_Sunday",
            "https://en.wikipedia.org/wiki/Freedom_Day",
            "Day of the French speaking community in Belgium (Sept 27, Belgian holiday) https://en.wikipedia.org/wiki/French_Community_Holiday",
            "Day of the German speaking community in Belgium (Nov 15, Belgian Holiday) https://en.wikipedia.org/wiki/Day_of_the_German-speaking_Community",
            "https://en.wikipedia.org/wiki/Good_Friday",
            "https://en.wikipedia.org/wiki/Grandparents%27_Day",
            "https://en.wikipedia.org/wiki/Grandparents%27_Day",
            "https://en.wikipedia.org/wiki/Grandparents%27_Day",
            "https://en.wikipedia.org/wiki/Store_Bededag",
            "https://en.wikipedia.org/wiki/Greenery_Day",
            "https://en.wikipedia.org/wiki/Groundhog_Day",
            "https://en.wikipedia.org/wiki/Halloween",
            "https://en.wikipedia.org/wiki/World_Health_Day",
            "https://en.wikipedia.org/wiki/H%C4%B1d%C4%B1rellez",
            "https://en.wikipedia.org/wiki/Holy_Saturday",
            "https://en.wikipedia.org/wiki/Feast_of_the_Cross",
            "https://en.wikipedia.org/wiki/Handover_of_Hong_Kong",
            "https://en.wikipedia.org/wiki/Human_Rights_Day",
            "https://en.wikipedia.org/wiki/Feast_of_the_Immaculate_Conception",
            "https://en.wikipedia.org/wiki/List_of_national_independence_days",
            "https://en.wikipedia.org/wiki/March_1st_Movement",
            "https://en.wikipedia.org/wiki/Intercession_of_the_Theotokos",
            "https://en.wikipedia.org/wiki/International_Workers%27_Day",
            "https://en.wikipedia.org/wiki/International_Women's_Day",
            "https://en.wikipedia.org/wiki/The_Emperor's_Birthday",
            "https://en.wikipedia.org/wiki/Baptism_of_Jesus",
            "https://en.wikipedia.org/wiki/Jan_Hus#Holidays_commemorating_Hus",
            "https://en.wikipedia.org/wiki/World_Press_Freedom_Day",
            "https://en.wikipedia.org/wiki/Koningsdag",
            "https://en.wikipedia.org/wiki/Norodom_Sihamoni",
            "https://en.wikipedia.org/wiki/Norodom_Sihanouk#Death_and_funeral",
            "https://en.wikipedia.org/wiki/Norodom_Monineath",
            "https://en.wikipedia.org/wiki/Bhumibol_Adulyadej",
            "https://en.wikipedia.org/wiki/Bhumibol_Adulyadej",
            "https://en.wikipedia.org/wiki/Knowledge_Day",
            "https://en.wikipedia.org/wiki/Hangul_Day",
            "https://en.wikipedia.org/wiki/Memorial_Day_(South_Korea)",
            "https://en.wikipedia.org/wiki/Kupala_Night",
            "https://en.wikipedia.org/wiki/Kven_people",
            "https://en.wikipedia.org/wiki/Labour_Day",
            "https://en.wikipedia.org/wiki/Labor_Thanksgiving_Day",
            "https://en.wikipedia.org/wiki/Liberation_Day",
            "https://da.wikipedia.org/wiki/Lillejuleaften",
            "https://en.wikipedia.org/wiki/Macau",
            "https://en.wikipedia.org/wiki/Mardi_Gras",
            "Martial Day: July 15th",
            "https://en.wikipedia.org/wiki/Martin_Luther_King_Jr._Day",
            "https://en.wikipedia.org/wiki/Maundy_Thursday",
            "https://en.wikipedia.org/wiki/May_Day",
            "https://en.wikipedia.org/wiki/National_Doctors%27_Day",
            "https://en.wikipedia.org/wiki/Melbourne_Cup",
            "https://en.wikipedia.org/wiki/Memorial_Day",
            "https://en.wikipedia.org/wiki/Midsummer",
            "https://en.wikipedia.org/wiki/Midsummer",
            "https://en.wikipedia.org/wiki/Mothering_Sunday",
            "https://en.wikipedia.org/wiki/Mother%27s_Day",
            "https://en.wikipedia.org/wiki/National_day",
            "https://en.wikipedia.org/wiki/National_Foundation_Day",
            "https://en.wikipedia.org/wiki/New_Year",
            "https://en.wikipedia.org/wiki/New_Year",
            "https://en.wikipedia.org/wiki/International_Nurses_Day",
            "https://en.wikipedia.org/wiki/Bon_(festival)",
            "https://en.wikipedia.org/wiki/Marine_Day",
            "https://en.wikipedia.org/wiki/October_Revolution_Day",
            "https://en.wikipedia.org/wiki/Christmas",
            "https://en.wikipedia.org/wiki/Easter",
            "https://en.wikipedia.org/wiki/Old_New_Year",
            "https://en.wikipedia.org/wiki/Old_New_Year",
            "https://en.wikipedia.org/wiki/Palm_Sunday",
            "https://en.wikipedia.org/wiki/Paratroopers%27_Day",
            "https://en.wikipedia.org/wiki/Parents'_Day",
            "https://en.wikipedia.org/wiki/1991_Paris_Peace_Agreements",
            "Danish Parliamnet day: 1st Tuesday in October (da-DK) specific",
            "https://en.wikipedia.org/wiki/International_Day_of_Peace",
            "https://en.wikipedia.org/wiki/Pentecost",
            "https://en.wikipedia.org/wiki/Pentecost",
            "https://en.wikipedia.org/wiki/Pepero_Day",
            "https://en.wikipedia.org/wiki/Nowruz",
            "https://en.wikipedia.org/wiki/Royal_Ploughing_Ceremony",
            "https://en.wikipedia.org/wiki/Police_Day",
            "https://en.wikipedia.org/wiki/Public_holidays_in_Poland#May_Holidays",
            "https://en.wikipedia.org/wiki/5_October_1910_revolution",
            "https://en.wikipedia.org/wiki/Presidents%27_Day",
            "https://en.wikipedia.org/wiki/Reformation_Day",
            "https://en.wikipedia.org/wiki/Day_of_Remembrance_and_Sorrow",
            "https://en.wikipedia.org/wiki/National_Memorial_Day_of_the_Exiles_and_Foibe",
            "https://en.wikipedia.org/wiki/Bu%C3%9F-_und_Bettag",
            "https://en.wikipedia.org/wiki/Republic_Day",
            "https://en.wikipedia.org/wiki/Respect_for_the_Aged_Day",
            "Rose day: May 14th",
            "https://en.wikipedia.org/wiki/National_Guard_Day_(Russia)",
            "https://en.wikipedia.org/wiki/Cyril_and_Methodius#Saints_Cyril_and_Methodius'_Day",
            "https://en.wikipedia.org/wiki/Saint_Florian",
            "https://en.wikipedia.org/wiki/Francis_of_Assisi",
            "https://en.wikipedia.org/wiki/Saint-Jean-Baptiste_Day",
            "https://en.wikipedia.org/wiki/Saint-Jean-Baptiste_Day",
            "https://en.wikipedia.org/wiki/Saint_Joseph's_Day",
            "https://en.wikipedia.org/wiki/Leopold_III,_Margrave_of_Austria",
            "https://en.wikipedia.org/wiki/Saint_Lucy's_Day",
            "https://en.wikipedia.org/wiki/St._Martin's_Day",
            "https://en.wikipedia.org/wiki/Saint_Nicholas_Day",
            "https://en.wikipedia.org/wiki/Olaf_II_of_Norway",
            "https://en.wikipedia.org/wiki/Rupert_of_Salzburg",
            "https://en.wikipedia.org/wiki/Saint_Stephen's_Day",
            "https://en.wikipedia.org/wiki/S%C3%A1mi_National_Day",
            "https://en.wikipedia.org/wiki/Scouts'_Day ?",
            "https://en.wikipedia.org/wiki/Advent_Sunday",
            "https://en.wikipedia.org/wiki/Christmas",
            "https://en.wikipedia.org/wiki/Sh%C5%8Dwa_Day",
            "https://en.wikipedia.org/wiki/Sinai_Liberation_Day",
            "https://en.wikipedia.org/wiki/Singles'_Day",
            "https://en.wikipedia.org/wiki/Songkran_(Thailand)",
            "https://en.wikipedia.org/wiki/Sports_day",
            "https://en.wikipedia.org/wiki/Sunflower_Student_Movement",
            "https://en.wikipedia.org/wiki/Tatiana_Day",
            "https://en.wikipedia.org/wiki/List_of_Teachers'_Days",
            "https://en.wikipedia.org/wiki/Coronation_of_the_Thai_monarch",
            "https://en.wikipedia.org/wiki/Pongal_(festival)",
            "https://en.wikipedia.org/wiki/Thanksgiving",
            "https://en.wikipedia.org/wiki/Advent_Sunday",
            "https://en.wikipedia.org/wiki/Tiradentes",
            "https://en.wikipedia.org/wiki/Unity_Day",
            "https://en.wikipedia.org/wiki/Valentine's_Day",
            "https://en.wikipedia.org/wiki/Veterans_Day_(disambiguation)",
            "https://en.wikipedia.org/wiki/Victory_Day",
            "https://en.wikipedia.org/wiki/Reunification_Day",
            "https://en.wikipedia.org/wiki/Communist_Party_of_Vietnam",
            "Journalist Day: June 21st",
            "https://en.wikipedia.org/wiki/Walpurgis_Night",
            "https://en.wikipedia.org/wiki/Wenceslaus_I,_Duke_of_Bohemia#Veneration",
            "https://en.wikipedia.org/wiki/Feast_of_the_Annunciation",
            "https://en.wikipedia.org/wiki/White_Day",
            "https://en.wikipedia.org/wiki/Whit_Monday",
            "Women Rights Day: 5th of December",
            "https://en.wikipedia.org/wiki/Youth_Day"
          ],
          "type": "string"
        },
        "moonEvent": {
          "$ref": "NlpSemanticParsingDatetimeMoonEventInfo"
        },
        "sunEvent": {
          "enum": [
            "INVALID_SUN_EVENT",
            "SUNRISE",
            "SUNSET",
            "DAWN",
            "DUSK"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "type": {
          "enum": [
            "INVALID_EVENT",
            "ASTRONOMICAL_EVENT",
            "HOLIDAY_EVENT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeFetchedRelativeDateTime": {
      "description": "For a more detailed presentation on what's a fetching operation, see go/datetime-meaning-schemas. Examples to illustrate how the proto is used: I. Fetching day-of-weeks: a) query: \"1st 2 Mondays of April\" proto: ordinal: 1 target {weekday: MONDAY} count: 2 range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} b) query: \"1st and last Monday of April\" proto: ordinal: 1 ordinal: -1 target {weekday: MONDAY} range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} c) query: \"next Monday\" proto: ordinal: 1 target {weekday: MONDAY} d) query: \"last 2 Mondays\" proto: ordinal: -1 count: 2 target {weekday: MONDAY} e) query: \"this Monday\" proto: ordinal: 0 target {weekday: MONDAY} f) query: \"the monday after next\" proto: ordinal: 2 target {weekday: MONDAY} g) query: \"third Monday in April\" proto: ordinal: 3 target {weekday: MONDAY} range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} h) query: \"the monday before last\" proto: ordinal: -2 target {weekday: MONDAY} i) query: \"the second to the last monday in April\" proto: ordinal: -2 target {weekday: MONDAY} range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} II. Fetching date/time unit: a) query: \"1st 2 weeks of April\" proto: ordinal: 1 target {unit: WEEK} count: 2 range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} b) query: \"1st and last week of April\" proto: ordinal: 1 ordinal: -1 target {unit: WEEK} range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} c) query: \"next year\" proto: ordinal: 1 target {unit: YEAR} d) query: \"last 2 weeks\" proto: ordinal: -1 count: 2 target {unit: WEEK} e) query: \"this month\" proto: ordinal: 0 target {unit: MONTH} f) query: \"the week after next\" proto: ordinal: 2 target {unit: WEEK} g) query: \"third week in April\" proto: ordinal: 3 target {unit: WEEK} range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} h) query: \"the week before last\" proto: ordinal: -2 target {unit: WEEK} i) query: \"the second to the last week in April\" proto: ordinal: -2 target {unit: WEEK} range: {begin {year: RESOLVED_YEAR month: APRIL day: 1} {end {year: RESOLVED_YEAR month: APRIL day: 30} Next field: 9",
      "id": "NlpSemanticParsingDatetimeFetchedRelativeDateTime",
      "properties": {
        "baseType": {
          "enum": [
            "UNKNOWN",
            "CURRENT_DATETIME",
            "EXPLICIT_PRONOUN"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "count": {
          "description": "How many to fetch (e.g. [next weekend] vs. [next two weeks])",
          "format": "uint32",
          "type": "integer"
        },
        "metadata": {
          "description": "Can be used to tag relative datetime expressions with metadata information in the grammar.",
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ordinal": {
          "description": "Encodes expressions like next (+1), last (-1), after next (+2), this (0).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "range": {
          "$ref": "NlpSemanticParsingDatetimeRange",
          "description": "The restriction range on which fetching is operated, e.g., \"April\" in \"first Tuesday in/of April.\" If this field is missing, the operation is done relative to the base_type (or if not given, to the query's reference datetime). When the fetching operation is performed relative to a reference time point, positive ordinal values represent upcoming instances from the reference point, negative ordinal values represent previous instances from the reference point. Similarly, ordinal=0 represents a reference to the \"current instance\", which may vary depending on the target. E.g. \"this week\" is simply defined as the week range that contains the current reference time point, but \"this \" can be ambiguous and its resolution will depend on language/locale conventions (\"this monday\" in some languages refers to the closest upcoming instance of Monday, while in other languages it represents the Monday instance within the current week)."
        },
        "rangeModifier": {
          "description": "Modifier that return the appropriate subrange. For more information, see the description of RangeOfDateTimeModifier. Example: * *early* next week * *late* next Monday",
          "enum": [
            "RANGE_MODIFIER_NONE",
            "RANGE_MODIFIER_EARLY",
            "RANGE_MODIFIER_MIDDLE",
            "RANGE_MODIFIER_LATE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "relativeRange": {
          "$ref": "NlpSemanticParsingDatetimeResolutionProperties",
          "description": "If the underlying range comes from a relative datetime expression, encode the expression here instead."
        },
        "target": {
          "$ref": "NlpSemanticParsingDatetimeTargetToFetch",
          "description": "The target to be fetched. This could be a named day-of-week or month (e.g., \"Monday\", \"April\"), or a date/time unit (e.g., \"day\", \"week\", \"month\")."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeHoliday": {
      "description": "List of holidays that are not fixed absolute or relative dates on the Gregorian calendar.",
      "id": "NlpSemanticParsingDatetimeHoliday",
      "properties": {
        "nonFixed": {
          "description": "There are 3 types of holidays supported by the datetime subgrammar: 1) NonFixedHolidayEnum: e.g., \"easter\", \"chinese new year\". 2) FetchedRelativeDateTime: e.g., \"Thanksgiving\" => [4th Thursday of November] 3) HolidayByMonthDay: e.g., \"xmas\" => [December 25] Each holiday of the first type is resolved by a C++ function; the 2nd and 3rd type of holidays are mapped to AbsoluteDateTime and FetchedRelativeDateTime, respectively, in grammar and are not needed to be represented in proto.",
          "enum": [
            "UNKNOWN_NON_FIXED_HOLIDAY",
            "EASTER",
            "CHINESE_NEW_YEAR",
            "ORTHODOX_EASTER",
            "MARDI_GRAS",
            "ASH_WEDNESDAY",
            "GOOD_FRIDAY",
            "EASTER_MONDAY",
            "PENTECOST",
            "CORPUS_CRISTI",
            "WHIT_MONDAY",
            "PALM_SUNDAY",
            "MAUNDY_THURSDAY",
            "ASCENSION_DAY",
            "GREAT_PRAYER_DAY",
            "HOLY_SATURDAY",
            "PENTECOST_EVE",
            "MOTHERING_SUNDAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeMoonEventInfo": {
      "id": "NlpSemanticParsingDatetimeMoonEventInfo",
      "properties": {
        "phase": {
          "enum": [
            "UNKNOWN_MOON_PHASE",
            "NEW_MOON",
            "WAXING_CRESCENT",
            "FIRST_QUARTER_PHASE",
            "WAXING_GIBBOUS",
            "FULL_MOON",
            "WANING_GIBBOUS",
            "LAST_QUARTER_PHASE",
            "WANING_CRESCENT"
          ],
          "enumDescriptions": [
            "Northern hemisphere | Southern hemisphere X | X",
            "\ud83c\udf11 | \ud83c\udf11",
            "\ud83c\udf12 | \ud83c\udf18",
            "\ud83c\udf13 | \ud83c\udf17",
            "\ud83c\udf14 | \ud83c\udf16",
            "\ud83c\udf15 | \ud83c\udf15",
            "\ud83c\udf16 | \ud83c\udf14",
            "\ud83c\udf17 | \ud83c\udf13",
            "\ud83c\udf18 | \ud83c\udf12"
          ],
          "type": "string"
        },
        "type": {
          "enum": [
            "INVALID_MOON_EVENT",
            "MOONRISE",
            "MOONSET"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeNonGregorianDate": {
      "description": "Non-Gregorian dates are similar to AbsoluteDateTime, but use non-Gregorian calendars.",
      "id": "NlpSemanticParsingDatetimeNonGregorianDate",
      "properties": {
        "chineseMonth": {
          "enum": [
            "UNKNOWN_CHINESE_MONTH",
            "FIRST_MONTH",
            "SECOND_MONTH",
            "THIRD_MONTH",
            "FOURTH_MONTH",
            "FIFTH_MONTH",
            "SIXTH_MONTH",
            "SEVENTH_MONTH",
            "EIGHTH_MONTH",
            "NINTH_MONTH",
            "TENTH_MONTH",
            "ELEVENTH_MONTH",
            "TWELFTH_MONTH"
          ],
          "enumDescriptions": [
            "",
            "Note1: month names in the enum match ChineseCalendar from ICU libraries. Note2: Chinese calendar has leap months called \"\u958f\u6708\" (R\u00f9nyu\u00e8) which are added every 33 months. It is normally referred with the same name as the previous month by adding the prefix \"\u958f\", e.g.: \"\u958f\u516d\u6708\". In ICU library leap months are numbered the same as the month they follow, similarly no leap months are added to the enum below. More details on the different names of the chinese calendar months: https://en.wikipedia.org/wiki/Chinese_calendar#Names_of_months \"\u4e00\u6708\", also traditionally \"\u6b63\u6708\" (Zh\u0113ngyu\u00e8): Start Month.",
            "\"\u4e8c\u6708\", also traditionally \"\u674f\u6708\" (X\u00ecngyu\u00e8): Apricot Month.",
            "\"\u4e09\u6708\", also traditionally \"\u6843\u6708\" (T\u00e1oyu\u00e8): Peach Month.",
            "\"\u56db\u6708\", also traditionally \"\u69d0\u6708\" (Hu\u00e1iyu\u00e8): Locust Tree Month.",
            "\"\u4e94\u6708\", also traditionally \"\u84b2\u6708\" (P\u00fayu\u00e8): Sweet Sedge Month.",
            "\"\u516d\u6708\", also traditionally \"\u8377\u6708\" (H\u00e9yu\u00e8): Lotus Month.",
            "\"\u4e03\u6708\", also traditionally \u201c\u862d\u6708\u201d (L\u00e1nyu\u00e8): Orchid Month.",
            "\"\u516b\u6708\", also traditionally \"\u6842\u6708\" (Gu\u00ecyu\u00e8): Osmanthus Month.",
            "\"\u4e5d\u6708\", also traditionally \"\u83ca\u6708\" (J\u00fayu\u00e8): Chrysanthemum Month.",
            "\"\u5341\u6708\", also traditionally \"\u9633\u6708\" (Y\u00e1ngyu\u00e8): Yang Month.",
            "\"\u5341\u4e00\u6708\", also traditionally \"\u51ac\u6708\" (D\u014dngyu\u00e8): Winter Month.",
            "\"\u5341\u4e8c\u6708\", also traditionally \"\u814a\u6708\" (L\u00e0yu\u00e8): Preserved Month."
          ],
          "type": "string"
        },
        "day": {
          "description": "The day is the offset within the month, same as in Gregorian calendars.",
          "format": "int32",
          "type": "integer"
        },
        "hebrewMonth": {
          "enum": [
            "UNKNOWN_HEBREW_MONTH",
            "TISHRI",
            "HESHVAN",
            "KISLEV",
            "TEVET",
            "SHEVAT",
            "ADAR_1",
            "ADAR",
            "NISAN",
            "IYAR",
            "SIVAN",
            "TAMUZ",
            "AV",
            "ELUL"
          ],
          "enumDescriptions": [
            "",
            "Note: month names match HebrewCalendar from ICU libraries.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "islamicMonth": {
          "enum": [
            "UNKNOWN_ISLAMIC_MONTH",
            "MUHARRAM",
            "SAFAR",
            "RABI_AL_AWWAL",
            "RABI_AL_THANI",
            "JUMADA_AL_AWWAL",
            "JUMADA_AL_THANI",
            "RAJAB",
            "SHABAN",
            "RAMADAN",
            "SHAWWAL",
            "ZUL_QAADAH",
            "ZUL_HIJJAH"
          ],
          "enumDescriptions": [
            "",
            "Note: month names do *not* match ICU libraries.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "year": {
          "description": "The year is relative to the calendar (e.g. 5777 for Hebrew calendar).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeQuantity": {
      "id": "NlpSemanticParsingDatetimeQuantity",
      "properties": {
        "modifier": {
          "description": "For internal use - DateTime subgrammar users should look at Duration.modifier. = MORE in [3 more days].",
          "enum": [
            "NO_MOD",
            "BEFORE",
            "AFTER",
            "ON_OR_BEFORE",
            "ON_OR_AFTER",
            "LESS_THAN",
            "MORE_THAN",
            "EQUAL_OR_LESS",
            "EQUAL_OR_MORE",
            "START",
            "MID",
            "END",
            "APPROX",
            "ADD",
            "SUBTRACT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Identifies additive or subtractive duration quantities as in [10 more min].",
            ""
          ],
          "type": "string"
        },
        "number": {
          "description": "= 3 in \"3 milliseconds\".",
          "format": "double",
          "type": "number"
        },
        "numberSpan": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field keeps the span info of the number element in a quantity expression, which is useful for downstream components to obtain the number annotations inside a quantity when necessary."
        },
        "symbolicQuantity": {
          "description": "Quantities are typically converted into milliseconds, regardless of the units the user used. Sometimes this loses crucial information, e.g., \"5 days\" vs \"5 nights\". When quantities are converted to milliseconds, 'symbolic_quantity' will contain the sequence of units that the user actually supplied. This can be more than one element in cases like \"one minute and 30 seconds\". In cases where 'symbolic_quantity' has more than one element, THERE IS NO GUARANTEED ORDER between elements.",
          "items": {
            "$ref": "NlpSemanticParsingDatetimeQuantity"
          },
          "type": "array"
        },
        "unit": {
          "description": "= MILLISECOND in \"3 milliseconds\".",
          "enum": [
            "NO_UNIT",
            "NANOSECOND",
            "MICROSECOND",
            "MILLISECOND",
            "SECOND",
            "MINUTE",
            "HOUR",
            "DAY",
            "WEEK",
            "TEN_DAY",
            "HALF_MONTH",
            "MONTH",
            "QUARTER",
            "HALF_YEAR",
            "YEAR",
            "DECADE",
            "CENTURY",
            "MILLENNIUM",
            "NIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeRange": {
      "description": "Range has 4 use cases: 1. with an explicit begin and an explicit end, e.g. \"from Monday to Wednesday.\" Both |begin| and |end| are filled in this case. 2. a point date/time expression is used as a range at a finer granularity. E.g., in \"first Monday of this month\", \"this month\" is used as a range. In this case, only |begin| will be filled and the |end| will be filled during the grounding process. 3. a fuzzy date/time range such as \"morning\" or \"evening.\" 4. with a relative begin and a relative end, e.g. \"from yesterday to next Monday.\" Note: this may be used in a mixture of exact/relative begin and end. Next available ID: 14.",
      "id": "NlpSemanticParsingDatetimeRange",
      "properties": {
        "begin": {
          "$ref": "NlpSemanticParsingDatetimeAbsoluteDateTime",
          "description": "Deprecated fields. Do NOT use."
        },
        "beginRelative": {
          "$ref": "NlpSemanticParsingDatetimeRelativeDateTime"
        },
        "duration": {
          "$ref": "NlpSemanticParsingDatetimeQuantity",
          "description": "if |duration| is set, one field from start or finish must be populated, but not both. |exclusive| value is still relevant to decide if the endpoints of the range are included in the range (value defined in the start/finish fields as well as the datetime value resulting of offseting the duration over the given range endpoint)."
        },
        "end": {
          "$ref": "NlpSemanticParsingDatetimeAbsoluteDateTime"
        },
        "endRelative": {
          "$ref": "NlpSemanticParsingDatetimeRelativeDateTime"
        },
        "exclusive": {
          "type": "boolean"
        },
        "finish": {
          "$ref": "NlpSemanticParsingDatetimeDateTime"
        },
        "fuzzyRange": {
          "enum": [
            "NO_FUZZY_RANGE",
            "FUZZY_RANGE_MORNING",
            "FUZZY_RANGE_AFTERNOON",
            "FUZZY_RANGE_EVENING",
            "FUZZY_RANGE_NIGHT",
            "FUZZY_RANGE_EVE",
            "FUZZY_RANGE_DAYTIME",
            "FUZZY_RANGE_DAWN",
            "FUZZY_RANGE_DUSK",
            "FUZZY_RANGE_NIGHTTIME",
            "FUZZY_RANGE_EARLY_MORNING",
            "FUZZY_RANGE_MID_MORNING",
            "FUZZY_RANGE_LATE_MORNING",
            "FUZZY_RANGE_EARLY_AFTERNOON",
            "FUZZY_RANGE_MID_AFTERNOON",
            "FUZZY_RANGE_LATE_AFTERNOON",
            "FUZZY_RANGE_EARLY_EVENING",
            "FUZZY_RANGE_MID_EVENING",
            "FUZZY_RANGE_LATE_EVENING",
            "FUZZY_RANGE_LATE_NIGHT",
            "DELETED_11"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated values. Do not use.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "properties": {
          "$ref": "NlpSemanticParsingDatetimeResolutionProperties"
        },
        "rangeModifier": {
          "description": "Modifier that return the appropriate subrange. For more information, see the description of RangeOfDateTimeModifier. Example: * *late* morning",
          "enum": [
            "RANGE_MODIFIER_NONE",
            "RANGE_MODIFIER_EARLY",
            "RANGE_MODIFIER_MIDDLE",
            "RANGE_MODIFIER_LATE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "start": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "|start| and |finish| are inclusive unless exclusive field is true. the values in start and finish can be an absolute point, a relative or another range. Recurrences and repeated values are not expected/allowed."
        },
        "symbolicValue": {
          "description": "The field is set if the range is the result of resolving/grounding a relative datetime expression referring to a part of the day. E.g. \"morning\", \"afternoon\", \"evening\", \"night\", \"tonight\", etc.",
          "enum": [
            "NO_SYMBOLIC_DATETIME",
            "SYMBOLIC_MORNING",
            "SYMBOLIC_AFTERNOON",
            "SYMBOLIC_EVENING",
            "SYMBOLIC_NIGHT",
            "DELETED_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Deprecated fields. Do not use."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeRecurrent": {
      "description": "expressions: \"every Monday after December 1\" \"every morning starting from this Friday\". Note: if a recurrent DATE/TIME expression is bounded (limited by a finite interval or a finite count), e.g., \"every monday in the next 3 months\", \"... at 11:00am every Monday for 4 times\" the grammar will resolve it to a finite number of |range|s. Next available ID: 17.",
      "id": "NlpSemanticParsingDatetimeRecurrent",
      "properties": {
        "countRestriction": {
          "description": "How many times it repeats.",
          "format": "int32",
          "type": "integer"
        },
        "exception": {
          "description": "An arbitrary exception to the recurrence. This can be an absolute point, a relative, a range or a recurrent expression. Examples: * \"every Tuesday except for July 13th 2021\" * \"every Tuesday except for July 13th and November 2nd\" * \"every second Monday except during the summer\" * \"everyday except Thursdays\" * \"every Friday, except from October 1st to October 22nd\"",
          "items": {
            "$ref": "NlpSemanticParsingDatetimeDateTime"
          },
          "type": "array"
        },
        "frequency": {
          "description": "|frequency| is used to represent the frequency of the recurrence over a given recurrent period. E.g. \"twice a week\", \"once a month\". An unknown frequency is represented with 0, as in just \"repeating\".",
          "format": "uint32",
          "type": "integer"
        },
        "metadata": {
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "period": {
          "description": "|period| and |unit| specify how often |start_point| or |start_range| repeats. |period| should not be 0.",
          "format": "uint32",
          "type": "integer"
        },
        "rangeRestriction": {
          "$ref": "NlpSemanticParsingDatetimeRange"
        },
        "relativeRangeRestriction": {
          "$ref": "NlpSemanticParsingDatetimeRelativeDateTime"
        },
        "restriction": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "A recurrent expression can be restricted by either a datetime |restriction| or |count_restriction| below. The restriction datetime can be expressed as an explicit range a relative datetime expression, a datetime point or a recurrent datetime. E.g. \"every monday [next month]\", \"every second tuesday [this year]\", etc. If |period| is > 0 and |restriction| is not set, repeat indefinitely. Note that this can support recurrent expressions as |restriction| as well. For example in the expression \"every monday on [every other month]\" where [every other month] is a restriction expressed as a recurrent datetime."
        },
        "start": {
          "description": "|start| is used to represent the starting points, ranges or relative datetims in a recurrent expression, for example: \"every morning\", (range) \"everyday at 5 pm\", (point) \"every second monday\" (relative) |start| should never contain a recurrent element.",
          "items": {
            "$ref": "NlpSemanticParsingDatetimeDateTime"
          },
          "type": "array"
        },
        "startPoint": {
          "description": "DO NOT USE: deprecated fields soon to be removed.",
          "items": {
            "$ref": "NlpSemanticParsingDatetimeAbsoluteDateTime"
          },
          "type": "array"
        },
        "startRange": {
          "items": {
            "$ref": "NlpSemanticParsingDatetimeRange"
          },
          "type": "array"
        },
        "startRelative": {
          "items": {
            "$ref": "NlpSemanticParsingDatetimeRelativeDateTime"
          },
          "type": "array"
        },
        "target": {
          "$ref": "NlpSemanticParsingDatetimeTargetToFetch",
          "description": "The target to be fetched. This could be a named day-of-week or month (e.g., \"Monday\", \"April\"), or a date/time unit (e.g., \"day\", \"week\", \"month\")."
        },
        "timeInterval": {
          "$ref": "NlpSemanticParsingDatetimeQuantity",
          "description": "|time_interval| is a time amount or duration, used to described the time interval between the instances of the recurrence. (e.g. \"every 3 hours\", \"every 35 minutes\", \"every 2 months and 15 days\", etc)"
        },
        "unit": {
          "enum": [
            "NO_UNIT",
            "NANOSECOND",
            "MICROSECOND",
            "MILLISECOND",
            "SECOND",
            "MINUTE",
            "HOUR",
            "DAY",
            "WEEK",
            "TEN_DAY",
            "HALF_MONTH",
            "MONTH",
            "QUARTER",
            "HALF_YEAR",
            "YEAR",
            "DECADE",
            "CENTURY",
            "MILLENNIUM",
            "NIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeRelativeDateTime": {
      "description": "This provides a semi-abstract description for relative datetime expressions. - ShiftedRelativeDateTime encodes datetimes that arise from before/after expressions (e.g. [three days ago], [2 days after March 1st]). - FetchedRelativeDateTime encodes expressions that are retrieval-type statements (e.g. [next weekend], [the last two Mondays]). Next field: 5",
      "id": "NlpSemanticParsingDatetimeRelativeDateTime",
      "properties": {
        "fetched": {
          "$ref": "NlpSemanticParsingDatetimeFetchedRelativeDateTime"
        },
        "metadata": {
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "modifier": {
          "description": "When a relative datetime which resolves into a range is being used as the endpoint of a range (begin_relative/end_relative), its begin/end will be taken accordingly unless this modifier indicates the opposite: begin_relative with relative range and modifier == AFTER means that its end will be taken as the beginning of the resulting range. Similarly, end_relative with a relative range and modifier == BEFORE means that its begin will be taken as the end of the resulting range. E.g. \"after next month\" will be a range with a begin_relative that will take the end of \"next month\" as its starting point (exclusive). values other than AFTER and BEFORE in the specific conditions explained here will be ignored and have no effect in the resolution of RelativeDateTimes.",
          "enum": [
            "NO_MOD",
            "BEFORE",
            "AFTER",
            "ON_OR_BEFORE",
            "ON_OR_AFTER",
            "LESS_THAN",
            "MORE_THAN",
            "EQUAL_OR_LESS",
            "EQUAL_OR_MORE",
            "START",
            "MID",
            "END",
            "APPROX",
            "ADD",
            "SUBTRACT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Identifies additive or subtractive duration quantities as in [10 more min].",
            ""
          ],
          "type": "string"
        },
        "shifted": {
          "$ref": "NlpSemanticParsingDatetimeShiftedRelativeDateTime"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeResolutionProperties": {
      "description": "Encapsulates metadata about the query span resolved here.",
      "id": "NlpSemanticParsingDatetimeResolutionProperties",
      "properties": {
        "meridiem": {
          "description": "Simple enum container for exporting meridiem mentions. Note: this is marked as deprecated as we are moving to properly parse expressions with explicit meridiem information.",
          "enum": [
            "INVALID_MERIDIEM",
            "AM",
            "PM"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "description": "Encodes whether the datetime was phrased in a specific way, see enum above.",
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "relative": {
          "$ref": "NlpSemanticParsingDatetimeRelativeDateTime",
          "description": "Expresses the relative DateTime query that gave rise to these grounded semantics."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeShiftedRelativeDateTime": {
      "id": "NlpSemanticParsingDatetimeShiftedRelativeDateTime",
      "properties": {
        "base": {
          "$ref": "NlpSemanticParsingDatetimeAbsoluteDateTime",
          "description": "The base could be an absolute datetime point for example: \"March 1\", a relative datetime point, for example: \"2 days before March 1\" or a symbolic base type, for example: CURRENT_DATETIME. This could also be used to combine EXPLICIT_PRONOUN with the actual value of that reference being setup as a datetime point in base or relative_base"
        },
        "baseType": {
          "enum": [
            "UNKNOWN",
            "CURRENT_DATETIME",
            "EXPLICIT_PRONOUN"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "metadata": {
          "description": "Can be used to tag relative datetime expressions with metadata information in the grammar.",
          "enum": [
            "NO_METADATA",
            "HOLIDAY",
            "ORDINAL",
            "WEEKEND",
            "DECADE",
            "MONTH",
            "DAY_OF_WEEK",
            "YEAR_NUMBER",
            "MONTH_YEAR",
            "PERSONAL",
            "SEASON",
            "WEE_HOURS_INFERRED",
            "PROACTIVE_DEFAULT_TIME",
            "PROACTIVE_DEFAULT_DATE",
            "PROACTIVE_DEFAULT_DATETIME",
            "HOUR_NUMBER",
            "ASTRONOMICAL_EVENT",
            "RECURRENT_UNKNOWN_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "relativeBase": {
          "$ref": "NlpSemanticParsingDatetimeResolutionProperties"
        },
        "shiftAmount": {
          "$ref": "NlpSemanticParsingDatetimeQuantity"
        },
        "shiftPast": {
          "description": "If true, shifting to the past; if false, shifting to the future.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeSpan": {
      "description": "The byte offset and text of a span.",
      "id": "NlpSemanticParsingDatetimeSpan",
      "properties": {
        "numBytes": {
          "format": "int32",
          "type": "integer"
        },
        "startByte": {
          "description": "0-based start byte offset of the span.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "The text of the span: a substring of ParserInput's canonical_input.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeTargetToFetch": {
      "description": "Next field: 9",
      "id": "NlpSemanticParsingDatetimeTargetToFetch",
      "properties": {
        "event": {
          "$ref": "NlpSemanticParsingDatetimeEvent"
        },
        "fuzzyRange": {
          "enum": [
            "NO_FUZZY_RANGE",
            "FUZZY_RANGE_MORNING",
            "FUZZY_RANGE_AFTERNOON",
            "FUZZY_RANGE_EVENING",
            "FUZZY_RANGE_NIGHT",
            "FUZZY_RANGE_EVE",
            "FUZZY_RANGE_DAYTIME",
            "FUZZY_RANGE_DAWN",
            "FUZZY_RANGE_DUSK",
            "FUZZY_RANGE_NIGHTTIME",
            "FUZZY_RANGE_EARLY_MORNING",
            "FUZZY_RANGE_MID_MORNING",
            "FUZZY_RANGE_LATE_MORNING",
            "FUZZY_RANGE_EARLY_AFTERNOON",
            "FUZZY_RANGE_MID_AFTERNOON",
            "FUZZY_RANGE_LATE_AFTERNOON",
            "FUZZY_RANGE_EARLY_EVENING",
            "FUZZY_RANGE_MID_EVENING",
            "FUZZY_RANGE_LATE_EVENING",
            "FUZZY_RANGE_LATE_NIGHT",
            "DELETED_11"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Deprecated values. Do not use.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "month": {
          "enum": [
            "NO_MONTH",
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "quarter": {
          "enum": [
            "INVALID_QUARTER",
            "FIRST_QUARTER",
            "SECOND_QUARTER",
            "THIRD_QUARTER",
            "FOURTH_QUARTER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "reference": {
          "enum": [
            "INVALID",
            "CURRENT_DATETIME",
            "CURRENT_TIME",
            "CURRENT_DATE",
            "RECENT",
            "LATEST",
            "NEXT_DAY",
            "PREVIOUS_DAY",
            "DAY_AFTER_NEXT",
            "DAY_BEFORE_PREVIOUS"
          ],
          "enumDescriptions": [
            "",
            "Returns a full described value for \"now\". It populates year, month, day, hour, minute and seconds.",
            "Returns a described value for the current time without the date component. It populates hour, minute and seconds (no DATE elements).",
            "Returns a described value for \"today\". It populates year, month and day (no TIME elements).",
            "This value is used for references to the fuzzy range of recent time or to subset of the last elements of a list sorted by their temporal relation.",
            "This value is used for references to the last element of a list sorted by their temporal relation.",
            "Returns a described value for \"tomorrow\". It populates year, month and day (no TIME elements).",
            "Returns a described value for \"yesterday\". It populates year, month and day (no TIME elements).",
            "Returns a described value for \"the day after tomorrow\". Note: this is one word in many languages (e.g. \"\u00fcbermorgen\", \"\u660e\u5f8c\u65e5\") It populates year, month and day (no TIME elements).",
            "Returns a described value for \"the day before yesterday\". Note: this is one word in many languages (e.g. \"anteayer\", \"\u03c0\u03c1\u03bf\u03c7\u03b8\u03ad\u03c2\") It populates year, month and day (no TIME elements)."
          ],
          "type": "string"
        },
        "season": {
          "enum": [
            "INVALID_SEASON",
            "SPRING",
            "SUMMER",
            "FALL",
            "WINTER",
            "EARLY_SPRING",
            "MID_SPRING",
            "LATE_SPRING",
            "EARLY_SUMMER",
            "MID_SUMMER",
            "LATE_SUMMER",
            "EARLY_FALL",
            "MID_FALL",
            "LATE_FALL",
            "EARLY_WINTER",
            "MID_WINTER",
            "LATE_WINTER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Deprecated values. Do not use.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "unit": {
          "description": "Unnamed target: \"week\", \"month\" etc. E.g., \"1st week of April\".",
          "enum": [
            "NO_UNIT",
            "NANOSECOND",
            "MICROSECOND",
            "MILLISECOND",
            "SECOND",
            "MINUTE",
            "HOUR",
            "DAY",
            "WEEK",
            "TEN_DAY",
            "HALF_MONTH",
            "MONTH",
            "QUARTER",
            "HALF_YEAR",
            "YEAR",
            "DECADE",
            "CENTURY",
            "MILLENNIUM",
            "NIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "weekday": {
          "description": "Named target: only one of the following is expected.",
          "items": {
            "enum": [
              "NO_DAY_OF_WEEK",
              "SUNDAY",
              "MONDAY",
              "TUESDAY",
              "WEDNESDAY",
              "THURSDAY",
              "FRIDAY",
              "SATURDAY",
              "WEEKEND"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Sometimes resembles Monday etc. E.g., \"2nd weekend.\""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingDatetimeTimeZone": {
      "id": "NlpSemanticParsingDatetimeTimeZone",
      "properties": {
        "timezone": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingEntitySourceData": {
      "id": "NlpSemanticParsingEntitySourceData",
      "properties": {
        "entitySources": {
          "description": "Indicates backends from which parts of an entity were retrieved.",
          "items": {
            "enum": [
              "UNKNOWN_ENTITY_SOURCE",
              "QREF_PERSONAL_WALDREF",
              "QREF_PERSONAL_TOPIC_SERVER",
              "MYENTITIES_MODEL_T"
            ],
            "enumDescriptions": [
              "",
              "Indicates that an entity was retrieved from personal waldref.",
              "Indicates that metadata from personal topic server was attached to an entity.",
              "Indicates that an entity was retrieved from Model T."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingExpressionStatus": {
      "description": "Status indicating whether the user has finished expressing their intended semantics during a streaming interaction. Semantics are partially expressed when later, unprompted user input is expected to modify the semantics. Future inputs are typically additional speech or continued modification of argument text in form field. These inputs can trigger modifications including adding arguments, changing the intent, or modifying existing arguments. Sensing this status can be done both directly and indirectly. Fluid Actions directly detects this status as the user moves between, or enters and leaves, argument form fields. Understanding indirectly detects this status by the pace of the user's speech, the semantics of the language, and the user's intonation. See go/streaming-nlu-fulfilment-protocol-v1 for details about how it is used in the Streaming NLU Fulfillment protocol.",
      "id": "NlpSemanticParsingExpressionStatus",
      "properties": {
        "status": {
          "enum": [
            "EXPRESSION_STATUS_UNSPECIFIED",
            "PARTIAL",
            "COMPLETE",
            "LIKELY_COMPLETE"
          ],
          "enumDescriptions": [
            "Expression state is unspecified.",
            "The user is in the process of expressing the intent/argument and has only partially communicated the semantics. As a result, the semantics are partially expressed.",
            "The semantics have been completely expressed and the user is unlikely to modify it without further prompting.",
            "The perception models believe it is likely, but not certain that the user has finished expressing their thought. This signal as a lower latency and lower precision than the COMPLETE status."
          ],
          "type": "string"
        },
        "textCompletenessProbability": {
          "description": "Completeness probability as calculated by the parser's completeness layer.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalAmenities": {
      "description": "A list of amenity constraints. There is an implicit AND relationship between the different constraints.",
      "id": "NlpSemanticParsingLocalAmenities",
      "properties": {
        "type": {
          "description": "Applied amenity constraints. Nothing should be inferred about the ordering of the values in this field.",
          "items": {
            "enum": [
              "UNKNOWN_TYPE",
              "AIR_CONDITIONED",
              "BAR",
              "BEACH",
              "BREAKFAST",
              "FREE_BREAKFAST",
              "FREE_PARKING",
              "FREE_WIFI",
              "GYM",
              "HEATED_POOL",
              "HOT_TUB",
              "IN_ROOM_HOT_TUB",
              "INDOOR_POOL",
              "KID_FRIENDLY",
              "NON_SMOKING",
              "PET_FRIENDLY",
              "POOL",
              "RESTAURANT",
              "SMOKING",
              "TRUCK_PARKING",
              "WIFI",
              "DEAL",
              "LAST_MINUTE",
              "ALL_INCLUSIVE",
              "PARKING",
              "SPA",
              "FREE_PET_FRIENDLY",
              "WIFI_IN_ROOM",
              "ALL_INCLUSIVE_ONLY",
              "ROOM_SERVICE",
              "OUTDOOR_POOL",
              "HAS_24_HOUR_FRONT_DESK",
              "FREE_GYM",
              "MASSAGE",
              "SAUNA",
              "KIDS_ACTIVITIES",
              "KIDS_CLUB",
              "SUITE",
              "BALCONY",
              "BATHTUB",
              "HOUSEKEEPING",
              "DAILY_HOUSEKEEPING",
              "DOG_FRIENDLY",
              "THERMAL_POOL",
              "TREADMILL",
              "PRIVATE_BEACH",
              "VIEW_OF_CITY",
              "VIEW_OF_GARDEN",
              "VIEW_OF_LAKE",
              "VIEW_OF_LANDMARK",
              "VIEW_OF_OCEAN",
              "VIEW_OF_POOL",
              "VIEW_OF_VALLEY",
              "CASINO",
              "KITCHEN",
              "AVAILABLE_FOR_ESSENTIAL_WORKERS",
              "FREE_CANCELLATION"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "Breakfast is provided without an extra fee.",
              "Parking is provided without an extra fee.",
              "Wifi is provided without an extra fee.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "All inclusive is available as a meal option.",
              "",
              "",
              "Pets are accepted without an extra fee.",
              "Wifi service is available in the rooms.",
              "All inclusive is the only meal option.",
              "",
              "",
              "",
              "Gym is available without an extra fee.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Housekeeping services are provided daily.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalBasicLocation": {
      "description": "Conceptually this describes one location. Technically, this is a sequence of location elements with the intention that at least one element in the sequence is an actual location (rather than a modifier).",
      "id": "NlpSemanticParsingLocalBasicLocation",
      "properties": {
        "element": {
          "items": {
            "$ref": "NlpSemanticParsingLocalLocationElement"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalBusinessType": {
      "description": "A high-level categorization of business types. Used for location elements that are either BUSINESS_NAME or BUSINESS_CATEGORY. The business types roughly correspond to QRef collections and should be interpreted broadly. E.g., hotel also include motels, youth hostels, and guest houses; restaurants includes bars and cafes, etc. Business types can be populated by QRef collections; other population is done by grammar categories from local_categories.grammar. It is expected that some business organizations will match more than one business type. E.g., Safeway is both a grocery store and a pharmacy. Next ID: 43 NOTE(oksana): LocalCategoryReliable grammar over-rides a few business type queries to include hyper_reliable location element. If you change this, please make sure that LocalCategoryReliable grammar reflects this too. LINT.IfChange",
      "id": "NlpSemanticParsingLocalBusinessType",
      "properties": {
        "airline": {
          "type": "boolean"
        },
        "airport": {
          "type": "boolean"
        },
        "bank": {
          "type": "boolean"
        },
        "bikeSharingStation": {
          "type": "boolean"
        },
        "busStop": {
          "type": "boolean"
        },
        "clothingStore": {
          "type": "boolean"
        },
        "cuisineGcid": {
          "description": "If the element implies a cuisine type then we include the gcid string when available. Currently this happens for BUSINESS_CATEGORY type. The field is repeated to model categories like \"mandarin buffet restaurant\" with multiple cuisine gcid's: mandarin_restaurant and buffet_restaurant.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "departmentStore": {
          "type": "boolean"
        },
        "drugDropOff": {
          "type": "boolean"
        },
        "electricVehicleChargingStation": {
          "type": "boolean"
        },
        "electronicStore": {
          "type": "boolean"
        },
        "emergency": {
          "description": "This field is used to determine the emergency type of the element, which is specified by the grammar parse in (http://cs/file:googledata/localsearch/quality/grammar/local_patterns.asciipb). e.g. \"coronavirus_treatment_locations\" TODO(b/151330576) Deprecate the emergency field and replace with normal triggering.",
          "type": "string"
        },
        "foodPantry": {
          "type": "boolean"
        },
        "gasStation": {
          "type": "boolean"
        },
        "groceryStore": {
          "type": "boolean"
        },
        "hairdresser": {
          "type": "boolean"
        },
        "hardwareStore": {
          "type": "boolean"
        },
        "hospital": {
          "type": "boolean"
        },
        "hotel": {
          "description": "Also youth hostels, guest houses, etc.",
          "type": "boolean"
        },
        "parking": {
          "type": "boolean"
        },
        "petStore": {
          "type": "boolean"
        },
        "pharmacy": {
          "type": "boolean"
        },
        "qrefTransitStation": {
          "description": "This is used for transit stations annotated by QRef. The transit_station business_type above is only used for business categories, and therefore is used downstream to find nearby stations rather than a particular station, and so cannot be present in a Location that is a specific station from QRef. For these cases, this business_type is used instead. e.g. \"grand central\" \"millbrae station\" \"union station\" will have business_type qref_transit_station",
          "type": "boolean"
        },
        "restaurant": {
          "description": "Also bars and cafes",
          "type": "boolean"
        },
        "retail": {
          "type": "boolean"
        },
        "school": {
          "description": "Pre-k to high school",
          "type": "boolean"
        },
        "shoppingCenter": {
          "type": "boolean"
        },
        "soupKitchen": {
          "type": "boolean"
        },
        "sportStore": {
          "type": "boolean"
        },
        "subwayStation": {
          "type": "boolean"
        },
        "telecom": {
          "type": "boolean"
        },
        "toyStore": {
          "type": "boolean"
        },
        "trainStation": {
          "type": "boolean"
        },
        "transitLine": {
          "description": "A particular line in a transit system, e.g., \"3 train\", \"Red Line\", \"Cirle Line\", etc.",
          "type": "boolean"
        },
        "transitOperator": {
          "description": "Operator of a transit line, e.g., \"MTA\", \"BART\", \"CTA\", etc.",
          "type": "boolean"
        },
        "transitStation": {
          "description": "The different types of transit station business types will be used to figure out which vehicle types to use when querying Tripfinder's SearchStations service. The stations in that backend seem to be divided into HEAVY_RAIL, SUBWAY, and TRAM. There isn't a very reliable division between intercity rail and commuter rail -- Amtrak, LIRR, PATH, and NJ Transit are all classified as HEAVY_RAIL. That's why in these types we make a distinction between train and subway, and not train and muni_rail, (unlike TransitMode in the TravelAction proto).",
          "type": "boolean"
        },
        "university": {
          "description": "Also colleges",
          "type": "boolean"
        },
        "vehicleType": {
          "description": "All of the vehicle types serviced by this business or business category. e.g. VEHICLE_TYPE_RAIL and VEHICLE_TYPE__BUS for \"transit stop\". This allows downstream to serve different result types for transit station categories in different languages. e.g. In en-US \"train station\" seeks both railway station and subway station results. But the equivalent word in French/Italian/German seeks only railway stations.",
          "items": {
            "enum": [
              "VEHICLE_TYPE_ANY",
              "VEHICLE_TYPE_RAIL",
              "VEHICLE_TYPE_METRO_RAIL",
              "VEHICLE_TYPE_SUBWAY",
              "VEHICLE_TYPE_TRAM",
              "VEHICLE_TYPE_MONORAIL",
              "VEHICLE_TYPE_HEAVY_RAIL",
              "VEHICLE_TYPE_COMMUTER_TRAIN",
              "VEHICLE_TYPE_HIGH_SPEED_TRAIN",
              "VEHICLE_TYPE_LONG_DISTANCE_TRAIN",
              "VEHICLE_TYPE_BUS",
              "VEHICLE_TYPE_INTERCITY_BUS",
              "VEHICLE_TYPE_TROLLEYBUS",
              "VEHICLE_TYPE_SHARE_TAXI",
              "VEHICLE_TYPE_FERRY",
              "VEHICLE_TYPE_CABLE_CAR",
              "VEHICLE_TYPE_GONDOLA_LIFT",
              "VEHICLE_TYPE_FUNICULAR",
              "VEHICLE_TYPE_SPECIAL",
              "VEHICLE_TYPE_HORSE_CARRIAGE",
              "VEHICLE_TYPE_AIRPLANE"
            ],
            "enumDescriptions": [
              "ABSTRACT",
              "ABSTRACT Metropolitan railway transport, mostly for local transit.",
              "ABSTRACT",
              "Subways run mainly or completely underground.",
              "Trams run mainly or completely along streets.",
              "Monorails run on track consisting of a single rail, e.g. suspended monorail.",
              "Heavy rail is rail transit that consists of larger vehicles, typically to transport more people across longer distances.",
              "Commuter trains connect the city with the suburbs. They tend to stop often and run short distances.",
              "High speed trains operate at much higher speed than normal trains. They can also run long distances. Typically with speeds upwards of 200 km/h. Examples are TGV, ICE, Shinkansen.",
              "Long distance trains connect multiple cities/regions of a country or even multiple countries. They run faster, but not high-speed. Typically speeds under 200 km/h.",
              "Buses cover mass transit over roads.",
              "A bus that connects cities to each other.",
              "A bus powered by electricity obtained from overhead wires by means of a pole.",
              "Share taxi is sort of bus transport with ability to drop off and pick up passengers anywhere on it route. Generally share taxi uses minibus vehicles.",
              "Ferries are a means of transit over water, often operated on regular, frequent, return services.",
              "Cable cars are a form of transit used in the mountains.",
              "An aerial lift (colloquially called \"gondola lift\") is a means of cable transport in which cabins, cars, gondolas or open chairs are hauled above the ground by means of one or more cables. Examples: gondola lift, aerial tramway. Funicular is a cable railway in which a pair of tram-like vehicles use each other as counter balance to ascend and descend.",
              "",
              "Used for easter eggs.",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "venue": {
          "description": "Stadiums, theaters, cinemas, etc.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalChainMemberConstraint": {
      "description": "ChainMemberConstraint for chain filtering enabled queries.",
      "id": "NlpSemanticParsingLocalChainMemberConstraint",
      "properties": {
        "chainIds": {
          "description": "Specifies which parent chain mids to filter by.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalCompoundLocation": {
      "id": "NlpSemanticParsingLocalCompoundLocation",
      "properties": {
        "joiner": {
          "$ref": "NlpSemanticParsingLocalJoiner"
        },
        "location1": {
          "$ref": "NlpSemanticParsingLocalLocation"
        },
        "location2": {
          "$ref": "NlpSemanticParsingLocalLocation",
          "description": "If location_2 is absent, it should likely be interpreted as an implicit \"here\". For example, \"nearest Starbucks\" will be represented as a compound location with \"Starbucks\" as location_1, \"nearest\" as the joiner, and empty location_2."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalContactLocation": {
      "description": "Contact information for the |contact_location| field in LocationElement.",
      "id": "NlpSemanticParsingLocalContactLocation",
      "properties": {
        "contact": {
          "$ref": "NlpSemanticParsingModelsCommunicationRecipient",
          "description": "Contact as a location."
        },
        "contactType": {
          "$ref": "NlpSemanticParsingModelsCommunicationPhoneType",
          "description": "The type of contact address (home, work, etc)."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalCuisineConstraint": {
      "description": "Constraint for cuisine type, such as \"chinese\", \"italian\", \"thai\", \"burgers\", etc.",
      "id": "NlpSemanticParsingLocalCuisineConstraint",
      "properties": {
        "cuisineGcid": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalEvChargingStationConnectorConstraint": {
      "id": "NlpSemanticParsingLocalEvChargingStationConnectorConstraint",
      "properties": {
        "connectorType": {
          "enum": [
            "OTHER",
            "J_1772",
            "MENNEKES",
            "CHADEMO",
            "CCS_COMBO_1",
            "CCS_COMBO_2",
            "TESLA_ROADSTER",
            "TESLA_S_HPWC",
            "TESLA",
            "GB_T",
            "WALL_OUTLET"
          ],
          "enumDescriptions": [
            "",
            "",
            "IEC 62196 Type 2 connector",
            "",
            "Combined Charging System (AC and DC). Based on SAE",
            "Type-1 J-1772 connector Combined Charging System (AC and DC). Based on Type-2",
            "Mennekes connector Tesla connectors (#7-8) are being deprecated and will soon be removed and reserved. Please use the generic TESLA connector #9 below.",
            "",
            "",
            "GB/T",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalEvChargingStationSpeedConstraint": {
      "description": "There is an implicit AND relation if multiple EVCS constraint types are specified.",
      "id": "NlpSemanticParsingLocalEvChargingStationSpeedConstraint",
      "properties": {
        "chargingSpeed": {
          "enum": [
            "UNKNOWN_CHARGING_SPEED",
            "FAST_CHARGING_SPEED",
            "VERY_FAST_CHARGING_SPEED"
          ],
          "enumDescriptions": [
            "",
            "",
            "Very fast definition : go/very-fast-speed-qbf-evcs"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalExtent": {
      "id": "NlpSemanticParsingLocalExtent",
      "properties": {
        "nonSpecificValue": {
          "description": "True for values like \"a few\".",
          "type": "boolean"
        },
        "units": {
          "enum": [
            "METER",
            "KILOMETER",
            "FOOT",
            "YARD",
            "MILE",
            "BLOCK",
            "MINUTE",
            "HOUR",
            "OTHER_UNITS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "unitsString": {
          "description": "String representation, e.g., for debug.",
          "type": "string"
        },
        "value": {
          "description": "For approximate values such as \"a few\" or \"several\", we populate |value| with a specific numeric value which is a generous (i.e., high) interpretation of the text, and we set |non_specific_value| to true.",
          "format": "double",
          "type": "number"
        },
        "valueString": {
          "description": "Can hold numbers as well as \"a few\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalGcidConstraint": {
      "id": "NlpSemanticParsingLocalGcidConstraint",
      "properties": {
        "gcid": {
          "description": "GCID - with the 'gcid:' prefix.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalHealthInsuranceConstraint": {
      "description": "Constraint for the health insurance network of a provider.",
      "id": "NlpSemanticParsingLocalHealthInsuranceConstraint",
      "properties": {
        "network": {
          "enum": [
            "UNKNOWN_HEALTH_INSURANCE",
            "ACCEPTS_MEDICARE",
            "ACCEPTS_MEDICAID"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalHotelType": {
      "description": "Hotel Type used by the hotels team to differentiate sub classes of accommodations. For any questions please contact hotel-search-quality@. Next ID: 48",
      "id": "NlpSemanticParsingLocalHotelType",
      "properties": {
        "allInclusiveResort": {
          "description": "Basic accommodation types variations.",
          "type": "boolean"
        },
        "beachResort": {
          "type": "boolean"
        },
        "bedAndBreakfast": {
          "type": "boolean"
        },
        "boutiqueHotel": {
          "type": "boolean"
        },
        "businessHotel": {
          "type": "boolean"
        },
        "cabin": {
          "description": "Other accommodation types.",
          "type": "boolean"
        },
        "campsite": {
          "type": "boolean"
        },
        "capsuleHotel": {
          "type": "boolean"
        },
        "casinoAccommodation": {
          "type": "boolean"
        },
        "castleHotel": {
          "type": "boolean"
        },
        "chalet": {
          "type": "boolean"
        },
        "commonLodgingHouse": {
          "type": "boolean"
        },
        "condoHotel": {
          "type": "boolean"
        },
        "conventionHotel": {
          "type": "boolean"
        },
        "cottage": {
          "type": "boolean"
        },
        "ecoHotel": {
          "type": "boolean"
        },
        "extendedStayHotel": {
          "type": "boolean"
        },
        "farmstay": {
          "type": "boolean"
        },
        "gite": {
          "type": "boolean"
        },
        "golfResort": {
          "type": "boolean"
        },
        "guestRanch": {
          "type": "boolean"
        },
        "guesthouse": {
          "type": "boolean"
        },
        "hostel": {
          "type": "boolean"
        },
        "hotel": {
          "description": "Basic accommodation types.",
          "type": "boolean"
        },
        "houseboat": {
          "type": "boolean"
        },
        "inn": {
          "type": "boolean"
        },
        "japaneseInn": {
          "description": "Japanese accommodation types.",
          "type": "boolean"
        },
        "japaneseInnWithHotSpring": {
          "type": "boolean"
        },
        "lodge": {
          "type": "boolean"
        },
        "lodging": {
          "type": "boolean"
        },
        "loveHotel": {
          "type": "boolean"
        },
        "motel": {
          "type": "boolean"
        },
        "mountainHut": {
          "type": "boolean"
        },
        "other": {
          "description": "Any other lodging related type.",
          "type": "boolean"
        },
        "pension": {
          "type": "boolean"
        },
        "resort": {
          "type": "boolean"
        },
        "safariLodge": {
          "type": "boolean"
        },
        "seasideResort": {
          "type": "boolean"
        },
        "servicedApartment": {
          "type": "boolean"
        },
        "skiResort": {
          "type": "boolean"
        },
        "suite": {
          "type": "boolean"
        },
        "vacationApartment": {
          "type": "boolean"
        },
        "vacationHouse": {
          "type": "boolean"
        },
        "vacationRental": {
          "description": "Vacation rental accommodation types.",
          "type": "boolean"
        },
        "villa": {
          "type": "boolean"
        },
        "wellnessAndSpaAccommodation": {
          "type": "boolean"
        },
        "youthHostel": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalHyperReliableData": {
      "description": "Message containing information about hyper-reliable categories. go/local-hyper-reliable",
      "id": "NlpSemanticParsingLocalHyperReliableData",
      "properties": {
        "commodityStrength": {
          "description": "Whether a location is a commodity (distance is an important metric), neutral or non-commodity (distance is not important). Commodity locations are \"atm\", \"gas station\", etc. Non-commodity locations are \"restaurant\", \"hotel\", etc, and all others are neutral. The value is 1 for commodity queries, 0 for non-commodity queries, no-value for neutral queries (when the field doesn't exist in the grammar). The reason it is a float is to prepare for future changes when we expand the signal value from discrete classes to a score, and the score will be in the range of [0,1].",
          "format": "float",
          "type": "number"
        },
        "gcidsynsOverride": {
          "items": {
            "$ref": "NlpSemanticParsingLocalHyperReliableDataGCIDSynsOverride"
          },
          "type": "array"
        },
        "hyperReliable": {
          "type": "boolean"
        },
        "retrievalGcids": {
          "description": "Categories used for retrieval and used in Artemis diversity tiers as restricts. See https://ariane.googleplex.com/launch/190585 for details.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalHyperReliableDataGCIDSynsOverride": {
      "description": "Set only when hyper_reliable is true. These are gcids and scores for hyper-reliable categories in ariane/182060. These are overridden for a few hyper-reliable categories, and may not be present everywhere.",
      "id": "NlpSemanticParsingLocalHyperReliableDataGCIDSynsOverride",
      "properties": {
        "gcidScore": {
          "format": "float",
          "type": "number"
        },
        "hyperReliableGcid": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalImplicitLocalCategory": {
      "description": "Flags indiciating the specific implicit intent, e.g. dining, travel, etc. Next ID = 13",
      "id": "NlpSemanticParsingLocalImplicitLocalCategory",
      "properties": {
        "airport": {
          "type": "boolean"
        },
        "bank": {
          "type": "boolean"
        },
        "chargingStation": {
          "type": "boolean"
        },
        "gasStation": {
          "type": "boolean"
        },
        "gym": {
          "type": "boolean"
        },
        "hairSalon": {
          "type": "boolean"
        },
        "hospital": {
          "type": "boolean"
        },
        "hotel": {
          "type": "boolean"
        },
        "laundromat": {
          "type": "boolean"
        },
        "movieTheater": {
          "type": "boolean"
        },
        "postOffice": {
          "type": "boolean"
        },
        "spa": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalJoiner": {
      "id": "NlpSemanticParsingLocalJoiner",
      "properties": {
        "numBytes": {
          "format": "int32",
          "type": "integer"
        },
        "numBytesForConversion": {
          "format": "int32",
          "type": "integer"
        },
        "startByte": {
          "description": "The raw input span corresponding to this joiner.",
          "format": "int32",
          "type": "integer"
        },
        "startByteForConversion": {
          "description": "Byte data added for conversion between this proto and IntentQuery in LooseParser. Must not be used for downstream triggering.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "The original joiner string from the tokenized query. Particularly important if the type is OTHER.",
          "type": "string"
        },
        "type": {
          "enum": [
            "IN",
            "NEAR",
            "NEAREST",
            "BETWEEN",
            "JUNCTION",
            "UNION",
            "OTHER_JOINER",
            "EMPTY_JOINER"
          ],
          "enumDescriptions": [
            "Includes \"on\", as in \"Subway on Main St.\".",
            "E.g., \"A Starbucks near my location\"",
            "E.g., \"Starbucks closest to my home\"",
            "Includes \"on the way from X to Y\".",
            "E.g., \"El Camino and Shoreline\"",
            "E.g., \"Palo Alto or Menlo Park\"",
            "Catch-all for strange relations",
            "Sometimes there is an implicit joiner that we would like to model. E.g., in [main and 16th Starbucks] we want to have the compound location \"main and 16th\" so there is an empty joiner between \"16th\" and \"Starbucks\". The intention is that when using EMPTY_JOINER at least one of location_1 and location_2 should not be a basic location. In other words, we do not want to create a compound location that spans a sequence of location elements without joiners."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalLocalResultId": {
      "description": "This message holds all info the local assistant team will need to lookup a LocalResult in search.",
      "id": "NlpSemanticParsingLocalLocalResultId",
      "properties": {
        "featureId": {
          "$ref": "GeostoreFeatureIdProto"
        },
        "geocodingAddress": {
          "description": "The full address of the result. This should be a verbose address string that geocodes reliably.",
          "type": "string"
        },
        "kgMid": {
          "description": "The knowledge graph reference of the result.",
          "type": "string"
        },
        "position": {
          "$ref": "GeostorePointProto",
          "description": "The position of the result."
        },
        "rect": {
          "$ref": "GeostoreRectProto",
          "description": "The position of the result, if it can't be expressed as a pointproto."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalLocation": {
      "description": "There are a few types of locations: - Basic locations are sequences of location elements which can be either actual locations or modifiers. E.g., \"Mountain View CA 94040\" may be the sequence \"Mountain View\" (an actual location), \"CA\" (an actual location, and \"94040\" (a numeric modifier). - Compound locations: these are two locations combined by a joiner. E.g., \"Target in Mountain View CA 94040\" has the joiner \"in\" and two basic locations (\"Target\", and \"Mountain View CA 94040\"). Note that the definition is recursive, e.g., \"Parking garage near Target in Mountain View\". - Vicinity location: indicates an area around a certain location. The area can be defined by time or space. E.g., \"within 1 hour of Palo Alto\", \"10 blocks from Union Square\", \"a few miles from here\". Next ID: 14 LINT.IfChange()",
      "id": "NlpSemanticParsingLocalLocation",
      "properties": {
        "basicLocation": {
          "$ref": "NlpSemanticParsingLocalBasicLocation",
          "description": "Exactly one of the location types should be populated."
        },
        "compoundLocation": {
          "$ref": "NlpSemanticParsingLocalCompoundLocation"
        },
        "contactLocation": {
          "$ref": "NlpSemanticParsingLocalContactLocation",
          "description": "DEPRECATED. Instead, use LocationElement.contact_location."
        },
        "isMerged": {
          "description": "True if the location is merged, for example by CombineLocationsFn.",
          "type": "boolean"
        },
        "locationConstraint": {
          "description": "The constraint includes various constraints on the location such as amenities, price range, ratings, or attributes such as new, cheap, etc. These constraints are a part of the location but are not modeled as location elements and are not included in the location text. The (debatable) motivation is that they do not stand on their own and are not an intrinsic part of the location. Note on texts and spans. For a location such as \"kid friendly hotels with an indoor pool\" we expect to get a basic location with a single location element and two constraints: - For the location element: - Both text and span match \"hotels\" - For the first constraint: - Both text and span match \"kid friendly\" - For the second constraint: - Both text and span match \"indoor pool\" - For the full location: - text: \"hotels\" - span covers \"kid friendly hotels with an indoor pool\"",
          "items": {
            "$ref": "NlpSemanticParsingLocalLocationConstraint"
          },
          "type": "array"
        },
        "numBytes": {
          "format": "int32",
          "type": "integer"
        },
        "resolvedLocalResult": {
          "$ref": "QualityDialogManagerLocalResult",
          "description": "A LocalResult corresponding to the location the user specified, populated by local dialog (generally following a search). This field will only be set if the location is unambiguous, possibly following a series of disambiguation turns of dialog."
        },
        "startByte": {
          "description": "The span, in the raw input, which corresponds to this location, expressed as a byte offset and byte size. This allows the extraction of the location string as it appears in the raw text.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "A string representation of the location. Depending on the annotators and the location itself the string may represent the raw query, the pre-processed query, or something else. As a non-trivial example, for [target address mountain view] we will generate the text \"target mountain view\" without \"address\". We make a best-effort to come up with a good string, but make no formal guarantees. You should never present this text directly to outside users.",
          "type": "string"
        },
        "userSpecifiedLocation": {
          "$ref": "KnowledgeVerticalsWeatherProtoUserSpecifiedLocation",
          "description": "A location info including featureId and lat/lng that uniquely identifies the location the user specified."
        },
        "vicinityLocation": {
          "$ref": "NlpSemanticParsingLocalVicinityLocation"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalLocationConstraint": {
      "description": "All the possible location constraints. This message is associated with a location and can be nested accordingly. E.g., for a compound location the constraint may be associated with the entire location or with either of the two internal locations (loc_1 and loc_2). There is an implicit AND relation between the different constraints. Next ID: 25.",
      "id": "NlpSemanticParsingLocalLocationConstraint",
      "properties": {
        "amenities": {
          "$ref": "NlpSemanticParsingLocalAmenities",
          "description": "LINT.IfChange"
        },
        "chainMember": {
          "$ref": "NlpSemanticParsingLocalChainMemberConstraint"
        },
        "cuisine": {
          "$ref": "NlpSemanticParsingLocalCuisineConstraint"
        },
        "evcsConnectorConstraint": {
          "$ref": "NlpSemanticParsingLocalEvChargingStationConnectorConstraint",
          "description": "Used for populating ElectricVehicleConnectorRefinement from QBF go/evcs-qbf-connector"
        },
        "evcsSpeedConstraint": {
          "$ref": "NlpSemanticParsingLocalEvChargingStationSpeedConstraint"
        },
        "gcidConstraint": {
          "$ref": "NlpSemanticParsingLocalGcidConstraint",
          "description": "Used for GCID filter. Unlike other grammar, for now this is populated in Superroot (currently based on QBLD classification, and an allowlist of GCID)."
        },
        "healthInsurance": {
          "$ref": "NlpSemanticParsingLocalHealthInsuranceConstraint",
          "description": "Used for health insurance filter populator."
        },
        "hyperReliableData": {
          "$ref": "NlpSemanticParsingLocalHyperReliableData",
          "description": "Some constraints are also hyper-reliable, such as [brunch] and [coffee]."
        },
        "menuItem": {
          "$ref": "NlpSemanticParsingLocalMenuItem"
        },
        "new": {
          "type": "boolean"
        },
        "numBytes": {
          "format": "int32",
          "type": "integer"
        },
        "open24Hours": {
          "type": "boolean"
        },
        "price": {
          "$ref": "NlpSemanticParsingLocalPriceConstraint"
        },
        "quality": {
          "$ref": "NlpSemanticParsingLocalQualityConstraint"
        },
        "rooms": {
          "$ref": "NlpSemanticParsingLocalRoomConstraint"
        },
        "scalableAttribute": {
          "$ref": "NlpSemanticParsingLocalScalableAttribute"
        },
        "service": {
          "$ref": "NlpSemanticParsingLocalServiceConstraint"
        },
        "startByte": {
          "description": "The span, in the raw input, which corresponds to this constraint, expressed as a byte offset and byte size.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "type": "string"
        },
        "ungroundedConstraint": {
          "description": "Experimental, may change.",
          "type": "boolean"
        },
        "unspecified": {
          "description": "Used to remove all constraints, e.g. [forget all the filters]",
          "type": "boolean"
        },
        "vaccineType": {
          "description": "Used for vaccine refinement: go/covid-vaccine-refinement.",
          "enum": [
            "UNKNOWN_VACCINE_TYPE",
            "COVAXIN",
            "JOHNSON_AND_JOHNSON",
            "MODERNA",
            "OXFORD_ASTRAZENECA",
            "PFIZER",
            "SPUTNIK",
            "ZYCOV_D",
            "COVISHIELD",
            "CORBEVAX",
            "PFIZER_BOOSTER",
            "MODERNA_BOOSTER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "visitHistory": {
          "$ref": "NlpSemanticParsingLocalVisitHistoryConstraint"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalLocationElement": {
      "description": "Next ID: 26 LINT.IfChange",
      "id": "NlpSemanticParsingLocalLocationElement",
      "properties": {
        "aliasIcon": {
          "description": "For elements with a NICKNAME alias location, this field will hold all matching alias icons, which are used in search to resolve the location.",
          "items": {
            "$ref": "PersonalizationMapsAliasIcon"
          },
          "type": "array"
        },
        "aliasLocation": {
          "description": "The following fields (alias_location, qref_location, and saft_location) should have at most one non-empty value between them.",
          "enum": [
            "UNDEFINED",
            "HERE",
            "HOME",
            "WORK",
            "NICKNAME",
            "NEXT_DESTINATION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "businessType": {
          "$ref": "NlpSemanticParsingLocalBusinessType",
          "description": "Set only when type is BUSINESS_NAME or BUSINESS_CATEGORY."
        },
        "contactLocation": {
          "$ref": "NlpSemanticParsingLocalContactLocation"
        },
        "dialogReferents": {
          "description": "This will hold semantics from the dialog_referents subgrammar with offsets and indices relating to a list of results shown to the user. This field is repeated while in the future we could support multiple item list selection. i.e. [the starbucks] where multiple entries in the results will be indicated here",
          "items": {
            "$ref": "NlpSemanticParsingModelsDialogReferentsDialogReferents"
          },
          "type": "array"
        },
        "directionalModifier": {
          "description": "Set only when type is DIRECTIONAL_MODIFIER.",
          "enum": [
            "NORTH",
            "SOUTH",
            "EAST",
            "WEST",
            "NORTHEAST",
            "SOUTHEAST",
            "NORTHWEST",
            "SOUTHWEST",
            "DOWNTOWN",
            "INBOUND",
            "UPTOWN",
            "OUTBOUND",
            "CLOCKWISE",
            "COUNTERCLOCKWISE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "genericLocation": {
          "description": "DEPRECATED. See basic_location.element.type == LOCATION_REFERENT to determine this instead. Populated by a type VISITED local action, this field is used to indicate a location element is a general-case $PT_visited_location string.",
          "type": "boolean"
        },
        "hotelType": {
          "$ref": "NlpSemanticParsingLocalHotelType",
          "description": "Set only when business_type is hotel."
        },
        "hyperReliableData": {
          "$ref": "NlpSemanticParsingLocalHyperReliableData"
        },
        "implicitLocalCategory": {
          "$ref": "NlpSemanticParsingLocalImplicitLocalCategory"
        },
        "localResultId": {
          "$ref": "NlpSemanticParsingLocalLocalResultId",
          "description": "A field used to store the ID of a specific location entity, especially one not extracted via QRef. For example, - a location selected by the users via a dialog follow-up query like [the second one]. Will only be populated in the LocalSemanticsServlet, not in the grammar. - a location resolved based on a full search, e.g., following the geocoding step for a directions query. This field is also used by NoramlizeLocationForFingerprinting as the canonical place to store FeatureIds."
        },
        "numBytes": {
          "format": "int32",
          "type": "integer"
        },
        "number": {
          "description": "Represents zip codes, street numbers, etc. that were detected directly by the grammar (and not, e.g., by QRef). DEPRECATED. We ran into problems with zip codes having leading zeroes. Now we store numbers only in the text field.",
          "format": "int32",
          "type": "integer"
        },
        "personalReferenceLocation": {
          "$ref": "NlpSemanticParsingPersonalReferenceAnnotation",
          "description": "A collection of QRefAnnotations repesenting Reference and Resolution data for Personal References. See go/copley-local and go/copley-annotator."
        },
        "qrefLocation": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "saftLocation": {
          "$ref": "NlpSemanticParsingSaftMentionAnnotation"
        },
        "source": {
          "enum": [
            "GRAMMAR",
            "QREF",
            "SAFT",
            "GENIE",
            "DIALOG",
            "NIMBLE",
            "ATTENTIONAL_ENTITY",
            "LES",
            "UNGROUNDED"
          ],
          "enumDescriptions": [
            "A location element defined in the grammar itself.",
            "A location element from the QRef annotator.",
            "A location element from the Saft annotator.",
            "A location element from the Genie annotator.",
            "A location element from the DialogField annotator.",
            "A location element from the Nimble annotator.",
            "A location element from attentional entities.",
            "Important note: LES is being DEPRECATED as of May 29th 2014. It should not be used, and will not be returned from production after June 15th. A location element from the LES annotator.",
            "A location element produced by the ungrounded_location model. This is a machine learned model which produces text spans corresponding to locations; unlike QRef or SAFT, it does not give any further semantics (such as mid, collection, type) beyond the text span. See nlp/semantic_parsing/models/ungrounded_location for details."
          ],
          "type": "string"
        },
        "startByte": {
          "description": "The byte span, in the raw query, which corresponds to this location element.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "A string representation of the location element. Typical, this field will be populated by the MakeLocationElementFn semantic function with the substring of the raw_query defined by start_byte and num_bytes. However, the field can also be populated explicitly in the grammar, in which case MakeLocationElementFn leaves it alone.",
          "type": "string"
        },
        "transitLineNumber": {
          "description": "Train number associated with /collection/geo/transit_line. Populated when user requests specific instance of a transit line. For example, long distance trains in India have two numbers for each train, one for up direction and other for down. And user use these numbers in queries along with name to specify the specific trip of the train. More details in go/number-transit-line-queries.",
          "type": "string"
        },
        "type": {
          "enum": [
            "PLACE_NAME",
            "BUSINESS_NAME",
            "BUSINESS_CATEGORY",
            "ALIAS",
            "GEO_MODIFIER",
            "DIRECTIONAL_MODIFIER",
            "NUMBER_MODIFIER",
            "DETERMINER",
            "ZIP_CODE",
            "PERSONAL_MODIFIER",
            "TEXT",
            "PUNCTUATION",
            "STREET_NAME",
            "HIGHWAY_NAME",
            "OLC",
            "CONTACT",
            "CONTACT_AND_ALIAS",
            "PERSONAL_PLACE_NAME",
            "PERSONAL_REFERENCE",
            "UNGROUNDED_LOCATION",
            "LATITUDE_LONGITUDE",
            "DIALOG_REFERENT",
            "LOCATION_REFERENT"
          ],
          "enumDescriptions": [
            "E.g., \"Manhattan\", \"Ohio\"",
            "E.g., \"Target\", \"NYU\", \"Gary Danko\"",
            "E.g., \"gas station\", \"Chinese restaurant\"",
            "Special locations recognized in the grammar itself: \"here\", \"home\", \"work\".",
            "Geographical modifier such as \"west\", \"southeastern\", \"downtown\", \"metro\". E.g., for \"west Palo Alto\" we create a location element \"west\" (followed by another location element \"Palo Alto\").",
            "Route directions such as \"north\", \"northbound\". E.g., for \"north I-96\" we create a location element \"north\" (plus another location element \"I-96\").",
            "Numbers that follow or precede a location. E.g., \"90210\" from \"beverly hills 90210\", \"10\" from \"10 downing street\".",
            "Determiners like \"a\", \"an\", and \"the\". E.g., \"a mcdonald's\", \"the grand canyon\".",
            "An explicit zip code, e.g., \"zip code 77079\"",
            "Modifier that often goes with a business category or an alias, e.g., \"our hotel\", \"my barber\", \"my current location\".",
            "Used only for locations generated from $Text.",
            "",
            "Note(12/08/2014): STREET_NAME used to be covered by PLACE_NAME. We are planning to start generating this type in January 2015. E.g., \"Oak St.\", \"17th\"",
            "HIGHWAY_NAME used to be covered partially by STREET_NAME. As of January '17 we want to separate locations like \"Highway 70\" or \"70\" for traffic intent.",
            "",
            "Indicates a contact's location. It could be either a contact name (e.g. \"Larry Page\") or a specific location for contact (e.g. \"Larry's home\").",
            "A location element that is both a contact and an alias location.",
            "Personal places (e.g., \"our hotel\", \"my parking spot\") which are annotated with a personal collection by QRef, indicating they refer to a specific location from a user's personal data. Part of the go/copley effort.",
            "References to personal places (e.g., \"our hotel\", \"my parking spot\") which are annotated with a personal collection by QRef. They may or may not contain resolutions to/ locations from a user's personal data. Part of the go/copley effort.",
            "Location that comes from the ungrounded_location model. See comment for the UNGROUNDED LocationElementSource above.",
            "Location that comes from a latitude, longitude pair, e.g. (40.7415 N, 74.0034 W)",
            "Phrase that refers generally to results or items. These element types are intended to be more generic than those below and will be semantically derived from a simple set of rules involving mostly preterminals. Examples include, but are not limited to: \"one,\" \"item,\" \"result.\"",
            "Phrase that refers to generic places. These element types are intended to be more generic than those above and will be semantically derived from a simple set of rules involving mostly preterminals. Examples include, but are not limited to: \"places,\" \"spots,\" \"locations.\""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalMenuItem": {
      "description": "Specifies intent that corresponds to a menu item which is used as a location constraint, e.g. [restaurants that serve thai curry] or as a standalone categorical element, e.g. [thai curry].",
      "id": "NlpSemanticParsingLocalMenuItem",
      "properties": {
        "menuItemId": {
          "description": "This ID corresponds to the name of the menu item in the query. For example [restaurants that serve thai curry] has menu_item_id = \"thai curry\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalPriceConstraint": {
      "id": "NlpSemanticParsingLocalPriceConstraint",
      "properties": {
        "cheap": {
          "type": "boolean"
        },
        "currencyCode": {
          "description": "The currency codes are expected to be string from the list in i18n/identifiers/currencycode.*",
          "type": "string"
        },
        "expensive": {
          "type": "boolean"
        },
        "maxPrice": {
          "format": "double",
          "type": "number"
        },
        "minPrice": {
          "format": "double",
          "type": "number"
        },
        "moderatelyPriced": {
          "type": "boolean"
        },
        "unspecified": {
          "description": "The user mentioned something about price, but didn't mention a specific constraint. This is used to indicate an intent to remove all price constraints, in queries like [forget the price].",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalQualityConstraint": {
      "description": "Quality constraints about the establishment. In the future we can add to this message Zagat ratings, user reviews, etc. Next ID: 6.",
      "id": "NlpSemanticParsingLocalQualityConstraint",
      "properties": {
        "best": {
          "type": "boolean"
        },
        "highlyRated": {
          "type": "boolean"
        },
        "starType": {
          "enum": [
            "HOTEL_CLASS",
            "USER_RATING"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "stars": {
          "$ref": "NlpSemanticParsingLocalStarRatings"
        },
        "unspecified": {
          "description": "The user mentioned something about quality, but didn't mention a specific constraint. This is used to indicate an intent to remove all quality constraints, in queries like [forget the rating].",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalRoomConstraint": {
      "description": "Constraints for the occupancy of a hotel or vacation rental.",
      "id": "NlpSemanticParsingLocalRoomConstraint",
      "properties": {
        "minNumBathrooms": {
          "description": "It is possible to have fractional bathrooms.",
          "format": "double",
          "type": "number"
        },
        "minNumBedrooms": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalScalableAttribute": {
      "description": "Specifies intent that corresponds to a scalable attribute. This may be used as a location constraint, e.g. [restaurants with outdoor seating] or as a standalone categorical element, e.g. [happy hour] or [happy hour ny]. See go/scalable-attributes for details about scalable attributes. NOTE(oksana): LocalCategoryReliable grammar over-rides a few scalable attribute queries to include hyper_reliable location element. If you change this, please make sure that LocalCategoryReliable grammar reflects this too. LINT.IfChange This ID corresponds to the id field in //geostore/attributes/proto/config.proto:AttributeConfigProto This field holds the human readable ID for the KG topic that represents the attribute. Example: \"/geo/type/establishment_poi/serves_breakfast\"",
      "id": "NlpSemanticParsingLocalScalableAttribute",
      "properties": {
        "attributeId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalServiceConstraint": {
      "id": "NlpSemanticParsingLocalServiceConstraint",
      "properties": {
        "serviceType": {
          "enum": [
            "SERVICE_TYPE_UNSPECIFIED",
            "ACCESS",
            "BRUNCH",
            "DELIVERY",
            "DRIVE_THROUGH",
            "KITCHEN",
            "HAPPY_HOUR",
            "PICKUP",
            "SENIOR_ONLY",
            "TAKEOUT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalStarRatings": {
      "description": "Star ratings constraints, mostly relevant for hotels. There is an implicit OR relation between these. E.g., for \"three star or four star hotel\" both three and four would be set to true. Next Available ID: 13.",
      "id": "NlpSemanticParsingLocalStarRatings",
      "properties": {
        "five": {
          "type": "boolean"
        },
        "four": {
          "type": "boolean"
        },
        "fourAndAHalf": {
          "type": "boolean"
        },
        "one": {
          "type": "boolean"
        },
        "oneAndAHalf": {
          "type": "boolean"
        },
        "orFewer": {
          "type": "boolean"
        },
        "orMore": {
          "description": "If this field is set, exactly one of the star classes above should be set, and the interpretation should be that at least that many stars should be present.",
          "type": "boolean"
        },
        "three": {
          "type": "boolean"
        },
        "threeAndAHalf": {
          "type": "boolean"
        },
        "two": {
          "type": "boolean"
        },
        "twoAndAHalf": {
          "type": "boolean"
        },
        "unspecified": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalVicinityLocation": {
      "id": "NlpSemanticParsingLocalVicinityLocation",
      "properties": {
        "base": {
          "$ref": "NlpSemanticParsingLocalLocation",
          "description": "If the base is missing then clients should assume that it implicitly means \"here\". E.g., \"within five miles\" really means \"within five miles from here\""
        },
        "connector": {
          "description": "The text between the extent and the base, e.g., for \"50 miles from here\" the connector is \"from\".",
          "type": "string"
        },
        "extent": {
          "$ref": "NlpSemanticParsingLocalExtent"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingLocalVisitHistoryConstraint": {
      "description": "Constraint for visited, as in if a location has been visited before.",
      "id": "NlpSemanticParsingLocalVisitHistoryConstraint",
      "properties": {
        "visitedType": {
          "enum": [
            "UNKNOWN_VISITED_TYPE",
            "VISITED",
            "NOT_VISITED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsCommunicationPhoneType": {
      "description": "The type of contact (mobile, home, work, etc). NOTE: Unfortunately the name of this message is a misnomer. Contact type would be a better name.",
      "id": "NlpSemanticParsingModelsCommunicationPhoneType",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "description": "Whether the annotation is from $Text.",
          "type": "boolean"
        },
        "normalizedText": {
          "description": "Normalized (canonicalized) text, e.g. \"mobile\".",
          "type": "string"
        },
        "originalText": {
          "description": "Original text in query, e.g. \"cell\".",
          "type": "string"
        },
        "rawText": {
          "description": "DEPRECATED. Used original_text instead.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsCommunicationRecipient": {
      "description": "It can be a contact (person name), a business name, an email address or a phone number. NOTE: Unfortunately the name of this message is not generic enough. Contact would be a better name.",
      "id": "NlpSemanticParsingModelsCommunicationRecipient",
      "properties": {
        "calendarEvent": {
          "$ref": "AssistantApiCoreTypesCalendarEvent"
        },
        "calendarEventWrapper": {
          "$ref": "AssistantApiCoreTypesCalendarEventWrapper"
        },
        "contact": {
          "$ref": "NlpSemanticParsingModelsPersonPerson",
          "description": "Contact details (e.g. gaia_id, phone, etc). Replaces 'focus_name' above."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "type": "boolean"
        },
        "nameAnnotationSource": {
          "description": "Deprecated in favor of recipient.contact.name_annotation_source.",
          "enum": [
            "UNKNOWN_NAME_ANNOTATOR",
            "FOCUS_NAME",
            "DEVICE_CONTACT",
            "SAFT_PERSON",
            "NAME_DETECTION_PERSON",
            "NAME_PERSON",
            "MANUAL_RULES",
            "SAFT_POS",
            "TEXT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "SAFT part-of-speech, like a noun (call skipper) or an adjective (call beautiful).",
            ""
          ],
          "type": "string"
        },
        "numberAnnotationSource": {
          "enum": [
            "UNKNOWN_NUMBER_ANNOTATOR",
            "PHONE_NUMBER_ANNOTATOR",
            "NUMBER_ANNOTATOR",
            "MANUAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "rawText": {
          "description": "NOTE: for CONTACT recipient, this is *NOT* the real raw text of the recipient span of historical reasons. Major differences includes: - stripping possessive suffix, e.g. \"John's\" -> \"John\" - stripping prefix/suffix/title, e.g. \"Mr. John\" -> \"John\" - uninflect name for languages like Russian, e.g. \"\u0410\u043d\u0434\u0440\u0435\u044e\" -> \"\u0410\u043d\u0434\u0440\u0435\u0439\" Currently this is the same as .contact.name, and is used as the string shown to the user on clientside UI. If you're looking for real raw text, use .contact.raw_text",
          "type": "string"
        },
        "recipientType": {
          "enum": [
            "CONTACT",
            "BUSINESS",
            "EMAIL_ADDRESS",
            "PHONE_NUMBER",
            "AMBIGUOUS",
            "CALENDAR_EVENT",
            "CALENDAR_EVENT_WRAPPER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "relationship": {
          "$ref": "NlpSemanticParsingModelsCommunicationRelationshipArgument",
          "description": "A reference to a person by relationship name. eg. my father."
        },
        "sensitiveNumBytes": {
          "format": "int32",
          "type": "integer"
        },
        "sensitiveStartByte": {
          "description": "The beginning and end of the recipient name that should be removed before logging.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsCommunicationRelationshipArgument": {
      "description": "A relationship contact.",
      "id": "NlpSemanticParsingModelsCommunicationRelationshipArgument",
      "properties": {
        "alias": {
          "description": "The alias of the relationship in the query, e.g. \"mom\".",
          "type": "string"
        },
        "canonical": {
          "description": "The canonical format of the relationship, e.g. \"Mother\".",
          "type": "string"
        },
        "canonicalLexicalMid": {
          "description": "Mid for an entity that has lexical data (a LexiconEntry). See https://g3doc.corp.google.com/nlp/generation/g3doc/lexical_data.md for for more information about lexical data. This is the canonical mid for this entity (eg. it would be /m/0lbxz for \"mother\" in EN even if user referred to \"mom\").",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsDevice": {
      "description": "The device to perform an action. Both device_type and device_name are optional and they can coexist: [on my phone]: device_type = PHONE [on my nexus 4]: device_name = \"nexus 4\" [on my nexus phone]: device_type = PHONE, device_name = \"nexus\"",
      "id": "NlpSemanticParsingModelsDevice",
      "properties": {
        "deviceName": {
          "$ref": "NlpSemanticParsingModelsDeviceName",
          "description": "The name of the device (Nexus 5, Nexus 10, etc)."
        },
        "deviceType": {
          "description": "The type of the device (phone, tablet, watch, etc).",
          "enum": [
            "UNKNOWN",
            "PHONE",
            "TABLET",
            "WATCH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsDeviceName": {
      "description": "The name of the device (Nexus 5, Nexus 10, etc).",
      "id": "NlpSemanticParsingModelsDeviceName",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsDialogReferentsDialogReferents": {
      "description": "Will be used by dialog_referent subgrammar to emit types annotations from DialogReferentsAnnotator and $DialogReferentOrdinal rules.",
      "id": "NlpSemanticParsingModelsDialogReferentsDialogReferents",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData"
        },
        "field": {
          "$ref": "NlpSemanticParsingModelsDialogReferentsListSelection",
          "description": "The field mentioned in the user's utterance, if any."
        },
        "index": {
          "description": "Used for a grammar mention of an index.",
          "format": "int32",
          "type": "integer"
        },
        "next": {
          "$ref": "NlpSemanticParsingModelsDialogReferentsDialogReferents",
          "description": "Represents a tied referent in a different field of the same label"
        },
        "selection": {
          "description": "The requested value(s) for selection from a list of alternatives.",
          "items": {
            "$ref": "NlpSemanticParsingModelsDialogReferentsListSelection"
          },
          "type": "array"
        },
        "taskMention": {
          "description": "Set when the user's utterance refers to the (an) overall task/goal of the dialog (e.g. \"the meeting starts at 10 am\" mentions the goal, \"meeting\"). The field is repeated in case the user ambiguously identifies a task (two tasks named 'meeting').",
          "items": {
            "$ref": "NlpSemanticParsingModelsDialogReferentsListSelection"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsDialogReferentsListSelection": {
      "description": "Represents the user's selection from a list of alternatives.",
      "id": "NlpSemanticParsingModelsDialogReferentsListSelection",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData"
        },
        "id": {
          "description": "A unique identifier that is the canonical value for the chosen list item. If we are selecting among fields, this is the field_id specified in the corresponding DialogField.",
          "type": "string"
        },
        "looseOffsetRestriction": {
          "description": "If true, semantic function should look at watch actions in the following display entity if the first one is not playable. This is useful for \"Play it\" on entity page.",
          "type": "boolean"
        },
        "offset": {
          "description": "The offset within the list, if know. If the list of values wasn't known (e.g. from the discourse context) then the offset is a zero-based mapping of the ordinal value of the selection (\"first one\" maps to zero; \"last one\" to minus one).",
          "format": "int32",
          "type": "integer"
        },
        "rawText": {
          "description": "When the user selects a list value by name then this is the matched text from the utterance. Note that, if the list of values is known, then the aqua annotator should have mapped it to an offset.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaAlbumTitle": {
      "description": "Example: \"The White Album\"",
      "id": "NlpSemanticParsingModelsMediaAlbumTitle",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "favorite": {
          "description": "If true, indicates the user wants their favorite album. Like [play my favorite album my Eminem]",
          "type": "boolean"
        },
        "first": {
          "description": "If true, indicates the user wants the first album. Like [play adele's first album]",
          "type": "boolean"
        },
        "isFromFastPath": {
          "description": "Is annotated by Nimble for the media Fast Path.",
          "type": "boolean"
        },
        "latest": {
          "description": "If true, indicates the user wants the latest album. Like, [play adele's latest album]",
          "type": "boolean"
        },
        "playMore": {
          "description": "More from this album.",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"The White Album.\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaAudio": {
      "description": "Represents a music recording (usually a song). Each populated field can be thought of as additional constraint about the song's identity. For instance, if no fields are set, then this represents \"some song.\" If only the music_artist is set, then it represents \"some song by the specified music_artist.\" Inspired (but not strictly adhered to) http://schema.org/MusicRecording Next ID: 22",
      "id": "NlpSemanticParsingModelsMediaAudio",
      "properties": {
        "album": {
          "$ref": "NlpSemanticParsingModelsMediaAlbumTitle"
        },
        "artist": {
          "$ref": "NlpSemanticParsingModelsMediaMusicArtist"
        },
        "book": {
          "$ref": "NlpSemanticParsingModelsMediaBook",
          "description": "Like an audio book. \"Listen to (moby dick) audiobook\""
        },
        "dateTime": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "A date time constraint for audio entity, for example, \"jazz station 1980\"."
        },
        "episodeConstraint": {
          "description": "Constraining the query to some detail about the episode. Example: \"listen to episode (13) of this american life with (mike birbiglia)\" would have the 2 constraints in parens.",
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaEpisodeConstraint"
          },
          "type": "array"
        },
        "game": {
          "$ref": "NlpSemanticParsingModelsMediaGame",
          "description": "Soundtrack or theme song (see score_type param that indicates whether the user refers to a soundtrack or a theme song) of the game. \"Play soundtrack from (Deus Ex Human Revolution)\"."
        },
        "genericMusic": {
          "$ref": "NlpSemanticParsingModelsMediaGenericMusic"
        },
        "genre": {
          "$ref": "NlpSemanticParsingModelsMediaMusicGenre"
        },
        "movie": {
          "$ref": "NlpSemanticParsingModelsMediaMovie",
          "description": "Soundtrack or theme song (see score_type param that indicates whether the user refers to a soundtrack or a theme song) of the movie. E.g. \"Play (Let It Go) from (Disney's Frozen)\""
        },
        "newsTopic": {
          "$ref": "NlpSemanticParsingModelsMediaNewsTopic",
          "description": "News topic. \"Listen to news about (Ukraine)\""
        },
        "noExplicitAudio": {
          "description": "True when the query does not contains an explict audio name. E.g. When user says \"play\" or \"listen to\".",
          "type": "boolean"
        },
        "playlist": {
          "$ref": "NlpSemanticParsingModelsMediaMusicPlaylist"
        },
        "podcast": {
          "$ref": "NlpSemanticParsingModelsMediaPodcast",
          "description": "Podcast feeds. \"Listen to (This American Life)\""
        },
        "radio": {
          "$ref": "NlpSemanticParsingModelsMediaRadio"
        },
        "radioNetwork": {
          "$ref": "NlpSemanticParsingModelsMediaRadioNetwork",
          "description": "E.g. \"play NPR radio\", \"Play BBC radio\"."
        },
        "rawText": {
          "description": "The query for backends to use in search. e.g. for an user query of \"play kids song video on tv\" from assistant, this field would be \"kids song\". Note: there is no guarantee this field is populated; when it is not, backends should fall back to \"raw_text\" fields in song, artist, album etc.",
          "type": "string"
        },
        "scoreType": {
          "description": "If any of movie, game or tv show fields is populated this field indicates specific score type requested in the query. E.g. for [play soundtrack from frozen] this field is SOUNDTRACK, for [play frozen song] this field is THEME_SONG.",
          "enum": [
            "UNKNOWN",
            "SOUNDTRACK",
            "THEME_SONG"
          ],
          "enumDescriptions": [
            "",
            "The query indicates that the user is asking for a soundtrack (full album) from movie, game or tv show. E.g. [play soundtrack from frozen].",
            "The query indicates that the user is asking for a theme song from movie, game or tv show. E.g. [play godfather theme song]."
          ],
          "type": "string"
        },
        "seasonConstraint": {
          "$ref": "NlpSemanticParsingModelsMediaSeasonConstraint",
          "description": "Constraining the query to some detail about the season. Example: \"listen to season 2 of serial\""
        },
        "song": {
          "$ref": "NlpSemanticParsingModelsMediaSong"
        },
        "tag": {
          "description": "Optional tags associated with how the media entity should be played. For example, this can be set to SEED_RADIO to signify that the user wants to play a radio station seeded by the entity.",
          "items": {
            "enum": [
              "UNKNOWN_TAG",
              "SEED_RADIO",
              "VIDEO_TAG",
              "TOP_TRACKS",
              "RECORDED",
              "LIVE",
              "FOLLOWED_BY_SEED_RADIO"
            ],
            "enumDescriptions": [
              "",
              "Deeplink is for seed radio of the media content.",
              "Deeplink is for video version of the media content. NOTE: this tag is meaningful only in the context of media that has video video and other versions, e.g. a song can be played audio-only or with video. This tag is not meaningful for video content, e.g. movies, and thus should NOT be used for video-only media content.",
              "Deeplink is for top tracks for music artist.",
              "Deeplink is for recorded (DVR) content.",
              "Deeplink is for live content.",
              "Deeplink is for music followed by radio mix."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "tvShow": {
          "$ref": "NlpSemanticParsingModelsMediaTVShow",
          "description": "Soundtrack or theme song (see score_type param that indicates whether the user refers to a soundtrack or a theme song) of the tv show. E.g. \"Play soundtrack from (Friends)\"."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaAudiobookInfo": {
      "description": "Metadata for an audiobook.",
      "id": "NlpSemanticParsingModelsMediaAudiobookInfo",
      "properties": {
        "audiobookMid": {
          "description": "The MID of the audiobook entity (/book/book_edition).",
          "type": "string"
        },
        "authors": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "bookMid": {
          "description": "The MID of the book entity (/book/book) which this audiobook is associated with.",
          "type": "string"
        },
        "narrators": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaBook": {
      "description": "Example: \"East of Eden\"",
      "id": "NlpSemanticParsingModelsMediaBook",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "latest": {
          "description": "If true, indicates the user wants the latest book. Like, [play Dan Brown's latest book]",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"East of Eden\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaCastDeviceAnnotation": {
      "description": "Media device. Like, Chromecast, TV or Chirp. When emitted from the cast_device domain, you should expect it to be one of 3 different forms: 1) Personal Device: The annotation comes from a device we found in the user's home. device_id and name should be set, cast_device_type is set if device type is mentioned in query. e.g. \"Dima's Pineapple Chirp\" device_id: FOOBAR name: \"Dima's Pineapple\" cast_device_type: CHIRP 2) Common Device Name: The annotation comes from a model of the common names of user's device. name and cast_device_type should be set but device_id will not be. cast_device_type can be UNKNOWN. e.g. \"John's Living Room\" name: \"John's Living Room\" cast_device_type: UNKNOWN 3) Device Type: The annotation comes from a model of common cast device types. Only cast_device_type will be set. e.g. \"TV\" or \"chromecast\" cast_device_type: CHROMECAST Next ID: 9",
      "id": "NlpSemanticParsingModelsMediaCastDeviceAnnotation",
      "properties": {
        "castDeviceSource": {
          "enum": [
            "COMMON_DEVICE_NAME",
            "PERSONAL_DEVICE",
            "DEVICE_TYPE"
          ],
          "enumDescriptions": [
            "Device comes from common's name of user's device.",
            "Device comes from user's data.",
            "Device comes from device types."
          ],
          "type": "string"
        },
        "castDeviceType": {
          "description": "This field is populated when the user says [play X on $cast_device] and we know the type of $cast_device but cannot identify the exact device.",
          "enum": [
            "UNKNOWN",
            "CHROMECAST",
            "AUDIOCAST",
            "CHIRP",
            "TV",
            "SPEAKER",
            "CAR",
            "ORIGINATING_DEVICE",
            "SMART_DISPLAY"
          ],
          "enumDescriptions": [
            "",
            "E.g., chromecast.",
            "E.g., audiocast.",
            "E.g., chirp, Google Home.",
            "E.g., TV.",
            "E.g., speaker.",
            "E.g., car. /////////////////////////////// NOTE: DO NOT USE THIS FIELD // ///////////////////////////////",
            "E.g., \"here\", \"this device\" or \"locally\"",
            "E.g., Google Home Hub, Smart Display."
          ],
          "type": "string"
        },
        "creationTimestampMs": {
          "description": "The timestamp that the device is linked with the user in milliseconds. This is inherited from the corresponding assistant DeviceSettings as is.",
          "format": "int64",
          "type": "string"
        },
        "deviceId": {
          "description": "DEPRECATED: Please use device_identifier instead.",
          "type": "string"
        },
        "deviceIdentifier": {
          "$ref": "AssistantApiCoreTypesDeviceId",
          "description": "The identification of the device. This field is populated when the user says [play X on $device_name] and $device_name matches one of the devices linked to user's account. } oneof Media Device"
        },
        "name": {
          "type": "string"
        },
        "quantification": {
          "$ref": "NlpSemanticParsingModelsMediaQuantification",
          "description": "This field is populated when the user metioned quantification in the query. E.g., \"2\" or \"all\"."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaCost": {
      "description": "Represents a localized price. Next ID: 3",
      "id": "NlpSemanticParsingModelsMediaCost",
      "properties": {
        "currencyCode": {
          "description": "Contains the standard code for the given type of currency. The value must represent a valid i18n_identifiers::CurrencyCode.",
          "type": "string"
        },
        "price": {
          "description": "Contains the price in a particular currency.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaDeeplinkInfo": {
      "description": "Provider deeplink and associated metadata, in particular restrictions on platform and user's subscription. Next ID: 18",
      "id": "NlpSemanticParsingModelsMediaDeeplinkInfo",
      "properties": {
        "actionType": {
          "description": "The type of the deeplink. Sometimes the deeplink is not only used for playing media, but also used for other actions. For example, the deeplink could be for playing a movie trailer from YouTube or recording a movie from YouTube TV.",
          "enum": [
            "UNSPECIFIED",
            "PLAY",
            "PLAY_TRAILER",
            "RECORD"
          ],
          "enumDescriptions": [
            "",
            "The deeplink is used to play a media. This should be the default in most cases.",
            "The deeplink is used to play a trailer.",
            "The deeplink is used to record a media."
          ],
          "type": "string"
        },
        "blacklistedCountry": {
          "description": "The upper-case, III country code, e.g., \"US\", in which the deeplink cannot play. For possible values, see: google3/i18n/identifiers/regioncode.h google3/java/com/google/i18n/identifiers/RegionCode.java For details on converting to and from ISO country codes, see http://iii-howto#GettingCanonRegionCodes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "country": {
          "description": "The upper-case, III country code, e.g., \"US\", in which the deeplink can play. If unset or has \"earth\" (b/72566951), means the deeplink can be used world-wide except in |blacklisted_country| list. For possible values, see: google3/i18n/identifiers/regioncode.h google3/java/com/google/i18n/identifiers/RegionCode.java For details on converting to and from ISO country codes, see http://iii-howto#GettingCanonRegionCodes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "deeplink": {
          "description": "Deeplink to the media. This deeplink is meant to be send to the provider app on available platforms without any modifications. Required.",
          "type": "string"
        },
        "deeplinkForExecution": {
          "description": "Some providers give us an opaque, unstable deeplink to use at execution-time. E.g. see http://go/collab-ranking-nl-uri#heading=h.ndmdfw388tk3 Such a deeplink is not useful for logging, caching, comparing to other candidate deeplinks, etc. So most fulfillment code will want the traditional, stable deeplink that can be interpreted, parsed, cached, etc (found in the \"deeplink\" field, above). But this opaque, unstable deeplink (if non-empty) must be included in the music initiation clientop.",
          "type": "string"
        },
        "incompatibleWithCredentials": {
          "description": "Indicate whether the deeplink is compatible with credentials. If true, CCS will not send the credentials to cast app. Currently this field is only used for voice-follow on cases on smart displays.",
          "type": "boolean"
        },
        "offer": {
          "description": "List of offers that allow user to access the deeplink, that is if the list contains PREMIUM_SUBSCRIPTION and BASIC_SUBSCRIPTION users that have either premium or basic subscription can use the deeplink. If the list is empty it means that there are no subscription restrictions.",
          "items": {
            "enum": [
              "UNKNOWN_SUBSCRIPTION",
              "NO_ACCOUNT_REQUIRED",
              "FREE",
              "BASIC_SUBSCRIPTION",
              "PREMIUM_SUBSCRIPTION",
              "PAY_PER_USE"
            ],
            "enumDescriptions": [
              "",
              "When this value is specified, it indicates that the content is available for free. An account on the providers platform is not required to play the content.",
              "When this value is specified, it indicates that the content is available for free. An account on the providers platform is required to play the content.",
              "When this value is specified, it indicates that the contents is available to all users with a subscription to that provider. This is the case, for example, with Video On Demand (VOD) or for music services such as Google Play Music All Access.",
              "When this value is specified, it indicates that some subscribers may not be to access the content w/o a more expensive tier. This is the case, for example, with Pay TV services like Flix.",
              "When this value is specified, it indicates that there is at least one content offer that requires payment (either to rent or to buy). In this case, there will be paid_offer_detail that defines the specific offer type and cost."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "paidOfferDetail": {
          "description": "This field is only used when \"offer\" includes a PAY_PER_USE. When \"offer\" includes a PAY_PER_USE, paid_offer_detail will contain offers for BUY and RENT offer_types with associated cost info.",
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaPaidOfferDetail"
          },
          "type": "array"
        },
        "platform": {
          "description": "List of platforms that support the deeplink. If the list is empty it means that there are no platform restrictions.",
          "items": {
            "enum": [
              "UNKNOWN_PLATFORM",
              "ANDROID_PLATFORM",
              "CAST_AUDIO",
              "CAST_VIDEO",
              "IOS_PLATFORM",
              "DESKTOP_WEB",
              "MOBILE_WEB",
              "CHROMECAST",
              "ANDROID_TV",
              "KAIOS_PLATFORM",
              "MEDIA_3P_DEVICE"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "Corresponds to /m/0wf0rgl.",
              "",
              "",
              "",
              "Corresponds to /g/11cn_9bsrr.",
              "",
              "",
              "Deprecated. Part of the consolidation process. See go/consolidation-1p-3p for more details. Deeplinks to be used on media 3rd party device, including Smart TV apps, and other media description devices, e.g. Sonos Speaker and Telstra."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "score": {
          "description": "Document scores which are used for ranking action links. Document scores might come from CDOC in Raffia or other indexing systems. For example, for web pages, the score shows how likely the web page (composite doc) which generated this link refers to the given entity or how close a particular entity is with the given composite doc. For the larger design, please see go/ma_dedup. For PACIFIC_COLLAB_RANKING deeplink, the score is the normalized confidence score returned by partner for fulfillment candidate. For pivot candidates, the score is calculated with the index of the alternative results.",
          "format": "double",
          "type": "number"
        },
        "subscriptionPackageName": {
          "description": "Name of subscription packages which are granted access to this deeplink. This is to match exactly the end users authentication system. This is to be used if the offer is BASIC_SUBSCRIPTION or PREMIUM_SUBSCRIPTION. There can be multiple packages -- the user needs only to authenticate with a single package. For more information please see: go/subscription-package",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "tag": {
          "description": "Tags associated with the content played by this deeplink. In the common case, the deeplink is supposed to specify a music entity within the provider's inventory, and the provider app should decide the actual content based on the user's account profile (e.g., for a deeplink to an artist, playing tracks from the artist or similar artists, and for a song, playing the official album recording of the song). But in some cases, the deeplink belong to special content. For example, for an artist a seed radio based on the artist, and a live or karaoke version of a song. We use this field to mark such special content types.",
          "items": {
            "enum": [
              "UNKNOWN_TAG",
              "SEED_RADIO",
              "VIDEO_TAG",
              "TOP_TRACKS",
              "RECORDED",
              "LIVE",
              "FOLLOWED_BY_SEED_RADIO"
            ],
            "enumDescriptions": [
              "",
              "Deeplink is for seed radio of the media content.",
              "Deeplink is for video version of the media content. NOTE: this tag is meaningful only in the context of media that has video video and other versions, e.g. a song can be played audio-only or with video. This tag is not meaningful for video content, e.g. movies, and thus should NOT be used for video-only media content.",
              "Deeplink is for top tracks for music artist.",
              "Deeplink is for recorded (DVR) content.",
              "Deeplink is for live content.",
              "Deeplink is for music followed by radio mix."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "validTimeWindow": {
          "$ref": "NlpSemanticParsingModelsMediaDeeplinkInfoTimeWindow",
          "description": "A time window in which the deeplink is valid. If not set, the deeplink is considered valid."
        },
        "vuiId": {
          "description": "DEPRECATED: This field is ignored by understanding and fulfillment.",
          "type": "string"
        },
        "youtubeDeeplinkInfo": {
          "$ref": "NlpSemanticParsingModelsMediaYouTubeDeeplinkInfo",
          "description": "Additional info specific to YouTube Deeplink (if applicable)."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaDeeplinkInfoTimeWindow": {
      "description": "Represents a time window expressed as a time range.",
      "id": "NlpSemanticParsingModelsMediaDeeplinkInfoTimeWindow",
      "properties": {
        "endTimestamp": {
          "description": "Time in seconds since epoch.",
          "format": "int64",
          "type": "string"
        },
        "startTimestamp": {
          "description": "Time in seconds since epoch.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaDescription": {
      "description": "Example: \"the episode with all of the comedians\". A free-form text description of a media.",
      "id": "NlpSemanticParsingModelsMediaDescription",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaEpisodeConstraint": {
      "description": "Example: \"latest\" would constrain the episode to a certain ordinal.",
      "id": "NlpSemanticParsingModelsMediaEpisodeConstraint",
      "properties": {
        "absoluteIndex": {
          "description": "The absolute index of the episode. 1 is the first element and -1 is the last element in the sequence, -2 is the second-to-last element, and so on. Examples: \"first episode\" => 1 \"3rd episode\" => 3 \"last episode\" => -1",
          "format": "int32",
          "type": "integer"
        },
        "dateTime": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "Date/time of the message. This could be an absolute date/time (e.g. find my message from monday) or a date/time range (e.g. find my message in the past four hours). This constrains *when* the episode came out."
        },
        "description": {
          "$ref": "NlpSemanticParsingModelsMediaDescription",
          "description": "A description of the episode. Example: For the query: [listen to this american life about cars] the description would be \"cars\""
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "rawText": {
          "type": "string"
        },
        "relativeIndex": {
          "description": "The relative index of the episode. Examples: \"previous episode\" => -1 \"current episode\" => 0 \"next episode\" => 1",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaFrequency": {
      "description": "Defines a frequency for a terrestrial radio station. For instance, 99.1 FM, 730 AM, etc. Next ID: 4",
      "id": "NlpSemanticParsingModelsMediaFrequency",
      "properties": {
        "band": {
          "description": "The broadcast band used by the radio station.",
          "enum": [
            "AM",
            "FM",
            "DAB",
            "UNSET"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "description": "Frequency in MHz (for FM) and KHz (for AM).",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaGame": {
      "description": "Example: \"Deus Ex Human Revolution\"",
      "id": "NlpSemanticParsingModelsMediaGame",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"Deus Ex Human Revolution\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaGenericMusic": {
      "description": "Example: \"my library\", \"some music\".",
      "id": "NlpSemanticParsingModelsMediaGenericMusic",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator. Deprecated - generic music deeplinks should be added to the Provider config, not to the grammar."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "newMusic": {
          "description": "New music.",
          "type": "boolean"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"my tracks\"",
          "type": "string"
        },
        "type": {
          "enum": [
            "UNKNOWN",
            "MUSIC",
            "LIBRARY",
            "PROVIDER_SPECIFIC",
            "PLAY_PROVIDER",
            "RESUME_PROVIDER",
            "NEW_MUSIC",
            "STREAM",
            "HISTORY",
            "POSTS",
            "LIKES",
            "TRACKS",
            "ALBUMS",
            "ARTISTS",
            "THUMBPRINT_RADIO",
            "SOMETHING_ELSE",
            "FLOW",
            "SHUFFLE_RADIO",
            "PLAYLISTS",
            "RECENTLY_PLAYED"
          ],
          "enumDescriptions": [
            "LINT.IfChange",
            "E.g., \"some music\", \"music\"",
            "E.g, \"my library\", \"my tracks\".",
            "E.g., \"Thumbprint radio\", \"I'm-Feeling-Lucky radio\".",
            "E.g., \"play $provider\u201d.",
            "E.g., \u201cresume $provider\u201d.",
            "E.g., \u201cplay latest music\u201d.",
            "E.g., \"play stream\"",
            "E.g., \"play my history\"",
            "E.g., \"play my posts\"",
            "E.g., \"play my likes\" Currently it's not used. \"play my likes\" is mapped to \"play my library\".",
            "E.g., \"play my tracks\"",
            "E.g., \"play my albums\"",
            "E.g., \"play my artists\"",
            "E.g., \"play Thumbprint radio\" Pandora specific.",
            "E.g., \"play something else\".",
            "E.g., \"play flow\" Deezer specific.",
            "E.g., \"play shuffle radio\" Pandora specific.",
            "E.g., \"play my playlists\"",
            "E.g., \"show recently played music\" LINT.ThenChange(//depot/google3/java/com/google/chrome/dongle/pints/proto/provider_capability.proto)"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaLatLng": {
      "description": "An object representing a latitude/longitude pair. More info in https://cs.corp.google.com/piper///depot/google3/google/type/latlng.proto",
      "id": "NlpSemanticParsingModelsMediaLatLng",
      "properties": {
        "latitude": {
          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
          "format": "double",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMediaAnnotation": {
      "description": "Annotation for media entities. Next ID: 17",
      "id": "NlpSemanticParsingModelsMediaMediaAnnotation",
      "properties": {
        "artistName": {
          "description": "Name of the artist (if applicable). Used for songs and albums.",
          "type": "string"
        },
        "audiobookInfo": {
          "$ref": "NlpSemanticParsingModelsMediaAudiobookInfo",
          "description": "Additional info specific to an audiobook (if applicable)."
        },
        "contentType": {
          "description": "Type of the media content. This field is not always populated, but only when this annotation is used to represent an individual media item, e.g., when it is the value of an intent argument storing a media object to play.",
          "enum": [
            "MEDIA_CONTENT_TYPE_UNSPECIFIED",
            "MUSIC_TRACK",
            "MUSIC_ARTIST",
            "MUSIC_ALBUM",
            "PUBLIC_PLAYLIST",
            "PERSONAL_PLAYLIST",
            "MUSIC_PERSONALIZED_MIX",
            "MUSIC_GENRE_MIX",
            "MUSIC_SEED_RADIO",
            "MUSIC_STATION",
            "RADIO_STATION",
            "RADIO_NETWORK",
            "PODCAST_SERIES",
            "PODCAST_GENERIC",
            "PODCAST_GENRE",
            "PODCAST_TOPIC",
            "PODCAST_RESUME",
            "PODCAST_EPISODE",
            "VIDEO",
            "MUSIC_VIDEO",
            "VIDEO_RECOMMENDED_PLAYLIST",
            "MUSIC_VIDEO_PERSONALIZED_PLAYLIST",
            "TV_SHOW",
            "TV_SHOW_SEASON",
            "TV_SHOW_EPISODE",
            "MOVIE",
            "YOUTUBE_CHANNEL",
            "TV_CHANNEL",
            "SPORTS_TEAM_GAME",
            "AUDIO_BOOK",
            "AUDIO_STORY",
            "YOUTUBE_VIDEO_PLAYLIST",
            "TV_ARTIST",
            "NEWS",
            "VIDEO_GAME",
            "DIRECTOR",
            "ACTOR",
            "MOVIE_SERIES",
            "APP"
          ],
          "enumDescriptions": [
            "",
            "A song track (e.g. \"Bad Romance\") or radio seeded by the track.",
            "A playlist that consists of songs by specific music artist or band (e.g. \"Lady Gaga\") or radio seeded by artist or band.",
            "A playlist that consists of songs from specific music album (e.g. \"The Fame Monster\") or radio seeded by album.",
            "A playlist publicly available (e.g. \"Today's Top Hits\") or radio seeded by playlist. Playlists always contain finite and defined set of songs. PUBLIC_PLAYLIST is the core concept of providers such as Spotify.",
            "A user-created playlist. (e.g. \"My working out playlist\")",
            "A music mix personalized for user. (e.g. MyMix from YouTube Music or \"I'm feeling lucky\" radio by Google Play Music)",
            "A music mix seeded by genre. (e.g. \"Heavy Metal radio\")",
            "An auto-generated \"radio\" mix, seeded by some music entity or even a query. For example: \"working out radio\". Prefer more specific content types (e.g. MUSIC_GENRE_MIX) if possible, to give finer grained TTS. DEPRECATED: This content type is deprecated, use MUSIC_STATION instead.",
            "Music station (e.g. \"Today's Hip Hop and Pop Hits\"). Stations can have infinite number of songs (at least from user's perspective) and content that dynamically changes. MUSIC_STATION is the core concept of providers such as Google Play Music and Pandora. NOTE: do not confuse with RADIO_STATION, unlike radio stations music stations provide active streaming experience where user can navigate to the next song.",
            "A radio station. This could be terrestrial or an internet radio station. (e.g. 88.5 FM, KQED)",
            "A radio network. (e.g. \"NPR\")",
            "A podcast. (e.g. \"This American Life\")",
            "Used for \"play a podcast\".",
            "Used for \"play a comedy podcast\".",
            "Used for \"play a podcast about meditation\".",
            "Used for \"play my podcast\" query.",
            "Used for playing a specific episode.",
            "A single video. (e.g. \"Star Wars: The Force Awakens trailer\")",
            "Music video or videos. (e.g. \"Gangam style video\")",
            "Video recommendations playlist. (e.g. fetched from Recommended feed on YouTube)",
            "Music video playlist. (e.g. MyMix from YouTube)",
            "A TV show. (e.g. \"John Oliver: Last Week Tonight\")",
            "Season of a TV show (e.g. \"Game of Thrones season 5\").",
            "Episode of a TV show (e.g. \"Game of Thrones season 5 episode 5\").",
            "A movie. (e.g. \"The Goodfellas\")",
            "A YouTube channel. (e.g. AngryJoeShow)",
            "TV channel (e.g. \"Showtime Women\", \"ESPN2HD\").",
            "Sports game of a given team or teams (e.g. \"Warriors game\", \"Warriors at Magic game\")",
            "An audio book.",
            "An audio story.",
            "A YouTube video playlist. Note: Not a music playlist returned from YT music search.",
            "TV artist: comedian, TV host etc. (e.g. \"Conan O'Brien\").",
            "News audio or video.",
            "A video game (e.g. \"Skyrim\"). Note(shohs): As of Q4'18, this content type is not supported as a top-level content type to fulfill a query; rather, it is only used at the entity level to support queries such as \"play Skyrim soundtrack\".",
            "TV or film director. (e.g. \"James Cameron\").",
            "Actor: TV, film actor etc. (e.g. \"Tom Cruise\").",
            "Movie series. (e.g. \"Home Alone\").",
            "Used for App."
          ],
          "type": "string"
        },
        "image": {
          "description": "Images of the media.",
          "items": {
            "$ref": "AssistantApiCoreTypesImage"
          },
          "type": "array"
        },
        "name": {
          "description": "Name of the media. Required.",
          "type": "string"
        },
        "newsInfo": {
          "$ref": "NlpSemanticParsingModelsMediaNewsInfo",
          "description": "Additional info specific to a news audio/video stream (if applicable)."
        },
        "personalDataIngestionEngine": {
          "description": "The personal ingestion engine.",
          "enum": [
            "UNKNOWN_INGESTION_ENGINE",
            "PINTS",
            "PACIFIC"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "playlistVisibility": {
          "description": "Visibility setting of the retrieved playlist.",
          "enum": [
            "UNSPECIFIED",
            "VISIBILITY_PUBLIC",
            "VISIBILITY_PRIVATE",
            "VISIBILITY_UNLISTED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "podcastInfo": {
          "$ref": "NlpSemanticParsingModelsMediaPodcastInfo",
          "description": "Additional info specific to podcast stream (if applicable)."
        },
        "primaryEntityMid": {
          "type": "string"
        },
        "providerInfo": {
          "description": "List of providers and their deeplinks.",
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaMediaProviderInfo"
          },
          "type": "array"
        },
        "purchaseInfo": {
          "$ref": "NlpSemanticParsingModelsMediaPurchaseInfo",
          "description": "Purchase info for purchased or preordered movies, episodes, seasons, tv shows."
        },
        "radioInfo": {
          "$ref": "NlpSemanticParsingModelsMediaRadioInfo",
          "description": "Only one of these fields should be set depending on the type of the content. oneof content_specific_info { Additional info specific to a radio station (if applicable)."
        },
        "rentalInfo": {
          "$ref": "NlpSemanticParsingModelsMediaRentalInfo",
          "description": "Rental info for rented movies."
        },
        "source": {
          "enum": [
            "UNKNOWN_SOURCE",
            "USER_CREATED",
            "FAVORITES",
            "RECENT",
            "PUBLIC",
            "USER_OWNED",
            "PROVIDER_CURATED",
            "CLIENT_REPORTED"
          ],
          "enumDescriptions": [
            "",
            "Media created by user.",
            "Media in user favorites.",
            "Media from recent user's playbacks.",
            "Public media.",
            "Public media owned by user, e.g. via purchase.",
            "Content curated by provider",
            "Content reported by the Assistant client."
          ],
          "type": "string"
        },
        "youtubePlaylistInfo": {
          "$ref": "NlpSemanticParsingModelsMediaYouTubePlaylistInfo",
          "description": "Additional info specific to YouTube playlist (if applicable)."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMediaAnnotationList": {
      "description": "List of MediaAnnotation. Media annotators should use the MediaAnnotationList to annotate spans instead of MediaAnnotation. This prevents exponential explosion of interpretations (consider [play $song by $artist on $device]) and allows us to have simpler tests for grammar.",
      "id": "NlpSemanticParsingModelsMediaMediaAnnotationList",
      "properties": {
        "annotation": {
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaMediaAnnotation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMediaProviderInfo": {
      "description": "A media provider and the deeplinks provided by the provider. MediaProviderInfo is an abstraction for topics of multiple media related KG types under /base/mediaasset domain and /media_common. It's often eligible for topics of media related KG types like /broadcast/radio_station, /film/film, /music/artist, /music/album, /music/recording_cluster, /music/recording, /tv/tv_program, etc. See go/media-pq for design details. Next ID: 6",
      "id": "NlpSemanticParsingModelsMediaMediaProviderInfo",
      "properties": {
        "deeplinkInfo": {
          "description": "Deeplinks provided by the provider. If empty it indicates that the media is unavailable with the provider, e.g. due to country restrictions or limited catalog.",
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaDeeplinkInfo"
          },
          "type": "array"
        },
        "kgProviderKey": {
          "description": "The unique and reverse unique provider enumerator in KG (e.g., \"ORANGE_SPAIN\" for /g/11h6nkfyrm). It is more stable than the KG mid. See go/kema-api#keys. Some mids cannot have the enumerator property due to historical reason (e.g., multiple media providers were created for iTunes and only \"\"/g/11fhyxjwt5\" has provider enumerator as \"ITUNES_NEW\" in KG). These entities need to have hard-coded key (e.g., \"/m/019g58\" has key \"ITUNES\") kept outside of KG.",
          "type": "string"
        },
        "mediaId": {
          "description": "Media ID of a MediaItem in a MediaBrowseTree (MBT). This field is used to play a specific media item from MBT using playFromMediaId API.",
          "type": "string"
        },
        "providerMid": {
          "description": "The machine ID (MID) of the media provider.",
          "type": "string"
        },
        "providerName": {
          "description": "The name of the media provider.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMovie": {
      "description": "Example: \"Casablanca\"",
      "id": "NlpSemanticParsingModelsMediaMovie",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "isFromFastPath": {
          "description": "Is annotated by Nimble for the media Fast Path.",
          "type": "boolean"
        },
        "providerMetadata": {
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaProviderMetadata"
          },
          "type": "array"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"Casablanca\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMusicArtist": {
      "description": "Example: \"The Beatles\"",
      "id": "NlpSemanticParsingModelsMediaMusicArtist",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "favorite": {
          "description": "If true, indicates the user wants their favorite album. Like [play my favorite album my Eminem]",
          "type": "boolean"
        },
        "isFromFastPath": {
          "description": "Is annotated by Nimble for the media Fast Path.",
          "type": "boolean"
        },
        "playMore": {
          "description": "More from this artist.",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"The Beatles\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMusicGenre": {
      "description": "Example: \"British Invasion\"",
      "id": "NlpSemanticParsingModelsMediaMusicGenre",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "playMore": {
          "description": "More from this genre.",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"British Invasion\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaMusicPlaylist": {
      "description": "Example: \"gym playlist\"",
      "id": "NlpSemanticParsingModelsMediaMusicPlaylist",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "longtailMood": {
          "description": "If the model is confident that this is a bizarre long-tail mood-based playlist, it can send a signal to downstream systems (that might do things like generate random music) Example: * [play music for brushing my teeth with the lights off on tuesday] This is pretty much an 'easter egg' -- it is not critical.",
          "type": "boolean"
        },
        "normalizedText": {
          "description": "Optional, some canonical name for the playlist.",
          "type": "string"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation",
          "description": "Needed for proto conformance in Semantic Parsing."
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"80s remix\" (tokenized)",
          "type": "string"
        },
        "special": {
          "enum": [
            "NONE",
            "THUMBS_UP",
            "LAST_ADDED",
            "FREE_AND_PURCHASED"
          ],
          "enumDescriptions": [
            "",
            "Auto playlists defined by the Google Play Music app. [play thumbs up songs]",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaNewsInfo": {
      "id": "NlpSemanticParsingModelsMediaNewsInfo",
      "properties": {
        "docid": {
          "description": "The docid of the news result from News360 backend.",
          "format": "uint64",
          "type": "string"
        },
        "newsContentType": {
          "description": "Indicates how the type of the news result.",
          "enum": [
            "NEWS_CONTENT_TYPE_UNSPECIFIED",
            "AMP_ARTICLE_ONLY"
          ],
          "enumDescriptions": [
            "Default value. This value is unused.",
            "News is an Amp textual article. The page has no video or audio."
          ],
          "type": "string"
        },
        "publicationTime": {
          "$ref": "AssistantApiTimestamp",
          "description": "Publication time of the news, in seconds (unix epoch)."
        },
        "publisher": {
          "description": "The publisher of the news.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaNewsTopic": {
      "description": "Example: \"ukraine\" in a query like \"read me news about Ukraine\"",
      "id": "NlpSemanticParsingModelsMediaNewsTopic",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaPaidOfferDetail": {
      "description": "Represents BUY and RENT offers and associated cost info. Next ID: 3",
      "id": "NlpSemanticParsingModelsMediaPaidOfferDetail",
      "properties": {
        "cost": {
          "description": "Represents the price of this offer according to the locale and region.",
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaCost"
          },
          "type": "array"
        },
        "paidOfferType": {
          "description": "Specifies the type of offer.",
          "enum": [
            "UNKNOWN_PAID_OFFER_TYPE",
            "RENT",
            "BUY"
          ],
          "enumDescriptions": [
            "",
            "When this value is specified, it indicates that the content is available to rent for a limited time period. The price for renting this content is indicated in the 'cost' field.",
            "When this value is specified, it indicates that the content can be purchased and permanently owned. The price for purchasing this content is indicated in the 'cost' field."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaPodcast": {
      "description": "Example: \"This American Life\"",
      "id": "NlpSemanticParsingModelsMediaPodcast",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "normalizedText": {
          "description": "Optional, some canonical name for the playlist.",
          "type": "string"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"this american life\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaPodcastInfo": {
      "id": "NlpSemanticParsingModelsMediaPodcastInfo",
      "properties": {
        "clusterId": {
          "description": "An internal identifier for the wernicke database that identifies a cluster of multiple sources for a particular podcast.",
          "type": "string"
        },
        "episodeGuid": {
          "description": "GUID of the given podcast episode.",
          "type": "string"
        },
        "feedUrl": {
          "description": "The url for the rss feed providing this podcast.",
          "type": "string"
        },
        "podcastRecsFeatures": {
          "$ref": "SuperrootPodcastsRecommendationsPodcastRecsFeatures",
          "description": "Podcast recommendations features. These features are used to train models for reranking podcast recommendations. Full list of features: http://shortn/_bg6NvzYs6F This won't be sent to clients. It will only be annotated for crust results"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaProviderMetadata": {
      "description": "Provider metadata associated with video.",
      "id": "NlpSemanticParsingModelsMediaProviderMetadata",
      "properties": {
        "deeplinkUrl": {
          "description": "URL like https://www.netflix.com/title/70305883 -- this is used as a deeplink to play the video.",
          "type": "string"
        },
        "providerMid": {
          "description": "Provider MID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaPurchaseInfo": {
      "id": "NlpSemanticParsingModelsMediaPurchaseInfo",
      "properties": {
        "orderType": {
          "enum": [
            "ORDER_TYPE_UNSPECIFIED",
            "PREORDER",
            "REGULAR"
          ],
          "enumDescriptions": [
            "",
            "Entitlements will be granted after content is available.",
            "Entitlements will be granted immediately after purchase. For regular order."
          ],
          "type": "string"
        },
        "purchaseTimestampSec": {
          "description": "The time at which the item is purchased.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaQuantification": {
      "description": "The quantification of device(s) in the query. For example, \"three speakers\", \"all TVs\", etc. Usually, we should have either lexical field or number field. However, there are some special words which we will set both fields. For example, \"all 3\" will have the semantic: {lexical=ALL, number=3}. Note that \"both\" is simply modeled as {lexical=ALL}.",
      "id": "NlpSemanticParsingModelsMediaQuantification",
      "properties": {
        "lexical": {
          "enum": [
            "NONE",
            "ALL"
          ],
          "enumDescriptions": [
            "",
            "E.g., \"all spakers\"."
          ],
          "type": "string"
        },
        "number": {
          "description": "Numerical quantification. E.g., \"three speakers\".",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaRadio": {
      "description": "Example: \"107.7 the bone\"",
      "id": "NlpSemanticParsingModelsMediaRadio",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "favorite": {
          "description": "If true, indicates the user wants their favorite radio station to be played. Ex: [play my favorites on radio]",
          "type": "boolean"
        },
        "frequency": {
          "$ref": "NlpSemanticParsingModelsMediaFrequency",
          "description": "This proto may only be partially filled depending on the query. ## Some examples (all of them have open_intent): ## | Query |radio.raw_text|radio.frequency.band|radio.frequency.value| |[play kqed fm]| [kqed fm] | [fm] | N/A | |[play 88.5 fm]| [88.5 fm] | [fm] | 88.5 | | [play 88.5 | [88.5] | N/A | 88.5 | ## | [play fm] | [fm] | [fm] | N/A |"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "isFromFastPath": {
          "description": "Is annotated by Nimble for the media Fast Path.",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"107.7\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaRadioInfo": {
      "description": "Metadata for a radio station (both terrestrial and internet). Next ID: 4",
      "id": "NlpSemanticParsingModelsMediaRadioInfo",
      "properties": {
        "frequency": {
          "$ref": "NlpSemanticParsingModelsMediaFrequency",
          "description": "Frequency of the terrestrial radio station."
        },
        "location": {
          "$ref": "NlpSemanticParsingModelsMediaLatLng",
          "description": "Location of the radio station."
        },
        "popularity": {
          "description": "Popularity of the radio station. This will be used in ranking of the radio stations. This value should be between 0 (least popular) and 5 (most popular).",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaRadioNetwork": {
      "description": "Example: \"npr\", \"bbc\", etc.",
      "id": "NlpSemanticParsingModelsMediaRadioNetwork",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"npr\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaRentalInfo": {
      "id": "NlpSemanticParsingModelsMediaRentalInfo",
      "properties": {
        "activatePeriodSec": {
          "description": "Time period for users to continue watching.",
          "format": "int64",
          "type": "string"
        },
        "grantPeriodSec": {
          "description": "Time period for users to begin watching.",
          "format": "int64",
          "type": "string"
        },
        "purchaseTimestampSec": {
          "description": "The time at which the item is purchased.",
          "format": "int64",
          "type": "string"
        },
        "validUntilTimestampSec": {
          "description": "Time until which ownership is granted",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaSeasonConstraint": {
      "description": "Example: \"season 2\" of serial",
      "id": "NlpSemanticParsingModelsMediaSeasonConstraint",
      "properties": {
        "absoluteIndex": {
          "description": "The absolute index of the season. 1 is the first element and -1 is the last element in the sequence, -2 is the second-to-last element, and so on. Examples: \"first season\" => 1 \"3rd season\" => 3 \"last season\" => -1",
          "format": "int32",
          "type": "integer"
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "rawText": {
          "type": "string"
        },
        "relativeIndex": {
          "description": "The relative index of the season. Examples: \"previous season\" => -1 \"current season\" => 0 \"next season\" => 1",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaSong": {
      "description": "Example: \"Hey Jude\"",
      "id": "NlpSemanticParsingModelsMediaSong",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "favorite": {
          "description": "If true, indicates the user wants their favorite album. Like [play my favorite song]",
          "type": "boolean"
        },
        "first": {
          "description": "If true, indicates the user wants the first song. Like [play adele's first song]",
          "type": "boolean"
        },
        "isAnnotatedFromText": {
          "description": "Annotation comes from a text annotator. Needed to boost recall. Typically need to be verified in superroot, and have separate scoring.",
          "type": "boolean"
        },
        "isFromFastPath": {
          "description": "Is annotated by Nimble for the media Fast Path.",
          "type": "boolean"
        },
        "latest": {
          "description": "If true, indicates the user wants the latest song. Like, [play adele's latest song]",
          "type": "boolean"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation",
          "description": "Optional, indicates this reference came from QRef."
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"Hey Jude.\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaTVShow": {
      "description": "Example: \"Breaking Bad\"",
      "id": "NlpSemanticParsingModelsMediaTVShow",
      "properties": {
        "annotationList": {
          "$ref": "NlpSemanticParsingModelsMediaMediaAnnotationList",
          "description": "Annotations from custom media annotator."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "isFromFastPath": {
          "description": "Is annotated by Nimble for the media Fast Path.",
          "type": "boolean"
        },
        "providerMetadata": {
          "items": {
            "$ref": "NlpSemanticParsingModelsMediaProviderMetadata"
          },
          "type": "array"
        },
        "qref": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        },
        "rawText": {
          "description": "Required, corresponds to the raw text, like \"Breaking Bad\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaYouTubeDeeplinkInfo": {
      "description": "Provide the deeplink information specific to YouTube PMAs. Next ID: 3",
      "id": "NlpSemanticParsingModelsMediaYouTubeDeeplinkInfo",
      "properties": {
        "clickTrackingId": {
          "description": "See go/yt-clicktracking. Serialized youtube.api.innertube.InnerTubeClickTrackingProto.",
          "type": "string"
        },
        "uploaderChannelId": {
          "description": "For YouTube Channels, by default the deeplink is set to be the playlist of all uploads from the channel. This field is used for YouTube in-app browse when we need the YouTube channel's main page url. We will use the uploader_channel_id to construct the needed channel deeplink.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMediaYouTubePlaylistInfo": {
      "id": "NlpSemanticParsingModelsMediaYouTubePlaylistInfo",
      "properties": {
        "numVidsPlayableInWoodstock": {
          "description": "Count of videos in the YouTube playlist that are playable in WoodStock. For performance reasons the maximum value this field can reach is capped, see: kMaxVideosPerPlaylistForSearchMetadata.",
          "format": "int64",
          "type": "string"
        },
        "videoCount": {
          "description": "Total number of videos present in the retrieved playlist.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMoneyCurrency": {
      "id": "NlpSemanticParsingModelsMoneyCurrency",
      "properties": {
        "freebaseMid": {
          "description": "KG Currency mid",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsMoneyMoney": {
      "description": "Represent a money quantity",
      "id": "NlpSemanticParsingModelsMoneyMoney",
      "properties": {
        "amount": {
          "$ref": "NlpSemanticParsingNumberNumber"
        },
        "currency": {
          "$ref": "NlpSemanticParsingModelsMoneyCurrency"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsNarrativeNewsNewsProvider": {
      "description": "Corresponds to an entry in our hand-curated Nimble table of providers.",
      "id": "NlpSemanticParsingModelsNarrativeNewsNewsProvider",
      "properties": {
        "data": {
          "$ref": "QualityActionsNewsProviderAnnotationData",
          "description": "Annotation data for the provider."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua and must not be used by outside clients!!"
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsOnDevice": {
      "description": "OnDevice describes the device(s) to perform an action. This message type can be imported in action messages as an argument.",
      "id": "NlpSemanticParsingModelsOnDevice",
      "properties": {
        "device": {
          "description": "The device(s) to perform an action.",
          "items": {
            "$ref": "NlpSemanticParsingModelsDevice"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsPersonPerson": {
      "id": "NlpSemanticParsingModelsPersonPerson",
      "properties": {
        "alternativeNameInfo": {
          "description": "Alternative names like \"John\" for \"Joan\", with info such as RecognitionAlternateSource indicating where is it from.",
          "items": {
            "$ref": "QualityQrewriteAlternativeNameInfo"
          },
          "type": "array"
        },
        "alternativeNames": {
          "description": "Alternative names, e.g., names with similar pronunciation, Kathy and Cathy.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "annotationSource": {
          "items": {
            "enum": [
              "PERSONAL_CONTACT",
              "RELATIONSHIP",
              "NAMES",
              "NAME_DETECTION",
              "SAFT",
              "PERSONAL_KNOWLEDGE_GRAPH",
              "PRESENCE_PEOPLE_SEARCH",
              "LOOSE_TEXT"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "This will eventually subsume PERSONAL_CONTACT and RELATIONSHIP too. Reach out to pkg-eng@ for questions.",
              "Person names from Presence / People Search project (go/presence-people-search-intent). Contact search-ugc-ny@ for questions.",
              "Ungrounded annotation from loose text parsing. See go/call-ambiguous-in-initiate-call."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "contactData": {
          "description": "Contact metadata. Only available for personal contact.",
          "items": {
            "$ref": "QualityQrewritePersonalContactData"
          },
          "type": "array"
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua. Must not be used by outside clients!!"
        },
        "isPersonGroupReference": {
          "description": "Indicates whether $Person is used for person-group reference. If true, then the PersonalContactData in repeated contact_data field probably correspond to a group of different persons, where $Person is used to represent family, kids, parents, etc.",
          "type": "boolean"
        },
        "isPersonalContact": {
          "description": "Whether the person is from personal contacts (e.g. Focus contacts or device contacts) or the person is constructed from a Gaia profile visible to the user (e.g. via Family Service).",
          "type": "boolean"
        },
        "name": {
          "description": "The name of the person without normalizations, preserves casing of the raw text, but removes possible prefix/suffix. For example: raw_text: \"Mr. John\" normalized_text: \"john\" name: \"John\" raw_text: \"T\u00fcll\" normalized_text: \"tuell\" name: \"T\u00fcll\"",
          "type": "string"
        },
        "normalizedText": {
          "description": "Normalized text produced by annotator. Some annotators generate a normalized version to help better match with contact list.",
          "type": "string"
        },
        "pkgSemantics": {
          "$ref": "NlpSemanticParsingQRefAnnotation",
          "description": "Contains information about a Copley Person reference (go/copley-people). Note that this contains no information about the resolved people (e.g. names, phone numbers) but only about the user's reference. Resolution metadata is stored in contact_data.pkg_person."
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrence": {
      "description": "Recurrence rule for specifying date- and time-based repetition for tasks. Next id: 12.",
      "id": "NlpSemanticParsingModelsRecurrence",
      "properties": {
        "dailyPattern": {
          "$ref": "NlpSemanticParsingModelsRecurrenceDailyPattern",
          "description": "Optional. Specifies when in the day the task should occur. Applies to all frequencies DAILY and greater. If absent, the repeating tasks are considered \"all day\" type."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field of the Recurrence message should not in general be used by outside clients of the grammar. It is intended to be used internally in Aqua for evaluation purposes. The rationale is that token counts depend on the particular tokenization used in Aqua which may be different from the one used by the client and may change from time to time. Outside clients should not create a dependency on the current tokenization used in Aqua."
        },
        "every": {
          "description": "Multiplier on the frequency of the recurrence. Use this to specify patterns that recur every X days, months, years, etc. Example: [remind me to call mom every 2nd week]. Default is 1 (every day, every month, every year). Floating point numbers are understood and rounded to the nearest integer. E.g. \"every 2.8 months\" => (every 3)",
          "format": "int32",
          "type": "integer"
        },
        "frequency": {
          "description": "Required. The high-level frequency of the recurrence.",
          "enum": [
            "DAILY",
            "WEEKLY",
            "MONTHLY",
            "YEARLY",
            "UNKNOWN"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "Frequency is set to UNKNOWN when there's no explicit unit of recurrence. Example: [set a repeating alarm]."
          ],
          "type": "string"
        },
        "monthlyPattern": {
          "$ref": "NlpSemanticParsingModelsRecurrenceMonthlyPattern",
          "description": "Specify a monthly recurrence. Valid and required for MONTHLY frequencies only."
        },
        "numInstancesInFrequency": {
          "description": "How many times the task should be repeated within the frequency interval. Floating point numbers are understood and rounded to the nearest integer. E.g. \"3.8 times per week\" => (num_instances_in_frequency 4)",
          "format": "int32",
          "type": "integer"
        },
        "recurrenceEnd": {
          "$ref": "NlpSemanticParsingModelsRecurrenceRecurrenceEnd",
          "description": "Required. The end condition for the recurrence."
        },
        "recurrenceStart": {
          "$ref": "NlpSemanticParsingModelsRecurrenceRecurrenceStart",
          "description": "Required. The start of the recurrence."
        },
        "time": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "Optional time included with some types of recurrence phrases, such as \"every morning\"."
        },
        "weeklyPattern": {
          "$ref": "NlpSemanticParsingModelsRecurrenceWeeklyPattern",
          "description": "Specify a weekly recurrence. Valid and required for WEEKLY frequencies only."
        },
        "yearlyPattern": {
          "$ref": "NlpSemanticParsingModelsRecurrenceYearlyPattern",
          "description": "Specify a yearly recurrence. Valid only for YEARLY frequencies."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrenceDailyPattern": {
      "description": "Pattern for when in the day the repeating task should trigger. Applies to all frequencies greater than or equal to DAILY. Exactly one of the containing fields should be set (i.e. a specific time or period).",
      "id": "NlpSemanticParsingModelsRecurrenceDailyPattern",
      "properties": {
        "dayPeriod": {
          "$ref": "NlpSemanticParsingDateTimeAnnotation"
        },
        "timeOfDay": {
          "$ref": "NlpSemanticParsingDateTimeAnnotation"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrenceMonthlyPattern": {
      "description": "Pattern for a MONTHLY recurrence. A MONTHLY recurrence may be specified in four different ways. These fields should be set in a mutually exclusive way, i.e.: ((month_day OR last_day) XOR (week_day AND (week_day_number OR last_week))) 1. Absolute days of the month (i.e. the 1st and 15th) or relative day from the end of the month (i.e. -1 for last day, -2 for second-to-last day). Set month_day. 2. [Deprecated] Relative last day of the month. Represented as a boolean since the last absolute day number is dependent on the month. This is just a short-cut for month_day=-1 and is deprecated. Set last_day=true. 3. The nth (or nth-last) specific weekday of the month. For example, the 3rd Wednesday of the month. This represents the 3rd instance of a Wednesday of the month, regardless of what weekday the month started on. It does not necessarily mean the Wednesday on the 3rd week of the month. 4. [Deprecated] The last specific weekday of the month. For example, the last Thursday of the month. This is a short-cut for week_day_number=-1.",
      "id": "NlpSemanticParsingModelsRecurrenceMonthlyPattern",
      "properties": {
        "lastDay": {
          "description": "Special flag to indicate the last day of the month, equivalent to setting month_day to -1. Deprecated, use month_day=-1 instead.",
          "type": "boolean"
        },
        "lastWeek": {
          "description": "Special flag to indicate a week_day in the last week of the month, as this cannot be captured by week_day_number. Deprecated, use week_day_number=-1 instead.",
          "type": "boolean"
        },
        "monthDay": {
          "description": "Absolute day of the month (if positive) or relative day from the end of the month (if negative). Example: 2nd and 20th of the month [2, 20]. Example: Last day of the month [-1]. Positive values should correspond to actual calendar day number (indexing starts at 1).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "weekDay": {
          "description": "For capturing the nth weekday of the month. Use together with week_day_number or last_week to specify n.",
          "enum": [
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "weekDayNumber": {
          "description": "The nth occurrence of week_day to match. I.e. For 3rd Wednesday of the month, week_day = WEDNESDAY and week_day_number = 3. Values beyond the end of the month are skipped. If negative, this is interpreted as the nth-to-last occurrence of the week day in the month. I.e. for last Thursday of the month, week_day = THURSDAY and week_day_number = -1.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrenceRecurrenceEnd": {
      "description": "The end of the recurrence can be represented in one of three ways. 1. An abstract DateTime. (inclusive) 2. An absolute timestamp, in milliseconds from UTC epoch. 3. A number of occurrences. Exactly one of the fields [end_date_time, end_millis, num_occurrences] in this message must be set. Repeating tasks for which the user did not specify an end date are automatically given a reasonable end conditions by the system and auto_renew will be set to true. Similarly, if the user- provided end date is too far in the future to reasonably create all instances, the server will set an auto_renew_until end condition.",
      "id": "NlpSemanticParsingModelsRecurrenceRecurrenceEnd",
      "properties": {
        "autoRenew": {
          "description": "Should be used in cases where the size of the recurrence is infinite (no end date specified), in which case we rely on an offline process to extend. Set by server only, setting it on a new recurrence will throw an exception.",
          "type": "boolean"
        },
        "autoRenewUntil": {
          "$ref": "NlpSemanticParsingDateTimeAnnotation",
          "description": "Used in cases where the recurrence is too large to create in a single transaction. In this case we create a manageable number of instances initially and rely on an offline process to continually extend the recurrence until this date. Set by server only, setting it on a new recurrence will throw an exception."
        },
        "endDateTime": {
          "$ref": "NlpSemanticParsingDateTimeAnnotation"
        },
        "endMillis": {
          "description": "Deprecated - prefer end_date_time.absolute_time_ms.",
          "format": "int64",
          "type": "string"
        },
        "numOccurrences": {
          "description": "Note that auto-renewing is not supported in conjunction with num_occurrences. Therefore we impose a hard limit of 1000 when using this field.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrenceRecurrenceStart": {
      "description": "The start of the recurrence can be represented either as a DateTime or a timestamp in milliseconds from UTC epoch. Exactly one of the fields of this message must be set.",
      "id": "NlpSemanticParsingModelsRecurrenceRecurrenceStart",
      "properties": {
        "startDateTime": {
          "$ref": "NlpSemanticParsingDateTimeAnnotation",
          "description": "Only the year/month/day portion are used to find the start date of the recurrence. To specify a time or period of each instance, use DailyPattern."
        },
        "startMillis": {
          "description": "Deprecated - prefer start_date_time.absolute_time_ms.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrenceWeeklyPattern": {
      "description": "Pattern for a WEEKLY recurrence. You must specify at least one week_day.",
      "id": "NlpSemanticParsingModelsRecurrenceWeeklyPattern",
      "properties": {
        "weekDay": {
          "description": "Set of weekdays the recurrence applies to.",
          "items": {
            "enum": [
              "MONDAY",
              "TUESDAY",
              "WEDNESDAY",
              "THURSDAY",
              "FRIDAY",
              "SATURDAY",
              "SUNDAY"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "weeklyPatternEnd": {
          "enum": [
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "weeklyPatternStart": {
          "enum": [
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsRecurrenceYearlyPattern": {
      "description": "Pattern for a YEARLY recurrence. A YEARLY recurrence is specified using a monthly pattern and a set of months the pattern applies to. Some examples: \"Every January 16\" : monthly_pattern { month_day = 16; } year_month = JANUARY; \"Last day of every April and August\" : monthly_pattern { last_day = true; } year_month = APRIL, AUGUST ",
      "id": "NlpSemanticParsingModelsRecurrenceYearlyPattern",
      "properties": {
        "monthlyPattern": {
          "$ref": "NlpSemanticParsingModelsRecurrenceMonthlyPattern",
          "description": "The monthly pattern to recur."
        },
        "yearMonth": {
          "description": "The months of the year to apply the pattern.",
          "items": {
            "enum": [
              "JANUARY",
              "FEBRUARY",
              "MARCH",
              "APRIL",
              "MAY",
              "JUNE",
              "JULY",
              "AUGUST",
              "SEPTEMBER",
              "OCTOBER",
              "NOVEMBER",
              "DECEMBER"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantBrandPhrase": {
      "description": "A brand can be any combination of text or mid.",
      "id": "NlpSemanticParsingModelsShoppingAssistantBrandPhrase",
      "properties": {
        "mid": {
          "type": "string"
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantMerchant": {
      "description": "A merchant that sells products.",
      "id": "NlpSemanticParsingModelsShoppingAssistantMerchant",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field should not be used by clients of the grammar. It is intended to be used internally in Aqua for metric and regression tests."
        },
        "localMerchantId": {
          "description": "Merchant Center identifier for LIA merchants.",
          "format": "int64",
          "type": "string"
        },
        "mcid": {
          "items": {
            "$ref": "NlpSemanticParsingModelsShoppingAssistantMerchantMerchantCenterId"
          },
          "type": "array"
        },
        "merchantId": {
          "description": "Merchant Center identifier for GSX merchants. Deprecated: use MerchantCenterId.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "mid": {
          "description": "Optional. Knowledge Graph identifier for the merchant.",
          "type": "string"
        },
        "name": {
          "description": "A name for the merchant. Example: Walmart",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantMerchantMerchantCenterId": {
      "description": "Note: A merchant may have multiple merchant center ids, and each one can have multiple purposes. The existing fields merchant_id, local_merchant_id fields are not enough to capture this. Instead we will have a repeated field name mcid with this structure.",
      "id": "NlpSemanticParsingModelsShoppingAssistantMerchantMerchantCenterId",
      "properties": {
        "id": {
          "format": "int64",
          "type": "string"
        },
        "isGsx": {
          "type": "boolean"
        },
        "isLocal": {
          "type": "boolean"
        },
        "isPla": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantOffer": {
      "description": "A product for sale from a particular merchant, possibly available at a specific store.",
      "id": "NlpSemanticParsingModelsShoppingAssistantOffer",
      "properties": {
        "docid": {
          "description": "The offer document id as used in Shopping's metadata.",
          "format": "uint64",
          "type": "string"
        },
        "merchant": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantMerchant",
          "description": "The merchant selling the product."
        },
        "price": {
          "$ref": "NlpSemanticParsingModelsMoneyMoney",
          "description": "The price of the product sold by the merchant."
        },
        "product": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProduct",
          "description": "The product for sale."
        },
        "store": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantStore",
          "description": "Optional. The physical store where the product can be purchased."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantPhrase": {
      "description": "A phrase parsed from a user query.",
      "id": "NlpSemanticParsingModelsShoppingAssistantPhrase",
      "properties": {
        "brand": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantBrandPhrase"
        },
        "offer": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantOffer"
        },
        "product": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductPhrase"
        },
        "unrecognized": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantUnrecognizedPhrase"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantProduct": {
      "description": "A product that can be purchased.",
      "id": "NlpSemanticParsingModelsShoppingAssistantProduct",
      "properties": {
        "catalogId": {
          "description": "The shopping catalog identifier.",
          "format": "uint64",
          "type": "string"
        },
        "maxPrice": {
          "$ref": "NlpSemanticParsingModelsMoneyMoney",
          "description": "The highes price this product is available for."
        },
        "mediaProduct": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductMediaProduct",
          "description": "TODO(ppoudyal) Add logging for media_product."
        },
        "mid": {
          "description": "Optional. Knowledge Graph identifier for the product.",
          "type": "string"
        },
        "minPrice": {
          "$ref": "NlpSemanticParsingModelsMoneyMoney",
          "description": "The lowest price this product is available for."
        },
        "title": {
          "description": "Title of the product. Example: Moto X Blue 64GB Note: This refers to only the catalog title not user specified phrase",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantProductClassification": {
      "description": "Whether the product being described fits into specific categories (e.g., \"video games\").",
      "id": "NlpSemanticParsingModelsShoppingAssistantProductClassification",
      "properties": {
        "bookConfidence": {
          "description": "TODO(ppoudyal) Expand confidence to cases where the product phrase might be a book/movie/video_game but isn't just a title The score (between 0 - 1) measuring the confidence that product",
          "format": "float",
          "type": "number"
        },
        "isVideoGame": {
          "description": "TODO(ppoudyal) Deprecate is_video_game once the score covers all cases covered by $VideoGameProductPhrase The product phrase contains a video game title.",
          "type": "boolean"
        },
        "movieConfidence": {
          "description": "phrase mentions a book title The score (between 0 - 1) measuring the confidence that product",
          "format": "float",
          "type": "number"
        },
        "videoGameConfidence": {
          "description": "phrase mentions a movie title The score (between 0 - 1) measuring the confidence that product",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantProductExpression": {
      "description": "An expression parsed from a user query that describes a product or set of products.",
      "id": "NlpSemanticParsingModelsShoppingAssistantProductExpression",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "This field should not be used by clients of the grammar. It is intended to be used internally in Aqua for metric and regression tests."
        },
        "grammaticalGender": {
          "enum": [
            "UNKNOWN_GENDER",
            "FEMININE",
            "MASCULINE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "grammaticalNumber": {
          "enum": [
            "UNKNOWN_NUMBER",
            "PLURAL",
            "SINGULAR",
            "DUAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "phrases": {
          "description": "Ordered list of phrases that the user used to describe a product.",
          "items": {
            "$ref": "NlpSemanticParsingModelsShoppingAssistantPhrase"
          },
          "type": "array"
        },
        "productClassification": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductClassification"
        },
        "shoppingListItemInfo": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantShoppingListItemInfo",
          "description": "Associated shopping list item info. Only set when the product is come from a shopping list item."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantProductMediaProduct": {
      "description": "A media product that can be purchased",
      "id": "NlpSemanticParsingModelsShoppingAssistantProductMediaProduct",
      "properties": {
        "author": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue",
          "description": "The author of the media"
        },
        "genre": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue",
          "description": "The genre of the media"
        },
        "mediaTitle": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue",
          "description": "The title of the media Example: The assasin's creed"
        },
        "orderInSeries": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue",
          "description": "Order in media series (series title is given by the product title)"
        },
        "topic": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue",
          "description": "The topic of the media"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue": {
      "id": "NlpSemanticParsingModelsShoppingAssistantProductMediaProductMediaAttributeValue",
      "properties": {
        "mid": {
          "description": "The knowledge graph identifier for the attribute",
          "type": "string"
        },
        "rawText": {
          "description": "Raw text of the media attribute (eg. author)",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantProductPhrase": {
      "description": "A product can be any combination of raw_text and metadata (including mid, shopping product catalog title/id, and media attributes). A product phrase refers to a product at the catalog entry level and/or a media product. Media product contains information about author and media title TODO(ppoudyal) Add genre and order_in_series to MediaProduct",
      "id": "NlpSemanticParsingModelsShoppingAssistantProductPhrase",
      "properties": {
        "metadata": {
          "$ref": "NlpSemanticParsingModelsShoppingAssistantProduct"
        },
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantShoppingListItemInfo": {
      "id": "NlpSemanticParsingModelsShoppingAssistantShoppingListItemInfo",
      "properties": {
        "itemId": {
          "type": "string"
        },
        "listId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantStore": {
      "description": "A merchant's physical store.",
      "id": "NlpSemanticParsingModelsShoppingAssistantStore",
      "properties": {
        "id": {
          "description": "Local store identifier.",
          "format": "uint64",
          "type": "string"
        },
        "location": {
          "$ref": "NlpSemanticParsingLocalLocation",
          "description": "The location of the store."
        },
        "name": {
          "description": "A name for the store. Example: Walmart - Cranberry",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingModelsShoppingAssistantUnrecognizedPhrase": {
      "description": "A span in a user query that could not be identified as any other type of `Phrase`.",
      "id": "NlpSemanticParsingModelsShoppingAssistantUnrecognizedPhrase",
      "properties": {
        "rawText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingNumberFractionNumber": {
      "id": "NlpSemanticParsingNumberFractionNumber",
      "properties": {
        "denominator": {
          "$ref": "NlpSemanticParsingNumberSimpleNumber"
        },
        "numerator": {
          "$ref": "NlpSemanticParsingNumberSimpleNumber",
          "description": "Fields for fraction numbers"
        },
        "precision": {
          "description": "This field is used to indicate the number of digits after the decimal point in the normalized_value field in number.proto, which contains the floating point representation of the fraction",
          "format": "int32",
          "type": "integer"
        },
        "wholeNumber": {
          "$ref": "NlpSemanticParsingNumberSimpleNumber",
          "description": "This field is set only for mixed fraction"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingNumberNumber": {
      "description": "Next ID: 9",
      "id": "NlpSemanticParsingNumberNumber",
      "properties": {
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Span info of the annotation - mostly used for evaluation purpose. Note: this data must never be used outside Aqua because it relies on the internal tokenization used in Aqua that could change over time."
        },
        "fractionNumber": {
          "$ref": "NlpSemanticParsingNumberFractionNumber"
        },
        "isSpelledOut": {
          "description": "An optional field that holds whether the number_type number is a normalized spelled-out number or not. This field will not be set in cases when this information is not available.",
          "type": "boolean"
        },
        "modifier": {
          "description": "NumberModifier is used to capture when the expression is not an absolute number, but a number expression to represent an increase/decrease/comparison. E.g. [10 more percent], [5 less].",
          "enum": [
            "UNKNOWN",
            "ADD",
            "SUBTRACT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "normalizedValue": {
          "description": "Contains a normalized string representation of the numeric value that has: * No digit grouping delimiter (e.g. \",\" in english). * Decimal mark (if present) as \".\" (dot). For fraction_number, this contains the floating point representation of the fraction. The number of digits after the decimal point is defined in the precision field of fraction_number.proto.",
          "type": "string"
        },
        "rawText": {
          "description": "The raw text of the annotation.",
          "type": "string"
        },
        "simpleNumber": {
          "$ref": "NlpSemanticParsingNumberSimpleNumber"
        },
        "spelledOutType": {
          "description": "We expect this field to be set only when is_spelled_out is true.",
          "enum": [
            "UNKNOWN_SPELLED_OUT_TYPE",
            "FULL_NUMBER",
            "LIST_OF_SINGLE_DIGITS",
            "SHORTHAND",
            "COMBINED"
          ],
          "enumDescriptions": [
            "",
            "A fully spelled out number. e.g: [two], [half], [one hundred forty five], [one point twenty five].",
            "A list of spelled out single digits with more than 1 element. e.g: [two oh], [one four five], [six oh nine], [one point five five].",
            "A shorthand number form. e.g: [1K], [1m].",
            "An interpretation that combines two or more of the other forms with or without written (non spelled-out) forms, or one of the other forms combined with written forms. e.g: [1 hundred], [one forty five], [one point two fifteen], [twenty oh two], [one hundred twenty two point two two], [one twenty two point two two], [one two two point 22]."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingNumberSimpleNumber": {
      "description": "Next ID: 8",
      "id": "NlpSemanticParsingNumberSimpleNumber",
      "properties": {
        "decimalMark": {
          "description": "The type of decimal mark that was present before normalization. Note: different locales may use different decimal marks.",
          "enum": [
            "NO_DELIMITER",
            "DOT",
            "COMMA",
            "SPACE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "groupingDelimiter": {
          "description": "The type of digit grouping delimiter that was present before normalization. Note: different locales may use different digit grouping delimiters.",
          "enum": [
            "NO_DELIMITER",
            "DOT",
            "COMMA",
            "SPACE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "groupingSystem": {
          "description": "We expect this field to be set only when grouping_delimiter is set.",
          "enum": [
            "UNKNOWN_GROUPING_SYSTEM",
            "GROUPBY_3_DIGITS",
            "GROUPBY_4_DIGITS",
            "GROUPBY_INDIAN_SYSTEM"
          ],
          "enumDescriptions": [
            "",
            "Western languages group by thousands: 10^3, 10^6 ...",
            "East Asian languages prefer grouping by myriads: 10^4, 10^8, ...",
            "The Indian system is more complex because of the Stravinskian alternation between lakhs and crores."
          ],
          "type": "string"
        },
        "normalizedValue": {
          "description": "Contains a normalized string representation of the numeric value that has: * No digit grouping delimiter (e.g. \",\" in english). * Decimal mark (if present) as \".\" (dot). This field is kept for backward compatibility. The field is also available in number.proto",
          "type": "string"
        },
        "prefix": {
          "description": "Stores prefix output by the GRM number grammar (http://b/28623478).",
          "type": "string"
        },
        "suffix": {
          "description": "Stores suffix output",
          "type": "string"
        },
        "type": {
          "enum": [
            "UNKNOWN_NUMBER_TYPE",
            "INT",
            "FLOAT",
            "ORDINAL",
            "PERCENTAGE"
          ],
          "enumDescriptions": [
            "",
            "An integer number: [2], [1,000], [one hundred five].",
            "Floating point number: [0.2], [3.14], [1,000.1].",
            "Ordinal number: [2nd], [twenty third].",
            "Percentage: [5%], [50 percent], [five percent]."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingPersonalIntelligenceEntity": {
      "description": "This message should be wire-equivalent to the Entity proto defined in nlp/semantic_parsing/models/personal_intelligence.proto. The message is cloned here to allow legacy intents to extract entities to slots; trying to add Entity to knowledge_answers::intent_query::ArgumentValue creates a BUILD dependency loop. For the proto used for GwsLogs, see logs/proto/knowledge/interpretation/personal_intelligence.proto.",
      "id": "NlpSemanticParsingPersonalIntelligenceEntity",
      "properties": {
        "airlineConfig": {
          "$ref": "TravelFlightsAirlineConfig",
          "description": "Used if the entity is an airline with an airline annotation."
        },
        "evalData": {
          "$ref": "NlpSemanticParsingAnnotationEvalData",
          "description": "Required, but should only be used inside Aqua. Must not be used by outside clients!!"
        },
        "name": {
          "description": "raw string representation",
          "type": "string"
        },
        "qrefAnnotation": {
          "$ref": "NlpSemanticParsingQRefAnnotation"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingPersonalReferenceAnnotation": {
      "description": "A collection of any number of QRefAnnotations that designate a Copley Personal Reference and its Resolutions. This is used to handle personalized intents such as \"navigate to my hotel\" or \"when is my mom's anniversary\". See go/copley. This Annotation may contain only a reference with no resolutions for the failure case (go/copley-punts). TODO(bhorst) Rename this to remove the Copley codename.",
      "id": "NlpSemanticParsingPersonalReferenceAnnotation",
      "properties": {
        "reference": {
          "$ref": "NlpSemanticParsingQRefAnnotation",
          "description": "A Copley Personal Reference represents a user's reference to a something that could be personal entity, e.g. \"my hotel\", \"mom\", \"brunch\"."
        },
        "resolutions": {
          "description": "A Copley Personal Resolution represents the resolution of a Reference, e.g. if the user has a reservation at The Kendall Hotel, the reference \"my hotel\" could be resolved to The Kendall Hotel, and there would be a QRefAnnotation containing the mid and other data. It is possible for there to be zero resolutions for a given reference.",
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleAogSlot": {
      "description": "In simple cases, each NLU slot will contain one or multiple possible values. But in the case of a composite entity - slots can have a complex tree structure. Each slot can represent a List parameter. List parameters are only allowed at the top level, i.e. lists can't ne nested in maps. Next Id: 9 LINT.IfChange",
      "id": "NlpSemanticParsingProtoActionsOnGoogleAogSlot",
      "properties": {
        "entityId": {
          "description": "ID of the entity of this slot.",
          "type": "string"
        },
        "numBytes": {
          "description": "Number of bytes of this slot in resolved query.",
          "format": "int32",
          "type": "integer"
        },
        "original": {
          "description": "Part of input text, matched by that slot. In the case of composite slots, each slot should have its own original.",
          "type": "string"
        },
        "parameterName": {
          "description": "Name of parameter of this slot.",
          "type": "string"
        },
        "slotList": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleSlotList",
          "description": "Represents a \"list parameter\". Each parameter may be declared as a list and have multiple slot values, referenced by a single alias. Each slot value in a list may contain multiple possible values. For example: aqua return 3 dates if the year is not specified in a query - one for the current year, one for the past year, and one for the following year. If user defines a list parameter with type @sys.date, and the query contains multiple dates - we should return a list of possible values for each date from the query, i.e. it will be a list of list of dates."
        },
        "slotMap": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleSlotMap",
          "description": "Represents a structured value. Used in composite entities. Composite entities can have arbitrary structure."
        },
        "startByte": {
          "description": "Start byte position of this slot in resolved query.",
          "format": "int32",
          "type": "integer"
        },
        "value": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleSlotValue",
          "description": "One or more possible values. This field does not represent a list parameter."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleDateTime": {
      "description": "Represents datetime. It can be @sys.date, @sys.time or, in some cases, @sys.date-time. Our platform doesn't track seconds, so this field is omitted. Number of seconds should be considered 0. Hour and minute can be 0 in case of dates. In case of time and dateTime, hours and minutes will represent actual time, even if both of them are 0.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleDateTime",
      "properties": {
        "date": {
          "$ref": "GoogleTypeDate",
          "description": "Date value. Note, that month and day are 1 based. If this DateTime is a PARTIAL datetime, then fields have value -1, which means these fields are inferred rather than derived directly from query."
        },
        "property": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleDateTimeProperty",
          "description": "Property of this DateTime value that can be used to match user specification of parameters, e.g. date.recent."
        },
        "time": {
          "$ref": "GoogleTypeTimeOfDay",
          "description": "Time value. Only hours and minutes are used. Hours are in 24h format."
        },
        "timeZone": {
          "$ref": "GoogleTypeTimeZone",
          "description": "Timezone field specified only if this DateTime has type TIME or DATETIME."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleDateTimeProperty": {
      "description": "Represents properties about a matched DateTime value. Will only be populated for @sys.date-time, @sys.date and @sys.time.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleDateTimeProperty",
      "properties": {
        "datetimeType": {
          "description": "Since datetime is a superset of date, time and date&time, this field is used to indicate which type the associated DateTime object belongs to.",
          "enum": [
            "UNSPECIFIED_TYPE",
            "DATE",
            "TIME",
            "DATETIME"
          ],
          "enumDescriptions": [
            "Default type.",
            "Date-only.",
            "Time-only.",
            "Date & time."
          ],
          "type": "string"
        },
        "relativeDatetimeType": {
          "description": "The relative relationship between this DateTime value and DateTime&Timezone info provided in ClassifyRequest.",
          "enum": [
            "UNSPECIFIED_RELATIVE_TYPE",
            "RECENT",
            "FUTURE_OR_NOW",
            "PARTIAL"
          ],
          "enumDescriptions": [
            "Default type.",
            "date-time.recent",
            "date-time",
            "date-time.partial"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleSlotList": {
      "description": "Oneof doesn't allow list, this message is used to inject list as a possible value into Slot.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleSlotList",
      "properties": {
        "slots": {
          "items": {
            "$ref": "NlpSemanticParsingProtoActionsOnGoogleAogSlot"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleSlotMap": {
      "description": "Oneof doesn't allow maps, this message is used to inject map as a possible value into Slot.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleSlotMap",
      "properties": {
        "slots": {
          "additionalProperties": {
            "$ref": "NlpSemanticParsingProtoActionsOnGoogleAogSlot"
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleSlotValue": {
      "description": "Contains one or more possible values.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleSlotValue",
      "properties": {
        "values": {
          "items": {
            "$ref": "NlpSemanticParsingProtoActionsOnGoogleSlotValueSingleValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleSlotValueSingleValue": {
      "description": "Represents an actual value.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleSlotValueSingleValue",
      "properties": {
        "dateTimeValue": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleDateTime",
          "description": "Represents date or time."
        },
        "stringValue": {
          "description": "Represents a string value.",
          "type": "string"
        },
        "typeValue": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleTypedValue",
          "description": "This field is only populated by on-device Heron. This field should not be populated by any other service."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingProtoActionsOnGoogleTypedValue": {
      "description": "Used by on-device Heron. Contains information about the type of slot value returned.",
      "id": "NlpSemanticParsingProtoActionsOnGoogleTypedValue",
      "properties": {
        "boolValue": {
          "description": "Represents a boolean value.",
          "type": "boolean"
        },
        "dateTimeValue": {
          "$ref": "NlpSemanticParsingProtoActionsOnGoogleDateTime",
          "description": "Represents date or time."
        },
        "numberValue": {
          "description": "Represents number value. In accordance to ParamValue fields(https://source.corp.google.com/piper///depot/google3/third_party/java_src/appactions/proto/app_actions_data.proto;rcl=431529042;l=12)",
          "format": "double",
          "type": "number"
        },
        "stringValue": {
          "description": "Represents a string value.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingQRefAnnotation": {
      "description": "The QRefAnnotator annotates spans of input with freebase-ids and collection-information. NEXT ID TO USE: 41",
      "id": "NlpSemanticParsingQRefAnnotation",
      "properties": {
        "addedByCloseAnswers": {
          "description": "Whether this qref annotation was created by CloseAnswers on Postref. Annotations of this type don't correspond to a particular mention of the entity on the query but rather to an interpretation of the full query.",
          "type": "boolean"
        },
        "annotatedSpan": {
          "description": "A copy of the span of canonical (raw) parser input text corresponding to this annotation.",
          "type": "string"
        },
        "attributeId": {
          "description": "Attribute ID of a personal_summary_node_child.",
          "type": "string"
        },
        "clusterId": {
          "description": "The ID of the cluster (set entity) this entity belongs to.",
          "type": "string"
        },
        "clusterSetScore": {
          "description": "Cluster set qref confidence score.",
          "format": "double",
          "type": "number"
        },
        "clusterSiblingMid": {
          "description": "The set of mids that are members of the same cluster.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "collectionMembership": {
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotationCollectionMembership"
          },
          "type": "array"
        },
        "confidenceScore": {
          "description": "The confidence (in [0, 1]) of the entity being correctly annotated.",
          "format": "double",
          "type": "number"
        },
        "deprecatedEquivalentMids": {
          "description": "DEPRECATED: Equivalent ids (e.g. de-duped mids) for this entity.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "deprecatedMdvcSupportingMid": {
          "description": "DEPRECATED: Higher level id's that support the given id. This field has been deprecated in favor of related_entity. b/27363861",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "displayName": {
          "description": "Copy the display info. This can be used by annotators to give grammars a canonical name for an entity. For instance, the media grammar could use it to output the same canonical name for \"rock music\" and \"rock\".",
          "type": "string"
        },
        "entityNumber": {
          "description": "The index of the entity from which this annotation is obtained, within the WebrefEntities message in the interpretation defined by interpretation_number, above.",
          "format": "int32",
          "type": "integer"
        },
        "entityRelationship": {
          "description": "The relationship information from QRef. Only included if the QRefAnnotator is initialised with include_annotated_relationships.",
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotationEntityRelationship"
          },
          "type": "array"
        },
        "entitySourceData": {
          "$ref": "NlpSemanticParsingEntitySourceData",
          "description": "Holds information about the backends which contributed to this entity."
        },
        "freebaseMid": {
          "description": "The mid of the entity in freebase associated with this span.",
          "type": "string"
        },
        "gaiaId": {
          "description": "The Gaia ID for this entity. This is populated generally for people and businesses.",
          "format": "uint64",
          "type": "string"
        },
        "globalProductClusterId": {
          "description": "The shopping global product cluster id(s) of the annotated entity (in KG, the key(s) of type /business/variant_cluster).",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "interpretationNumber": {
          "description": "The index of the QueryJoin interpretation from which this annotation was obtained. This field is not used for entities coming from low-confidence annotations, since such entities are not included in any interpretation.",
          "format": "int32",
          "type": "integer"
        },
        "isMdvcDimension": {
          "description": "True if this entity is an mdvc dimension of some other annotated entity. Only included if the QRefAnnotator is initialised with include_annotated_relationships.",
          "type": "boolean"
        },
        "isNimbleAnnotation": {
          "description": "Whether this annotation originates from nimble. (go/nimble-annotator)",
          "type": "boolean"
        },
        "location": {
          "$ref": "GeostorePointProto",
          "description": "The center point of this location. This is either directly provided by the FeatureProto.center field or the centroid using the points of the polygon in the FeatureProto."
        },
        "locationType": {
          "description": "The location type of the entity, as an int32 representing a TypeCategory enum value. For example, this could be TYPE_LOCALITY (37) or TYPE_COUNTRY (33). We store this type as an int because including FeatureProto would cause java/com/google/ads/adh/pipeline/bigquery:ProtoCatalog to become too large, resulting in OOM errors.",
          "format": "int32",
          "type": "integer"
        },
        "lowConfidence": {
          "description": "Whether this entity is low confidence. Not used. Currently whitelisted entities below min_confidence threshold are marked as low confidence and maybe not trusted by downstreams.",
          "type": "boolean"
        },
        "matchedLightweightToken": {
          "items": {
            "$ref": "RepositoryWebrefLightweightTokensMatchedLightweightToken"
          },
          "type": "array"
        },
        "mdvcChild": {
          "description": "Nested annotations that represent subparts of the given mdvc full annotation. An MDVC full annotation is outputted as the summary node as the root node, and all the children of it as leaves (mdvc_child). QRef outputs a graph of relationships between the mdvc enties, and for mdvc full the aquatator nests the relevant children inside the summary node's proto.",
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotation"
          },
          "type": "array"
        },
        "mdvcVerticals": {
          "description": "The set of verticals this summary node belongs to.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "mergedImpliedEntity": {
          "description": "A list of any implied entities merged into this annotation during parsing. Order is derivation-dependent.",
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotation"
          },
          "type": "array"
        },
        "merlotCategory": {
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotationMerlotCategoryData"
          },
          "type": "array"
        },
        "otherMetadata": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Metadata to be passed through from the AnnotationContext API."
        },
        "oysterId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The geo oyster_id of the entity, relevant only for locations. Only included if the QRefAnnotator is initialised with include_oyster_id."
        },
        "personalSummaryNodeChild": {
          "description": "Personal summary nodes are compound entities made up of entities and their attributes, where the entities can be compound too. E.g., \"my father's mother\" can have a summary node annotation of \"Mother(Father(Myself))\".",
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotation"
          },
          "type": "array"
        },
        "productLineId": {
          "description": "The shopping product line id(s) of the annotated /business/shopping_product_line entity.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "referenceScore": {
          "description": "The confidence (in [0, 1]) that the annotation is reference that implies another entity. (eg \"my hotel\" in \"navigate to my hotel\" is reference to explicit hotel from user hotel reservation).",
          "format": "float",
          "type": "number"
        },
        "relatedEntity": {
          "description": "Mids related to the given entity",
          "items": {
            "$ref": "NlpSemanticParsingRelatedEntity"
          },
          "type": "array"
        },
        "resolutionScore": {
          "description": "The confidence (in [0, 1]) that the annotation was created on an implicit mention (eg my hotel) as opposed to an explicit mention (eg: the westin copley square)",
          "format": "float",
          "type": "number"
        },
        "sourceTypeList": {
          "$ref": "CopleySourceTypeList",
          "description": "If the annotation was created by using personal data, we record the provenance for that data here."
        },
        "subCluster": {
          "items": {
            "$ref": "NlpSemanticParsingQRefAnnotationSubCluster"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingQRefAnnotationCollectionMembership": {
      "id": "NlpSemanticParsingQRefAnnotationCollectionMembership",
      "properties": {
        "collectionId": {
          "description": "Identifier of the collection. Usually something like \"/collection/us_states\".",
          "type": "string"
        },
        "collectionScore": {
          "description": "A value in [0, 1] indicating the relevance of the collection given this entity. NOTE: This field is deprecated and will stop being populated soon. In the meantime, it will always be populated with 1.0.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingQRefAnnotationEntityRelationship": {
      "id": "NlpSemanticParsingQRefAnnotationEntityRelationship",
      "properties": {
        "entityIndex": {
          "description": "The index of the other entity in the relationship.",
          "format": "int32",
          "type": "integer"
        },
        "impliedBy": {
          "description": "True if this entity is implied by the other (includes geo contains).",
          "type": "boolean"
        },
        "implies": {
          "description": "True if this entity implies the other (includes geo contained by).",
          "type": "boolean"
        },
        "linkPropertyName": {
          "description": "Names of the relationship links.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingQRefAnnotationMerlotCategoryData": {
      "description": "Merlot category information. As of Sep2015, this is derived from collection membership, but as that information is planned for deprecation and may need to be replaced as a source for this data, it is extracted separately.",
      "id": "NlpSemanticParsingQRefAnnotationMerlotCategoryData",
      "properties": {
        "categoryId": {
          "format": "int32",
          "type": "integer"
        },
        "confidence": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingQRefAnnotationSubCluster": {
      "description": "Keeps track of any individual clusters this mid is a member of. Cluster_id and cluster_sibling_mid stores the cluster all together, while the subcluster keeps track of each individual cluster information separately.",
      "id": "NlpSemanticParsingQRefAnnotationSubCluster",
      "properties": {
        "clusterId": {
          "type": "string"
        },
        "clusterSetScore": {
          "format": "double",
          "type": "number"
        },
        "clusterSiblingMid": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingRelatedEntity": {
      "description": "A message that stores relations between this annotation and another entity. Stores the mid and the kind of relationship. These links may be consumed downstream for various purposes, including support transfer and other business logic. An example is for the Honda Civic entity. It may have an mdvc_relation that is a generalization_of the 2015 Honda Civic entity. So the Honda Civic would have the following: RelatedEntity { mid = 2015 Honda Civic Mid mdvc_relation = GENERALIZATION_OF } It has no equivalent_relation because it is by default NO_EQUIVALENT. The Honda Civic entity might then have a separate relation to the Old Honda Civic entity, as they are considered the same entity, or the following relation: RelatedEntity { mid = Old Honda Civic Mid equivalent_relation = EQUIVALENT }",
      "id": "NlpSemanticParsingRelatedEntity",
      "properties": {
        "clusterSupportTransferRelation": {
          "description": "Denotes whether or not the related entity is derived from cluster support transfer.",
          "enum": [
            "NO_CLUSTER_SUPPORT",
            "CLUSTER_SUPPORT"
          ],
          "enumDescriptions": [
            "Indicates the entity has not received support from a MDVC.",
            "Indicates the entity has received support from a MDVC."
          ],
          "type": "string"
        },
        "composedFromRelation": {
          "description": "Denotes whether or not the related entity composes a compound entity together with other related entities.",
          "enum": [
            "NONE_COMPOSED_FROM",
            "COMPOSED_FROM"
          ],
          "enumDescriptions": [
            "Indicates the entity does not compose the other entity.",
            "Indicates the entity composes a compound entity."
          ],
          "type": "string"
        },
        "equivalentRelation": {
          "description": "Whether or not the given mid is related to the other mid. Equivalent mids are usually mutually exclusive with other kinds of relations.",
          "enum": [
            "NO_EQUIVALENT",
            "EQUIVALENT",
            "MUNIN_SYNONYM",
            "SYNONYM"
          ],
          "enumDescriptions": [
            "Not equivalent.",
            "Equivalent to the other entity.",
            "The related entity is a synonym added to Munin interpretation.",
            "The related entity is a synonym."
          ],
          "type": "string"
        },
        "mdvcRelation": {
          "description": "The mdvc relation with the related mid.",
          "enum": [
            "NO_MDVC",
            "GENERALIZATION_OF",
            "SPECIALIZATION_OF",
            "HAS_DIMENSION_VALUE",
            "IS_DIMENSION_OF"
          ],
          "enumDescriptions": [
            "Not an MDVC relation.",
            "This mid is a generalization of the other mid (and the other mid is a specialization of this mid).",
            "This mid is a specialization of the other mid (and the other mid is a generalization of this mid).",
            "This mid has the other mid as a dimension (or attribute) (and the other mid is a dimension of this mid)",
            "This mid is a dimension (or attribute) of the other mid (and the other mid has this mid as dimension)."
          ],
          "type": "string"
        },
        "mid": {
          "description": "Mid that is related.",
          "type": "string"
        },
        "supportTransferRelation": {
          "description": "Denotes whether or not there was support transfer between the two entities.",
          "enum": [
            "NO_SUPPORT_TRANSFER",
            "SUPPORT_TRANSFER_TARGET",
            "SUPPORT_TRANSFER_SOURCE",
            "MENTION_TRANSFER_TARGET",
            "MENTION_TRANSFER_SOURCE",
            "SUPPORT_SHARE_TARGET",
            "SUPPORT_SHARE_SOURCE"
          ],
          "enumDescriptions": [
            "No support transfer occurred.",
            "We transferred support to this entity.",
            "We received support from this entity.",
            "We transferred support for a mention to this entity.",
            "We received support for a mention from this entity.",
            "We shared support with this entity.",
            "We received shared support from this entity."
          ],
          "type": "string"
        },
        "targetIsStbrSource": {
          "description": "Set if the related entity is the source of an STBR rule and the target is not this one.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingSaftCoreference": {
      "description": "Identifies a coreference mention (pronoun or nominal) resolved to an entity.",
      "id": "NlpSemanticParsingSaftCoreference",
      "properties": {
        "category": {
          "description": "Categories can be either a $PronounMention or $NominalMention.",
          "type": "string"
        },
        "rawText": {
          "description": "The substring of the raw query spanned by this annotation.",
          "type": "string"
        },
        "referentText": {
          "description": "The name of the entity this mentions refers to.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingSaftMeasure": {
      "description": "Identifies a measure, like '53 pounds' in a query.",
      "id": "NlpSemanticParsingSaftMeasure",
      "properties": {
        "category": {
          "description": "Defines the category of measure, like $Mass.",
          "type": "string"
        },
        "rawText": {
          "description": "The substring of the raw query spanned by this annotation.",
          "type": "string"
        },
        "value": {
          "description": "The numerical value of the measure.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingSaftMentionAnnotation": {
      "description": "SaftMentionAnnotation(s) are used to identify a sub-span of the input with some semantic relevance, for example PER (Person), LOC (Locations) or measure etc. Each SaftMentionAnnotation will have exactly one non-empty field.",
      "id": "NlpSemanticParsingSaftMentionAnnotation",
      "properties": {
        "coreference": {
          "$ref": "NlpSemanticParsingSaftCoreference",
          "description": "Annotations for spans that are resolved coreference mentions."
        },
        "entity": {
          "$ref": "NlpSemanticParsingSaftSpan",
          "description": "Annotations for spans like \"san francisco giants\"."
        },
        "measure": {
          "$ref": "NlpSemanticParsingSaftMeasure",
          "description": "Annotations for spans \"53 pounds\"."
        },
        "title": {
          "$ref": "NlpSemanticParsingSaftSpan",
          "description": "Annotations for spans like \"the president of the United States\"."
        }
      },
      "type": "object"
    },
    "NlpSemanticParsingSaftSpan": {
      "description": "The lowest common denominator of a SAFT annotation is simply the definition of some |category| for a sub-span of the |raw_text| of the query.",
      "id": "NlpSemanticParsingSaftSpan",
      "properties": {
        "category": {
          "description": "Categories can be either syntactic (NNS for fine-grained-POS) or semantics ($Mass for measures).",
          "type": "string"
        },
        "rawText": {
          "description": "The substring of the raw query spanned by this annotation.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaByte": {
      "description": "A single byte, such as that from a utf8-encoded character sequence.",
      "id": "NlxDataSchemaByte",
      "properties": {
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this character."
        }
      },
      "type": "object"
    },
    "NlxDataSchemaCharacter": {
      "description": "A single Unicode character.",
      "id": "NlxDataSchemaCharacter",
      "properties": {
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this character."
        },
        "paragraph": {
          "$ref": "MultiscalePointerIndex",
          "description": "The paragraph that contains this character."
        },
        "sentence": {
          "$ref": "MultiscalePointerIndex",
          "description": "The sentence that contains this character."
        },
        "text": {
          "description": "The character itself. Must contain valid UTF-8. Must be exactly one Unicode character.",
          "type": "string"
        },
        "token": {
          "$ref": "MultiscalePointerIndex",
          "description": "The token that contains this character."
        }
      },
      "type": "object"
    },
    "NlxDataSchemaDocument": {
      "description": "A single document.",
      "id": "NlxDataSchemaDocument",
      "properties": {
        "author": {
          "description": "The author(s) of this document.",
          "items": {
            "$ref": "MultiscalePointerIndex"
          },
          "type": "array"
        },
        "bytes": {
          "$ref": "MultiscalePointerSpan",
          "description": "The bytes in this document."
        },
        "characters": {
          "$ref": "MultiscalePointerSpan",
          "description": "The characters in this document."
        },
        "id": {
          "description": "The identifier of this document.",
          "type": "string"
        },
        "languageCode": {
          "description": "A set of BCP-47 codes indicating the language(s) of this document.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "languageSpans": {
          "$ref": "MultiscalePointerSpan",
          "description": "The language spans in this document."
        },
        "mentions": {
          "$ref": "MultiscalePointerSpan",
          "description": "The mentions in this document."
        },
        "paragraphs": {
          "$ref": "MultiscalePointerSpan",
          "description": "The paragraphs in this document."
        },
        "sentences": {
          "$ref": "MultiscalePointerSpan",
          "description": "The sentences in this document."
        },
        "text": {
          "description": "The text of this document. Must contain valid UTF-8.",
          "type": "string"
        },
        "tokens": {
          "$ref": "MultiscalePointerSpan",
          "description": "The tokens in this document."
        },
        "url": {
          "description": "The url of this document.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaEntity": {
      "description": "An entity, which may occur multiple times in the text.",
      "id": "NlxDataSchemaEntity",
      "properties": {
        "gender": {
          "description": "Entity gender. Default label set is 'masculine', 'feminine', or 'neuter'. (Perhaps in the future we can split 'neuter' into 'inanimate', 'unknown', and 'non-binary'.)",
          "type": "string"
        },
        "mid": {
          "description": "Machine identifier, such as those from the Freebase database (or similar entity database).",
          "type": "string"
        },
        "name": {
          "description": "Free-form entity name.",
          "type": "string"
        },
        "type": {
          "description": "Entity type, typically something like person/location/organization. The schema for types is not specified. If this entity has a MID, use the mid field instead or in conjunction with the type.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaLanguageSpan": {
      "description": "A span of text that is written using a specified language (or languages). language_spans do not need to cover all of the characters in a text -- in particular, some pieces of text may not use any language. Depending on the model used to generate them, multilingual text can be encoded using overlapping or non- overlapping language_spans; and using one or multiple language_codes per language_span.",
      "id": "NlxDataSchemaLanguageSpan",
      "properties": {
        "bytes": {
          "$ref": "MultiscalePointerSpan",
          "description": "The bytes in this span."
        },
        "characters": {
          "$ref": "MultiscalePointerSpan",
          "description": "The characters in this span."
        },
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this span."
        },
        "languageCode": {
          "description": "A set of BCP-47 codes indicating the language(s) of this span of text.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaMention": {
      "description": "A mention of an entity. A single entity might be mentioned multiple times.",
      "id": "NlxDataSchemaMention",
      "properties": {
        "bytes": {
          "$ref": "MultiscalePointerSpan",
          "description": "The bytes in this mention."
        },
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this mention."
        },
        "entity": {
          "$ref": "MultiscalePointerIndex",
          "description": "The entity that this mention refers to."
        },
        "kind": {
          "description": "Mention kind, typically 'referential', 'attributive', or 'modifier'.",
          "type": "string"
        },
        "text": {
          "description": "The mention text itself. Must contain valid UTF-8.",
          "type": "string"
        },
        "tokens": {
          "$ref": "MultiscalePointerSpan",
          "description": "The token(s) in this mention. This may not be present, or have zero length if representing an implicit mention, as in the prodrop case."
        },
        "type": {
          "description": "Mention type, typically 'named' (for name mentions) or 'nominal'. More types include 'pronominal', 'conjoined' for conjoined mention construction, and 'non-referential' for non-referential pronoun mentions.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaParagraph": {
      "description": "A single paragraph.",
      "id": "NlxDataSchemaParagraph",
      "properties": {
        "bytes": {
          "$ref": "MultiscalePointerSpan",
          "description": "The bytes in this paragraph."
        },
        "characters": {
          "$ref": "MultiscalePointerSpan",
          "description": "The characters in this paragraph."
        },
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this paragraph."
        },
        "sentences": {
          "$ref": "MultiscalePointerSpan",
          "description": "The sentences in this paragraph."
        },
        "text": {
          "description": "The text of this paragraph. Must contain valid UTF-8.",
          "type": "string"
        },
        "tokens": {
          "$ref": "MultiscalePointerSpan",
          "description": "The tokens in this paragraph."
        }
      },
      "type": "object"
    },
    "NlxDataSchemaScaleSet": {
      "description": "Standard NLX data schema.",
      "id": "NlxDataSchemaScaleSet",
      "properties": {
        "byte": {
          "items": {
            "$ref": "NlxDataSchemaByte"
          },
          "type": "array"
        },
        "byteDocumentPresence": {
          "$ref": "MultiscaleFieldPresence",
          "description": "Metadata for which layer (scale) fields are present. WARNING: CURRENT USAGE IS AD HOC, DO NOT RELY ON THESE BEING POPULATED CORRECTLY. This should improve in v2."
        },
        "bytePresence": {
          "$ref": "MultiscaleLayerPresence",
          "description": "Metadata for which layers (scales) are present. WARNING: CURRENT USAGE IS AD HOC, DO NOT RELY ON THESE BEING POPULATED CORRECTLY. This should improve in v2."
        },
        "character": {
          "items": {
            "$ref": "NlxDataSchemaCharacter"
          },
          "type": "array"
        },
        "characterDocumentPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "characterParagraphPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "characterPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "characterSentencePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "characterTextPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "characterTokenPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "document": {
          "items": {
            "$ref": "NlxDataSchemaDocument"
          },
          "type": "array"
        },
        "documentAuthorPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentBytesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentCharactersPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentIdPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentLanguageCodePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentLanguageSpansPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentMentionsPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentParagraphsPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "documentSentencesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentTextPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentTokensPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "documentUrlPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "entity": {
          "items": {
            "$ref": "NlxDataSchemaEntity"
          },
          "type": "array"
        },
        "entityGenderPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "entityMidPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "entityNamePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "entityPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "entityTypePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "languageSpan": {
          "items": {
            "$ref": "NlxDataSchemaLanguageSpan"
          },
          "type": "array"
        },
        "languageSpanBytesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "languageSpanCharactersPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "languageSpanDocumentPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "languageSpanLanguageCodePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "languageSpanPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "mention": {
          "items": {
            "$ref": "NlxDataSchemaMention"
          },
          "type": "array"
        },
        "mentionBytesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "mentionDocumentPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "mentionEntityPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "mentionKindPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "mentionPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "mentionTextPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "mentionTokensPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "mentionTypePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "paragraph": {
          "items": {
            "$ref": "NlxDataSchemaParagraph"
          },
          "type": "array"
        },
        "paragraphBytesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "paragraphCharactersPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "paragraphDocumentPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "paragraphPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "paragraphSentencesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "paragraphTextPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "paragraphTokensPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "sentence": {
          "items": {
            "$ref": "NlxDataSchemaSentence"
          },
          "type": "array"
        },
        "sentenceBytesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "sentenceCharactersPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "sentenceDocumentPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "sentenceParagraphPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "sentencePresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "sentenceTextPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "sentenceTokensPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "token": {
          "items": {
            "$ref": "NlxDataSchemaToken"
          },
          "type": "array"
        },
        "tokenBytesPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenCharactersPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenDependencyHeadPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenDependencyLabelPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenDependencyPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenDocumentPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenParagraphPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenPosPresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenPresence": {
          "$ref": "MultiscaleLayerPresence"
        },
        "tokenSentencePresence": {
          "$ref": "MultiscaleFieldPresence"
        },
        "tokenTextPresence": {
          "$ref": "MultiscaleFieldPresence"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaSentence": {
      "description": "A single sentence or utterance.",
      "id": "NlxDataSchemaSentence",
      "properties": {
        "bytes": {
          "$ref": "MultiscalePointerSpan",
          "description": "The bytes in this sentence."
        },
        "characters": {
          "$ref": "MultiscalePointerSpan",
          "description": "The characters in this sentence."
        },
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this sentence."
        },
        "paragraph": {
          "$ref": "MultiscalePointerIndex",
          "description": "The paragraph that contains this sentence."
        },
        "text": {
          "description": "The text of this sentence. Must contain valid UTF-8.",
          "type": "string"
        },
        "tokens": {
          "$ref": "MultiscalePointerSpan",
          "description": "The tokens in this sentence."
        }
      },
      "type": "object"
    },
    "NlxDataSchemaToken": {
      "description": "A word, punctuation mark, or other small piece of text.",
      "id": "NlxDataSchemaToken",
      "properties": {
        "bytes": {
          "$ref": "MultiscalePointerSpan",
          "description": "The bytes in this token."
        },
        "characters": {
          "$ref": "MultiscalePointerSpan",
          "description": "The characters in this token."
        },
        "dependency": {
          "$ref": "NlxDataSchemaTokenDependencyEdge",
          "description": "DEPRECATED: PLEASE USE dependency_head AND dependency_label FIELDS. One edge of the dependency parse."
        },
        "dependencyHead": {
          "$ref": "MultiscalePointerIndex",
          "description": "The head of this token. By default, the root of the sentence is its own head; it should also have deprel as 'root'."
        },
        "dependencyLabel": {
          "description": "Relation label for this dependency. Generally this should be using the Universal Dependencies label format, using fine-grained labels like nsubj:pass.",
          "type": "string"
        },
        "document": {
          "$ref": "MultiscalePointerIndex",
          "description": "The document that contains this token."
        },
        "paragraph": {
          "$ref": "MultiscalePointerIndex",
          "description": "The paragraph that contains this token."
        },
        "pos": {
          "description": "Coarse part-of-speech tag.",
          "type": "string"
        },
        "sentence": {
          "$ref": "MultiscalePointerIndex",
          "description": "The sentence that contains this token."
        },
        "text": {
          "description": "The text of this token. Must contain valid UTF-8.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NlxDataSchemaTokenDependencyEdge": {
      "description": "DEPRECATED: PLEASE USE dependency_head AND dependency_label FIELDS. One edge of the dependency parse.",
      "id": "NlxDataSchemaTokenDependencyEdge",
      "properties": {
        "deprel": {
          "description": "Relation label for this dependency. Generally this should be using the Universal Dependencies label format, using fine- grained labels like nsubj:pass.",
          "type": "string"
        },
        "head": {
          "$ref": "MultiscalePointerIndex",
          "description": "The head of this token. By default, the root of the sentence is its own head; it should also have deprel as 'root'."
        }
      },
      "type": "object"
    },
    "OceanDataDocinfoWoodwingItemMetadata": {
      "description": "Metadata describing an 'item' (article) in a Woodwing file.",
      "id": "OceanDataDocinfoWoodwingItemMetadata",
      "properties": {
        "author": {
          "type": "string"
        },
        "category": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanDocInfo": {
      "description": "Ocean data in docserver results (whole documents)",
      "id": "OceanDocInfo",
      "properties": {
        "docTag": {
          "$ref": "OceanDocTag",
          "description": "data returned with search docresults (snippets)"
        }
      },
      "type": "object"
    },
    "OceanDocTag": {
      "description": "============> Next available number: 102 (ksridhara) <================",
      "id": "OceanDocTag",
      "properties": {
        "DEPRECATEDApplicationDate": {
          "description": "this is in ONIX format.",
          "type": "string"
        },
        "DEPRECATEDIssueDate": {
          "description": "this is in ONIX format.",
          "type": "string"
        },
        "DEPRECATEDPatentAssignee": {
          "type": "string"
        },
        "DEPRECATEDPatentNumber": {
          "description": "patent-specific fields. ALL DEPRECATED, moved into PatentSpecific group, above.",
          "type": "string"
        },
        "DEPRECATEDPublisherPercentVisible": {
          "description": "Percent rights granted by publisher. This should only be set, and definitely should only be considered, if source_type == BoundVolumeSource::PUBLISHER. '0' may mean we have no info on publisher rights so we have to just assume 0%. Deprecated as this is taken into account by viewability",
          "format": "int32",
          "type": "integer"
        },
        "authors": {
          "description": "TODO(leonid) Deprecate these Authors string for front end.",
          "type": "string"
        },
        "availableDownloads": {
          "description": "A bitmap containing all available download formats (values defined in AvaialableDownloadFormats enum) NOTE: Only populated for Volume level docs",
          "format": "int32",
          "type": "integer"
        },
        "blockSnippet": {
          "type": "boolean"
        },
        "bookspecific": {
          "$ref": "OceanDocTagBookSpecific"
        },
        "catalogspecific": {
          "$ref": "OceanDocTagCatalogSpecific"
        },
        "contentType": {
          "description": "The content type of the document. See BoundVolumeSource::ContentType in ocean/data/volume_types.protodevel for possible values.",
          "format": "int32",
          "type": "integer"
        },
        "contributor": {
          "items": {
            "$ref": "OceanDocTagContributor"
          },
          "type": "array"
        },
        "coverPage": {
          "description": "cover page (PrintedAsSeen string), to generate results snippet thumbnail image urls",
          "type": "string"
        },
        "coverPageSize": {
          "$ref": "OceanImageSize",
          "description": "The size (in pixels) of the full-resolution clean images used for the cover page. The width and height will be zero if no image for that page."
        },
        "editors": {
          "description": "Editors string for front end.",
          "type": "string"
        },
        "encryptedExpressionId": {
          "type": "string"
        },
        "encryptedVolumeId": {
          "type": "string"
        },
        "geoRestrict": {
          "description": "DEPRECATED! Being replaced in favor of viewability, below. geo restrict info (from OceanRights::geo_restrict) In CAv2: geo restrict info (from ocean::VolumeImprintRights::geo_restrict)",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "goodTextDetail": {
          "description": "Text quality as defined in CA_VolumeScoreResult::OACapabilities::TextQualityAssessment Note - This is only populated if good_text() and is_ge_quality() are true",
          "format": "int32",
          "type": "integer"
        },
        "grantableLocale": {
          "description": "List of locales for which this book can be bought from a publisher, and read as a Google eBook. Each locale is a lowercase, two-letter country-code (eg \"ca\"), and is copied from PublisherGrantability.Locale.locale, defined in ocean/data/docinfo/volume_viewability.proto.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isGeQuality": {
          "description": "Set to true if volume has ge quality",
          "type": "boolean"
        },
        "isLandingPage": {
          "description": "whether this a landing page chosen at indexing time.",
          "type": "boolean"
        },
        "magazinespecific": {
          "$ref": "OceanDocTagMagazineSpecific"
        },
        "metadataCoverExists": {
          "description": "metadata_cover_exists will be set if there's a metadata-provided cover thumbnail. the thumbnail will be used for scanless books or when a scanned book is in metadata-only view.",
          "type": "boolean"
        },
        "metadataCoverSize": {
          "$ref": "OceanImageSize",
          "description": "The size (in pixels) of the metadata cover image."
        },
        "newspaperspecific": {
          "$ref": "OceanDocTagNewspaperSpecific"
        },
        "numPages": {
          "description": "Number of pages in this volume (usually as specified in metadata)",
          "format": "int32",
          "type": "integer"
        },
        "objectionableContentBitmap": {
          "description": "A bitmap indicating whether content may be objectionable NOTE: Only populated for volume level docs",
          "format": "int32",
          "type": "integer"
        },
        "pageNumber": {
          "description": "page_number of the page (OceanTypes::PageNumberType) In CAv2: page_number of the page ocean::PageNumber::T",
          "format": "int32",
          "type": "integer"
        },
        "pageid": {
          "description": "pageid of the page (OceanTypes::PageIdType)",
          "format": "int32",
          "type": "integer"
        },
        "pagerank": {
          "description": "the page rank value of the book page",
          "format": "double",
          "type": "number"
        },
        "patentspecific": {
          "$ref": "OceanDocTagPatentSpecific"
        },
        "price": {
          "$ref": "OceanGEPrice",
          "description": "Price information for a volume (per locale). Note existence of a price for a locale implies that the book is sellable for that locale."
        },
        "printedPageNumber": {
          "description": "printed page number (OceanPrintedPageNumber; from OceanPageInfoMap::Page::printed_page_number)",
          "type": "string"
        },
        "refPageUrl": {
          "description": "the URL of the reference page (About this book)",
          "type": "string"
        },
        "searchInBookUrl": {
          "description": "the URL for the \"search in book\"",
          "type": "string"
        },
        "segmentTime": {
          "format": "int32",
          "type": "integer"
        },
        "sourceType": {
          "description": "The source type of the document. See BoundVolumeSource::SourceType in ocean/data/volume_types.protodevel for possible values.",
          "format": "int32",
          "type": "integer"
        },
        "structuredPageNumber": {
          "description": "In CAv2 only: structured page number (printed number as we understand it) (result of ocean::StructuredPageNumberProto::AppendToString)",
          "type": "string"
        },
        "subTitle": {
          "description": "Sub title string for front end",
          "type": "string"
        },
        "subjectBitmap": {
          "description": "Bitmap indicating top-level subjects associated with this document. See ocean/metadata/subjects/util.h for more detail.",
          "format": "byte",
          "type": "string"
        },
        "thumbnailUrl": {
          "description": "the URL of the cover page.",
          "type": "string"
        },
        "title": {
          "description": "Title string for front end.",
          "type": "string"
        },
        "urlKey": {
          "description": "Bibkey to be used as part of the URL (to make them persistent in some sense). This is obtained by doing a GetURLKey() on the bibdata which returns the main bibkey associated with the volume based on priority. This is parseable into an OceanVolumeBibKey (ocean/metadata/bibkeys.h) Note: This should ideally be a required field longer term but for now keeping it optional for compatibility. In case of this being absent, we don't include the key in the URL (just use volumeId as before). Note: For content type books, this key is supplemented by other bibkeys for this volumes(the field is aux_bibkeys)",
          "type": "string"
        },
        "usingActualCover": {
          "description": "using_actual_cover will be set if we are using the actual cover of the book (instead of the table of content, etc.). This is particularly useful to identify books where we inserted a generated cover via Coverups.",
          "type": "boolean"
        },
        "viewability": {
          "$ref": "OceanVolumeViewability",
          "description": "Volume viewability, which defines how/if the volume should be displayed in various locales."
        },
        "volumeType": {
          "format": "int32",
          "type": "integer"
        },
        "volumeVersion": {
          "description": "The version of the volume (serialized form). ONLY populated for Volume level docs",
          "type": "string"
        },
        "workcluster": {
          "$ref": "OceanDocTagWorkCluster"
        }
      },
      "type": "object"
    },
    "OceanDocTagBookSpecific": {
      "description": "Book specific fields. ",
      "id": "OceanDocTagBookSpecific",
      "properties": {
        "auxBibkeys": {
          "description": "These are other bibkeys for this book beside the url_key, which is the primary key. For example, a book may have ISBN, OCLC num etc. In that case ISBN is the url_key and the OCLC number is the auxillary bibkey. The aux_bibkeys should have the same form as the url_key",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "imprint": {
          "type": "string"
        },
        "numRatingHalfStars": {
          "format": "int32",
          "type": "integer"
        },
        "numberingrange": {
          "items": {
            "$ref": "OceanDocTagBookSpecificNumberingRange"
          },
          "type": "array"
        },
        "partnerId": {
          "description": "publisher id, if available",
          "format": "int64",
          "type": "string"
        },
        "productEditionNumber": {
          "description": "Set if the book is one of several editions or versions. Used by OFE to show numbered editions. The value is copied from clustering information. See also ocean/metadata/proto/bibdata_components.proto The value there is from metadata records by ocean/metadata/parsing/parse_utils.cc, and is a 1-based value.",
          "format": "int32",
          "type": "integer"
        },
        "publicationDate": {
          "description": "In the format yyyy.mm.dd, or possibly just yyyy.",
          "type": "string"
        },
        "publisherName": {
          "type": "string"
        },
        "subject": {
          "description": "Subject (from Bisac)",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanDocTagBookSpecificNumberingRange": {
      "description": "These are copies of MetadataNumberingRange's from ocean/metadata/metadata_range.proto. They should be used for rendering volume numbering information in search results (as this protobuf is the only piece of data available at that point). The numbering can look like \"Volume 1\" or \"Parts A-D\" Schema is volume/part/etc, type arabic number/roman number/letter/etc (these are both enums from ocean/metadata/metadata_enums.proto). In most cases there is only one numbering range (e.g. \"Volume 1, Issue 2\"), but in general the ranges may be disjoint (e.g. \"Volumes 2, 3 and 7\")",
      "id": "OceanDocTagBookSpecificNumberingRange",
      "properties": {
        "endNumbering": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "numberType": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "numberingSchema": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "startNumbering": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "OceanDocTagCatalogSpecific": {
      "description": "catalog-specific fields.",
      "id": "OceanDocTagCatalogSpecific",
      "properties": {
        "latest": {
          "description": "Is this the latest issue of this catalog series? This is required to filter results if the latest restrict is on.",
          "type": "boolean"
        },
        "publicationDate": {
          "description": "time_t date corresponding to the catalog publication date. Approximate when the catalog does not have an exact \"date\" of publication, e.g. For \"Spring 2002\", year, month and day are 2002, 03 and 21, respectivley. This value is used to compare catalog issues to determine the latest. The value is stored in seconds-since-epoch, 1/1/1970. This is not a problem for catalogs because we are not dealing with any catalogs from before the 70's.",
          "format": "int32",
          "type": "integer"
        },
        "publicationTimeToDisplay": {
          "description": "String to be displayed as catalog publication time, e.g. \"Spring 2002\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanDocTagContributor": {
      "description": "The composite descriptor of the contributors that should be known to search and front end. Both fields are required. Replaces authors and editors strings.",
      "id": "OceanDocTagContributor",
      "properties": {
        "name": {
          "type": "string"
        },
        "type": {
          "description": "ContributionType enum from ocean/metadata/metadata_enums.proto Note that we pick only the \"highest-ranking\" contribution (i.e. writer and editor would collapse to \"writer\".",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "OceanDocTagMagazineSpecific": {
      "description": "Magazine-specific fields. See https://www.corp.google.com/eng/designdocs/scanning/magazines/designdoc.html for magazine design doc.",
      "id": "OceanDocTagMagazineSpecific",
      "properties": {
        "displayDate": {
          "description": "A human-readable date for display in the UI. Unlike \"publication_date_\" above, this should not be parsed into structured data, but should only be displayed as is.",
          "type": "string"
        },
        "issueDescription": {
          "description": "Description specific to a magazine issue, such as featured articles and article summaries.",
          "type": "string"
        },
        "issueEnd": {
          "format": "int32",
          "type": "integer"
        },
        "issueStart": {
          "format": "int32",
          "type": "integer"
        },
        "item": {
          "description": "Items within a magazine issue.",
          "items": {
            "$ref": "OceanDataDocinfoWoodwingItemMetadata"
          },
          "type": "array"
        },
        "otherNumberingEnd": {
          "format": "int32",
          "type": "integer"
        },
        "otherNumberingSchema": {
          "description": "NOTE: These should to be values from MetadataNumberingSchema; when this becomes a proto2, we can use MetadataEnums values.",
          "format": "int32",
          "type": "integer"
        },
        "otherNumberingStart": {
          "description": "For season or quarter dates.",
          "format": "int32",
          "type": "integer"
        },
        "pageToItem": {
          "description": "For each page of a magazine, maps to the item index of \"item\".",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "publicationDateEnd": {
          "type": "string"
        },
        "publicationDateStart": {
          "type": "string"
        },
        "serialTitle": {
          "description": "This is used to render the metadata line of the snippet and should be present in all magazine documents.",
          "type": "string"
        },
        "serialVolumeid": {
          "format": "int64",
          "type": "string"
        },
        "volume": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "OceanDocTagNewspaperSpecific": {
      "description": "Newspaper-specific fields.",
      "id": "OceanDocTagNewspaperSpecific",
      "properties": {
        "articleRollCoords": {
          "description": "Newspaper Article Roll Coordinates used to figure out the location of the article wrt the page. It is of the form x,y.",
          "type": "string"
        },
        "newspaperDate": {
          "description": "Atlantis specific. Deprecated.",
          "format": "double",
          "type": "number"
        },
        "newspaperName": {
          "type": "string"
        },
        "newspaperUrl": {
          "description": "Atlantis specific. Deprecated.",
          "type": "string"
        },
        "publicationDate": {
          "description": "These fields are only populated for Santorini (newspapers on goovols) formatted newspapers, not for Atlantis: YYYY.MM.DD format.",
          "type": "string"
        },
        "publisher": {
          "description": "Atlantis specific. Deprecated.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanDocTagPatentSpecific": {
      "description": "Patent specific fields. Currently empty, but need to move the fields below into here at a later date",
      "id": "OceanDocTagPatentSpecific",
      "properties": {
        "applicationDate": {
          "description": "this is in ONIX format.",
          "type": "string"
        },
        "contentLanguage": {
          "description": "2-letter language of the document such as \"en\" or \"fr\" This field was created for plumbing in the OFE API intl patent flow, and is probably not otherwise filled in.",
          "type": "string"
        },
        "docType": {
          "format": "int32",
          "type": "integer"
        },
        "documentNumber": {
          "description": "Just the number, no bibkey prefix. Called 'doc number' b/c it could be patent number for patents, application number for applications.",
          "type": "string"
        },
        "domesticClassification": {
          "description": "US and Int'l patent classification codes for \"related patents\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "internationalClassification": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "issueDate": {
          "description": "this is in ONIX format.",
          "type": "string"
        },
        "patentAssignee": {
          "type": "string"
        },
        "publicationNumber": {
          "description": "For applications, the 'publication number' Something like US20071234567A1: 'US' prefix, 4 digit year, 7 digit serial number, 2 character code, all stuck together.",
          "type": "string"
        },
        "relativeThumbnailPath": {
          "description": "Path identifying the image used for the thumbnail of this patent. e.g. \"EP1234567B1/imgf0001.png\" The client is expected to fill in the rest of the url such as: https://patentimages.storage.googleapis.com/thumbnails/EP1234567B1/imgf0001.png",
          "type": "string"
        },
        "tenCharUsClassification": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "OceanDocTagWorkCluster": {
      "description": "Details of the work cluster for this Volume.",
      "id": "OceanDocTagWorkCluster",
      "properties": {
        "clusterSize": {
          "format": "int32",
          "type": "integer"
        },
        "workId": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanGEMoney": {
      "description": "A container proto to store prices for GE",
      "id": "OceanGEMoney",
      "properties": {
        "amountInMicros": {
          "description": "amount in micros. 1 is represented 1000000",
          "format": "int64",
          "type": "string"
        },
        "currencyCode": {
          "description": "The currency codes come from google3/i18n/identifiers/currencycode.h.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanGEPrice": {
      "description": "GE sale related data",
      "id": "OceanGEPrice",
      "properties": {
        "locale": {
          "items": {
            "$ref": "OceanGEPriceLocale"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "OceanGEPriceLocale": {
      "id": "OceanGEPriceLocale",
      "properties": {
        "locale": {
          "description": "The two character ISO country code",
          "type": "string"
        },
        "offerPrice": {
          "$ref": "OceanGEMoney",
          "description": "Price used for sale by the OFE"
        },
        "onSaleTimeSecs": {
          "description": "The time (in secs from epoch) the content goes on sale (only set when the book is not already sellable at the time of indexing).",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanImageSize": {
      "description": "Size info of an image.",
      "id": "OceanImageSize",
      "properties": {
        "height": {
          "description": "pixels",
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "description": "pixels",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "OceanLocaleViewability": {
      "description": "How a volume may be viewed in a particular locale. Next available ID: 25 (ikkwong)",
      "id": "OceanLocaleViewability",
      "properties": {
        "accessRights": {
          "$ref": "OceanVolumeAccessRights",
          "description": "These capture \"commercial\" contract related access rights provided by partners for a volume."
        },
        "allowAddingFrontmatterToPreview": {
          "description": "Are we allowed to add all the front matter to the preview in addition to the preview amount that is from percent_book_shown? This means the front matter becomes freely previewable and does not count towards the previewable amount based on the percentage.",
          "type": "boolean"
        },
        "allowContinuousBrowse": {
          "description": "By default, we allow continuous browse. PFE provides a means for partners to opt out entirely or just specific books.",
          "type": "boolean"
        },
        "allowRetailSyndication": {
          "description": "whether OFE should display this volume in syndicated search results",
          "type": "boolean"
        },
        "bibkey": {
          "description": "The bibkey upon which this viewability information is based.",
          "type": "string"
        },
        "canDisplayAds": {
          "description": "Whether we can show ads with this book in this locale.",
          "type": "boolean"
        },
        "canDownloadEpub": {
          "description": "In future, we will generate epub iff can_download_epub = true irrespective of viewability or download pdf state.",
          "type": "boolean"
        },
        "canDownloadPdf": {
          "description": "In future, we will generate PDF iff can_download_pdf = true irrespective of viewability.",
          "type": "boolean"
        },
        "canShowLibraryLinks": {
          "description": "Whether to show library links for the books in this imprint.",
          "type": "boolean"
        },
        "canShowPhotos": {
          "description": "Whether we can show photos for this book in this locale.",
          "type": "boolean"
        },
        "canUseMetadataCover": {
          "description": "It should be OK to use metadata covers normally, but we allow publishers to explicitly disallow them.",
          "type": "boolean"
        },
        "clientId": {
          "description": "The client who provided the rights for this bibkey, and who should receive revenue derived from this book in this locale. This will only be present when we receive explicit rights from a publisher.",
          "type": "string"
        },
        "computedAccessRights": {
          "$ref": "OceanVolumeComputedAccessRights",
          "description": "Volume related access rights that are computed by Goovols Syncher from partner and book metadata. This complements VolumeAccessRights. This message is used to capture \"commerical\" contracts that are computed from other sources. Any future computed rights that are not related to volume access should go into a new message."
        },
        "dates": {
          "$ref": "OceanLocaleViewabilityDates"
        },
        "displayDetails": {
          "$ref": "OceanVolumeDisplayDetails",
          "description": "Volume display specific attributes are kept in display_details"
        },
        "metadataViewMayIncludeInfoFromScans": {
          "description": "This only applies when view_type == VIEW_METADATA and controls whether we're allowed to include scanned info (keywords, toc, etc). in the metadata-view. For books in metadata view because they have been opted out, this would be false.",
          "type": "boolean"
        },
        "metadataViewSampleAllowed": {
          "description": "This only applies when view_type == VIEW_METADATA and controls whether we're allowed to include a text sample even for a metadata view book.",
          "type": "boolean"
        },
        "percentBookShown": {
          "description": "How much of the book can be viewed in this locale. Will be 100 for VIEW_FULL; 0 for VIEW_SNIPPET_, VIEW_NONE and VIEW_METADATA; and some value between 0 and 100 (exclusive) for VIEW_PARTIAL.",
          "format": "int32",
          "type": "integer"
        },
        "publicDomain": {
          "description": "If present, this is the rights policy's determination of the public domain status. (Of course, this determination is generally conservative (i.e. false negatives are likely), though exactly how conservative may depend on parameters to the rights policy.) If absent, public domain status can be inferred from view_type and view_reason, but that isn't quite perfectly reliable: view_type should always be VIEW_FULL for public domain, but view_reason might be REASON_PUBLIC_DOMAIN (definitely public domain, obviously), some other value, or absent. In the future, new viewabilities should always have this field whenever possible.",
          "type": "boolean"
        },
        "sourcedetails": {
          "$ref": "OceanLocaleViewabilitySourceDetails"
        },
        "viewReason": {
          "description": "The reason for the view_type.",
          "enum": [
            "REASON_UNKNOWN",
            "REASON_NO_SOURCE",
            "REASON_KILLED",
            "REASON_CONTENT_TYPE",
            "REASON_SCANLESS",
            "REASON_OPTED_OUT",
            "REASON_QUALITY",
            "REASON_INSUFFICIENT_PAGES",
            "REASON_PARTNER",
            "REASON_REFERENCE",
            "REASON_COPYRIGHT",
            "REASON_PUBLIC_DOMAIN",
            "REASON_NEW_COURTESY",
            "REASON_LIBRARY_RESTRICT",
            "REASON_INDEXING_OVERRIDE",
            "REASON_UPLIFTED",
            "REASON_OUTSTANDING_QUESTIONS",
            "REASON_NO_VALID_SCANJOBS",
            "REASON_OPEN_ACCESS_DEPRECATED"
          ],
          "enumDescriptions": [
            "",
            "Don't know the source of the volume:",
            "Volume was killed:",
            "This content type always has this view_type:",
            "",
            "",
            "Insufficient scan quality:",
            "Insufficient number of image pages:",
            "Partner-specified view:",
            "Metadata view: copyrighted reference doc:",
            "Snippet view: still under copyright:",
            "Full view: public domain (unspecified reason):",
            "New book; metadata view as publisher courtesy:",
            "Library partner doesn't allow snippets:",
            "Overridden in indexing:",
            "Copyright holder explicitly allowed this:",
            "Human QA questions for the book have been queued but not answered:",
            "",
            "Deprecated. We keep these in case there still is production data that contains the value. Source is OPEN_ACCESS."
          ],
          "type": "string"
        },
        "viewType": {
          "description": "The viewability specified for this locale.",
          "enum": [
            "VIEW_NONE",
            "VIEW_METADATA",
            "VIEW_SNIPPET",
            "VIEW_FIXED",
            "VIEW_PARTIAL",
            "VIEW_FULL"
          ],
          "enumDescriptions": [
            "The user cannot view any information about the book.",
            "The user cannot view pages at all, but can view metadata about the book.",
            "The user cannot view entire pages, but only snippets extracted from pages.",
            "The user can view only fixed pages from the book. The fixed pages generally contain first 10% for book content (chapter 1 in most cases). (ignore TOC, preface etc.) Keeping it in between snippet & partial",
            "The user can view only some fraction of the pages from the book. The exact set of allowed pages is determined separately.",
            "The user has unrestricted access to all pages of the book."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanLocaleViewabilityDates": {
      "description": "Viewability related dates.",
      "id": "OceanLocaleViewabilityDates",
      "properties": {
        "effectiveDate": {
          "description": "If specified, the LocaleViewability will become effective on this date. This field is used to allow pre-indexing of future books which will become viewable and searchable according to the LocaleViewability on the specified date. Before the effective date, the volume will have scanless-like VIEW_METADATA viewability. For details, see the design document at http://go/oceanviewabilityeffectivedate. The date is expressed as the number of seconds since the Unix epoch.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanLocaleViewabilitySourceDetails": {
      "description": "How did we derive this viewability for this locale+volume? For \"partner\" books, this includes details about the \"Imprint\" that provided the rights. These details specify things such as preferred buy-the-book-url to show in the frontend.",
      "id": "OceanLocaleViewabilitySourceDetails",
      "properties": {
        "imprint": {
          "$ref": "OceanVolumeImprint"
        }
      },
      "type": "object"
    },
    "OceanPerDocData": {
      "description": "Per-doc data in the Ocean index. Ocean indexing details are in https://www/eng/designdocs/scanning/ocean-indexing.html",
      "id": "OceanPerDocData",
      "properties": {
        "flags": {
          "description": "rights, mask-availability, porn, etc.",
          "format": "uint64",
          "type": "string"
        },
        "numPages": {
          "format": "int32",
          "type": "integer"
        },
        "pageNumber": {
          "description": "1-based",
          "format": "int32",
          "type": "integer"
        },
        "pageid": {
          "format": "int32",
          "type": "integer"
        },
        "volumeid": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanVolumeAccessRights": {
      "id": "OceanVolumeAccessRights",
      "properties": {
        "allowAutoGeneratedText": {
          "description": "If false, then we can only provide text layer generated from publisher provided epub.",
          "type": "boolean"
        },
        "canShowInfoCards": {
          "description": "Whether we can show info cards inside this book.",
          "type": "boolean"
        },
        "canShowPhotos": {
          "description": "Whether we can show photos inside this book.",
          "type": "boolean"
        },
        "numAdeDeviceAllowed": {
          "description": "Maximum number of Adobe Digital Editions device per sale item allowed. 0 means no download allowed. -1 means unlimited download.",
          "format": "int32",
          "type": "integer"
        },
        "numAdobeIdAllowed": {
          "description": "Maximum number of Adobe id per sale item allowed. 0 means no download allowed. -1 means unlimited download.",
          "format": "int32",
          "type": "integer"
        },
        "numDownloadsAllowed": {
          "description": "Max. number of Google eBooks downloads allowed. This is related to iPhone/iPad/Androrid/WebReader reading, not to epub/pdf downloads. 0 means no download allowed. This is related to bug #3094719.",
          "format": "int32",
          "type": "integer"
        },
        "numSimultaneousAccess": {
          "description": "Number of readers can read the Google eBooks simultaneously",
          "format": "int32",
          "type": "integer"
        },
        "offlineDownload": {
          "description": "Download type for offline reading",
          "enum": [
            "NO_DOWNLOAD",
            "DRM_FREE_DOWNLOAD",
            "ACS4_DOWNLOAD"
          ],
          "enumDescriptions": [
            "The user cannot download any form of epub/pdf for offline reading. Some publishers like MacMillan does not want to allow ACS4 downloads, so iff the following bit is set then we don't allow any epub/pdf downloads for offline reading.",
            "The user can download DRM free version of epub/pdf for offline reading.",
            "The user can dlownload ACS4 encrypted epub/pdf for offline reading."
          ],
          "type": "string"
        },
        "percentCopyable": {
          "description": "How much of a volume we allow user to extract as text (for copy+paste)",
          "format": "int32",
          "type": "integer"
        },
        "percentPrintable": {
          "description": "How much of a volume we allow user to print",
          "format": "int32",
          "type": "integer"
        },
        "restrictOnlyToText": {
          "description": "True iff restrict view only to epub text. Don't show page images if this is true. Some pubs don't have copyright for page layout and fonts.",
          "type": "boolean"
        },
        "sellFixedLayoutAsImageOnly": {
          "description": "Whether we sell fixed layout as image only.",
          "type": "boolean"
        },
        "textToSpeech": {
          "description": "Whether text to speech is allowed",
          "type": "boolean"
        },
        "treatAsPublicDomain": {
          "description": "Whether we treat this book as public domain.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "OceanVolumeComputedAccessRights": {
      "description": "Volume related access rights that are computed by Goovols Syncher from partner and book metadata. This complements VolumeAccessRights. Next available ID: 4 (kblass)",
      "id": "OceanVolumeComputedAccessRights",
      "properties": {
        "canFamilyShare": {
          "description": "Whether this book can be shared with family members.",
          "type": "boolean"
        },
        "panelizationFeatureInternalOnly": {
          "description": "Whether the panelization feature is enabled for internal users only.",
          "type": "boolean"
        },
        "viewableInternalOnly": {
          "description": "Whether the book is viewable for internal users only.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "OceanVolumeDisplayDetails": {
      "description": "This message describes display attributes. The attributes which are applicable to OFE not indexing (mustang), should be added in this proto.",
      "id": "OceanVolumeDisplayDetails",
      "properties": {
        "ccLicense": {
          "description": "The creative commons license specified, Please refer ocean.CreativeCommonsLicenseType.Type for enum values Not exposed in Partner Frontend anymore.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "OceanVolumeImprint": {
      "description": "Commercial information for a volume (data from the Imprint PublishersVolumeInfo table in the db). An imprint is a subdivision of a publisher (for example, Bantam Books is an imprint of Randon House), or can even be just a grouping of volumes with common commercial attributes.",
      "id": "OceanVolumeImprint",
      "properties": {
        "accessRights": {
          "$ref": "OceanVolumeAccessRights",
          "description": "These capture \"commercial\" contract related access rights provided by partners for a volume."
        },
        "adsId": {
          "description": "Id used in the google ads system",
          "type": "string"
        },
        "allowAddingFrontmatterToPreview": {
          "description": "Are we allowed to add all the front matter to the preview in addition to the preview amount that is from percent_book_shown?",
          "type": "boolean"
        },
        "allowContinuousBrowse": {
          "description": "By default, we allow continuous browse. PFE provides a means for partners to opt out entirely or just specific books. This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "type": "boolean"
        },
        "allowRetailSyndication": {
          "description": "By default, we allow retailer syndication. PFE provides a means for partner to opt out. This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "type": "boolean"
        },
        "author": {
          "description": "Beware: the author strings are not in fixed format..these can be comma separated or 'and' separated or have extra terms like 'et al' and sometimes have weird ones like 'no author' as these are fed in via a somewhat flexible free text tool.",
          "type": "string"
        },
        "bibkey": {
          "description": "Commercial info comes with book identifiers like ISBN(or some bibkey), Title, Author. Passing these along as well with the commercials for better book identification/link up with rights.",
          "type": "string"
        },
        "buyTheBookText": {
          "description": "Text to display in the buy-the-book blurb",
          "type": "string"
        },
        "buyTheBookUrl": {
          "description": "ISBN/ISSN-parameterized URL to the imprint's site for buying a book. For ISBN-parameterized links, the ISBN value will be substituted in the cannonical 13-digit form.",
          "type": "string"
        },
        "canDownloadEpub": {
          "description": "iff true volume is available as Google Edition. This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "type": "boolean"
        },
        "canDownloadPdf": {
          "description": "iff true and VIEW_TYPE=FULL_VIEW, then we will allow PDF download This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "type": "boolean"
        },
        "canShowLibraryLinks": {
          "description": "Whether to show library links for the books in this imprint. This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "type": "boolean"
        },
        "canUseMetadataCover": {
          "description": "It should be OK to use metadata covers normally, but we allow publishers to explicitly disallow them. This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "type": "boolean"
        },
        "disableOtherBuyTheBookLinks": {
          "description": "Whether to disable other btb links for the books in this imprint. Show only btb link from this partner and remove everything else.",
          "type": "boolean"
        },
        "displayDetails": {
          "$ref": "OceanVolumeDisplayDetails",
          "description": "Volume display specific attributes are kept in display_details This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability."
        },
        "geBibkey": {
          "description": "The ISBN supplied by publisher (or Google) for the Google Edition e-book. One day it should be an attribute of the tome cluster.",
          "type": "string"
        },
        "imprintId": {
          "description": "The imprint id from the ocean devel db for this imprint.",
          "format": "int64",
          "type": "string"
        },
        "imprintName": {
          "type": "string"
        },
        "imprintUrl": {
          "description": "URL to the imprint's website, to go to upon a click on the logo",
          "type": "string"
        },
        "logoHeight": {
          "format": "int32",
          "type": "integer"
        },
        "logoLocation": {
          "description": "URL/location for the imprint's logo to display",
          "type": "string"
        },
        "logoWidth": {
          "description": "The logo image's geometry",
          "format": "int32",
          "type": "integer"
        },
        "percentBookShown": {
          "description": "Percentage of book we are allowed to display This will be deprecated once UpdateVolumesReqHandler returns VolumeViewability.",
          "format": "int32",
          "type": "integer"
        },
        "promotionalText": {
          "type": "string"
        },
        "promotionalUrl": {
          "description": "We may allow imprints to run promotional campaigns. The following fields capture the blurb to display and the URL (ISBN-parameterized) link to provide.",
          "type": "string"
        },
        "publishedImprintName": {
          "description": "Sometimes the Publisher/Imprint Name the book is published under is different from the current name and we may have this information.",
          "type": "string"
        },
        "pviRowid": {
          "description": "Need a unique identifier for PFE records, using PVI ID",
          "format": "int64",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "useBibdata": {
          "description": "Some records are deactivated, suppressed or excluded; we still want to hear about them, but we aren't going to be using their bibdata",
          "type": "boolean"
        },
        "verticalType": {
          "enum": [
            "BOOK",
            "JOURNAL",
            "MAGAZINE",
            "NEWSPAPER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "OceanVolumeViewability": {
      "id": "OceanVolumeViewability",
      "properties": {
        "DEPRECATEDDefaultViewType": {
          "format": "int32",
          "type": "integer"
        },
        "defaultViewability": {
          "$ref": "OceanLocaleViewability",
          "description": "The viewability for any locale that is not explicitly listed."
        },
        "inViewabilityLimbo": {
          "description": "DEPRECATED: Viewability-Limbo was a state that prevented indexing from running if the viewability of a volume had dropped significantly. It was removed during viewability refactoring: http://go/viewability",
          "type": "boolean"
        },
        "locale": {
          "items": {
            "$ref": "OceanVolumeViewabilityLocale"
          },
          "type": "array"
        },
        "updatedByIndexer": {
          "description": "Whether the volume viewability was updated by the indexer as opposed to a direct update in goovols. The absense of this bit will indicate to the indexer that it should not short-circuit indexing side effects that should occur when viewability changes.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "OceanVolumeViewabilityLocale": {
      "id": "OceanVolumeViewabilityLocale",
      "properties": {
        "DEPRECATEDViewType": {
          "format": "int32",
          "type": "integer"
        },
        "locale": {
          "description": "The two-character ISO country code for the locale.",
          "type": "string"
        },
        "viewability": {
          "$ref": "OceanLocaleViewability",
          "description": "The viewability specified for this locale."
        }
      },
      "type": "object"
    },
    "OcrPhotoBoundingBox": {
      "description": "Bounding box of patch containing line, word or symbol.",
      "id": "OcrPhotoBoundingBox",
      "properties": {
        "angle": {
          "description": "Angle of rotation of (in degrees, clockwise is positive) of the box about the top-left corner.",
          "format": "float",
          "type": "number"
        },
        "curvedBox": {
          "$ref": "OcrPhotoCurvedBoundingBox",
          "description": "Sequence of rotated boxes that tightly enclose the text."
        },
        "height": {
          "description": "Box height (bottom pixels at top + height - 1).",
          "format": "int32",
          "type": "integer"
        },
        "left": {
          "description": "x coordinate of top-left corner",
          "format": "int32",
          "type": "integer"
        },
        "top": {
          "description": "y coordinate of top-left corner",
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "description": "Box width (rightmost pixels at left + width - 1).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "OcrPhotoCurve": {
      "description": "Copy of ocr/goodoc/layout-common.proto:CurvedBoundingBox, temporary duplicated here to allow for on-device builds.",
      "id": "OcrPhotoCurve",
      "properties": {
        "points": {
          "description": "The sequence of points that approximate the curve.",
          "items": {
            "$ref": "OcrPhotoCurvePoint"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "OcrPhotoCurvePoint": {
      "id": "OcrPhotoCurvePoint",
      "properties": {
        "x": {
          "format": "double",
          "type": "number"
        },
        "y": {
          "description": "NOTE: if we wish to support perspective (varying thickness), later on we could extend this message with a thickness field. In that case, CurvedBoundingBox.thickness() would be used as a default if !Point.has_thickness().",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "OcrPhotoCurvedBoundingBox": {
      "id": "OcrPhotoCurvedBoundingBox",
      "properties": {
        "midLineCurve": {
          "$ref": "OcrPhotoCurve",
          "description": "The curve of points along the middle of the text line."
        },
        "thickness": {
          "description": "If top_to_bottom is true, this is the width of the curved box. Otherwise, it is the height of the curved box.",
          "format": "double",
          "type": "number"
        },
        "topToBottom": {
          "description": "If true, the curve is interpreted as top to bottom of the line image. Otherwise, it is from left to right.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "OcrPhotoTextBox": {
      "description": "Text with bounding box.",
      "id": "OcrPhotoTextBox",
      "properties": {
        "blockId": {
          "description": "ID of the text block that this line belongs to.",
          "format": "int32",
          "type": "integer"
        },
        "box": {
          "$ref": "OcrPhotoBoundingBox",
          "description": "Text bounding box."
        },
        "contentType": {
          "description": "Content type for this box.",
          "enum": [
            "TEXT",
            "HANDWRITTEN_TEXT",
            "IMAGE",
            "LINE_DRAWING",
            "SEPARATOR",
            "UNREADABLE_TEXT",
            "FORMULA",
            "HANDWRITTEN_FORMULA",
            "NOT_ANNOTATED",
            "SIGNATURE",
            "UNKNOWN",
            "CUSTOM"
          ],
          "enumDescriptions": [
            "printed text",
            "",
            "",
            "",
            "e.g. a dividing line",
            "An entity that's recognizably text, but that can't be read. For example, this can be used for human-generated evaluation data where the human evaluator wasn't able to read the text, couldn't input it, or there was too much text to read.",
            "Formula: a mathematical or chemical formula.",
            "Same as FORMULA, but handwritten.",
            "Signifies that we may not rely on annotations of this type in this region. For example, NOT_ANNOTATED paragraph means that we should ignore other entities within this region, allowing any engine results. Commonly known as 'DO NOT CARE'. See cl/244428520 for discussion.",
            "Signature or intitals.",
            "Note that due to the fact that the default value is TEXT, parsing a ContentType with an unsupported value will result in TEXT, not UNKNOWN.",
            "This entity has content of a user defined type, for example social security number or address. The recognizer_script_id field below may be used to communicate information to mutators about how to handle this entity. If some custom entities require more information for proper handling we can add an Any field."
          ],
          "type": "string"
        },
        "symbolWidths": {
          "description": "Optional width of characters in the text.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "text": {
          "description": "Text string.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OfficialPagesOfficialKey": {
      "description": "This proto is used as the key for official pages data. WARNING WARNING WARNING WARNING WARNING PAY ATTENTION HERE! The query field contains a specially NORMALIZED query, NOT a raw one. You can get a normalized query in several ways: 1. from an squery with NormalizedQueryFromSquery 2. from a CJK-segmented and punctuation-stripped query with NormalizeText (NOTE: navboost queries are already CJK-segmented and punctuation-stripped, you can just pass them to NormalizeText) 3. from user text/query with CanonicalizeText (this will do the CJK segmenting, punctuation stripping and character normalization for you) All of these functions are in ./utils/external-utils.h",
      "id": "OfficialPagesOfficialKey",
      "properties": {
        "country": {
          "type": "string"
        },
        "language": {
          "format": "int32",
          "type": "integer"
        },
        "query": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "OfficialPagesQuerySet": {
      "id": "OfficialPagesQuerySet",
      "properties": {
        "queries": {
          "items": {
            "$ref": "OfficialPagesOfficialKey"
          },
          "type": "array"
        },
        "queryCountryLanguageFingerprints": {
          "description": "This is the fingerprint of the OfficialKey queries in the queries field. The index of a fingerprint in this field corresponds to the index of the fingerprinted query in the queries field. The fingerprint is produced with the QueryCountryLanguageFingerprint function in external-utils.h",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "OrionDocEntitiesProto": {
      "id": "OrionDocEntitiesProto",
      "properties": {
        "docid": {
          "format": "uint64",
          "type": "string"
        },
        "encodedEntity": {
          "description": "This is encoded using EntityCandidate::Encode",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "PairwiseQScoringData": {
      "id": "PairwiseQScoringData",
      "properties": {
        "confidenceValue": {
          "format": "float",
          "type": "number"
        },
        "value": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PairwiseQVersionedItem": {
      "description": "Message representing a versioned PairwiseQ scores used for experimentation. This protobuf is copied from quality_nsr_pairwiseq::PairwiseQVersionedItem.",
      "id": "PairwiseQVersionedItem",
      "properties": {
        "confidenceValue": {
          "description": "The PairwiseQ confidence value corresponding to this version.",
          "format": "float",
          "type": "number"
        },
        "value": {
          "description": "The PairwiseQ value corresponding to this version.",
          "format": "float",
          "type": "number"
        },
        "versionId": {
          "description": "The version id.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "PeoplestackFlexorgsProtoInternalExternal": {
      "id": "PeoplestackFlexorgsProtoInternalExternal",
      "properties": {
        "application": {
          "description": "All evaluations are done within the context of a given application, e.g., \"Gmail\" and should not be reused in other apps.",
          "enum": [
            "UNKNOWN_APPLICATION",
            "GPLUS",
            "GPLUS_WEB",
            "GPLUS_ARES_FEATURE_PROVIDER",
            "GPLUS_PHOTOS",
            "GPLUS_HANGOUT",
            "GPLUS_EVENTS",
            "GPLUS_SQUARES",
            "GPLUS_NOTIFICATIONS",
            "GPLUS_GAMES",
            "GPLUS_WHATS_HOT",
            "GPLUS_LOCAL",
            "GPLUS_PLUS_PAGES",
            "GPLUS_PLUS_PAGES_RSS",
            "GPLUS_PROFILE",
            "GPLUS_FIND_PEOPLE",
            "GPLUS_PHOTO_EDITOR",
            "GPLUS_SOCIALCAST",
            "GPLUS_INTERACTION_EVENTS",
            "GPLUS_ENTITY_TRANSFER",
            "GPLUS_LIS",
            "GPLUS_DRAWBRIDGE",
            "GPLUS_DASHER",
            "GPLUS_DASHER_TAKEOUT",
            "PAISA_MERCHANT_CONSOLE",
            "GEO_DATA_UPLOAD_STAGING",
            "GEO_DATA_UPLOAD",
            "GOOGLE_PLAY_SERVICES",
            "GOOGLE_SETTINGS",
            "THIRD_PARTY",
            "PICASA_PHOTOS",
            "GMAIL_HANGOUT",
            "FOUNTAIN",
            "FOUNTAIN_YOUTUBE",
            "YOUTUBE_LEGACY_COMMENT_MIGRATION",
            "FOUNTAIN_YOUTUBE_DISCUSS",
            "FOUNTAIN_YOUTUBE_MESSAGES",
            "YOUTUBE_AUTOSHARES",
            "FOUNTAIN_YOUTUBE_LEGACY_GDATA",
            "YOUTUBE_CHOWN_PIPELINE",
            "FOUNTAIN_YOUTUBE_ACTIVITY_LOG",
            "FOUNTAIN_YOUTUBE_ADMIN",
            "YOUTUBE_HELD_COMMENT_EXPIRY",
            "ONEMARKET_CALENDAR",
            "FOCUS_FRONTEND",
            "URL_SHAREBOX",
            "READER",
            "GOOGLE_MAIL",
            "PLUS_SHARE",
            "YOUTUBE",
            "CHECKIN",
            "FRAMES",
            "PHOTOS_CHROMEAPP",
            "MOBILE_BASIC",
            "GLASSWARE",
            "GAMES",
            "THIRD_PARTY_STREAM_EVERYWHERE_SINGLE_POST_WIDGET",
            "PLAY_STORE",
            "GMAIL_INBOX_POSTS",
            "GMAIL_RECENT_POSTS",
            "SIDECAR",
            "GOOGLE_QUICK_SEARCH_BOX",
            "WALLET",
            "FRAMELESS_SHAREBOX",
            "YOUTUBE_CAPTURE",
            "YOUTUBE_WATCH_PAGE_SHARE",
            "YOUTUBE_REACTR",
            "YOUTUBE_MANGO",
            "YOUTUBE_REACTR_TAKEOUT",
            "YOUTUBE_COMMENTS_NOTIFICATION",
            "YOUTUBE_COMMENTS_TIMED",
            "YOUTUBE_COMMENTS_ENGAGEMENT_P13N",
            "YOUTUBE_COMMENTS_LEGAL_TAKEOUT",
            "YOUTUBE_COMMENTS_INDEXING",
            "YOUTUBE_COMMENTS_NEWEST_FIRST",
            "YOUTUBE_COMMENTS_BACKEND",
            "YOUTUBE_SUBSCRIPTIONS_FEEDS",
            "YOUTUBE_COMMENT_API",
            "GHUB_COMMENTS",
            "GOOGLE_KEEP",
            "VEGA",
            "SOCIAL_REVIEWS",
            "PLAY_MOVIES",
            "GMAIL",
            "GMAIL_GO",
            "HELPOUTS",
            "MAPS",
            "MAPS_ENGINE_MOBILE",
            "CALENDAR",
            "PLAY_NEWSSTAND",
            "FITNESS",
            "WEAR_HEALTH",
            "WEAR_HEALTH_PROVISIONING",
            "PLAY_BOOKS",
            "INSTORE",
            "PLAY_MUSIC",
            "GOOGLE_CHROME",
            "LOCATION_FLARE",
            "NEWS_WEATHER",
            "PROMOTED_POSTS",
            "CLOUD_PRINT",
            "CLOUD_DEVICES",
            "CPANEL",
            "DRIVE",
            "CLASSROOM",
            "STORIES",
            "GOOGLE_ANALYTICS",
            "LOCATION_SAMPLE",
            "BIGTOP",
            "GOOGLE_CAST",
            "AUTHZEN",
            "PARENTS",
            "SEARCH",
            "NEWS",
            "DOCS",
            "PHOTOS",
            "PHOTOS_TAKEOUT",
            "PHOTOS_ABUSE",
            "SIMBA_MOBILE",
            "GOOGLE_JOBS",
            "CLOUD_PLATFORM",
            "CLOUD_PLATFORM_WEB",
            "FIREFOX_BROWSER",
            "MOVIEMAKER",
            "MOVIEMAKER_PHOTOS",
            "GOOGLE_STARS",
            "SNAPSEED",
            "BLOGGER",
            "DEVICE_POLICY",
            "DOUBLECLICK_CREATIVE_PREVIEW",
            "UNICORN",
            "ADWORDS_MOBILE",
            "FAMILY_COMPASS",
            "AUTH_GRANT_CREDENTIAL",
            "HALLWAY",
            "FAMILY_CAMERA",
            "ENDER",
            "MAPS_VIEWS",
            "TABLESCAPE",
            "TOPAZ",
            "FIBER",
            "ATARI",
            "RIDEMATCH",
            "GMONEY",
            "GOOGLE_EXPRESS",
            "CONSUMER_PHOTO_EDITOR",
            "JETSTREAM",
            "SOCIAL_SERENDIPITY",
            "ONE_TODAY",
            "PROFILES",
            "SOCIAL_POLLS",
            "SPACES",
            "ADWORDS_EXPRESS",
            "IDENTITY",
            "IDENTITY_FRONTEND_VISUAL_ELEMENTS",
            "YOUTUBE_BACKSTAGE",
            "YOUTUBE_BACKSTAGE_ADMIN",
            "YOUTUBE_UNPLUGGED",
            "YOUTUBE_MUSIC",
            "HUB",
            "ANDROID_EDU_PROVISIONING",
            "ANDROID_WEAR",
            "CHROMECAST",
            "ONTHEGO",
            "ADSENSE",
            "PROJECT_FI",
            "JAM",
            "HUDDLE",
            "CAR_APP",
            "TAILORMADE",
            "ACTIVITY_LOG",
            "SPACES_ACTIVITY_LOG",
            "PHOTOS_ACTIVITY_LOG",
            "MEMEGEN",
            "SOCIETY",
            "SOCIETY_CHAT",
            "HIGHLIGHT",
            "YOUTUBE_LIVE",
            "YOUTUBE_LIVE_ACTIVITY_LOG",
            "YOUTUBE_LIVE_TAKEOUT",
            "CARDBOARD_CAMERA",
            "PLAY_DEVELOPER_CONSOLE",
            "MIXX",
            "CHROME_REMOTE_DESKTOP",
            "HOT_LANE",
            "CONTACTS",
            "CONTACTSHEET",
            "HOVERCARD",
            "DORY",
            "SPECTRUM",
            "DYNAMITE",
            "DASHER_USER_HUB",
            "CULTURAL",
            "BOOND",
            "EXPEDITIONS",
            "PHOTO_ALBUM_ARCHIVE",
            "GAMMAGO",
            "FIREBALL",
            "SUPPLY_CHAIN_CENTRAL",
            "PAISA",
            "SANDCLOCK",
            "ACCOUNT_SETTINGS_MOBILE",
            "GOOGLE_VOICE",
            "WING_MARKETPLACE",
            "CHIME",
            "LIFESCIENCE_FRONTENDS",
            "WYLO_TODAY",
            "NAKSHA_CONSUMER",
            "ENTERPRISE_ENROLLMENT",
            "IMPROV",
            "TRANSLATE",
            "SOCIAL_ENGAGE",
            "CORPCAM",
            "ANDROID_CONTACTS",
            "CURATOR",
            "TRAVEL_BOOKING",
            "SOCIAL_DISCOVERY",
            "GPOST",
            "PAIDTASKS",
            "PRIMER",
            "LOCAL_DISCOVERY",
            "BASELINE",
            "QUARTZ",
            "DPANEL",
            "TRIPS",
            "HOME_SERVICES",
            "SOCIALGOOD",
            "LOUPE",
            "UGC_LIVE_COMMENTS",
            "FAMILY_LINK",
            "G3DOC",
            "MOMA",
            "DASHER_ADMIN_CONSOLE",
            "DASHER_COMMERCE_CONSOLE",
            "TRAVEL_VACATIONS",
            "TRENDS",
            "TASKS",
            "VIMES",
            "SECURITY_EVENT_MANAGER",
            "VR_EVA",
            "MINDSEARCH",
            "MINDSEARCH_ADMIN",
            "ANDROID_AUTO",
            "CLOUDCAST_TEXTCHAT",
            "APPS_ASSISTANT_OVERLAY",
            "SEARCH_CONSOLE",
            "CHROME_WEB_STORE",
            "SAVE",
            "FOOD_ORDERING",
            "SOCIAL_RECOVERY",
            "ANDROID_ONBOARD_WEB",
            "WEAR_HOME",
            "FACT_CHECK_EXPLORER",
            "ALLO",
            "FAMILY_LINK_HELPER",
            "PROXY_GAL_PROVIDER",
            "ONEGOOGLE",
            "ONEGOOGLE_ASYNC",
            "WICKED",
            "SHEETS",
            "SLIDES",
            "ASSISTANT_EXPLORE_WEB",
            "ASSISTANT_SETTINGS_WEB_UI",
            "ANDROID_DIALER",
            "KLOPFKLOPF",
            "LAGEPLAN",
            "SCIENCE_JOURNAL",
            "HIRE",
            "ZANDRIA",
            "DASHER_RESELLER_FRONTEND",
            "ZOOMSIGHTS",
            "UGC_LIVE_COMMENTS_TAKEOUT",
            "GUARDIAN",
            "GUARDIAN_CORP",
            "GOOGLE_MY_BUSINESS",
            "PRESTO_ALP",
            "PRESTO_FE",
            "KIDS_HOME",
            "OPA",
            "SUBSCRIBEWITHGOOGLE_CLIENT",
            "REVEAL",
            "ANDROID_NATIVE_ONBOARDING",
            "AMP_ACTIONS",
            "SPOT",
            "MEDICAL_SCRIBE",
            "MEDICAL_SCRIBE_TASKING",
            "DASHER_RULES_FRONTEND",
            "ANDROID_TV_LAUNCHERX",
            "ANDROID_TV_SETUP_WIZARD",
            "SOS_LIVE_COMMENTS",
            "GMAIL_LOCKER_UI",
            "POLYGLOT",
            "PLX",
            "GROUPS_UI",
            "MSV",
            "WOLVERINE",
            "MIC",
            "FORMS",
            "ARCORE",
            "ANDROID_EMERGENCY",
            "LENSLET",
            "MEDICAL_LABELING",
            "G_SUITE_ADD_ONS",
            "LOCATION_HISTORY_CONSENT_ANDROID_LIBRARY",
            "PAYMENTS_WEB_5",
            "APPS_PLATFORM_CONSOLE",
            "INTROSPECT",
            "NGA",
            "SUPPLY_CHAIN_HW_CHP2",
            "DUC_COMPANION",
            "AUTOMON",
            "TV_LIVE_COMMENTS",
            "GUP_PEEPS",
            "FOCUS_SYNC_ADAPTER_V1",
            "NOVA",
            "NOVA_STAGING",
            "DASHER_DATA_CLASSIFICATION_FRONTEND",
            "GOOGLE_ADMIN",
            "MESSAGE_PROCESSOR",
            "EMAIL_PROCESSOR",
            "ENGAGE_PIPELINE",
            "AUTO_DOC_PROBER",
            "DOC_PROBER",
            "FRAMES_DELETE_SYNC",
            "EMBEDS_MIGRATION",
            "SOCIAL_REVIEWS_SYNC",
            "GUNS",
            "POSTBOX_ONEOFF",
            "PLUS_API_ONEOFF",
            "STANZA_ACTIVITY_POST_DELETE_SYNC",
            "GRAPH_PROBER",
            "STANZA_PERIODIC",
            "MADISON_PERIODIC",
            "PAPYRUS_PERIODIC",
            "PHOTOS_BACKEND",
            "REDBOX_BACKEND",
            "PHOTOS_FIFE",
            "ABUSEIAM",
            "ARES",
            "STREAM_INDEXING",
            "STANZA_INDEXING",
            "STANZA",
            "STANZA_MOONSHINE_INDEXING",
            "STREAM_ACTIONS",
            "STREAM_CONFIG",
            "STREAM_SERVICE",
            "STREAM_DELETE",
            "KWYJIBO",
            "STANZA_TEST",
            "TEST_APPLICATION",
            "SOCIAL_ANNOTATION_SERVICE",
            "ANNOTATION_SERVICE_STANZA_LISTENER",
            "SBE_PLAYGROUND",
            "EXPO",
            "ANDROID_VR_HOME",
            "YOUTUBE_BLARNEY_STONE",
            "SOCIAL_EVENTS",
            "EMERGENCY_ASSIST",
            "ADS_INTEGRITY_ENFORCER",
            "ADS_INTEGRITY_ENFORCEMENT_MANAGER",
            "ADS_INTEGRITY_EXPLORER",
            "ADS_INTEGRITY_REVIEWER",
            "GPLUS_COLLEXION_PIPELINE",
            "GPLUS_OFFLINE",
            "PAPYRUS",
            "YOUTUBE_ADMIN",
            "YOUTUBE_ADMIN_REVIEW_QUEUE_PACING",
            "YOUTUBE_TNS_VERTICAL_MANAGER",
            "YOUTUBE_DECIDER",
            "YOUTUBE_TNS_ACTION",
            "YOUTUBE_EXTERNAL_LINKS",
            "FOCUS_BACKEND_BATCH",
            "TEAMSPACES",
            "ASSISTANT_OPA",
            "TRASNLATION_MEMORY_MANAGER",
            "THREADIT",
            "RESOURCE_SYMPHONY",
            "L10N_INFRA_SHARED",
            "WORK_TRACKER",
            "ARIANE",
            "COLAB_INTERNAL",
            "COLAB_EXTERNAL",
            "TALENT_GROW",
            "ROCKET_LABS",
            "MY_GOOGLE_FAMILIES",
            "DATA_STUDIO",
            "LEGAL_CONTRACTS",
            "BRIEF",
            "HARDWARE_MFG_DATA_VENUS",
            "BETTERBUG",
            "DCMS",
            "PLAY_BOOKS_PUBENG",
            "YAQS",
            "PROSPER",
            "CAMPAIGN_AUTOMATION_TOOL",
            "HIRING",
            "DATACENTER_SOFTWARE",
            "MARKETING_WORKFLOWS",
            "YOUTUBE_PARENT_TOOLS",
            "RELIABILITY_INSIGHTS_PST",
            "CUSTOMER_CARE_PORTAL",
            "FUSION",
            "PRODUCTION2020_UIE",
            "SPEAKEASY",
            "GPAY_RELEASE_OPS",
            "SKILLSSTACK",
            "WHOSTORY",
            "BETTANY",
            "BASECAMP",
            "CULTURE_EVENTS_CALENDAR",
            "DATABRIDGE_CONSOLE",
            "COMMSTAR",
            "CDDB",
            "MONOSPACE",
            "MY_ACCOUNT",
            "NUDGEIT_CAMPAIGN_MANAGER",
            "DECS",
            "DEPRECATED_QUICKSTART_FLUME",
            "DUO_CLIENT",
            "ALBERT",
            "PEOPLE_PLAYGROUND",
            "GPLUS_POST_RECOMMENDER",
            "IMAGES",
            "GOOGLE_STORE",
            "GCONNECT_MUSTARD",
            "MADDEN",
            "MOBDOG",
            "GBOARD",
            "RECORDER",
            "UNMAPPED_LEGACY_GPLUS_SOURCE",
            "PODIUM",
            "GSA_FUSE",
            "HONEYPHISH",
            "SOCIAL_ANNOTATION_SERVICE_BACKFILL",
            "CONTACT_HR",
            "PAISA_WANDER",
            "NEXTGENRETAIL_SELF_ORDER",
            "UNSET_APPLICATION",
            "UNKNOWN_FIRST_PARTY_APPLICATION",
            "WABEL",
            "VIDEO_HANGOUT",
            "VIDEO_HANGOUT_LITE",
            "VIDEO_HANGOUT_GVC",
            "VIDEO_HANGOUT_PRESENT",
            "VIDEO_HANGOUT_HOA",
            "VIDEO_HANGOUT_TEE",
            "VIDEO_HANGOUT_SDK",
            "VIDEO_HANGOUT_ENVOY",
            "BABEL",
            "BABEL_NOVA",
            "WABEL_MEDIACALL",
            "HANGOUT_START_PAGE",
            "EXPRESS_LANE",
            "MEETINGS_ANDROID",
            "EXPRESS_LANE_BOQ",
            "RTC_FLEET_MGMT",
            "STAX",
            "RIGEL",
            "PHOTOS_SCANNER",
            "PHOTOS_LIBRARY_API",
            "PHOTOS_PARTNER_API",
            "VAULT",
            "PROF",
            "TOTAL",
            "TOTAL_ZERO_PARTY",
            "TOTAL_FIRST_PARTY",
            "TOTAL_THIRD_PARTY",
            "TOTAL_INTERNAL",
            "TOTAL_UNKNOWN",
            "TOTAL_MINUS_YOUTUBE",
            "TOTAL_FIRST_PARTY_WITH_PRIMARY_INTENT_TO_SHARE_TO_GPLUS",
            "TOTAL_FIRST_PARTY_WITH_SECONDARY_INTENT_TO_SHARE_TO_GPLUS",
            "TOTAL_GPLUS",
            "TOTAL_SOCIAL_APPS",
            "CROWD_COMPUTE",
            "KHAZANA",
            "LIGHTER_GMM",
            "LIGHTER_GMB",
            "MYACTIVITY",
            "BLOG_COMPASS",
            "CONCORD",
            "NAVSTAR",
            "SETTINGS_INTELLIGENCE",
            "TOPAZ_TEAMS",
            "GEMAGENT",
            "DUMBLEDORE",
            "GOOGLE_ONE",
            "NBU_GCONNECT_KIMCHI",
            "FASTDASH",
            "AQUARIUS_LAPIS",
            "DASHER_REPORTING",
            "GCONNECT_PICARD",
            "GOOGLE_JACQUARD",
            "GOOGLE_GO",
            "BUGANIZER",
            "DOCOS_MENTIONS",
            "TRIX_WAFFLE",
            "SHARE_SERVICE",
            "ANDROID_SAFETY",
            "CLOUDCAST_TEXTCHAT_TAKEOUT",
            "ASSISTANT_GO",
            "FLOURISH",
            "ALECS",
            "NANDHI",
            "GOOGLE_RECORDER",
            "CONTACT_STORE",
            "PROFILE_CARD",
            "ESPRESSO",
            "PEOPLE_COMPANION",
            "PHOTOS_GO",
            "YETI",
            "BLOOM",
            "FIELD_OFFICER",
            "URBAN_MOBILITY",
            "FAMILYCARE",
            "INTUITIVE_PLATFORM",
            "NBU_CRICKET_WORLD_CUP",
            "INTEGRATION_PLATFORM",
            "CROS_SCALING_STAGING",
            "CROS_SCALING_PROD",
            "ASSISTANT_PROACTIVE_SUGGESTIONS",
            "PRIVACY_ONE",
            "PAISA_MERCHANT",
            "ASSISTJS",
            "TRAVEL_HOTELIER",
            "PHOTOS_KINDYGRAM",
            "ANDROID_MESSAGES",
            "TRAVEL_HOTEL_EDITOR",
            "VISTAAR",
            "VISTAAR_DEV",
            "GSUITE_GROWTH",
            "ELDAR",
            "GMB_ANDROID",
            "SHOPPING_LIST",
            "EARTH",
            "PAISA_CREDIT_INSTANT_LOAN",
            "ASSISTANT_GO_WEB",
            "SHOWTIME_EVENTS",
            "KONARK",
            "EXO_REFSERVER",
            "MONITORING_PLATFORM",
            "AUTOCAP",
            "PAYMENTS_ORCHESTRATION",
            "GMB_IOS",
            "ASSISTANT_KAIOS",
            "ADMOB_MOBILE",
            "SCREENERS",
            "MILTON",
            "GHIRE",
            "TRANSLATE_COMMUNITY_UI",
            "ROAD_MAPPER",
            "NEST",
            "ROLLOUTS_UI",
            "SHOPPING_PROPERTY",
            "SHOPPING_PROPERTY_NONPROD",
            "PAYMENTS_MERCHANT_VERTICALS_GAS",
            "PAISA_MOVIES",
            "HUB_CALL",
            "WAYMO_SIMULATION_RESULTS",
            "GSUITE_WORKFLOWS",
            "FINANCE_WORKFLOWS",
            "PAYMENTS_MERCHANT_VERTICALS_PARKING_UI",
            "TRAVEL",
            "GABBLE",
            "APPS_EDU",
            "MYFI",
            "CHOMCHOM",
            "ASSISTANT_TOOLCHAIN",
            "YOUTUBE_ANSIBLE",
            "YOUTUBE_CI_KAPLA",
            "GANTRY",
            "PAYMENTS_MERCHANT_CONSOLE",
            "SPLINTER",
            "KINTARO",
            "MDM_ADMIN_CONSOLE",
            "PAYMENTS_CONSUMER_CORE",
            "INCIDENT_MANAGEMENT",
            "ONEGOOGLE_MOBILE",
            "ANURA",
            "FINANCE_FGC",
            "PODCASTS_MANAGER",
            "FILES",
            "YOUTUBE_POST_API",
            "GSUITE_HUB",
            "TV_LAUNCHER",
            "PAIDTASKS_FRONTEND",
            "ONE_REVIEWER_TOOL",
            "MEET_QUALITY_TOOL",
            "TRAVEL_PLANNING",
            "MEET",
            "PAISA_FOOD",
            "TINYTASK_TASKER",
            "FIELDOFFICER",
            "LENS_WEB",
            "HERALD",
            "PAISA_MICROAPPS_WEB",
            "BUG_OBSERVER",
            "ATLAS",
            "DHARMA",
            "SNIPIT",
            "PREMIUM_ASSISTANT",
            "ONEREVIEWERTOOL",
            "CORONADO",
            "SYSTEM1",
            "PUMICE",
            "BACKLIGHT",
            "GLOSSARY_MANAGER",
            "UPGRADEPARTY",
            "ONEDEV_WORKFLOW",
            "AVALANCHE",
            "KORMO_SEEKER",
            "ASSISTANT_PROFILE_YOURPEOPLE",
            "SMART_DISPLAY_WEB",
            "DESKBOOKING",
            "PAYMENTS_MERCHANT_VERTICALS_FOOD",
            "VALUABLES_MERCHANT_CENTER",
            "OFFSEC",
            "SCHEDULE",
            "PAISA_SOCIAL_CAMPAIGNS",
            "WORDFLOW",
            "HEALTH_PLANFORCARE",
            "DEEPMIND_ALPHASCHEDULE",
            "HOOLICHAT_UI",
            "YOUTUBE_CREATOR_STUDIO",
            "BRICKS",
            "PAYMENTS_MERCHANT_DATA_BUSINESS_INSIGHT",
            "RECALL",
            "NEST_GREENENERGY",
            "FRAP",
            "PAYMENTS_MERCHANT_VERTICALS_GROCERY",
            "REVIEWS_WIDGET_API",
            "INCIDENTFLOW",
            "AREA120_PROMODAY",
            "PINPOINT",
            "TRANSCONSOLE",
            "MARKETPLACE",
            "SPORK",
            "DASHER_SUSTAINABILITY"
          ],
          "enumDescriptions": [
            "Cannot just use UNKNOWN because enum values use C++ scoping rules. Therefore, \"UNKNOWN\" must be unique within \"apps.people.logs.proto\".",
            "G+ application Generic app that represents all G+ applications that don't have specific app below. Because of this, this value does NOT represent all G+ applications in analytics data: Clients interested in analytics data for all G+ applications (for example, both GPLUS and GPLUS_WEB), should generally use the synthetic values defined later in this enum, like TOTAL_GPLUS. Replacement for \"s:oz\".",
            "G+ web application (codename Tau: go/tauplus) App that represents all G+ traffic coming from boq web. This is meant to replace the application id GPLUS for web traffic when Oz is completely deprectaed.",
            "Feature provider for go/ares",
            "Photos app within G+ such as lighthouse. Replacement for \"s:lh2\".",
            "Hangout app within G+ Replacement for \"s:talk\" that is used for hangout requests.",
            "Events app within G+. Replacement for \"s:events\".",
            "Squares(community) app within G+. Replacement for \"s:squares\".",
            "Notifications app within G+. Replacement for \"s:notifications\".",
            "Games activities. Replacement for \"s:gadgets:*\" (source_id).",
            "Explore app within G+.",
            "Local app within G+.",
            "+Pages app within G+.",
            "RSS to +Page syndicator.",
            "Profile app within G+.",
            "Find People app within G+.",
            "Edit photos within Photos within G+, see also http://go/snapseed",
            "G+ consumption stream integration with Chromecast. see also http://go/+socialcast",
            "G+ For Work Interaction Event Sync. go/kerr-prd and go/gplus_interaction_event_sync.",
            "G+ Entity Transfer. See go/gplus-entity-transfer-design.",
            "G+ LIS. See b/77638423.",
            "G+ Drawbridge. See go/drawbridge-dd.",
            "Currents (G+ for Enterprise) App An alternative to GPLUS that indicates this is in a build for Currents.",
            "Domain Wide Takeout (go/dwt-d3doc) for Currents/G+. See go/g+-takeout-filters. Note that GPLUS_DASHER_TAKEOUT is G+ and Currents agnostic, even though GPLUS_DASHER refers to Currents only.",
            "Paisa Merchant Console http://go/paisa Team contact: paisa-merchant-eng-blr@google.com",
            "GEO_DATA_UPLOADS is an internal-use-only staging corpus for geo_data_upload (above). See go/gdu-design-1.2",
            "GEO_DATA_UPLOADS consists of discussions between 3rd parties and Google about uploaded data. See go/gdu-design-1.2",
            "Google Play services, used when doing background tasks like log posting and background sync that aren't initiated by any external app.",
            "Google Settings app.",
            "Third party clients who use apiary to work with G+. Replacement for \"s:chili\".",
            "External First party. Picasa photos app.",
            "The G+ widget served off Oz and rendered in gmail for hangout integration. Replacement for \"s:oz:gadget-gmail\".",
            "The G+ widget served off Oz and rendered in any page EXCEPT Youtube. Replacement for \"s:fountain\".",
            "The comment widget served off youtube video page. Replacement for \"s:fountain:youtube\".",
            "Legacy youtube video watch page comments. See go/stollen for details.",
            "The G+ widget served off Oz and rendered in youtube channel discuss page. It's the \"DISTILLER\" project. Replacement for \"s:fountain:youtube:channel\".",
            "YouTube private messages built on top of distiller comments. Replacement for \"s:fountain:youtube:private\".",
            "Public posts generated automatically if a YT user who has been merged with their G+ account uploads a public video. Replacement for request_header.application_id=\"s:oz\" and mutate_data.activity.stream_id.source_id= \"a:ext:client.sharebox.261207059221.",
            "Used for comment writes sent to the legacy YouTube GData API by clients that have not switched to the G+ commenting API.",
            "Used for the Youtube channel ownership pipeline. Replacement for \"s:youtube:distiller\". go/youtube-chown-pipeline",
            "Used for youtube's comment history page.",
            "Used for youtube comments admin pages.",
            "Used for comment expiry. go/ytc-studio-held-comment-expiry",
            "Onemarket Calendar Team contact: omc-team@google.com",
            "Focus Frontend which is serving G+ profile. Replacement for \"s:focus\".",
            "URL sharebox served off Oz on /share and rendered in 1P/3P, on both desktop & mobile. For mobile sharebox, this app id is set in //java/com/google/apps/people/oz/sharebox/client/mobile/shell.js",
            "Google Reader. Replacement for \"s:reader\".",
            "Google Email. Replacement for \"s:google_mail\".",
            "Plusone Application. Replace for \"s:plusshare\".",
            "Connection with G+ through YouTube. e.g. YT mobile native apps.",
            "Checkin within G+. Replacement for \"s:friendview:checkin\" (source_id).",
            "Oz Frames. Replacement for \"s:frames\".",
            "Pulsar native app.",
            "Mobile basic traffic for clients hitting \"plus.google.com/app/basic\".",
            "The Google Glass Mirror API: https://developers.google.com/glass/. Replacement for \"s:glass\".",
            "Play Games related clients. (e.g. Games destination app.)",
            "Embeddable widgets, part of Stream Everywhere project. http://go/streameverywheredesign",
            "Google Play Store.",
            "Interactive email notifications in Gmail.",
            "Right hand side widget in Gmail.",
            "Third party \"sidecar\" widgets. http://go/embeddedstreamsdesign DEPRECATED, DO NOT USE.",
            "Google Quick Search Box. https://sites.google.com/a/google.com/android-qsb.",
            "Google Wallet (Android and iOS clients).",
            "Sharebox that is populated via URL params, suitable for use in a popup. This sharebox is accessible to 3p, although in practice it is mostly used by 1p. https://sites.google.com/a/google.com/es-sharing/",
            "YouTube Capture (iOS client). http://go/kubrik",
            "Posts generated from the share window launched by share menu on the YouTube watch page. yt-social-dev@",
            "Youtube Real-time group chat, also known as 'Reactr'. http://go/reactr Team contact: reactr-dev@google.com.",
            "YouTube Go - android app for the next billion users. http://go/ytgo Team contact: mango-eng@google.com",
            "YouTube Reactr Takeout. See b/69636706 http://go/reactr Team contact: reactr-dev@google.com.",
            "Youtube Comments go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Timed Comments go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Engagements go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Comments legal takeout go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Top comments indexing go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Newest First. go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Comments Backend. go/ytcci Team contact: yt-comments-team@google.com",
            "Youtube Comments: Subscription notifications go/ytn-inbox-comment-decoration Team contact: yt-notifications@google.com",
            "YouTube Comment API go/yt-comment-api Team contact: yt-comment-api-eng@google.com",
            "Comments for gHub Finance. Team contact: introspect-eng@google.com",
            "Google Keep. https://sites.google.com/a/google.com/keep/",
            "Vega / Google+ for Business (Android and iOS clients). http://go/vega",
            "Reviews (Local and others) sr-eng@",
            "Google Play Movies & TV, Android app. Team contact: videosapp-android@google.com.",
            "Gmail",
            "Hub as Gmail Go",
            "Google Helpouts http://go/tee-team",
            "Google Maps Mobile: http://go/gmm Desktop: http://go/tactile",
            "Google Maps Engine Mobile http://go/gmemobile",
            "Calendar Android: https://sites.google.com/a/google.com/android-calendar/ Desktop: https://sites.google.com/a/google.com/timely/",
            "Google Play Newsstand http://go/dots Team contact: gnews-infra@google.com.",
            "Google Fitness http://go/heart Team contact: android-fitness-eng@google.com.",
            "Google Health http://go/wear-health Team contact: wear-health@google.com.",
            "Google Wear Health Provisioning http://go/wear-health Team contact: wear-health@google.com.",
            "Google Play Books (Android and iOS clients) http://go/android-books http://go/ios-books",
            "Google Instore http://go/instore-wallet",
            "Google Play Music (Android and iOS clients) http://go/android-music Team contact: music-app-eng@google.com",
            "Google Chrome iOS: http://go/blingy (bling-team@google.com)",
            "Location Flare http://go/location-flare",
            "Google News Weather Android App http://go/android-core-utilities Team contact: android-news-eng@google.com.",
            "Promoted Posts http://go/promotedposts",
            "Cloud Print http://go/cloudprinting Team contact: cloudprint-team@google.com",
            "Cloud Devices http://go/cloud-devices Team contact: cloud-devices-team@google.com",
            "CPanel (Google Admin) for Enterprise http://go/cpanel-mobile Team contact: cpanel-mobile-eng@google.com",
            "Google Drive http://go/docs-site Android part: http://go/cakemix Team contact: cakemix-eng@google.com",
            "Classroom http://go/homeroom Team contact: homeroom-eng@google.com",
            "Google+ Stories aka Boswell go/bozdd Team contact: boswell-eng@google.com",
            "Google Analytics Android Client http://go/giant-site Team contact: ga-mobile-app-eng@",
            "Sample app for Location team Team contact: location-lon@google.com",
            "BigTop Android https://wiki.corp.google.com/twiki/bin/view/Main/BigtopAndroid",
            "Google Cast Android Client http://go/dongle Team contact: eureka-setup-team@",
            "Authzen http://go/authzen Team contact: authzen-team@google.com",
            "Google Parental Supervision Android Client http://go/parentapp DEPRECATED, DO NOT USE.",
            "Google Search",
            "Google News",
            "Google Docs NOTE: Docs is a separate app from DRIVE.",
            "Google Photos standalone experience (not included with the G+ app). http://go/photos Team contact: photos-backend@google.com",
            "Google Photos Takeout export http://go/photos Team contact: photos-backend@google.com",
            "Google Photos Abuse server http://go/photos Team contact: photos-abuse-eng@google.com",
            "Simba android client http://sites/simba",
            "Google Jobs android client http://go/garage-wiki Team contact: garage-android@google.com",
            "Google Cloud Platform Android and iOS apps http://go/vespa Team contact: vespa-eng@google.com",
            "Google Cloud Platform Android web app http://go/pantheon Team contact: pantheon-client@google.com",
            "Shares integrated into Firefox browser. Contact: carnold@mozilla.com, sharekit-eng@google.com",
            "MovieMaker component of G+. http://go/aamovie Contact: photos-movies@google.com",
            "MovieMaker component of Photos. http://go/aamoive Contact: photos-movies@google.com",
            "Google Stars Android Client (go/stars) Team contact: collecting-eng@google.com",
            "Edit photos, consumer app. see http://go/snapseed Team contact: snapseed-eng@google.com",
            "Blogger for Android http://go/bloggerandroid Team contact: blogger-tech@google.com",
            "Google Apps Device Policy for Enterprise http://go/mdm Team contact: mdm-eng@google.com",
            "Doubleclick Creative Preview app http://go/audition Team contact: mob-h5-eng@google.com",
            "Unicorn kids app http://go/unicorn-infra Team contact: unicorn-infra-eng@google.com DEPRECATED, DO NOT USE.",
            "AdWords mobile app for Android http://go/awm Team contact: awm-eng@google.com",
            "Unicorn Family Compass http://go/family-compass Team contact: family-compass-eng@google.com DEPRECATED, DO NOT USE.",
            "Android grant credential Team contact: android-auth-eng@google.com",
            "Hallway mobile app for Android and iOS http://go/hallway-prd Team contact: adventurelabs-eng@google.com",
            "Unicorn Family Camera http://go/family-camera Team contact: unicorn-famcam-eng@google.com DEPRECATED, DO NOT USE.",
            "Ender http://go/ender Team contact: ender-eng@google.com",
            "Google Maps Views (Mostly deprecated, but lives as SVApp server) http://go/streetview-apps Team contact: streetview-apps@google.com",
            "Tablescape app (internally codenamed FoodEyes) http://go/tablescape Team contact: foodeyes-team@google.com",
            "Enterprise Topaz http://go/topaz Team contact: topaz-team@google.com",
            "gFiber app http://go/fiberapp Team contact: gfiber-mobile-android@google.com",
            "Atari app (The next Google Sites) http://go/atari http://go/atari-mobile Team contact: atari-mobile@google.com",
            "Ridematch app http://go/ridematch Team contact: ridematch-team@google.com",
            "Google GMoney (Android and iOS clients).",
            "Google Express app (Android) http://go/sameday Team contact: gsx-mobilemall@google.com",
            "Consumer photo editor http://go/photo-editing Team contact: photos-editing@google.com",
            "Jetstream consumer app http://go/jetstream-team and http://go/jetstream Team contact: jetstream-team@google.com",
            "Social Serendipity (Social content in Google Now) http://go/serendipity Team contact: serendipity-team@google.com",
            "One Today by Google http://go/onetoday Team contact: onetoday-eng@google.com",
            "Google Profiles - SmartProfiles for viewing, Me View for editing. http://sites/profiles Team contact: people-frontend-team@google.com",
            "Social Polls - surfaced in G+ site/app http://go/es-polls Team contact: es-polls@google.com",
            "Spaces App http://go/spaces Team contact: spaces-eng@google.com",
            "AdWords Express App http://go/awxv2 Team contact: boost-eng@google.com",
            "iOS Identity Library http://go/ios-id Team contact: ios-id-library-team@google.com",
            "Identity Frontend. http://go/idfe Team contact: id-fe-infra@google.com.",
            "Youtube Backstage. http://go/backstage Team contact: yt-posts-team@google.com.",
            "Youtube Backstage Admin Service. http://go/backstage-admin-service Team contact: yt-posts-team@google.com.",
            "YouTube Unplugged http://go/unplugged-eng Team contact: yt-unplugged-eng@google.com",
            "Youtube Music http://go/music Team contact: woodstock-ios-eng@google.com",
            "Android Enterprise Hub App http://go/afwhub Team contact: afwhub@google.com",
            "Android Education Device Initializer App. http://go/android-edu-platform Team contact: android-edu-platform-eng@google.com",
            "Android Wear app. http://go/clockwork Contact: ewol@, flerda@, clockwork-eng@",
            "Chromecast app. http://go/cast-apps Team contact: cast-apps-eng@google.com",
            "OnTheGo app. http://go/onthego Team contact: otg-eng@google.com",
            "Google AdSense app. Team contact: publisher-android-app@google.com",
            "Project Fi app. http://go/nova-eng Team contact: tycho-atlas@google.com",
            "Jamboard app. http://go/jamnpard-eng Team contact: jamboard-eng@google.com",
            "Huddle app. http://go/huddle Team contact: huddle-eng@google.com",
            "Chauffeur Car app. http://go/chauffeur Team contact: chauffeur-ux-eng@google.com",
            "Tailormade app. http://go/tailormade Team contact: tailormade-eng@google.com",
            "Activity Log - surfaced in G+ site/app. Currently for G+ only but may expand to support other apps. http://go/activitylog-design Team contact: sps-activitylog@google.com",
            "Activity Log in the Spaces product. http://go/activity-log-spaces-dd Team contact: spaces-team@google.com",
            "Activity Log in the Google Photos product. http://go/envelope-comments-design-doc Team contact: photos-backend@google.com",
            "Memegen! https://memegen.googleplex.com Team contact: memgegen-team@google.com",
            "Society App http://go/society Team contact: society-team@google.com",
            "Society chat application. http://go/society Team contact: society-team@google.com",
            "Search Highlight http://go/seng-highlight Team contact: search-engagement-team@google.com",
            "YouTube Live Chat. http://go/livechat-redesign Team contact: yt-live-chat@google.com",
            "YouTube Live Activity log. http://go/live-chat-history-design Team contact: yt-live-chat@google.com",
            "YouTube Live Takeout. http://go/livechat-takeout Team contact: yt-live-chat@google.com",
            "Cardboard camera app http://go/cyclops Team contact: tp-cyclops@google.com",
            "Google Play Developer Console http://go/foxcub Team contact: play-apps-devex@google.com",
            "Google+ Mixx UI. http://go/mixx Team contact: jeffschiller@google.com",
            "Chrome Remote Desktop app http://go/chromoting Team contact: chromoting-team@google.com",
            "Hot Lane, Enterprise Meetings App http://go/hotlane Team contact: hangout-enterprise-eng@google.com",
            "Web Contacts UI. http://go/web-contacts Team contact: contactsplus-eng@google.com",
            "Contactsheet (Web, Android, iOS). http://go/peopleweb-docs Team contact: smartprofile-eng@google.com, contactsheet@google.com",
            "Hovercard (Web). http://go/peopleweb-docs Team contact: contactsplus-eng@google.com",
            "Dory is a tool for crowdsourcing and ranking user-submitted questions, suggestions, and ideas.",
            "Spectrum app. http://go/spectrum-site Team contact: speedtest-eng@google.com",
            "Dynamite App http://go/dynamite Team contact: dynamite-eng@google.com",
            "Enterprise end user UI http://go/novitas Team contact: novitas-eng@google.com",
            "Google Arts & Culture app. http://go/ci-mobile Team contact: ci-mobile-eng@google.com",
            "Boond app http://go/village-mobile Team contact: village@google.com",
            "Expeditions app http://go/vr-expeditions Team contact: vr-expeditions@google.com",
            "Photo Album Archive app http://go/albumarchive Team contact: social-parc-eng@google.com",
            "GammaGo app http://go/gammago Team contact: gammax-mobile-eng@google.com",
            "Fireball message app. contact: fireball-android@google.com",
            "Supply Chain Central http://go/scc-site Team contact: scc-infra@google.com",
            "Paisa app http://go/paisa Team contact: paisa-eng@google.com",
            "SandClock app http://go/sandclock Team contact: sandclock-eng@google.com",
            "My Google Account http://go/my-google Team contact: my-google-eng@google.com",
            "The telephony application! Contact voice-team@ or voice-fe@",
            "Wing Marketplace http://go/xwma Team contact: wing-commerce-mobile-team@google.com",
            "Chime http://go/chime Team contact: chime-team@google.com",
            "Verily Lifescience Frontends http://go/csp-eng Team contact: csp-eng@google.com",
            "Where You Left Off (WYLO) Today extension for iOS http://go/wylo-dd Team contact: tempeh@google.com",
            "Naksha Consumer Android App (Areo) http://go/naksha-android Team contact: naksha-dev@google.com",
            "Enterprise enrollment app for Chromebooks http://go/eeapp Team contact: bootstrap-dev@google.com",
            "Improv (Material Gallery) mobile app. http://go/material-gallery Team contact: gallery-eng@google.com",
            "Google Translate http://go/translate-eng Team contact: translate-team@google.com",
            "Social G+ Engage http://go/social-engage Team contact:social-engage-eng@google.com",
            "CorpCam http://go/corpcam Team contact: plus-ios-team@google.com",
            "Android Contacts http://go/android-contacts Team contact: android-contacts-eng@google.com",
            "Curator app. http://go/curator Team contact: curator-eng@google.com",
            "Travel Booking. http://go/travel-booking Team contact: travel-booking-eng@google.com",
            "People ranking and discovery. http://go/das Team contact: es-disco-eng@google.com",
            "GPost (Pony Express) http://go/gpost Team contact: gpost-eng@google.com docs: http://go/gpost-android-analytics",
            "Paidtasks (Google Opinion Rewards, Google Surveys) http://go/402 Team contact: 402-eng@google.com docs: http://g3doc/paidtasks/app/README.md",
            "Primer http://go/primerapp Team contact: vkes@google.com",
            "Local Discovery social features http://go/local-stream Team contact: dgajda@google.com, local-discovery-team@google.com",
            "Baseline http://go/baseline-android Team contact: verily-mobile-team@google.com",
            "Opa on Quartz http://go/opa Team contact: lmirelmann@google.com, opa-quartz-team@google.com",
            "Device Management Panel http://go/dpanel-eng Team contact: dpanel-eng@google.com",
            "Google Trips http://go/otg Team contact: oace@",
            "Google home services http://go/homeservices Team contact: sab-eng@google.com",
            "Social Good / donations http://go/socialgood Team contact: socialgood-eng-team@google.com",
            "Camera by Google photos Team contact: loupe-eng@google.com",
            "Live comments in sport onebox",
            "Family Link http://go/familylink Team contact: familylink-eng@google.com",
            "g3doc comments http://go/g3doc-comments",
            "Moma http://go/moma-site",
            "Dasher Admin Console. There is a separate id for DASHER_USER_HUB = 535 http://go/novitas Team contact: novitas-eng@google.com",
            "Dasher Commerce Console. http://go/job314 Team contact: job314-eng@google.com",
            "Travel Vacations. http://go/travel-vacations Team contact: travel-packages-eng@google.com",
            "Trends http://go/trends Team contact: trends-narrator@google.com",
            "Tasks http://go/accomplice Team contact: tasks-eng@google.com",
            "Vimes http://go/vimes-doc Team contact: vimes-eng@google.com",
            "Security Event Manager http://go/sem-doc Team contact: sem-eng@google.com",
            "Eva, the wally camera companion app http://go/wally-camera Team contact: tp-wally@google.com",
            "Mindsearch-QA: http://go/mindsearch and g/sbe-mindsearch.",
            "Power user for Mindsearch: http://go/mindsearch and http://go/ms-sbe-power-options Team contact: mindsearch-team@google.com",
            "Android Auto http://go/android-auto Team contact: gearhead-team@google.com",
            "Application for live chat when playing games. go/yeti-gg.",
            "Application for the Apps Assistant Overlay. http://go/awr Team contact: awr@google.com",
            "Search Console. http://go/wmx Team contact: wmx-fe@google.com",
            "Chrome Web Store http://go/cws Team contact: webstore-eng@google.com",
            "Saves (http://go/saves) Team contact: saves-web-eng@google.com",
            "Food Ordering http://go/fopa Team contact: fopa-eng@google.com",
            "Social Recovery http://go/social-recovery-update Team contact: aczeskis@google.com",
            "Android Onboard Website (Growth MWeb) http://go/android-mweb-dd Team contact: campaign-il@google.com",
            "Android Wear (Clockwork) http://go/clockwork Team contact: clockwork-eng@google.com",
            "Fact Check Explorer web app http://go/fc-explorer Team contact: fact-checking-dev@google.com",
            "Allo app http://go/allo Team contact: allo-discuss@google.com",
            "Family Link Helper companion app for kids/teens http://go/familylink Team contact: familylink-eng@google.com",
            "Proxy Gal Provider. http://go/gal-provider-migration Team contact: contacts-sync-eng@google.com",
            "OneGoogle bar (web). http://go/og Team contact: og-team@google.com",
            "OneGoogle async widgets (web). http://go/og-stack-redesign Team contact: og-team@google.com",
            "Wicked video uploads http://go/wicked-prd Team contact: wicked-team@google.com",
            "Google Sheets NOTE: Sheets is a separate app from DRIVE.",
            "Google Slides NOTE: Slides is a separate app from DRIVE.",
            "Assistant Explore Web http://go/assistant-agents-web Team contact: assistant-explore-eng@google.com",
            "Assistant Settings Web http://go/assistant-settings-web-ui-design Team contact: assistant-settings-web-eng-team@google.com",
            "Android Dialer app http://go/dialer Team contact: android-dialer@google.com",
            "Klopfklopf Roomtablet app. see http://go/klopfklopf Team contact: klopfklopf-eng@google.com",
            "Klopfklopf Hallwaytablet app. see http://go/lageplan Team contact: lageplan-eng@google.com",
            "Science Journal app. see http://go/sciencejournal Team contact: science-journal@google.com",
            "Hire app. http://go/hire-mobile Team contact: bebop-mobile-dev@google.com",
            "Poly (Zandria) app. http://poly.google.com/ Team contact: poly-team@google.com",
            "Dasher Reseller Frontend. http://g3doc/ccc/hosted/g3doc/teams/reseller/ Team contact: dasher-reseller-eng@google.com",
            "Zoomsights. http://go/zs-prd-tt-v2 Team contact: zoomsights-eng@google.com",
            "Live comments for take out Team contact: search-ugc@google.com",
            "Patient Guardian http://go/patient-guardian-site Team contact: g4c-eng@google.com",
            "Patient Guardian http://go/patient-guardian-site Team contact: g4c-eng@google.com",
            "Google My Business (go/gmb) Team contact: geomerchant-data-measurement@google.com",
            "Presto Ads Landing Page (go/alp-v0) Team contact: sb-ads@google.com",
            "Presto consumer FE http://go/presto-eng Team contact: geomerchant-presto@google.com",
            "Kids Home app for young kids android home experience Team contact: hogsmeade-eng@google.com",
            "Google assistant (OPA) app http://go/opa Team contact: opa-android-eng@google.com",
            "Subscribe with Google Client (SwG) http://go/swg Team contact: swg-eng@google.com",
            "Lookout app http://go/reveal Team contact: reveal-eng@google.com",
            "Android Native Onboarding http://go/android-onboarding-dd Team contact: growth-il-eng@google.com",
            "AMP Actions go/aog-amp-actions Team contact: aog-amp-actions@google.com",
            "Spot app go/spot Team contact: spot-eng@google.com",
            "Medical Scribe go/medical-scribe Team contact: medical-scribe-frontend-eng@google.com",
            "Medical Scribe Tasking go/medical-scribe-tasking-overview Team contact: medical-scribe-tasking@google.com",
            "Dasher Rules Platform go/project-raven Team contact: rules-platform-eng@google.com",
            "Android TV LauncherX app go/launcherx Team contact: atv-launcher-engineering@google.com",
            "Android TV Setup Wizard app go/atv-eng-setup Team contact: android-tv-setup-team-eng@google.com",
            "Live comments in Google search results page when an SOS Alert is triggered go/ugc-live-comments-for-crisis Team contact: google-sos-eng@google.com",
            "Gmail Locker UI go/gmail-locker Team contact: locker-eng@google.com",
            "Google-built translation editor. go/polyglot Team contact: polyglot-team@google.com",
            "Plx go/plx Team contact: plx-explorer-team@google.com",
            "Google Groups Frontend http://go/groups-doc Team contact: groups-eng-team@google.com",
            "Managed Street View Collection app go/msvApp Team contact: streetview-apps@google.com",
            "Google voice for enterprise go/wolverine Team contact: wonlverine-eng@",
            "G Suite Alert Center (MIC) go/project-mic Team contact: mic-eng@google.com",
            "Google Forms go/freebird Team contact: freebird-eng@google.com",
            "ARCore go/arcore Team contact: arcore-team@google.com",
            "Deprecated. Use ANDROID_SAFETY.",
            "Google Lens 1p Lenslets go/lenslets-g3doc Team contact: lenslets-eng@google.com",
            "Medical Labeling go/maple Team contact: maple-eng@google.com",
            "G Suite Add-on go/gsuite-addons Team contact: gsuite-addons-eng@google.com",
            "Android library for Location History consent, part of Mobile Consent Flows. go/lohiboshe, go/consent-flows Team contact: consent-flows-team@google.com",
            "Payments Platform Web UI http://go/payments-web-5 Team contact: payments-web-infra-eng@google.com",
            "Cattery (Apps Developer Platform Console UI server) go/cattery-g3 Team contact: cattery-eng@google.com",
            "Source of truth for Alphabet legal entities go/legal-entities Team contact: introspect-eng@google.com",
            "Nga Suggestion Resolution Team contact: nga-app-integration",
            "Hot Orders Ui Team contact: hw17eng@google.com",
            "Duc Companion Team contact: duc-eng",
            "Automon http://go/automon Team contact: monitoring-platform-team@google.com",
            "TV Live comments in Google search results page for TV program/episode. go/tv-live-comments-dd Team contact: tvm-features@google.com",
            "Guppeeps Team contact: gup-tech-apps-eng@google.com",
            "Proxy for focus sync adapter. Team contact: contacts-sync-eng@google.com",
            "Nova / Google Fi Team contact: fi-growth-eng@google.com",
            "",
            "Dasher Data Classification Platform go/dasher-data-classification Team contact: smarttags-eng@google.com",
            "App for debugging G+ user data go/googleadmin. Replacement for \"s:googleadmin\".",
            "Different apps that are run by the notifications team. Replacement for \"s:messageprocessor\".",
            "Replacement for \"s:emailprocessor\".",
            "Replacement for \"s:reengagement:pipeline\".",
            "Stream backend monitoring tool go/lorelei101.",
            "",
            "FrameService delete synchronization flume job. The ASBE requests use \"s:frames\" (as do online frames requests).",
            "Embeds migration flume job. Covers the multiple MR's for that project (V0 -> V1, V1 -> V2, diffing, verifying ...). At any point in time only one of the jobs should be running. Doesn't issue any rpc requests.",
            "SocialReviews sync flume job. Synchronizes reviews from zipit to ASBE.",
            "Guns notifications delivery.",
            "One-off flumes run by the PostBox team. Team contact: es-postbox@google.com.",
            "One-off flumes run by the G+ API team. Team contact: plus-api-core@google.com.",
            "Stanza delete synchronization flume job.",
            "Social graph index monitoring tool. go/graphprober.",
            "Stanza periodic flume jobs. Team contact: stanza-team.",
            "Madison accounts periodic flume jobs. http://go/madison-accounts Team contact: madison-eng",
            "Papyrus periodic flume jobs. Team contact: papyrus-team",
            "Photos-backend flume jobs. Team contact: photos-backend",
            "Redbox storage backend go/redbox",
            "Photos FIFE flume jobs. Team contact: fife-eng",
            "Classifies abuse. Replaced by Ares (see below). go/abuseiam",
            "Classifies abuse go/ares",
            "Sends cliends Goops notifications. go/streamindexing",
            "Computes Additional KV Pairs for Stanza's go/stanza-indexing",
            "Stanza service: go/stanza. Team contact: stanza-team.",
            "Stanza moonshine indexing. Team contact: es-stream-delivery",
            "StreamActions service: go/streamactionsservice Team contact: stream-team",
            "StreamConfig service: go/socialstreamconfigservice Team contact: stream-team",
            "Stream service: go/stream-service Team contact: stream-team",
            "Stream delete service: go/delete-stream Team contact: stream-team",
            "Legal Investigations Support matter management http://go/kwyjibo",
            "Test stanzas for internal integration tests. Clients who want to prototype on Stanza should use SBE_PLAYGROUND instead. Team contact: stanza-team",
            "Use for test applications and unit tests",
            "AnnotationServiceV2, see go/as2-design. Team contact: social-stream-delivery",
            "Stanza Listener for AnnotationServiceV2: go/as2-design Team contact: social-stream-delivery",
            "Stanza App for clients to prototype on. Team contact: stanza-team",
            "Expo uses the Yenta autocomplete lib (go/EXPO, go/yenta). Team contact: weaver-expo@google.com, yenta-team@google.com",
            "Android VR Home app. http://go/vr-home",
            "YouTube BlarneyStone; automated abuse and moderation classification http://go/blarneystone",
            "Social Events http://go/social-events Team contact: eventsapp@google.com",
            "Deprecated name for http://go/pomeroy.",
            "Deprecated name for ENFORCEMENT_MANAGER DEPRECATED, DO NOT USE.",
            "Ads Integrity's Enforcement Manager client (go/hidoc)",
            "Ads Integrity's Explorer client (go/hidoc)",
            "Ads Integrity's Reviewer client (go/hidoc)",
            "G+ Collections pipeline. This application id is used for internal cleanup. Please DO NOT use it for frontend or backend logging. Team contact: es-collections-eng@google.com.",
            "Application used by G+-owned pipelines. Contact: plus-server-eng@.",
            "Papyrus service (go/papyrus). Team contact: papyrus-team",
            "App for administration of Youtube entities at admin.youtube.com Team contact: yt-force@google.com",
            "App for Youtube Review Infra Pacing. Team contact: yt-review-queue-eng@google.com",
            "App for Youtube Vertical Manager. Team contact: youtube-tns-vm-team@google.com",
            "YouTube Decider (go/yt-tns-dna) Team contact: yt-force-decision-platform@google.com",
            "Application for actions enforcing TnS policies due to TnS violations. It's used in both the read and write path (go/yt-tns-dna). Team contact: yt-force-decision-platform@google.com",
            "YouTube External Links (go/abusivelinks). Team contact: youtube-url-defenses@google.com",
            "Batch jobs run by the Focus Backend team (go/fbs) Team contact: focus-backend-eng@google.com",
            "Teamspaces Team contact: teamspaces-eng@google.com",
            "Assistant Opa Team contact: assistant-a4w-client@google.com",
            "Translation Memory Manager Team contact: tm-team-core@google.com",
            "Threadit Team contact: paulmalolepsy@google.com",
            "Resource Symphony Team contact: fdo-fe-eng@google.com",
            "L10n Infra Shared Team contact: tm-team-core@google.com",
            "Work Tracker Team contact: planr-eng@google.com",
            "Ariane Team contact: launch-team@google.com",
            "Colab Internal Team contact: colab-team@google.com",
            "Colab External Team contact: colab-team@google.com",
            "Talent Grow Team contact: grow-eng@google.com",
            "Rocket Labs Team contact: traditionalgti-coach-dev-team@google.com",
            "My Google Families Team contact: id-iff-eng@google.com",
            "Data Studio Team contact: ga-lego-fe-eng@google.com",
            "Legal Contracts Team contact: nala-eng@google.com",
            "Brief Api Team contact: brief-team@google.com",
            "Hardware Mfg Data Venus Team contact: cte-data-eng@google.com",
            "Betterbug Team contact: betterbug-team@google.com",
            "Dcms Team contact: dcms@google.com",
            "Play Books Pubeng Team contact: playbooks-pubeng-core@google.com",
            "Yaqs Team contact: yaqs-eng@google.com",
            "Prosper Team contact: corp-comp-eng@google.com",
            "Campaign Management Tool Team contact: subhamidipati@google.com",
            "Hiring Team contact: bellalewis@google.com",
            "Datacenter Software Team contact: talos-eng@google.com",
            "Marketing Workflows Team contact: mw-workflow-eng@google.com",
            "Youtube Parent Tools Team contact: yt-pegasus-web@google.com",
            "Reliability Insights Pst Team contact: rel360-platform-team@google.com",
            "Customer Care Portal Team contact: xpp-eng@google.com",
            "Test Fusion Team contact: fusion-team@google.com",
            "Production2020 Uie Team contact: p2020-ui-excellence-team@google.com",
            "Speakeasy Team contact: speakeasy-eng@google.com",
            "Gpay Release Ops Team contact: gpay-release-ops@google.com",
            "Skillsstack Team contact:",
            "Whostory Team contact: whostory@google.com",
            "Bettany Team contact: bettany-eng@google.com",
            "Basecamp Team contact: hardware-ml-infra@google.com",
            "CULTURE_EVENTS_CALENDAR Team contact: culture-events-calendar@google.com",
            "Databridge Console Team contact: databrige-eng@google.com",
            "Commstar Team contact: mdb.commstar-dev@google.com",
            "Cddb Team contact: cddb-dev-team@google.com",
            "Monospace Team contact: monospace-eng@google.com",
            "My Account Team contact: my-google-eng@google.com",
            "Nudgeit Campaign Manager Team contact: nudges-campaign-manager-team@google.com",
            "Decs Team contact: decs-eng@google.com",
            "",
            "Duo Client Team contact: duo-eng@google.com",
            "Project albert (go/albert-frontend) Team contact: albert-eng@google.com",
            "People Playground (go/people-playground-design) Team contact: project-buffet@google.com",
            "Recommended posts pipeline (go/topics-web-gplus) Team contact: stream-ranking-team@google.com",
            "Image Search http://go/images Team contact: images-ui-eng@google.com",
            "Google Store http://go/smashberry Team contact: smashberry-eng@google.com",
            "NBU GConnect Mustard http://go/mustard Team contact: gconnect-mustard-eng@google.com",
            "Madden (http://go/madden) Team contact: madden-eng@google.com",
            "MobDog (http://go/mobdog) Team contact: ph-eng@google.com",
            "GBOARD (http://go/gboard) Team contact: gboard-eng@google.com",
            "Recorder (http://go/recorder) Team contact: recorder-eng-team@google.com",
            "All legacy g+ posts which currently does not have an application to map to.",
            "Podium (http://go/podium)",
            "FUSE targets at younger user base who is extensively using Visual/Photo and location as input for searching. go/fuse-sbe-v0-integration. Team Contact: igsa-visual@google.com",
            "Honeyphish (http://go/honeyphish)",
            "Offline backfill job for annotations generated by go/asv2.",
            "Pops Support (Contact HR) go/contacthr-design Team contact: boq-contacthr-eng@google.com",
            "Paisa Wander (http://go/paisa-tools) Team Contact: paisa-tools@google.com",
            "NextGen Retail Self Order (go/nextgenretail) Team Contact: nextgenretail-eng@google.com",
            "Application not set by client. Only used internally.",
            "First Party Application which is not mapped to the already defined enums.",
            "DEPRECATED DO NOT USE.",
            "VIDEO_HANGOUT represents the gcomm application (javascript/apps/gcomm). Hangout Video Calls (rtc-eng@).",
            "Legacy (lite) hangouts (rtc-eng@).",
            "GVC hangouts calls (gvc-team@).",
            "go/present hangouts (gvc-team@).",
            "Hangouts on Air (rtc-audience@).",
            "Helpouts Hangouts (tee-team@).",
            "Shoe SDK (etnu@).",
            "Envoy (go/envoy). Contact: noahric@, envoy-eng@.",
            "Babel's chat client (aka Hangouts Chat).",
            "Babel's Nova client. Used for NOVA related logging through BABEL. Contact: mlei@",
            "Media calling embedded in Wabel. Contact: efernandez@, dalesat@",
            "Hangouts landing page (hangouts.google.com). Contact: jdudder@, jchord@",
            "Express Lane (go/express-lane) Contact: efernandez@, pauldean@, qaz@",
            "Enterprise Meetings App for Android http://go/thor-android Team contact: c4w-mobile-eng@google.com",
            "Express Lane on Boq. Contact: efernandez@, pauldean@, qaz@, segu@",
            "Hangout Meet Hardware management Team contact: rtc-fleet-mgmt-eng@google.com --------------------------- END HANGOUT APPLICATIONS ----------------------",
            "Stax database (go/stax). Contact: stax-eng@",
            "Hangouts Immersive Client. Contact: pawong@, plancarte@",
            "Scanner app. http://go/photos-scanner Team contact: photos-draper-eng@google.com",
            "Photos Library API http://go/photos-3p-g3docs Team contact: photos-3p-eng@google.com",
            "Photos Library API http://go/photos-3p-g3docs Team contact: photos-3p-eng@google.com",
            "Vault (go/vault) Team contact: vault-eng@",
            "Course Kit (go/prof) Team contact: prof-eng@",
            "TOTAL is for all application traffic.",
            "TOTAL_ZERO_PARTY is for all traffic from plus.google.com or its counterparts such as the native mobile G+ app or mobile web.",
            "TOTAL_FIRST_PARTY is all non-G+ Google properties, such as Gmail and YouTube.",
            "TOTAL_THIRD_PARTY is all third-party site traffic.",
            "TOTAL_INTERNAL is all Google-internal traffic. e.g. prober, monitoring, mapreduces.",
            "TOTAL_UNKNOWN is all unknown traffic.",
            "TOTAL_MINUS_YOUTUBE is all traffic excluding any traffic from YOUTUBE.",
            "TOTAL_FIRST_PARTY_WITH_PRIMARY_INTENT_TO_SHARE_TO_GPLUS is all first party traffic with primary intent to share to Google+. All applications that belong to TOTAL_FIRST_PARTY and do not belong to TOTAL_FIRST_PARTY_WITH_SECONDARY_INTENT_TO_SHARE_TO_GPLUS belong to this category.",
            "TOTAL_FIRST_PARTY_WITH_SECONDARY_INTENT_TO_SHARE_TO_GPLUS is all first party traffic with no primary intent to share to Google+. The applications that belong to the category are defined in google3/logs/lib/social/content_creation/blacklist_apps.pb.",
            "TOTAL_GPLUS is all variations of gplus app under TOTAL_SOCIAL_APPS",
            "TOTAL_SOCIAL_APPS is all core social Google apps.",
            "CROWD_COMPUTE is a Google-internal crowd-sourcing platform.",
            "KHAZANA is an NBU app for document organization. http://go/khazana Team contact: khazana-eng@google.com",
            "Lighter is a cross-platform messaging platform to enable applications to build rich in-app messaging experiences. GMM (Google Maps for Mobile) chatting is built on top of Lighter. Team contact: sbe-lighter@google.com",
            "Lighter is a cross-platform messaging platform to enable applications to build rich in-app messaging experiences. GMB (Google My Business) chatting is built on top of Lighter. Team contact: sbe-lighter@google.com",
            "MYACTIVITY is myactivity.google.com http://go/myactivity Team contact: footprints-team@google.com",
            "BLOG_COMPASS is an app that helps bloggers manage their site and find topics to write about. http://go/blog-compass Team: blog-compass@google.com",
            "CONCORD measures business and product usage metrics across Google Cloud Platform. http://go/concord Team: concord-dev@google.com",
            "Navstar is an app that helps googlers to understand how users are interacting with Search & Assistant features. http://go/navstar2 Team: navstar-eng@google.com",
            "Settings Intelligence is an app that contains updatable module for Pixel Settings. http://go/hacking-on-settings Team: android-settings-core@google.com",
            "Topaz teams is a team under Topaz (aka Google Cloud Search) with a mission to externalize the Teams product we have here at Google under Moma. http://go/topaz-teams Team: topaz-teams-eng@google.com",
            "Google Endpoint Management Android Agent go/emm-extension Team: mdm-core-eng@google.com",
            "DUMBLEDORE is an app that helps kids learn through relevant interest based informal interactions across Google's products http://go/dumbledore Team: dumbledore-team",
            "Google One is a subscriptions plan that unlocks premium experiences across Google products. go/googleone Team: subscriptions",
            "NBU GConnect Kimchi Google Station Partner Console http://go/gstation-partner-console Team: mdb.nbu-gconnect-kimchi-team@google.com",
            "FASTDASH is a near real-time reporting system that processes front-end logs go/fastdash Team:fastdash-infra",
            "Clockwork (Aquarius Lapis) go/aquarius-eng Team: aquarius-eng@google.com",
            "Dasher Reporting go/dasher-reporting-g3doc Team: dasher-bip-eng@google.com",
            "NBU GConnect Picard http://go/gconnect-picard Team contact: gstation-web@google.com",
            "go/jacquard",
            "Google go http://go/googlego Team: googleit-eng-team@google.com",
            "Used in Buganizer.",
            "Used in Docos Mentions.",
            "Used in Trix Waffle. go/trixwaffle.",
            "Used in Share Service. go/apps-share",
            "Android Safety go/android-safety-g3doc",
            "Yeti text chat for Takeout. go/yeti-takeout-integration Team contact: yeti-textchat@google.com",
            "Assistant Go http://go/goopa Team: assistant-lite-android-eng@google.com",
            "Flourish App. go/flourish",
            "ALECS go/project-mic Team contact: mic-eng@google.com",
            "Nandhi Test Scheduler Team contact: people-sharing-engprod@google.com",
            "Audio Recorder Team contact: pixel-apps-recorder@google.com",
            "ContactStore traffic with unknown client.",
            "Profile Card go/yt-profile-card-prd Team contact: yt-identity-core",
            "Espresso Team contact: readiness-devs",
            "People Companion http://go/people-companion-dd Team contact: contactsplus-eng@google.com",
            "Photos Go (go/photos-go) Team contact: photos-go-eng",
            "yeti go/yeti Team contact: yeti-analytics-eng",
            "Bloom go/bloom Team contact: bloom-edu-eng@google.com",
            "Vantage Field go/vantage-field Team contact: vantage-dispatch-eng@google.com",
            "Google Roads & Transit go/urbanmobility Team contact: urban-mobility-eng@google.com",
            "Google Health Familycare go/hydrangea Team contact: health-familycare-apps-eng@google.com",
            "Intuitive Platform go/intuitive Team contact: ml4nt-dev@google.com",
            "Paisa microapps cricket. go/wc-2019 Team contact: payments-microapps-pek-team@google.com",
            "Integration Platform Team contact: cloud-crm-platform-eng@prod.google.com",
            "CrOS Scaling & Services staging apps generic commenting service. go/cros3 Team contact: chromeos-peng-eng@google.com.",
            "CrOS Scaling & Services prod apps generic commenting service go/cros3 Team contact: chromeos-peng-eng@google.com.",
            "Assistant Proactive Suggestions. go/opacros-proactive-design Team contact: assistant-proactive-suggestions-team@google.com",
            "Privacy One Suite of Applications go/privacy-one Team contact: privacy-one-dev-team@google.com",
            "Paisa app http://go/paisa Team contact: paisa-eng@google.com",
            "Assist JS go/aog-assistjs-logging Team contact: aog-amp-actions@google.com",
            "Hotelier go/hotelier-frontend Team contact: hotels-hotelier-eng@google.com",
            "Photos Kindygram (Photos for Edu) app go/kindy Team contact: kindygram-eng@google.com",
            "Messages SMS/MMS/RCS messaging app for Android go/messages Team contact: am-shell-team@google.com",
            "HKB hotel editor go/hkb Team contact: hkb-eng@google.com",
            "Vistaar web app go/vistaar Team contact: vistaar-eng@google.com",
            "Vistaar web app, non-prod instances go/vistaar Team contact: vistaar-eng@google.com",
            "G Suite Growth go/dasher-growth Team contact: dasher-growth-eng@google.com",
            "Eldar go/eldar Team contact: eldar-dev@google.com",
            "GMB Android client http://go/gmb-android Team contact: gmb-android@google.com",
            "Shopping List go/shoppinglist Team contact: shoppinglist-eng@google.com",
            "Earth Team contact: earth-ios",
            "Instant Loans Microapp go/instant-loans-ui-v2-dd Team contact: paisa-credit-eng@google.com",
            "Assistant Go Web (Citadel) go/goopa-citadel Team contact: assistant-nbu-android-eng@googoe.com",
            "Showtime Team contact: ecp-platform-team",
            "Admin Console - Compliance Center (go/konark) go/konark Team contact: konark-eng@google.com",
            "Exo Refserver go/exo Team contact: exo-core@google.com",
            "Monitoring Platform go/monitoring-platform Team contact: monitoring-platform-team@google.com",
            "Autocap go/autocap Team contact: capmgmt-team@google.com",
            "Payments Orchestration go/orchestration Team contact: payments-platform-discuss@google.com",
            "Google My Business iOS http://go/gmb Team contact: geomerchant-data-measurement@google.com",
            "Assistant on KaiOS go/nbu-dcf-dd Team contact: assistant-nbu-features-eng@google.com",
            "AdMob companion app go/admob-mobile-dd Team contact: admob-mobile-app-eng",
            "Health Screeners app go/screeners-prd Team contact: health-screeners-dev@google.com",
            "Meetings intelligence http://go/meetings-intelligence Team contact: meetings-intelligence-eng@google.com",
            "gHire go/ghire, go/ghire-g3doc Team contact: rp2-crm-eng@google.com",
            "Translate Community go/translate-community Team contact: translate-community@google.com",
            "Road Mapper http://go/road-mapper Team contact: maps-ugc-mtwr@google.com",
            "Nest Team contact: vkandamath@google.com",
            "Rollouts UI go/releases-rollouts Team contact: releases-rollouts-ui@google.com",
            "Shopping Property go/compass-infra Team contact: compass-infra@google.com",
            "Shopping Property non prod environment. go/compass-infra Team contact: compass-infra@google.com",
            "Payments Gas Microapp http://go/gas-microapp-engdoc Team contact: microapps-transportation-eng@google.com",
            "Paisa Movies Microapp go/microapp-movies-prd Team contact: mdb.paisa-movies-dev@google.com",
            "Hub Call Team contact: voice-fe-ios@google.com",
            "Waymo simulation results dashboard go/waymo-sim-results Team contact: chauffeur-sw-quality-eng@google.com",
            "Gsuite Workflow Team contact: apps-workflow-editor-eng-team@google.com",
            "Corp Eng Finance Workflows Team contact: introspect-eng@google.com",
            "Payments Parking Microapp go/gpay-microapp-parking Team contact: spots-parking-team@google.com",
            "Travel Team contact: mayflower-eng@google.com",
            "Gabble: *G*oogle *A*ssistant *B*ig *BL*uetooth *E*valuator An internal-only Android application to expedite Bluetooth feature development for the Assistant Auto team. See go/morris-bt for more information. Team contact: gabble-app-eng@google.com",
            "Prof (go/prof) and Originality (go/originality). Team contact: prof-eng@google.com, plagiarism-eng@google.com",
            "MyFi go/myfi Team contact: sumer-myfi-eng@google.com",
            "Chomchom content first experience app. go/chomchom-deck Team contact: chomchom-eng@google.com",
            "Assistant Toolchain - Dialog Central Team contact: dialog-central-eng@google.com",
            "YouTube Ansible - Abuse platform, go/ansible Team contact: yt-kapla-ansible@google.com",
            "YouTube Community Inteligence Kapla integration. b/186151755. Team contact: yt-kapla-team@google.com, yt-kapla-ansible@google.com",
            "Gantry Team contact: gmscore-gantry-team@google.com",
            "Payments merchant console (go/merchant-console-design) Team contact: merchant-console-infra-eng@google.com",
            "Ta'veren - Splinter Team contact: taveren-team@google.com",
            "Kintaro Team contact: kintaro-eng@google.com",
            "MDM Admin Console Team contact: mdm-eng@google.com",
            "Payments consumer core products. Team contact: gpay-android-eng@google.com",
            "Incidentflow Team contact: im-tools-eng@google.com",
            "OneGoogle Mobile. http://go/og Team contact: og-mobile@google.com",
            "Anura App Team contact: anura-eng@google.com",
            "FGC Google Finance (go/sumer-fgc) Team contact: fgc-eng@google.com",
            "Podcasts Manager Team contact: speakachu-team@google.com",
            "Files by Google Team contact: files-eng@google.com",
            "YouTube Post API Team contact: yt-post-api-eng@google.com",
            "GSuite Hub Team contact: g/hub-eng",
            "ATV Analytics Watson go/atv-analytics-design-launcher Team contact: atv-analytics-team@google.com",
            "New paidtasks (Surveys) frontend go/402surveys2 Team contact: 402-surf@google.com",
            "One Reviewer Tool Team contact: onereviewertool-eng@google.com",
            "Meet Quality Tool go/thor-mqt Team contact: rtc-upsight-team@google.com",
            "",
            "Google Meet http://go/thor-eng Team contact: hangout-enterprise-eng@google.com",
            "Paisa Nearby Merchant go/gpay_nearby_prd Team contact: nbu-paisa-merchants-verticals-team@google.com",
            "",
            "Vantage Field go/vantage-field Team contact: vantage-dispatch-eng@google.com",
            "Lens Web (go/lens-web). Team contact: lens-web@google.com.",
            "Herald app (go/herald-g3doc) Team contact: herald-eng@google.com",
            "Paisa Microapps Web Projects. Includes landing page, microtab and other web related projects. go/microapps, go/microapp-landing-page, go/microapps-store Team contact: microapps-platform-team@google.com",
            "BugObserver go/bugobserver-help, bugobserver-eng@google.com",
            "Atlas Team contact: atlas-eng@google.com",
            "Dharma Initiative go/dharma Team contact: dharma-team@google.com",
            "Snipit Team contact: snipit-dev@google.com",
            "Premium Assistant (go/premium-assistant) Team contact: premium-assistant-eng@google.com",
            "OneReviewerTool (go/ORT-doc) Team contact: onereviewertool-eng@google.com",
            "Coronado Team contact: rpui-eng-team@google.com",
            "Intake go/systemone Team contact: system1-team@google.com",
            "Pumice Team contact: pumice-team@google.com",
            "Backlight Team contact: jsuite-eng@google.com",
            "Glossary Manager Team contact: tm-team-core@google.com",
            "Google Growth - UpgradeParty go/upgradeparty Team contact: google-growth-eng@google.com",
            "Onedev Workflow Team contact: one-developer-workflow+people-stack@google.com",
            "Avalanche Team contact: cpe-surveys-eng@google.com",
            "Kormo Team contact: kormo-eng@google.com",
            "Assistant Profile Yourpeople Team contact: assistant-family-eng@google.com",
            "Smart Display Web go/sdweb Team contact: sdweb-eng@google.com",
            "Deskbooking Team contact: desktopia-open@google.com",
            "Food Vertical go/payments-merchant-verticals Team contact: nextgenretail-eng@google.com",
            "Valuables Merchant Center go/valuables-merchant-ui Team contact: tp2-valuables@google.com",
            "Offsec Team contact: redgate@google.com",
            "Staffing Works Schedule Tool go/schedule-docs Team contact: rp2-schedule-eng@google.com",
            "Paisa social campaigns platform. go/gpay-campaign-generalization Team contact: pc-social@google.com",
            "Wordflow Team contact: wordflow-eng@google.com",
            "Plan-for-Care web immersive (go/p4c-immersive-design) Team contact: care-planning-eng@google.com",
            "DeepMind AlphaSchedule (go/alphaschedule-docs) Team contact: deepmind-alphaschedule-eng@google.com",
            "Hoolichat go/hoolichat Team contact: hoolichat-eng@google.com",
            "Youtube Creator Studio Team contact: creator-studio-eng@google.com",
            "Bricks Team contact: mdb.cloudx-bricks-team@google.com",
            "Payments Merchant Business Insight (go/mechant-business-insight-home).",
            "Recall https://recall.googleplex.com Team contact: recall@google.com",
            "Nest Green Energy Web go/apollo-web-ui",
            "Frap go/frap-docs Team contact: frap-eng@google.com",
            "Payments Grocery Microapp go/grocery-deals Team contact: spots-grocery-team@google.com",
            "Reviews Widget API go/reviews-widget Team contact: wugc@google.com",
            "go/incidentflow Team contact: im-tools-eng@google.com",
            "Area 120 - PromoDay go/promoday Team Contact: area120-promoday-eng@google.com",
            "Pinpoint go/jsuite-pinpoint Team contact: backlight-eng@google.com",
            "Translation Console go/transconsole Team contact: transconsole-eng@google.com",
            "Google Workspace Marketplace go/gsm-eng Team contact: gsm-team@google.com",
            "Drive desktop Photos uploader go/spork-prd Team contact: spork-eng@google.com",
            "Sustainability on Workspace Team: workspace-sustainability-eng@google.com"
          ],
          "type": "string"
        },
        "stateStatus": {
          "description": "* There can be multiple states based on the context: 1. AUTOCOMPLETE + Gmail - context 1 2. AUTOCOMPLETE + Chat/Dynamite - context 2 3. \"SOME OTHER ACTION\" + Gmail - context 3 A client should identify whether a patrticular context is present in the list and only if one is found - use the state that goes alogn with the context, otherwise the client should default to whatever is the safe assumption about \"internality/externality\" the application should be making (likely, consider everything not explicitly \"internal\" as \"external\").",
          "items": {
            "$ref": "PeoplestackFlexorgsProtoInternalExternalStateStatus"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "PeoplestackFlexorgsProtoInternalExternalStateStatus": {
      "id": "PeoplestackFlexorgsProtoInternalExternalStateStatus",
      "properties": {
        "contextType": {
          "enum": [
            "INTERNAL_EXTERNAL_CONTEXT_UNSPECIFIED",
            "AUTOCOMPLETE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "state": {
          "enum": [
            "INTERNAL_EXTERNAL_STATE_UNSPECIFIED",
            "INTERNAL",
            "EXTERNAL",
            "NOT_APPLICABLE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Meant for scenarios where client-sides need to know if External information was truly missing, meaning the contact came from a source other than Server (i.e device contacts, user entered, etc), or if the server intentionally did not populate the attribute (i.e. non-Dasher). This value will never be set by the server, and instead, the client will use it to create an artificial payload the first time it receives a server contact that doesn't have external data. That way the client will know downstream that external state doesn't apply"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "PerDocData": {
      "description": "=========================================================================== # Make sure you read the comments in the bottom before you add any new field. NB: As noted in the comments, this protocol buffer is used in both indexing and serving. In mustang serving implementations we only decode perdocdata during the search phase, and so this protocol should only contain data used during search. See mustang/repos_www/attachments.proto:{MustangBasicInfo,MustangContentInfo} for protocols used during search and/or docinfo. Next available tag deprecated, use this (and look for commented out fields): blaze-bin/net/proto_compiler/protocol-compiler --freetags \\ indexer/perdocdata/perdocdata.proto Next tag: 220",
      "id": "PerDocData",
      "properties": {
        "BlogData": {
          "$ref": "BlogPerDocData"
        },
        "BookCitationData": {
          "$ref": "BookCitationPerDocData",
          "description": "the book citation data for each web page, the average size is about 10 bytes"
        },
        "DEPRECATEDAuthorObfuscatedGaia": {
          "description": "The obfuscated google profile gaia id(s) of the author(s) of the document. This field is deprecated, use the string version.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "DEPRECATEDQuarantineWhitelist": {
          "type": "boolean"
        },
        "DocLevelSpamScore": {
          "description": "The document spam score is represented as a 7-bits, going from 0 to 127.",
          "format": "int32",
          "type": "integer"
        },
        "Event": {
          "description": "Free form debug info. NB2: consider carefully what to save here. It's easy to eat lots of gfs space with debug info that nobody needs...",
          "items": {
            "$ref": "PerDocDebugEvent"
          },
          "type": "array"
        },
        "GibberishScore": {
          "description": "The gibberish score is represented in 7 bits, going from 0 to 127.",
          "format": "int32",
          "type": "integer"
        },
        "GroupsData": {
          "$ref": "GroupsPerDocData",
          "description": "16 bytes of groups2 data: used only in groups2 index"
        },
        "IsAnchorBayesSpam": {
          "description": "Is this document considered spam by the anchor bayes classifier?",
          "type": "boolean"
        },
        "KeywordStuffingScore": {
          "description": "The keyword stuffing score is represented in 7 bits, going from 0 to 127.",
          "format": "int32",
          "type": "integer"
        },
        "MobileData": {
          "$ref": "MobilePerDocData",
          "description": "Additional metadata for lowend mobile documents in the Google index."
        },
        "OriginalContentScore": {
          "description": "The original content score is represented as a 7-bits, going from 0 to 127. Only pages with little content have this field. The actual original content score ranges from 0 to 512. It is encoded with quality_q2::OriginalContentUtil::EncodeOriginalContentScore(). To decode the value, use quality_q2::OriginalContentUtil::DecodeOriginalContentScore().",
          "format": "int32",
          "type": "integer"
        },
        "PremiumData": {
          "$ref": "PremiumPerDocData",
          "description": "Additional metadata for Premium document in the Google index."
        },
        "QuarantineInfo": {
          "description": "bitmask of QuarantineBits (or'd together) used to store quarantine related information. For example: QUARANTINE_WHITELIST | QUARANTINE_URLINURL.",
          "format": "int32",
          "type": "integer"
        },
        "ScaledExptIndyRank": {
          "description": "DEPRECATED ---------------------------------------------------------------- Please do not use these fields in any new code. experimental",
          "format": "int32",
          "type": "integer"
        },
        "ScaledExptIndyRank2": {
          "description": "experimental",
          "format": "int32",
          "type": "integer"
        },
        "ScaledExptIndyRank3": {
          "description": "experimental",
          "format": "int32",
          "type": "integer"
        },
        "ScaledExptSpamScoreEric": {
          "format": "int32",
          "type": "integer"
        },
        "ScaledExptSpamScoreYoram": {
          "format": "int32",
          "type": "integer"
        },
        "ScaledIndyRank": {
          "description": "The independence rank is represented as a 16-bit integer, which is multiplied by (max_indy_rank / 65536) to produce actual independence rank values. max_indy_rank is typically 0.84.",
          "format": "int32",
          "type": "integer"
        },
        "ScaledLinkAgeSpamScore": {
          "description": "End DEPRECATED ------------------------------------------------------------ Link age score is represented as a 7-bit integer, going from 0 to 127.",
          "format": "int32",
          "type": "integer"
        },
        "ScaledSpamScoreEric": {
          "format": "int32",
          "type": "integer"
        },
        "ScaledSpamScoreYoram": {
          "description": "Spamscores are represented as a 7-bit integer, going from 0 to 127.",
          "format": "int32",
          "type": "integer"
        },
        "SpamWordScore": {
          "description": "The spamword score is represented in 7-bits, going from 0 to 127.",
          "format": "int32",
          "type": "integer"
        },
        "TagPageScore": {
          "description": "Tag-site-ness of a page, repesented in 7-bits range from 0 to 100. Smaller value means worse tag page.",
          "format": "int32",
          "type": "integer"
        },
        "ToolBarData": {
          "$ref": "ToolBarPerDocData"
        },
        "WhirlpoolDiscount": {
          "format": "float",
          "type": "number"
        },
        "appsLink": {
          "$ref": "QualityCalypsoAppsLink",
          "description": "AppsLink contains Android application IDs in outlinks. It is used to improve results ranking within applications universal. See http://go/apps-universal for the project details."
        },
        "asteroidBeltIntents": {
          "$ref": "QualityOrbitAsteroidBeltDocumentIntentScores",
          "description": "For indexing Asteroid Belt intent scores. See go/asteroid-belt for details."
        },
        "authorObfuscatedGaiaStr": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "biasingdata": {
          "$ref": "BiasingPerDocData"
        },
        "biasingdata2": {
          "$ref": "BiasingPerDocData2",
          "description": "A replacement for BiasingPerDocData that is more space efficient. Once this is live everywhere, biasingdata will be deprecated."
        },
        "bodyWordsToTokensRatioBegin": {
          "description": "The body words over tokens ratios for the beginning part and whole doc. NB: To save space, field body_words_to_tokens_ratio_total is not set if it has the same value as body_words_to_tokens_ratio_begin (e.g., short docs).",
          "format": "float",
          "type": "number"
        },
        "bodyWordsToTokensRatioTotal": {
          "format": "float",
          "type": "number"
        },
        "brainloc": {
          "$ref": "QualityGeoBrainlocBrainlocAttachment",
          "description": "Brainloc contains location information for the document. See ariane/273189 for details."
        },
        "commercialScore": {
          "description": "A measure of commerciality of the document Score > 0 indicates document is commercial (i.e. sells something) Computed by repository/pageclassifiers/parsehandler-commercial.cc",
          "format": "float",
          "type": "number"
        },
        "compressedQualitySignals": {
          "$ref": "CompressedQualitySignals"
        },
        "compressedUrl": {
          "description": "Compressed URL string used for SETI.",
          "format": "byte",
          "type": "string"
        },
        "contentAttributions": {
          "$ref": "ContentAttributions"
        },
        "countryInfo": {
          "$ref": "CountryCountryAttachment",
          "description": "This field stores the country information for the document in the form of CountryAttachment."
        },
        "crawlPagerank": {
          "description": "This field is used internally by the docjoiner to forward the crawl pageranks from original canonicals to canonicals we actually chose; outside sources should not set it, and it should not be present in actual docjoins or the index.",
          "format": "int32",
          "type": "integer"
        },
        "crawlerIdProto": {
          "$ref": "LogsProtoIndexingCrawlerIdCrawlerIdProto",
          "description": "For crawler-ID variations, the crawling context applied to the document. See go/url, and the description in google3/indexing/crawler_id"
        },
        "crowdingdata": {
          "$ref": "CrowdingPerDocData"
        },
        "datesInfo": {
          "description": "Stores dates-related info (e.g. page is old based on its date annotations). Used in FreshnessTwiddler. Use encode/decode functions from quality/timebased/utils/dates-info-helper-inl.h",
          "format": "int64",
          "type": "string"
        },
        "desktopInterstitials": {
          "$ref": "IndexingMobileInterstitialsProtoDesktopInterstitials",
          "description": "Contains desktop interstitials signal for VOLT ranking change."
        },
        "domainAge": {
          "description": "16-bit",
          "format": "int32",
          "type": "integer"
        },
        "eventsDate": {
          "description": "Date for Events. A web page might list multiple events with different dates. We only take one date (start date) per event.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "extraData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "This field is available only in the docjoins: it is cleared before building per-doc data in both Mustang and Teragoogle. (MessageSet is inefficient in space for serving data) Use this for all new fields that aren't needed during serving. Currently this field contains: * UrlSignals for the document level spam classifier (when the doclevelspamscore is set). * PerDocLangidData and realtimespam::ClassifierResult for the document level fresh spam classifier (when the doc-level fresh spam score is generated). * MicroblogDocQualitySignals for document-level microblog spam classifier. This only exists in Firebird for now. * spam_buckets::BucketsData for a document-structure hash"
        },
        "fireflySiteSignal": {
          "$ref": "QualityCopiaFireflySiteSignal",
          "description": "Contains Site signal information for Firefly ranking change. See http://ariane/313938 for more details."
        },
        "freshboxArticleScores": {
          "description": "Stores scores of freshness-related classifiers: freshbox article score, live blog score and host-level article score. The encoding/decoding API is in quality/freshness/freshbox/goldmine/freshbox_annotation_encoder.h. To use this field, you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_RYXS2lX2IV.",
          "format": "uint32",
          "type": "integer"
        },
        "freshnessEncodedSignals": {
          "description": "Stores freshness and aging related data, such as time-related quality metrics predicted from url-pattern level signals. Use the encoding decoding API in quality/freshness/docclassifier/aging/encoded-pattern-signals.h This field is deprecated.",
          "format": "int64",
          "type": "string"
        },
        "fringeQueryPrior": {
          "$ref": "QualityFringeFringeQueryPriorPerDocData",
          "description": "Contains encoded FringeQueryPrior information. Unlikely to be meaningful for anyone other than fringe-ranking team. Contact fringe-ranking team if any questions, but do NOT use directly without consulting them."
        },
        "geodata": {
          "description": "geo data; approx 24 bytes for 23M U.S. pages",
          "type": "string"
        },
        "homePageInfo": {
          "format": "int32",
          "type": "integer"
        },
        "homepagePagerankNs": {
          "description": "The page-rank of the homepage of the site. Copied from the cdoc.doc().pagerank_ns() of the homepage.",
          "format": "int32",
          "type": "integer"
        },
        "hostAge": {
          "description": "The earliest firstseen date of all pages in this host/domain. These data are used in twiddler to sandbox fresh spam in serving time. It is 16 bit and the time is day number after 2005-12-31, and all the previous time are set to 0. If this url's host_age == domain_age, then omit domain_age Please use //spam/content/siteage-util.h to convert the day between epoch second. Regarding usage of Sentinel values: We would like to check if a value exists in scoring bundle while using in Ranklab AST. For this having a sentinel value will help us know if the field exists or has a sentinel value (in the case it does not exist). 16-bit",
          "format": "int32",
          "type": "integer"
        },
        "hostNsr": {
          "description": "Site rank computed for host-level sitechunks. This value encodes nsr, site_pr and new_nsr. See quality_nsr::util::ConvertNsrDataToHostNsr and go/nsr.",
          "format": "uint32",
          "type": "integer"
        },
        "imagedata": {
          "$ref": "ImagePerDocData"
        },
        "inNewsstand": {
          "description": "This field indicates whether the document is in the newsstand corpus.",
          "type": "boolean"
        },
        "isHotdoc": {
          "description": "Set by the FreshDocs instant doc joiner. See //indexing/instant/hotdocs/README and http://go/freshdocs-hotdocs.",
          "type": "boolean"
        },
        "kaltixdata": {
          "$ref": "KaltixPerDocData"
        },
        "knexAnnotation": {
          "$ref": "SocialPersonalizationKnexAnnotation",
          "description": "For indexing k'nex annotations for FreshDocs."
        },
        "languages": {
          "description": "Plausible languages in order of decreasing plausibility. Language values are small, IE < 127 so this should compress to one byte each.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "lastSignificantUpdate": {
          "description": "Last significant update of the document. This is sourced from the quality_timebased.LastSignificantUpdate proto as computed by the LSUSelector from various signals. The value is a UNIX timestamp in seconds.",
          "format": "int64",
          "type": "string"
        },
        "lastSignificantUpdateInfo": {
          "description": "Metadata about last significant update. Currently this only encodes the quality_timebased.LastSignificantUpdate.source field which contains the info on the source of the signal. NOTE: Please do not read the value directly. Use helpers from quality/timebased/lastsignificantupdate/lsu-helper.h instead.",
          "format": "int64",
          "type": "string"
        },
        "launchAppInfo": {
          "$ref": "QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData",
          "description": "Info on how to launch a mobile app to consume this document's content, if applicable (see go/calypso)."
        },
        "liveResultsData": {
          "$ref": "WeboftrustLiveResultsDocAttachments"
        },
        "localizedCluster": {
          "$ref": "IndexingDupsLocalizedLocalizedCluster",
          "description": "Information on localized clusters, which is the relationship of translated and/or localized pages."
        },
        "noimageframeoverlayreason": {
          "description": "If not 0, we should not show the image in overlay mode in image snippets",
          "format": "int32",
          "type": "integer"
        },
        "nsrDataProto": {
          "$ref": "QualityNsrNsrData",
          "description": "Stripped site-level signals, not present in the explicit nsr_* fields, nor compressed_quality_signals."
        },
        "nsrIsCovidLocalAuthority": {
          "description": "This field is propagated to shards. In addition, it is populated at serving time by go/web-signal-joins.",
          "type": "boolean"
        },
        "nsrIsElectionAuthority": {
          "description": "This field is propagated to shards. It will also be populated at serving time by go/web-signal-joins (see b/168114815).",
          "type": "boolean"
        },
        "nsrIsVideoFocusedSite": {
          "description": "This field is propagated to shards. It will also be populated at serving time by go/web-signal-joins (see b/170607253). Bit indicating whether this site is video-focused, but not hosted on any major known video hosting domains.",
          "type": "boolean"
        },
        "nsrSitechunk": {
          "description": "SiteChunk computed for nsr. It some cases it can use more information than just url (e.g. youtube channels). See NsrAnnotator for details. If sitechunk is longer than --populate_nsr_sitechunk_max_length (default=100), it will not get populated. This field might be compressed and needs to be decoded with quality_nsr::util::DecodeNsrSitechunk. See go/nsr-chunks for more details. This field contains only nontrivial primary chunks.",
          "type": "string"
        },
        "numUrls": {
          "description": "Total number of urls encoded in the url section = # of alternate urls + 1",
          "format": "int32",
          "type": "integer"
        },
        "oceandata": {
          "$ref": "OceanPerDocData",
          "description": "28 bytes per page, only in the Ocean index"
        },
        "onsiteProminence": {
          "description": "Onsite prominence measures the importance of the document within its site. It is computed by propagating simulated traffic from the homepage and high craps click pages. It is a 13-bit int.",
          "format": "uint32",
          "type": "integer"
        },
        "origin": {
          "format": "int32",
          "type": "integer"
        },
        "originalTitleHardTokenCount": {
          "description": "The number of hard tokens in the title.",
          "format": "int32",
          "type": "integer"
        },
        "pageTags": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "pagerank": {
          "description": "Experimental pageranks (DEPRECATED; only pagerank in MustangBasicInfo is used).",
          "format": "float",
          "type": "number"
        },
        "pagerank0": {
          "format": "float",
          "type": "number"
        },
        "pagerank1": {
          "format": "float",
          "type": "number"
        },
        "pagerank2": {
          "format": "float",
          "type": "number"
        },
        "pageregions": {
          "description": "String that encodes the position ranges for different regions of the document. See \"indexer/pageregion.h\" for an explanation, and how to decode the string",
          "type": "string"
        },
        "phildata": {
          "$ref": "PhilPerDocData"
        },
        "productSitesInfo": {
          "$ref": "QualityProductProductSiteData",
          "description": "This field stores information about product sites."
        },
        "queriesForWhichOfficial": {
          "$ref": "OfficialPagesQuerySet",
          "description": "The set of (query, country, language) triples for which this document is considered to be the official page. For example, www.britneyspears.com would be official for (\"britney spears\", \"us\", 0) and others (0 is English)."
        },
        "rosettaLanguages": {
          "description": "Top two document language BCP-47 codes as generated by the RosettaLanguageAnnotator in the decreasing order of probability.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "rsApplication": {
          "$ref": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplication",
          "description": "Application information associated to the document."
        },
        "s3AudioLanguage": {
          "$ref": "S3AudioLanguageS3AudioLanguage",
          "description": "Primary video's audio language classified by S3 based Automatic Language Identification (only for watch pages)."
        },
        "saftLanguageInt": {
          "description": "Top document language as generated by SAFT LangID. For now we store bare minimum: just the top 1 language value, converted to the language enum, and only when different from the first value in 'languages'.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "scaledSelectionTierRank": {
          "description": "Selection tier rank is a language normalized score ranging from 0-32767 over the serving tier (Base, Zeppelins, Landfills) for this document. This is converted back to fractional position within the index tier by scaled_selection_tier_rank/32767.",
          "format": "int32",
          "type": "integer"
        },
        "scienceDoctype": {
          "description": "Scholar/Science Document type: <0 == not a Science Document -- default 0 == Science doc fully visible >0 == Science doc but limited visibility, the number is the visible terms",
          "format": "int32",
          "type": "integer"
        },
        "scienceHoldingsIds": {
          "description": "Deprecated 2016/01/14.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "semanticDate": {
          "description": "SemanticDate, estimated date of the content of a document based on the contents of the document (via parsing), anchors and related documents. Date is encoded as a 32-bits UNIX date (1970 Jan 1 epoch). Confidence is encoded using a SemanticDate specific format. For details of encoding, please refer to quality/freshness/docclassifier/semanticdate/public/semantic_date.proto",
          "format": "int32",
          "type": "integer"
        },
        "semanticDateConfidence": {
          "description": "DEPRECATED: semantic_date_confidence replaced by semantic_date_info.",
          "format": "int32",
          "type": "integer"
        },
        "semanticDateInfo": {
          "description": "Info is encoded using a SemanticDate specific format. Contains confidence scores for day/month/year components as well as various meta data required by the freshness twiddlers.",
          "format": "int32",
          "type": "integer"
        },
        "servingTimeClusterIds": {
          "$ref": "IndexingDocjoinerServingTimeClusterIds",
          "description": "A set of cluster ids which are generated in Alexandria and used to de-dup results at serving time."
        },
        "shingleInfo": {
          "$ref": "ShingleInfoPerDocData"
        },
        "smartphoneData": {
          "$ref": "SmartphonePerDocData",
          "description": "Additional metadata for smartphone documents in the Google index."
        },
        "smearingMaxTotalOffdomainAnchors": {
          "format": "int32",
          "type": "integer"
        },
        "socialgraphNodeNameFp": {
          "description": "For Social Search we store the fingerprint of the SG node name. This is used in one of the superroot's PRE_DOC twiddlers as a lookup key for the full Social Search data. PRE_DOC = twiddlers firing before the DocInfo request is sent to the mustang backend.",
          "format": "uint64",
          "type": "string"
        },
        "spamCookbookAction": {
          "$ref": "SpamCookbookAction",
          "description": "Actions based on Cookbook recipes that match the page."
        },
        "spamMuppetSignals": {
          "$ref": "SpamMuppetjoinsMuppetSignals",
          "description": "Contains hacked site signals which will be used in query time joins. As of Oct'19, the field is stored in a separate corpus. It'll only be populated for in-flight requests between retrieve and full-score in perdocdata. So no extra storage is needed on muppet side."
        },
        "spambrainData": {
          "$ref": "SpamBrainData",
          "description": "Site level scores coming from spambrain."
        },
        "spambrainTotalDocSpamScore": {
          "description": "The document total spam score identified by spambrain, going from 0 to 1.",
          "format": "float",
          "type": "number"
        },
        "spamrank": {
          "description": "The spamrank measures the likelihood that this document links to known spammers. Its value is between 0 and 65535.",
          "format": "int32",
          "type": "integer"
        },
        "spamtokensContentScore": {
          "description": "For SpamTokens content scores. Used in SiteBoostTwiddler to determine whether a page is UGC Spam. See go/spamtokens-dd for details.",
          "format": "float",
          "type": "number"
        },
        "timeSensitivity": {
          "description": "Encoded Document Time Sensitivity signal.",
          "format": "uint32",
          "type": "integer"
        },
        "titleHardTokenCountWithoutStopwords": {
          "description": "Number of hard tokens originally in title without counting the stopwords.",
          "format": "int32",
          "type": "integer"
        },
        "toolbarPagerank": {
          "description": "A copy of the value stored in /namespace/indexing/wwwglobal//fakepr/* for this document. A value of quality_bakery::FakeprUtils::kUnknownToolbarPagerank indicates that we don't have toolbar pagerank for this document. A value between 0 and 10 (inclusive) means that this is the toolbar pagerank of the page. Finally, if this value is not set it means that the toolbar pagerank is equivalent to: quality_bakery::FakeprUtils::EstimatePreDemotionFromPagerankNearestSeeds( basic_info.pagerank_ns()) called on the MustangBasicInfo attachment for the same document.",
          "format": "int32",
          "type": "integer"
        },
        "topPetacatTaxId": {
          "description": "Top petacat of the site. Used in SiteboostTwiddler to determine result/query matching.",
          "format": "int32",
          "type": "integer"
        },
        "topPetacatWeight": {
          "format": "float",
          "type": "number"
        },
        "travelGoodSitesInfo": {
          "$ref": "QualityTravelGoodSitesData",
          "description": "This field stores information about good travel sites."
        },
        "trendspamScore": {
          "description": "For now, the count of matching trendspam queries.",
          "format": "int32",
          "type": "integer"
        },
        "tundraClusterId": {
          "description": "This field is propagated to shards. Stores clustering information on a site level for the Tundra project.",
          "format": "int32",
          "type": "integer"
        },
        "uacSpamScore": {
          "description": "The uac spam score is represented in 7 bits, going from 0 to 127. Threshold is 64. Score >= 64 is considered as uac spam.",
          "format": "int32",
          "type": "integer"
        },
        "urlAfterRedirectsFp": {
          "description": "These two fingerprints are used for de-duping results in a twiddler. They should only be populated by freshdocs, and will only be present for documents that are chosen to be canonicals in a cluster whose previous canonical is also in the index. Additionally, url_after_redirects_fp is only present if it is different from a fingerprint of the URL.",
          "format": "uint64",
          "type": "string"
        },
        "urlPoisoningData": {
          "$ref": "UrlPoisoningData",
          "description": "Contains url poisoning data for suppressing spam documents."
        },
        "v2KnexAnnotation": {
          "$ref": "QualitySherlockKnexAnnotation",
          "description": "For indexing v2 k'nex, see/go/knex-v2-doc-annotation for details."
        },
        "videoCorpusDocid": {
          "format": "uint64",
          "type": "string"
        },
        "videoLanguage": {
          "$ref": "QualityVidyaVideoLanguageVideoLanguage",
          "description": "Audio-based language classified by Automatic Language Identification (only for watch pages)."
        },
        "videodata": {
          "$ref": "VideoPerDocData"
        },
        "voltData": {
          "$ref": "IndexingMobileVoltVoltPerDocData",
          "description": "Contains page UX signals for VOLT ranking change. See http://ariane/4025970 for more details."
        },
        "watchpageLanguageResult": {
          "$ref": "WatchpageLanguageWatchPageLanguageResult",
          "description": "Language classified by the WatchPageLanguage Model (go/watchpage-language). Only present for watch pages."
        },
        "webmirrorEcnFp": {
          "format": "uint64",
          "type": "string"
        },
        "webrefEntities": {
          "$ref": "RepositoryWebrefWebrefMustangAttachment",
          "description": "WebRef entities associated to the document. See go/webref for details."
        },
        "ymylHealthScore": {
          "description": "Stores scores of ymyl health classifier as defined at go/ymyl-classifier-dd. To use this field, you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.",
          "format": "uint32",
          "type": "integer"
        },
        "ymylNewsScore": {
          "description": "Stores scores of ymyl news classifier as defined at go/ymyl-classifier-dd. To use this field, you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "PerDocDebugEvent": {
      "description": "Free form debug information from various components.",
      "id": "PerDocDebugEvent",
      "properties": {
        "Message": {
          "description": "depends on the source",
          "type": "string"
        },
        "Source": {
          "description": "source tag, helps interpret value/message",
          "type": "string"
        },
        "Timestamp": {
          "description": "seconds since the epoch",
          "format": "int32",
          "type": "integer"
        },
        "Value": {
          "description": "depends on the source",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PersonalizationMapsAliasAliasId": {
      "description": "A unique association of an AliasType and a number to identify this alias.",
      "id": "PersonalizationMapsAliasAliasId",
      "properties": {
        "subId": {
          "description": "A unique identifier for this alias, this identifier is unique to the type of this Alias. This means that aliases of different types can have the same sub_id, hence always use the full AliasId message to refer to an alias, not this field only. Because HOME and WORK aliases are unique, aliases of type HOME or WORK always have sub_id 0.",
          "format": "uint64",
          "type": "string"
        },
        "type": {
          "enum": [
            "UNKNOWN_ALIAS_TYPE",
            "HOME",
            "WORK",
            "CONTACT",
            "NICKNAME"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "CONTACT is only for internal use by Maps Personalization Server. SetAlias and DeleteAlias RPCs will not accept this type.",
            "Alias is a user-entered string stored in nickname field."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "PersonalizationMapsAliasIcon": {
      "description": "A subset of an Alias that is stored on kansas max. It is used in Search for alias resolution and in Maps to show icons quickly on basetiles.",
      "id": "PersonalizationMapsAliasIcon",
      "properties": {
        "aliasId": {
          "$ref": "PersonalizationMapsAliasAliasId",
          "description": "The id of the alias associated with this point. This is used to query for details for the info window and to display different icons depending on the AliasType contained in this message."
        },
        "droppedPinS2cellId": {
          "description": "If this is a dropped pin alias, the leaf (level 30) S2 cell ID corresponding to the aliased lat/lng. Calculated once and stored here so that it can safely be used as an identifier across clients without risk of rounding differences leading to different values.",
          "format": "uint64",
          "type": "string"
        },
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The featureid that was associated with the alias when it was saved. If this is not set the lat/lng in 'point' is the aliased entity, i.e. this is a dropped pin alias."
        },
        "featureName": {
          "description": "For non-address feature aliases (e.g. businesses), the name of the feature (formatted from the FeatureProto) when it was saved.",
          "type": "string"
        },
        "featureType": {
          "description": "The type of the feature associated with the alias.",
          "enum": [
            "TYPE_ANY",
            "TYPE_TRANSPORTATION",
            "TYPE_ROUTE",
            "TYPE_DEPRECATED_HIGHWAY_DO_NOT_USE",
            "TYPE_HIGHWAY",
            "TYPE_HIGHWAY_1",
            "TYPE_HIGHWAY_2",
            "TYPE_HIGHWAY_3",
            "TYPE_HIGHWAY_4",
            "TYPE_HIGHWAY_5",
            "TYPE_HIGHWAY_6",
            "TYPE_HIGHWAY_7",
            "TYPE_HIGHWAY_8",
            "TYPE_HIGHWAY_9",
            "TYPE_BICYCLE_ROUTE",
            "TYPE_TRAIL",
            "TYPE_SEGMENT",
            "TYPE_ROAD",
            "TYPE_RAILWAY",
            "TYPE_STANDARD_TRACK",
            "TYPE_JR_TRACK",
            "TYPE_NARROW_TRACK",
            "TYPE_MONORAIL_TRACK",
            "TYPE_SUBWAY_TRACK",
            "TYPE_LIGHT_RAIL_TRACK",
            "TYPE_BROAD_TRACK",
            "TYPE_HIGH_SPEED_RAIL",
            "TYPE_TROLLEY_TRACK",
            "TYPE_FERRY",
            "TYPE_FERRY_BOAT",
            "TYPE_FERRY_TRAIN",
            "TYPE_VIRTUAL_SEGMENT",
            "TYPE_INTERSECTION",
            "TYPE_TRANSIT",
            "TYPE_TRANSIT_STATION",
            "TYPE_BUS_STATION",
            "TYPE_TRAMWAY_STATION",
            "TYPE_TRAIN_STATION",
            "TYPE_SUBWAY_STATION",
            "TYPE_FERRY_TERMINAL",
            "TYPE_AIRPORT",
            "TYPE_AIRPORT_CIVIL",
            "TYPE_AIRPORT_MILITARY",
            "TYPE_AIRPORT_MIXED",
            "TYPE_HELIPORT",
            "TYPE_SEAPLANE_BASE",
            "TYPE_AIRSTRIP",
            "TYPE_CABLE_CAR_STATION",
            "TYPE_GONDOLA_LIFT_STATION",
            "TYPE_FUNICULAR_STATION",
            "TYPE_SPECIAL_STATION",
            "TYPE_HORSE_CARRIAGE_STATION",
            "TYPE_MONORAIL_STATION",
            "TYPE_SEAPORT",
            "TYPE_TRANSIT_STOP",
            "TYPE_TRANSIT_TRIP",
            "TYPE_TRANSIT_DEPARTURE",
            "TYPE_TRANSIT_LEG",
            "TYPE_TRANSIT_LINE",
            "TYPE_TRANSIT_AGENCY_DEPRECATED_VALUE",
            "TYPE_TRANSIT_TRANSFER",
            "TYPE_SEGMENT_PATH",
            "TYPE_ROAD_SIGN",
            "TYPE_INTERSECTION_GROUP",
            "TYPE_PATHWAY",
            "TYPE_RESTRICTION_GROUP",
            "TYPE_TOLL_CLUSTER",
            "TYPE_POLITICAL",
            "TYPE_COUNTRY",
            "TYPE_ADMINISTRATIVE_AREA",
            "TYPE_ADMINISTRATIVE_AREA1",
            "TYPE_US_STATE",
            "TYPE_GB_COUNTRY",
            "TYPE_JP_TODOUFUKEN",
            "TYPE_ADMINISTRATIVE_AREA2",
            "TYPE_GB_FORMER_POSTAL_COUNTY",
            "TYPE_GB_TRADITIONAL_COUNTY",
            "TYPE_ADMINISTRATIVE_AREA3",
            "TYPE_ADMINISTRATIVE_AREA4",
            "TYPE_ADMINISTRATIVE_AREA5",
            "TYPE_ADMINISTRATIVE_AREA6",
            "TYPE_ADMINISTRATIVE_AREA7",
            "TYPE_ADMINISTRATIVE_AREA8",
            "TYPE_ADMINISTRATIVE_AREA9",
            "TYPE_COLLOQUIAL_AREA",
            "TYPE_RESERVATION",
            "TYPE_LOCALITY",
            "TYPE_GB_POST_TOWN",
            "TYPE_JP_GUN",
            "TYPE_JP_SHIKUCHOUSON",
            "TYPE_JP_SUB_SHIKUCHOUSON",
            "TYPE_COLLOQUIAL_CITY",
            "TYPE_SUBLOCALITY",
            "TYPE_US_BOROUGH",
            "TYPE_GB_DEPENDENT_LOCALITY",
            "TYPE_JP_OOAZA",
            "TYPE_JP_KOAZA",
            "TYPE_JP_GAIKU",
            "TYPE_GB_DOUBLE_DEPENDENT_LOCALITY",
            "TYPE_JP_CHIBAN",
            "TYPE_JP_EDABAN",
            "TYPE_SUBLOCALITY1",
            "TYPE_SUBLOCALITY2",
            "TYPE_SUBLOCALITY3",
            "TYPE_SUBLOCALITY4",
            "TYPE_SUBLOCALITY5",
            "TYPE_NEIGHBORHOOD",
            "TYPE_CONSTITUENCY",
            "TYPE_DESIGNATED_MARKET_AREA",
            "TYPE_SCHOOL_DISTRICT",
            "TYPE_LAND_PARCEL",
            "TYPE_DISPUTED_AREA",
            "TYPE_POLICE_JURISDICTION",
            "TYPE_STATISTICAL_AREA",
            "TYPE_CONSTITUENCY_FUTURE",
            "TYPE_PARK",
            "TYPE_GOLF_COURSE",
            "TYPE_LOCAL_PARK",
            "TYPE_NATIONAL_PARK",
            "TYPE_US_NATIONAL_PARK",
            "TYPE_US_NATIONAL_MONUMENT",
            "TYPE_NATIONAL_FOREST",
            "TYPE_PROVINCIAL_PARK",
            "TYPE_PROVINCIAL_FOREST",
            "TYPE_CAMPGROUNDS",
            "TYPE_HIKING_AREA",
            "TYPE_BUSINESS",
            "TYPE_GOVERNMENT",
            "TYPE_BORDER_CROSSING",
            "TYPE_CITY_HALL",
            "TYPE_COURTHOUSE",
            "TYPE_EMBASSY",
            "TYPE_LIBRARY",
            "TYPE_SCHOOL",
            "TYPE_UNIVERSITY",
            "TYPE_EMERGENCY",
            "TYPE_HOSPITAL",
            "TYPE_PHARMACY",
            "TYPE_POLICE",
            "TYPE_FIRE",
            "TYPE_DOCTOR",
            "TYPE_DENTIST",
            "TYPE_VETERINARIAN",
            "TYPE_TRAVEL_SERVICE",
            "TYPE_LODGING",
            "TYPE_RESTAURANT",
            "TYPE_GAS_STATION",
            "TYPE_PARKING",
            "TYPE_POST_OFFICE",
            "TYPE_REST_AREA",
            "TYPE_CASH_MACHINE",
            "TYPE_CAR_RENTAL",
            "TYPE_CAR_REPAIR",
            "TYPE_SHOPPING",
            "TYPE_GROCERY",
            "TYPE_TOURIST_DESTINATION",
            "TYPE_ECO_TOURIST_DESTINATION",
            "TYPE_BIRD_WATCHING",
            "TYPE_FISHING",
            "TYPE_HUNTING",
            "TYPE_NATURE_RESERVE",
            "TYPE_TEMPLE",
            "TYPE_CHURCH",
            "TYPE_GURUDWARA",
            "TYPE_HINDU_TEMPLE",
            "TYPE_MOSQUE",
            "TYPE_SYNAGOGUE",
            "TYPE_STADIUM",
            "TYPE_BAR",
            "TYPE_MOVIE_RENTAL",
            "TYPE_COFFEE",
            "TYPE_GOLF",
            "TYPE_BANK",
            "TYPE_DOODLE",
            "TYPE_GROUNDS",
            "TYPE_AIRPORT_GROUNDS",
            "TYPE_BUILDING_GROUNDS",
            "TYPE_CEMETERY",
            "TYPE_HOSPITAL_GROUNDS",
            "TYPE_INDUSTRIAL",
            "TYPE_MILITARY",
            "TYPE_SHOPPING_CENTER",
            "TYPE_SPORTS_COMPLEX",
            "TYPE_UNIVERSITY_GROUNDS",
            "TYPE_DEPRECATED_TARMAC",
            "TYPE_ENCLOSED_TRAFFIC_AREA",
            "TYPE_PARKING_LOT",
            "TYPE_PARKING_GARAGE",
            "TYPE_OFF_ROAD_AREA",
            "TYPE_BORDER",
            "TYPE_BUILDING",
            "TYPE_GEOCODED_ADDRESS",
            "TYPE_NATURAL_FEATURE",
            "TYPE_TERRAIN",
            "TYPE_SAND",
            "TYPE_BEACH",
            "TYPE_DUNE",
            "TYPE_ROCKY",
            "TYPE_ICE",
            "TYPE_GLACIER",
            "TYPE_BUILT_UP_AREA",
            "TYPE_VEGETATION",
            "TYPE_SHRUBBERY",
            "TYPE_WOODS",
            "TYPE_AGRICULTURAL",
            "TYPE_GRASSLAND",
            "TYPE_TUNDRA",
            "TYPE_DESERT",
            "TYPE_SALT_FLAT",
            "TYPE_WATER",
            "TYPE_OCEAN",
            "TYPE_BAY",
            "TYPE_BIGHT",
            "TYPE_LAGOON",
            "TYPE_SEA",
            "TYPE_STRAIT",
            "TYPE_INLET",
            "TYPE_FJORD",
            "TYPE_LAKE",
            "TYPE_SEASONAL_LAKE",
            "TYPE_RESERVOIR",
            "TYPE_POND",
            "TYPE_RIVER",
            "TYPE_RAPIDS",
            "TYPE_DISTRIBUTARY",
            "TYPE_CONFLUENCE",
            "TYPE_WATERFALL",
            "TYPE_SPRING",
            "TYPE_GEYSER",
            "TYPE_HOT_SPRING",
            "TYPE_SEASONAL_RIVER",
            "TYPE_WADI",
            "TYPE_ESTUARY",
            "TYPE_WETLAND",
            "TYPE_WATER_NAVIGATION",
            "TYPE_FORD",
            "TYPE_CANAL",
            "TYPE_HARBOR",
            "TYPE_CHANNEL",
            "TYPE_REEF",
            "TYPE_REEF_FLAT",
            "TYPE_REEF_GROWTH",
            "TYPE_REEF_EXTENT",
            "TYPE_REEF_ROCK_SUBMERGED",
            "TYPE_IRRIGATION",
            "TYPE_DAM",
            "TYPE_DRINKING_WATER",
            "TYPE_CURRENT",
            "TYPE_WATERING_HOLE",
            "TYPE_TECTONIC",
            "TYPE_WATERING_HOLE_DEPRECATED",
            "TYPE_VOLCANO",
            "TYPE_LAVA_FIELD",
            "TYPE_FISSURE",
            "TYPE_FAULT",
            "TYPE_LAND_MASS",
            "TYPE_CONTINENT",
            "TYPE_ISLAND",
            "TYPE_ATOLL",
            "TYPE_OCEAN_ROCK_EXPOSED",
            "TYPE_CAY",
            "TYPE_PENINSULA",
            "TYPE_ISTHMUS",
            "TYPE_ELEVATED",
            "TYPE_PEAK",
            "TYPE_NUNATAK",
            "TYPE_SPUR",
            "TYPE_PASS",
            "TYPE_PLATEAU",
            "TYPE_RIDGE",
            "TYPE_RAVINE",
            "TYPE_CRATER",
            "TYPE_KARST",
            "TYPE_CLIFF",
            "TYPE_VISTA",
            "TYPE_DIGITAL_ELEVATION_MODEL",
            "TYPE_UPLAND",
            "TYPE_TERRACE",
            "TYPE_SLOPE",
            "TYPE_CONTOUR_LINE",
            "TYPE_PAN",
            "TYPE_UNSTABLE_HILLSIDE",
            "TYPE_MOUNTAIN_RANGE",
            "TYPE_UNDERSEA",
            "TYPE_SUBMARINE_SEAMOUNT",
            "TYPE_SUBMARINE_RIDGE",
            "TYPE_SUBMARINE_GAP",
            "TYPE_SUBMARINE_PLATEAU",
            "TYPE_SUBMARINE_DEEP",
            "TYPE_SUBMARINE_VALLEY",
            "TYPE_SUBMARINE_BASIN",
            "TYPE_SUBMARINE_SLOPE",
            "TYPE_SUBMARINE_CLIFF",
            "TYPE_SUBMARINE_PLAIN",
            "TYPE_SUBMARINE_FRACTURE_ZONE",
            "TYPE_CAVE",
            "TYPE_ROCK",
            "TYPE_ARCHIPELAGO",
            "TYPE_POSTAL",
            "TYPE_POSTAL_CODE",
            "TYPE_POSTAL_CODE_PREFIX",
            "TYPE_PREMISE",
            "TYPE_SUB_PREMISE",
            "TYPE_SUITE",
            "TYPE_POST_TOWN",
            "TYPE_POSTAL_ROUND",
            "TYPE_META_FEATURE",
            "TYPE_DATA_SOURCE",
            "TYPE_LOCALE",
            "TYPE_TIMEZONE",
            "TYPE_BUSINESS_CHAIN",
            "TYPE_PHONE_NUMBER_PREFIX",
            "TYPE_PHONE_NUMBER_AREA_CODE",
            "TYPE_BUSINESS_CORRIDOR",
            "TYPE_ADDRESS_TEMPLATE",
            "TYPE_TRANSIT_AGENCY",
            "TYPE_FUTURE_GEOMETRY",
            "TYPE_EVENT",
            "TYPE_EARTHQUAKE",
            "TYPE_HURRICANE",
            "TYPE_WEATHER_CONDITION",
            "TYPE_TRANSIENT",
            "TYPE_ENTRANCE",
            "TYPE_CARTOGRAPHIC",
            "TYPE_HIGH_TENSION",
            "TYPE_SKI_TRAIL",
            "TYPE_SKI_LIFT",
            "TYPE_SKI_BOUNDARY",
            "TYPE_WATERSHED_BOUNDARY",
            "TYPE_TARMAC",
            "TYPE_WALL",
            "TYPE_PICNIC_AREA",
            "TYPE_PLAY_GROUND",
            "TYPE_TRAIL_HEAD",
            "TYPE_GOLF_TEEING_GROUND",
            "TYPE_GOLF_PUTTING_GREEN",
            "TYPE_GOLF_ROUGH",
            "TYPE_GOLF_SAND_BUNKER",
            "TYPE_GOLF_FAIRWAY",
            "TYPE_GOLF_HOLE",
            "TYPE_DEPRECATED_GOLF_SHOP",
            "TYPE_CAMPING_SITE",
            "TYPE_DESIGNATED_BARBECUE_PIT",
            "TYPE_DESIGNATED_COOKING_AREA",
            "TYPE_CAMPFIRE_PIT",
            "TYPE_WATER_FOUNTAIN",
            "TYPE_LITTER_RECEPTACLE",
            "TYPE_LOCKER_AREA",
            "TYPE_ANIMAL_ENCLOSURE",
            "TYPE_CARTOGRAPHIC_LINE",
            "TYPE_ESTABLISHMENT",
            "TYPE_ESTABLISHMENT_GROUNDS",
            "TYPE_ESTABLISHMENT_BUILDING",
            "TYPE_ESTABLISHMENT_POI",
            "TYPE_ESTABLISHMENT_SERVICE",
            "TYPE_CELESTIAL",
            "TYPE_ROAD_MONITOR",
            "TYPE_PUBLIC_SPACES_AND_MONUMENTS",
            "TYPE_STATUE",
            "TYPE_TOWN_SQUARE",
            "TYPE_LEVEL",
            "TYPE_COMPOUND",
            "TYPE_COMPOUND_GROUNDS",
            "TYPE_COMPOUND_BUILDING",
            "TYPE_COMPOUND_SECTION",
            "TYPE_TERMINAL_POINT",
            "TYPE_REGULATED_AREA",
            "TYPE_LOGICAL_BORDER",
            "TYPE_DO_NOT_USE_RESERVED_TO_CATCH_GENERATED_FILES",
            "TYPE_UNKNOWN"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "ABSTRACT",
            "A route is any section of road (or rails, etc.) that has a name. This includes city streets as well as highways. Road segments can belong to multiple routes (e.g. El Camino, CA-82).",
            "DEPRECATED",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "A designated bicycle route, whose segments may consist of any combination of bicycle paths, bicycle lanes, or city streets.",
            "A designated trail, which may consist of paved walkways, dirt paths, fire road, streets or highways, etc.",
            "ABSTRACT",
            "",
            "Railroads use several different incompatible track types.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Tracks for streetcars, cable-cars, etc. Ferries are services that are part of the road network but are not roads. They typically involve fares and scheduled departure times.",
            "ABSTRACT",
            "The vast majority of ferries are ferry boats.",
            "Also called a \"car transport\", a ferry train is a rail service that carries passengers and their vehicles across undrivable terrain. The Channel Tunnel (\"Chunnel\") is the most famous example, but they are also common in the Alps where they connect neighboring valleys otherwise separated by impassable mountains.",
            "Any plausible 1-dimensional path through a 2+ dimensional space, for the purposes of making graph-search-based routing possible. Such segments can be used to model paths through parking lots, squares, floors of buildings and other areas.",
            "An intersection consists of a collection of segments that terminate at the same location. This is topological definition: it may not match what a typical user would think of as an \"intersection\". See TYPE_INTERSECTION_GROUP, below, for more information. Each segment terminating at an intersection has an \"endpoint type\" that specifies how that segment is terminated: stop sign, yield sign, three-way light, etc.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A transit line is a collection of transit legs, associated with some invariant properties of the trips that run over the legs. See also transitline.proto",
            "TYPE_TRANSIT_AGENCY was moved to 0xC91. This deprecated enum value still exists for debugging purposes only.",
            "DEPRECATED",
            "ABSTRACT",
            "Road sign features have names, point geometry, etc. They also have segment_path data (see below) which lists the segments that refer to the sign. See segment.proto for the reference from the segment to the road sign.",
            "Our TYPE_INTERSECTION feature, above, models the point where one or more segments terminate. This is topological definition: it may not match what a typical user would think of as an \"intersection\". Consider the intersections where Hayes, Market, Larkin, and 9th Street meet near (37.77765, -122.41638) in San Francisco. Most people would probably consider this a single feature, even though we model it as four separate TYPE_INTERSECTION features. This TYPE_INTERSECTION_GROUP is used to model the user's concept of a complex intersection.",
            "RESERVED",
            "A restriction group describes a set of segment restrictions that belong together and have a name or an associated event. See also restriction_group.proto",
            "A toll cluster is either a single point on a segment (represented as a point at the end of the segment that has ENDPOINT_TOLL_BOOTH set) or a group of points on various road segments in MapFacts that represents one or more lanes passing through a toll fixture that all go to the same routing destination. Each toll cluster should have at most a single price per payment method. E.g. {CASH = $5, PASS = $1}. Note: If a toll fixture has different prices for multiple routing destinations, drivers need to be in the correct lane before passing through the toll fixture and hence such a fixture is represented by multiple toll clusters. A toll cluster does not necessarily represent a real-world entity, e.g. a particular plaza/structure as perceived by humans. This is because a plaza can be represented by more than one toll cluster. We require toll clusters to have names, but they might be non-unique. For example, a plaza might be represented by multiple toll clusters that may have the same plaza name. For further details, please see go/toll-cluster-schema.",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "e.g. Silicon Valley",
            "A reservation is a region collectively held or governed by indigenous people and officially recognized by the country\u2019s government at the federal or state level. A reservation may be fully contained within an administrative feature or partially contained within two or more. These regions are referred to by different categorical names depending on country and even by state, including but not limited to: \u201cIndian Reservations\u201d, \u201cIndian Reserves\u201d, \u201cLand Claim Settlement Lands\u201d, \u201cIndian Lands\u201d, \u201cTreaty Lands\u201d, \u201cIndigenous Territories\u201d, etc. A reservation is not a historic indigenous territory boundary or a region which has applied for land rights but has not yet received official recognition.",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "An entity widely considered to be a city, that may itself be made up of smaller political entities, some of which are cities/towns/villages themselves. For example, the colloquial view of Sydney, Australia actually comprises many smaller cities, but is regarded as a city itself. This type is not suitable for modeling official metro-/micropolitan or other statistical areas.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Designated Market Areas (or DMAs) are used by marketing and ratings companies (such as the Nielsen Media Research company) to describe geographical regions (such as the greater New York metropolitan area) that are covered by a set of television stations. (See http://www.schooldata.com/pdfs/DMA.pdf) In the United States, DMAs should have a DMA numeric ID name, tagged with the FLAG_DESIGNATED_MARKET_AREA_ID flag.",
            "",
            "",
            "Eventually we'll have more data for disputed areas (e.g., who makes claims on the area, who has de facto control, etc.). For the moment, we just define a type so we can simply mark areas as disputed.",
            "Boundaries representing the jurisdiction of a particular police station.",
            "An area used for aggregating statistical data, eg, a census region. Note that TYPE_STATISTICAL_AREA has a third nibble so we can add an abstract parent above it later if need be at 0x2E1 (and rename TYPE_STATISTICAL_AREA as TYPE_STATISTICAL_AREA1).",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A line representing the boundary between two features. See border.proto for details.",
            "DEPRECATED",
            "An association of a point with an address, with no other information.",
            "ABSTRACT",
            "Expanses of land that share common surface attributes. These areas would look more or less uniform from a high altitude.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Terrain that looks populated.",
            "Terrain that is covered in vegetation.",
            "",
            "",
            "",
            "",
            "",
            "",
            "A flat expanse of salt left by the evaporation of a body of salt water.",
            "Features can be TYPE_WATER if we don't have enough information to properly type the body of water. TYPE_WATER is also used as the type for child features that compose a TYPE_RIVER feature.",
            "One of the large salt-water bodies that covers most of the globe.",
            "An ocean subdivision formed by a coastal indentation. Includes coves and gulfs.",
            "An open body of water formed by a slight coastal indentation.",
            "",
            "An ocean subdivision more or less confined by land and islands.",
            "A long narrow ocean subdivision. Includes sounds.",
            "",
            "",
            "An inland body of standing water.",
            "A lake that dries up part of the year.",
            "An artificial body of water, possibly created by a dam, often used for irrigation or house use.",
            "",
            "An inland body of moving water, or parts associated with it in which there is little or no current (backwater).",
            "",
            "A branch which flows away from the main river. Includes deltas.",
            "A place where two or more rivers join.",
            "",
            "A place where ground water flows naturally out of the ground.",
            "",
            "",
            "A river that dries up part of the year.",
            "A dry riverbed that occasionally receives flashfloods.",
            "A place at the end of a river where fresh and salt water mix. Includes tidal creeks and limans.",
            "Land that is usually flooded. Includes bogs, marshes, flats, moors, and swamps.",
            "",
            "A shallow place where water may be waded through.",
            "A narrow passage used by boats. Normally artificial.",
            "A deep place near a shore where ships commonly drop anchor.",
            "A deep part in a body of water that is suitable for navigation. Includes narrows.",
            "Rocks, coral, sandbars, or other features beneath the surface of the water that pose a hazard to passing ships. Includes shoals.",
            "A relatively shallow zone of the back reef located closest to the shore, that may be exposed at low tide.",
            "A small section of rocks, coral, sandbars, or other features beneath the surface of the water that forms part of a reef.",
            "The full extent of the reef complex.",
            "A submerged rock in the water.",
            "Man-made (and sometimes natural) channels used to move water. This type was used for both dam structures and water that is hold back by dams. We should use TYPE_COMPOUND_BUILDING for dam structures and TYPE_RESERVOIR for water.",
            "DEPRECATED",
            "",
            "Includes overfalls.",
            "A natural depression filled with water where animals come to drink.",
            "ABSTRACT This type is incorrectly under TYPE_TECTONIC instead of TYPE_WATER. This was a mistake and is now fixed. See TYPE_WATERING_HOLE for the replacement.",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "An exposed rock in the water.",
            "A small, low-elevation, sandy island formed on the surface of coral reefs",
            "A stretch of land projecting into water. Includes capes and spits.",
            "A strip of land connecting two larger land masses, such as continents.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "Elevations that have a distinctive peak.",
            "A peak or ridge of a mountain that extends through a glacier.",
            "A subsidiary peak of a mountain.",
            "A route over an otherwise difficult to traverse feature. Includes saddle.",
            "Elevations that are flat on top. Includes mesas and buttes.",
            "A ridge is a geographical feature consisting of a chain of mountains or hills that form a continuous elevated crest with a single ridgeline for some distance.",
            "Steep declines usually carved by erosion. Includes valleys, canyons, ditches, and gorges.",
            "Depressions causes by impact, explosion, and sometimes sink-holes.",
            "Topography formed on limestone and gypsum by dissolution with sinkholes, caves, etc.",
            "A vertical or nearly vertical slope. Includes escarpments.",
            "An elevated place that is notable for having a good view. Raster digital elevation data. This is not a type to be used by providers or consumed by clients.",
            "RESERVED",
            "Land along streams higher than the alluvial plain or stream terrace.",
            "",
            "Land not so steep as a cliff, but changing elevation. Includes slides.",
            "All the points on the polygon are at the same elevation.",
            "A near-level shallow, natural depression or basin, usually containing an intermittent lake, pond, or pool.",
            "",
            "A series of mountains or hills ranged in a line and connected by high ground. Mountain ranges usually consist of many smaller ridges. For example, the Himalayas, the Andes. the Alps, etc.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "includes peaks, ranges, and spurs",
            "",
            "includes saddles",
            "",
            "",
            "includes trenches and troughs",
            "",
            "",
            "",
            "",
            "",
            "Don't use 0xA7. Use 8 bits for additional types under TYPE_NATURAL_FEATURE, so we don't run out of space. The following are miscellaneous natural features that don't fit any of the categories above.",
            "",
            "A feature representing a group or chain of islands. ",
            "ABSTRACT",
            "This is the type for postal codes which are complete and independent enough that there should be a feature for them (e.g. US 5-digit ZIP codes). For even more detailed suffixes that further subdivide a postal code (such as the +4 component in US ZIP codes), store the information in a TYPE_POSTAL_CODE_SUFFIX address component. When a range or set of postal codes share the same geographical area, e.g. because a precise subdivision does not exist or this subdivision is unknown, this type is used for each individual postal code.",
            "A prefix portion of a postal code which does not meet the requirements for TYPE_POSTAL_CODE, but which is useful to search for, for example UK outcodes.",
            "DEPRECATED",
            "DEPRECATED This is deprecated and we want to use TYPE_COMPOUND_SECTION instead.",
            "DEPRECATED",
            "The term \"post town\" is used for a locality-like-entity that is only used for postal addresses.",
            "DEPRECATED",
            "ABSTRACT",
            "Every data source used in constructing a data repository has a corresponding feature that provides more information about that data source. The extra information is stored in the optional data_source field below.",
            "A locale feature provides region specific conventions such as preferred language and formatting details for time, date, and currency values. Locales aren't necessary defined by physical geographic features, so they are classified as meta-features.",
            "A timezone feature is used to specify the region covering an international timezone. When a point is covered by multiple timezone features, the most specific one can be used to compute the local time at this point. Most specific implies a much smaller region or the one that is closer to the center. A feature's timezone can be specified in the repeated related_timezone field.",
            "A business chain feature is used to represent a chain, e.g. Starbucks, McDonald's, etc. Other features representing specific stores/franchises of this chain may refer to one such feature via RELATION_MEMBER_OF_CHAIN. This is not strictly reserved to commercial chains but can also be used to model organizations such as the Red Cross or the United Nations.",
            "A phone number prefix feature is used to specify the region where phone numbers (typically fixed-line numbers) must begin with a certain prefix. Any phone number prefix down to any level of granularity could be represented by this type.",
            "A phone number area code is a prefix which also coincides with the area code, or national destination code, of a particular region.",
            "A Business Corridor is a dense cluster of semantically similar establishments. TYPE_BUSINESS_CORRIDOR features are distinguished from TYPE_COLLOQUIAL_AREA features because the corridors are not under the political hierarchy, are allowed to be nameless, and may not correspond to well-known real world locations. For more details, see go/geo-corridors-schema.",
            "An address template feature provides region-specific conventions for structuring addresses. These features aren't necessarily defined by physical geographic features, so they are classified as meta-features.",
            "A transit agency operates a number of lines, typically all in the same city, region or country. See also transitagency.proto",
            "A feature whose geometry is planned to replace the geometry on another feature.",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "RESERVED",
            "A portal of entry or exit to another feature. Examples: - Subway station entrance. - Parking lot entrance.",
            "Cartographic features are used to capture real-world objects for which there is no current desire to model any specific attributes. These are only useful to make the map tiles look pretty.",
            "DEPRECATED",
            "Also see skitrail.proto",
            "Also see skilift.proto",
            "Also see skiboundary.proto",
            "",
            "Starting with TYPE_TARMAC, we use longer IDs, so that we can expand the number of feature types under TYPE_CARTOGRAPHIC.",
            "Use TYPE_COMPOUND_GROUND and appropriate gcids for the next two.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "Sub-types within a golf course.",
            "",
            "",
            "",
            "",
            "Use TYPE_ESTABLISHMENT_POI and gcid:golf_shop for golf shops instead.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "Subtype within a zoo - a cage or fenced-off or otherwise delineated area containing animals.",
            "A line for a cartographic detail. For example the international date line. Such features should have polyline geometry.",
            "ABSTRACT This type is being replaced by TYPE_COMPOUND_GROUNDS. For further details, see go/compounds-v2",
            "DEPRECATED This type has been replaced by TYPE_COMPOUND_BUILDING. For further details, see go/oyster-compounds",
            "DEPRECATED",
            "An establishment which has a address (a.k.a. location or storefront). Note that it *may* also have a service area (e.g. a restaurant that offers both dine-in and delivery). This type of business is also known as a \"hybrid\" Service Area Business. Establishment POIs can be referenced by TYPE_COMPOUND features using the RELATION_PRIMARILY_OCCUPIED_BY. This is the reciprocal relation of the RELATION_OCCUPIES.",
            "A business without a storefront, e.g. a plumber. It would normally not have a place that a customer could visit to receive service, but it would have an area served by the business. Also known as a \"pure\" Service Area Business. NOTE(tcain): Using value 0xD441, since we could find ourselves with a need to differentiate service areas from online-only at this level in the future, but still benefit from being able to group those under a common parent, disjoint from TYPE_ESTABLISHMENT_POI.",
            "The root of types of features that are in the sky, rather than on the earth. There will eventually be a hierarchy of types here.",
            "Features responsible for monitoring traffic on roads (usually for speed). Includes cameras at particular points as well as monitors that cover larger spans. Features of this type should have a corresponding gcid that specifies the correct subtype (e.g. gcid:road_camera or gcid:speed_camera_zone). This type was originally named as TYPE_ROAD_CAMERA.",
            "ABSTRACT",
            "Note that this type does not distinguish the nature of the statue (religious, historical, memorial, tourist, ...).",
            "Open space used for events, gathering, or as market-place.",
            "A feature used to represent a logical level, e.g. floor.",
            "ABSTRACT",
            "e.g. campus, compound, parcel.",
            "e.g. single family dwelling, office building.",
            "e.g. suite, room, hallway, cubicle.",
            "A terminal point represents a good location for a user to meet a taxi, ridesharing vehicle, or general driver.",
            "An area controlled in some way by an authoritative source, such as a government-designated COVID containment zone or an area under government sanctions. Features of this type should have one or more gcids corresponding to their specific regulation, and client handling of these features may vary based on the type of regulation.",
            "A grouping of TYPE_BORDER features (\"border segments\"), which together represent a border between two features of the same type.",
            "DEPRECATED",
            "A feature of completely unknown type. This should only be used when absolutely necessary. One example in which this type is useful is in the Chinese importer, which must heuristically segment addresses into components - it often does not know what types to make those components. Please note that the Oyster address formatter does not currently support address components of TYPE_UNKNOWN well."
          ],
          "type": "string"
        },
        "formattedAddress": {
          "description": "One-line geocoded address that this lat/lng represents at the time this alias was created by the user.",
          "type": "string"
        },
        "nickname": {
          "description": "Free-text alias if alias type is NICKNAME. Otherwise unset. Limited to 40 characters.",
          "type": "string"
        },
        "point": {
          "$ref": "GeostorePointProto",
          "description": "lat/lng the icon is to be shown at."
        },
        "stickerId": {
          "description": "The id of the sticker asset chosen by the user to replace the default asset for the alias.",
          "format": "uint32",
          "type": "integer"
        },
        "syntheticFeature": {
          "description": "If the feature associated with the alias has synthetic_geometry.",
          "type": "boolean"
        },
        "timestamp": {
          "description": "[INTERNAL ONLY] Last update of bigtable by kansas, in microseconds. Volatile only and not saved in kansas column. inmemory only because >= 16.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PersonalizationSettingsApiProtoLocalDiscoveryLocalDiscoverySettingsMetadata": {
      "description": "Metadata related to LocalDiscoverySettings,e.g., dietary_restriction, cuisine and ingredient.",
      "id": "PersonalizationSettingsApiProtoLocalDiscoveryLocalDiscoverySettingsMetadata",
      "properties": {
        "opaRecipesContext": {
          "$ref": "PersonalizationSettingsApiProtoLocalDiscoveryOpaRecipesContext",
          "description": "Contexts regarding the preferences from OPA_RECIPES."
        },
        "uiEntryPoint": {
          "description": "The UI entry point from which the entity preference was set.",
          "enum": [
            "UNKNOWN_ENTRY_POINT",
            "GEO_DISCOVERY",
            "OPA_SETTINGS",
            "OPA_RECIPES",
            "OPA_RESTAURANTS"
          ],
          "enumDescriptions": [
            "",
            "go/geo-preference-feedback-mvp. cschill@",
            "https://screenshot.googleplex.com/gnKDdHrG9p3. glwang@, jdlevine@, encyclomedia@",
            "https://screenshot.googleplex.com/X4dRwGipeGt. assistant-recipe-recs@",
            "assistant-recipe-recs@"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "PersonalizationSettingsApiProtoLocalDiscoveryOpaRecipesContext": {
      "description": "LINT.IfChange Contexts regarding the preferences from OPA_RECIPES. For example, users can click a recipes and say they don't like one cuisine. OpaRecipesContext will contain the doc_id/url of that recipes.",
      "id": "PersonalizationSettingsApiProtoLocalDiscoveryOpaRecipesContext",
      "properties": {
        "docId": {
          "description": "The recipe doc id where the setting comes from.",
          "type": "string"
        },
        "url": {
          "description": "The recipe url where the setting comes from.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PhilPerDocData": {
      "id": "PhilPerDocData",
      "properties": {
        "PhilString": {
          "description": "phil data , approx 70 bytes for top 500M",
          "type": "string"
        },
        "PhilVersion": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "PhotosAnimationMetadata": {
      "id": "PhotosAnimationMetadata",
      "properties": {
        "durationMs": {
          "description": "The duration of the animation or movie (not including any looping), in milliseconds. If there is only a single frame (and thus not animated), the duration will be 0.",
          "format": "int64",
          "type": "string"
        },
        "loopCount": {
          "description": "The number of times the animation plays. If 0, the animation will loop indefinitely. If positive, this number includes the initial playthrough. For example, a value of 3 means that each frame is shown 3 times.",
          "format": "int32",
          "type": "integer"
        },
        "numFrames": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PhotosDynamicDepthMetadata": {
      "description": "Metadata pertaining to nested Dynamic Depth metadata. Currently this message is used to indicate the presence of dynamic depth.",
      "id": "PhotosDynamicDepthMetadata",
      "properties": {},
      "type": "object"
    },
    "PhotosFourCMetadata": {
      "id": "PhotosFourCMetadata",
      "properties": {
        "caption": {
          "type": "string"
        },
        "copyright": {
          "type": "string"
        },
        "creator": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "credit": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "PhotosGDepthMetadata": {
      "description": "Metadata in the GDepth XMP block. Note that GDepth::Data is not copied into this message.",
      "id": "PhotosGDepthMetadata",
      "properties": {
        "far": {
          "description": "Depth map far plane distance.",
          "format": "float",
          "type": "number"
        },
        "format": {
          "description": "Depth map format.",
          "type": "string"
        },
        "imageHeight": {
          "description": "Depth map source image height.",
          "format": "int32",
          "type": "integer"
        },
        "imageWidth": {
          "description": "Depth map source image width.",
          "format": "int32",
          "type": "integer"
        },
        "mime": {
          "description": "Depth map mime type.",
          "type": "string"
        },
        "near": {
          "description": "Depth map near plane distance.",
          "format": "float",
          "type": "number"
        },
        "units": {
          "description": "Depth map units of distance.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PhotosImageMetadata": {
      "description": "Next tag value: 381.",
      "id": "PhotosImageMetadata",
      "properties": {
        "DEPRECATEDBlendingtype": {
          "type": "string"
        },
        "DEPRECATEDGpstimestamp": {
          "description": "This field was originally marked incorrectly as optional (rather than repeated). In order to fix it, the first field has been marked as deprecated and replaced with a field with a new name and tag number.",
          "format": "float",
          "type": "number"
        },
        "DEPRECATEDIscolor": {
          "format": "int32",
          "type": "integer"
        },
        "DEPRECATEDLargestvalidinteriorrectheight": {
          "format": "int32",
          "type": "integer"
        },
        "DEPRECATEDLargestvalidinteriorrectleft": {
          "format": "int32",
          "type": "integer"
        },
        "DEPRECATEDLargestvalidinteriorrecttop": {
          "format": "int32",
          "type": "integer"
        },
        "DEPRECATEDLargestvalidinteriorrectwidth": {
          "format": "int32",
          "type": "integer"
        },
        "DEPRECATEDProcess": {
          "format": "int32",
          "type": "integer"
        },
        "actionadvised": {
          "type": "string"
        },
        "addlmodelinfo": {
          "type": "string"
        },
        "advisory": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "altitude": {
          "format": "double",
          "type": "number"
        },
        "animationMetadata": {
          "$ref": "PhotosAnimationMetadata"
        },
        "aperturefnumber": {
          "format": "float",
          "type": "number"
        },
        "aperturevalue": {
          "format": "float",
          "type": "number"
        },
        "artworkorobject": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "audioduration": {
          "type": "string"
        },
        "audiooutcue": {
          "type": "string"
        },
        "audiosamplingrate": {
          "type": "string"
        },
        "audiosamplingresolution": {
          "type": "string"
        },
        "audiotype": {
          "type": "string"
        },
        "author": {
          "type": "string"
        },
        "authorposition": {
          "type": "string"
        },
        "autoenhance": {
          "description": "Indicates whether auto-enhance has been applied to the image.",
          "type": "boolean"
        },
        "baseurl": {
          "type": "string"
        },
        "bitDepth": {
          "description": "The number of bits per pixel used to express a color. Most images have 8-bit depth and Photos/thumbnailer currently do not support more than 8 bits (except RAW).",
          "format": "int32",
          "type": "integer"
        },
        "bitspersample": {
          "description": "Start of reflected fields. These do not duplicate the above fields.",
          "format": "int32",
          "type": "integer"
        },
        "brightnessvalue": {
          "format": "float",
          "type": "number"
        },
        "burstuuid": {
          "type": "string"
        },
        "cameraid": {
          "type": "string"
        },
        "cameramake": {
          "description": "Exif camera make",
          "type": "string"
        },
        "cameramodel": {
          "description": "Exif camera model",
          "type": "string"
        },
        "caption": {
          "description": "Caption embedded in IPTC",
          "type": "string"
        },
        "captionwriter": {
          "type": "string"
        },
        "capturesoftware": {
          "type": "string"
        },
        "category": {
          "type": "string"
        },
        "ccdwidth": {
          "format": "float",
          "type": "number"
        },
        "celllength": {
          "format": "int32",
          "type": "integer"
        },
        "cellwidth": {
          "format": "int32",
          "type": "integer"
        },
        "certificate": {
          "type": "string"
        },
        "chromasubsampling": {
          "description": "A typed representation that translates the values from ycbcrsubsampling.",
          "enum": [
            "UNKNOWN_CHROMA_SUBSAMPLING",
            "YCBCR410",
            "YCBCR411",
            "YCBCR420",
            "YCBCR422",
            "YCBCR444"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ciadrcity": {
          "type": "string"
        },
        "ciadrctry": {
          "type": "string"
        },
        "ciadrextadr": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ciadrpcode": {
          "type": "string"
        },
        "ciadrregion": {
          "type": "string"
        },
        "ciemailwork": {
          "type": "string"
        },
        "citelwork": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "ciurlwork": {
          "type": "string"
        },
        "colormap": {
          "format": "int32",
          "type": "integer"
        },
        "colorprofile": {
          "description": "Indicates whether or not the source image had an embedded color profile.",
          "type": "boolean"
        },
        "colorspace": {
          "format": "int32",
          "type": "integer"
        },
        "compressedbitsperpixel": {
          "format": "float",
          "type": "number"
        },
        "compressionlevel": {
          "format": "int32",
          "type": "integer"
        },
        "contact": {
          "type": "string"
        },
        "contentlocationcode": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "contentlocationname": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "contrast": {
          "format": "int32",
          "type": "integer"
        },
        "contributor": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "copyrightnotice": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "countrycode": {
          "type": "string"
        },
        "coverage": {
          "type": "string"
        },
        "createdate": {
          "type": "string"
        },
        "credits": {
          "type": "string"
        },
        "croppedareaimageheightpixels": {
          "format": "int32",
          "type": "integer"
        },
        "croppedareaimagewidthpixels": {
          "format": "int32",
          "type": "integer"
        },
        "croppedarealeftpixels": {
          "format": "int32",
          "type": "integer"
        },
        "croppedareatoppixels": {
          "format": "int32",
          "type": "integer"
        },
        "customrendered": {
          "format": "int32",
          "type": "integer"
        },
        "cvterm": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "date": {
          "type": "string"
        },
        "datecreated": {
          "type": "string"
        },
        "datesent": {
          "type": "string"
        },
        "datetime": {
          "type": "string"
        },
        "datetimedigitized": {
          "type": "string"
        },
        "daylightsavings": {
          "description": "0 = no daylight savings, 1 = daylight savings enabled. Note that this field only represents whether the setting in the camera was turned on or off. It must not be used to modify the timestamp of the photo. That is, the capture time is already completely determined by exif_time, timezoneoffset and timezoneminutes.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "destination": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "destinationLatitude": {
          "description": "+/- 90 inclusive",
          "format": "double",
          "type": "number"
        },
        "destinationLongitude": {
          "description": "+/- 180 inclusive",
          "format": "double",
          "type": "number"
        },
        "digimageguid": {
          "type": "string"
        },
        "digitalsourcefiletype": {
          "type": "string"
        },
        "digitalsourcetype": {
          "type": "string"
        },
        "digitalzoomratio": {
          "format": "float",
          "type": "number"
        },
        "distance": {
          "format": "float",
          "type": "number"
        },
        "dynamicDepthMetadata": {
          "$ref": "PhotosDynamicDepthMetadata",
          "description": "DynamicDepth (go/dynamic-depth) metadata is described in the metadata of sub-images in the container. The presence of this field can be used to determine that an image is in the dynamic depth format."
        },
        "editorialupdate": {
          "type": "string"
        },
        "editstatus": {
          "type": "string"
        },
        "envelopenumber": {
          "type": "string"
        },
        "envelopepriority": {
          "type": "string"
        },
        "event": {
          "type": "string"
        },
        "exif4c": {
          "$ref": "PhotosFourCMetadata",
          "description": "4C metadata (caption, copyright, creator, credit) specific to each of the three metadata segments (EXIF, XMP, IPTC). These are used to keep separate the 4C data from each segment so that we can properly preserve the per-segment 4C data on write (when PreserveLevel is set appropriately)."
        },
        "exifTime": {
          "description": "Timestamp embedded in the image. The value comes from the first valid date-time field extracted from the metadata in the order: 1) datecreated (ie. DateTimeOriginal) 2) datetimedigitized (ie. DateTimeDigitized) 3) datetime (ie. DateTime or last modified date) The type of this field is equivalent to a time_t (ie. number of seconds since the epoch - 00:00 hours, Jan 1, 1970) except that it is an int64 rather than an int.",
          "format": "int64",
          "type": "string"
        },
        "exifTimeUtc": {
          "description": "The exif_time_utc field is a UTC-based alternative to the exif_time field, which is in local time, rather than UTC. If they were not separate, clients would be unable to distinguish if the source were UTC- or local-based.",
          "format": "int64",
          "type": "string"
        },
        "exifTimeUtcSource": {
          "description": "The exif_time_utc_source indicates the source from which the exif_time_utc field is calculated.",
          "enum": [
            "EXIF_TIME_SOURCE_UNKNOWN",
            "GPS_DATE_TIME_STAMP"
          ],
          "enumDescriptions": [
            "",
            "The value is calculated from the GPSTimeStamp and GPSDateStamp fields."
          ],
          "type": "string"
        },
        "expirationdate": {
          "type": "string"
        },
        "expirationtime": {
          "type": "string"
        },
        "exposurebias": {
          "format": "float",
          "type": "number"
        },
        "exposureindex": {
          "format": "float",
          "type": "number"
        },
        "exposurelockused": {
          "type": "boolean"
        },
        "exposuremode": {
          "format": "int32",
          "type": "integer"
        },
        "exposureprogram": {
          "format": "int32",
          "type": "integer"
        },
        "exposuretime": {
          "format": "float",
          "type": "number"
        },
        "extrasamples": {
          "format": "int32",
          "type": "integer"
        },
        "fillorder": {
          "format": "int32",
          "type": "integer"
        },
        "firmware": {
          "type": "string"
        },
        "firstphotodate": {
          "type": "string"
        },
        "fixtureidentifier": {
          "type": "string"
        },
        "flashcompensation": {
          "format": "float",
          "type": "number"
        },
        "flashenergy": {
          "format": "float",
          "type": "number"
        },
        "flashreturn": {
          "format": "int32",
          "type": "integer"
        },
        "flashused": {
          "format": "int32",
          "type": "integer"
        },
        "focallength": {
          "format": "float",
          "type": "number"
        },
        "focallengthin35mmfilm": {
          "format": "int32",
          "type": "integer"
        },
        "focalplaneunits": {
          "format": "float",
          "type": "number"
        },
        "focalplanexres": {
          "format": "float",
          "type": "number"
        },
        "format": {
          "type": "string"
        },
        "freebytecounts": {
          "format": "int64",
          "type": "string"
        },
        "freeoffsets": {
          "format": "int32",
          "type": "integer"
        },
        "fullpanoheightpixels": {
          "format": "int32",
          "type": "integer"
        },
        "fullpanowidthpixels": {
          "format": "int32",
          "type": "integer"
        },
        "function": {
          "type": "boolean"
        },
        "gaincontrol": {
          "format": "int32",
          "type": "integer"
        },
        "gaudiomime": {
          "type": "string"
        },
        "gcameraburstid": {
          "description": "A unique String. The property should be present and identical for all images that make up a burst. It should be unique across devices (UUID recommended). Unlike GCreations:CameraBurstId, we should use images with this property to create auto collages and animations.",
          "type": "string"
        },
        "gcameraburstprimary": {
          "description": "A value of 1 indicates that this was the primary (\u201cbest shot\u201d) at capture time. Within Photos we should only treat this image as the best shot if the user hasn\u2019t made an explicit choice. Defining the initial primary allows consistency between OEMs, Photos clients, and the Photos backend. This value is optional, cameras are not required to set it on any photo in a burst. Clients will default to the 0th frame, but may run an algorithm to pick a better default.",
          "format": "int32",
          "type": "integer"
        },
        "gcameradisableautocreation": {
          "description": "The possible values are: \u201cAnimation\u201d, \u201cCollage\u201d, \u201cPano\u201d, \u201cMovies\u201d. Photos will avoid creating the listed types using the containing image or video. The property is optional. The property can be included multiple times to disable creation of multiple different types.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "gcameramicrovideo": {
          "description": "The following XMP metadata are used specifically for MicroVideo. More information about MicroVideo format can be found at go/photos-microvideo-format A value of 1 indicates that this file was a MicroVideo at capture time. Otherwise, this is not a MicroVideo (not set or 0).",
          "format": "int32",
          "type": "integer"
        },
        "gcameramicrovideooffset": {
          "description": "The offset in bytes from the end of the file to the point where the appended mp4 begins (equivalent to the length of the compressed mp4). This field might be provided in the original MicroVideo from client, but it might become invalid when the image component is edited, so it is expected that the thumbnailer will validate it and find the correct value (by scanning through the JPEG) if it is invalid. In other words, only a valid offset should be returned by thumbnailer.",
          "format": "int32",
          "type": "integer"
        },
        "gcameramicrovideopresentationtimestampus": {
          "description": "The presentation timestamp in microseconds of the video frame corresponding to the image still. Value may be -1 to denote unset/unspecified.",
          "format": "int32",
          "type": "integer"
        },
        "gcameramicrovideoversion": {
          "description": "Indicates the file format version of the MicroVideo (initially 1).",
          "format": "int32",
          "type": "integer"
        },
        "gcameramotionphoto": {
          "description": "An indication that this item should be treated as a Motion Photo. 0 -> Not Motion Photo, 1 -> Motion Photo, everything else is undefined per the spec. If it's a motion photo, the previous gcamera fields should be ignored.",
          "format": "int32",
          "type": "integer"
        },
        "gcameramotionphotopresentationtimestampus": {
          "description": "The presentation timestamp in microseconds of the video frame corresponding to the image still. Value may be -1 to denote unset/unspecified.",
          "format": "int32",
          "type": "integer"
        },
        "gcameramotionphotoversion": {
          "description": "Indicates the Motion Photo version of the spec (initially 1).",
          "format": "int32",
          "type": "integer"
        },
        "gcameraspecialtypeid": {
          "description": "Camera creations metadata. The opaque id string created by the OEM. For bursts, this field should not be present. Instead, the two properties below will allow Photos to identify and provide special treatment for bursts.",
          "type": "string"
        },
        "gcreationscameraburstid": {
          "type": "string"
        },
        "gcreationstype": {
          "description": "String representation of creation type. Should be one of {\"GCameraCollage\", \"GCameraAnimation\", \"GCameraGroupSmiles\", \"GPhotosCollage\", \"GPhotosAnimation\"}.",
          "type": "string"
        },
        "gdepthMetadata": {
          "$ref": "PhotosGDepthMetadata"
        },
        "gimagemime": {
          "type": "string"
        },
        "gpsdatestamp": {
          "description": "This is in UTC time. Format is YYYY:mm:dd.",
          "type": "string"
        },
        "gpsdestbearing": {
          "format": "float",
          "type": "number"
        },
        "gpsdestbearingref": {
          "type": "string"
        },
        "gpsdestdistance": {
          "format": "float",
          "type": "number"
        },
        "gpsdestdistanceref": {
          "type": "string"
        },
        "gpsdestlatitude": {
          "format": "float",
          "type": "number"
        },
        "gpsdestlatituderef": {
          "type": "string"
        },
        "gpsdestlongitude": {
          "format": "float",
          "type": "number"
        },
        "gpsdestlongituderef": {
          "type": "string"
        },
        "gpsdifferential": {
          "format": "int32",
          "type": "integer"
        },
        "gpsdop": {
          "format": "float",
          "type": "number"
        },
        "gpsimgdirection": {
          "format": "float",
          "type": "number"
        },
        "gpsimgdirectionref": {
          "type": "string"
        },
        "gpsmapdatum": {
          "type": "string"
        },
        "gpsmeasuremode": {
          "type": "string"
        },
        "gpssatellites": {
          "type": "string"
        },
        "gpsspeed": {
          "format": "float",
          "type": "number"
        },
        "gpsspeedref": {
          "type": "string"
        },
        "gpsstatus": {
          "type": "string"
        },
        "gpstime": {
          "description": "This is in UTC Time. Contains three floats: hour, minute and second. Supports subsecond resolution.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "gpstrack": {
          "format": "float",
          "type": "number"
        },
        "gpstrackref": {
          "type": "string"
        },
        "grayresponsecurve": {
          "format": "int32",
          "type": "integer"
        },
        "grayresponseunit": {
          "format": "int32",
          "type": "integer"
        },
        "hasAlpha": {
          "description": "The image has an alpha channel (potential transparency). If the image is decoded, this will be updated to indicate whether there is any active transparency. Formats supporting alpha: png, webp, gif, heif.",
          "type": "boolean"
        },
        "headline": {
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "hostcomputer": {
          "type": "string"
        },
        "identifier": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "imagenumber": {
          "type": "string"
        },
        "imageorientation": {
          "type": "string"
        },
        "imagetype": {
          "type": "string"
        },
        "initialhorizontalfovdegrees": {
          "format": "float",
          "type": "number"
        },
        "initialverticalfovdegrees": {
          "format": "float",
          "type": "number"
        },
        "initialviewheadingdegrees": {
          "format": "int32",
          "type": "integer"
        },
        "initialviewpitchdegrees": {
          "format": "int32",
          "type": "integer"
        },
        "initialviewrolldegrees": {
          "format": "int32",
          "type": "integer"
        },
        "instructions": {
          "type": "string"
        },
        "intellectualgenre": {
          "type": "string"
        },
        "interoperabilityindex": {
          "type": "string"
        },
        "iptc4c": {
          "$ref": "PhotosFourCMetadata"
        },
        "iptclastedited": {
          "type": "string"
        },
        "ismpformat": {
          "description": "The image is a Multi-Picture Object.",
          "type": "boolean"
        },
        "isoequivalent": {
          "format": "int32",
          "type": "integer"
        },
        "keyword": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "label": {
          "type": "string"
        },
        "language": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "languageidentifier": {
          "type": "string"
        },
        "lastphotodate": {
          "type": "string"
        },
        "latitude": {
          "description": "GPS Info: +/- 90 inclusive",
          "format": "double",
          "type": "number"
        },
        "lens": {
          "type": "string"
        },
        "lensid": {
          "type": "string"
        },
        "lensinfo": {
          "type": "string"
        },
        "lightsource": {
          "format": "int32",
          "type": "integer"
        },
        "location": {
          "type": "string"
        },
        "locationshown": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "longitude": {
          "description": "+/- 180 inclusive",
          "format": "double",
          "type": "number"
        },
        "marked": {
          "type": "boolean"
        },
        "maxaperturevalue": {
          "format": "float",
          "type": "number"
        },
        "maxavailheight": {
          "format": "int32",
          "type": "integer"
        },
        "maxavailwidth": {
          "format": "int32",
          "type": "integer"
        },
        "maxsamplevalue": {
          "format": "int32",
          "type": "integer"
        },
        "metadatadate": {
          "type": "string"
        },
        "meteringmode": {
          "format": "int32",
          "type": "integer"
        },
        "microvideooriginaloffset": {
          "description": "This is similar to gcameramicrovideooffset, except it stores the unverified value that was provided in the motion photo file. This field is not part of the XMP or spec. It is used to ensure we preserve data from the original file when offset is modified.",
          "format": "int32",
          "type": "integer"
        },
        "mimeType": {
          "description": "Mime type of image",
          "format": "int32",
          "type": "integer"
        },
        "minormodelagedisclosure": {
          "type": "string"
        },
        "minsamplevalue": {
          "format": "int32",
          "type": "integer"
        },
        "mode": {
          "format": "int32",
          "type": "integer"
        },
        "modelage": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "modelreleaseid": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "modelreleasestatus": {
          "type": "string"
        },
        "modifydate": {
          "type": "string"
        },
        "motionphotovideodataboxheader": {
          "description": "The Motion Photo Video Data (MPVD) box header of a HEIF motion photo. It is used for reconstructing the original moton photo bytes. See go/photos-be-heic-motion-photos for more details.",
          "format": "byte",
          "type": "string"
        },
        "nickname": {
          "type": "string"
        },
        "objectattributereference": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "objectcycle": {
          "type": "string"
        },
        "objecttypereference": {
          "type": "string"
        },
        "offsettime": {
          "type": "string"
        },
        "offsettimedigitized": {
          "type": "string"
        },
        "offsettimeoriginal": {
          "type": "string"
        },
        "organisationinimagecode": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "organisationinimagename": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "orientation": {
          "description": "Exif camera orientation. \"1\" means \"no rotation\".",
          "format": "int32",
          "type": "integer"
        },
        "originatingprogram": {
          "type": "string"
        },
        "owner": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ownername": {
          "type": "string"
        },
        "panoramaMetadata": {
          "$ref": "PhotosPanoramaMetadata"
        },
        "personinimage": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "photometricinterpretation": {
          "format": "int32",
          "type": "integer"
        },
        "planarconfiguration": {
          "format": "int32",
          "type": "integer"
        },
        "poseheadingdegrees": {
          "format": "float",
          "type": "number"
        },
        "posepitchdegrees": {
          "format": "float",
          "type": "number"
        },
        "poserolldegrees": {
          "format": "float",
          "type": "number"
        },
        "primarychromaticities": {
          "format": "float",
          "type": "number"
        },
        "productid": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "programversion": {
          "type": "string"
        },
        "projectiontype": {
          "type": "string"
        },
        "propertyreleaseid": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "propertyreleasestatus": {
          "type": "string"
        },
        "publisher": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "rating": {
          "format": "float",
          "type": "number"
        },
        "redeyemode": {
          "type": "boolean"
        },
        "referenceblackwhite": {
          "format": "float",
          "type": "number"
        },
        "referencedate": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "referencenumber": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "referenceservice": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "relatedimagefileformat": {
          "type": "string"
        },
        "relatedimageheight": {
          "format": "int64",
          "type": "string"
        },
        "relatedimagewidth": {
          "format": "int64",
          "type": "string"
        },
        "relatedsoundfile": {
          "type": "string"
        },
        "relation": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "releasedate": {
          "type": "string"
        },
        "releasetime": {
          "type": "string"
        },
        "resolutionunit": {
          "format": "int32",
          "type": "integer"
        },
        "rotate": {
          "description": "being returned to caller Use values defined in \"MIME_TYPE\" This field is deprecated. Rotation is now accomplished via ImageInfo.exif_orientation and ImageInfo.edit_list. Number of degrees (0, 90, 180,",
          "format": "int32",
          "type": "integer"
        },
        "rowsperstrip": {
          "format": "int64",
          "type": "string"
        },
        "samplesperpixel": {
          "format": "int32",
          "type": "integer"
        },
        "saturation": {
          "format": "int32",
          "type": "integer"
        },
        "scene": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "scenecapturetype": {
          "format": "int32",
          "type": "integer"
        },
        "sensingmethod": {
          "format": "int32",
          "type": "integer"
        },
        "sensorheight": {
          "format": "float",
          "type": "number"
        },
        "sensorwidth": {
          "format": "float",
          "type": "number"
        },
        "serialnumber": {
          "type": "string"
        },
        "serviceidentifier": {
          "type": "string"
        },
        "sharpness": {
          "format": "int32",
          "type": "integer"
        },
        "shutterspeedvalue": {
          "format": "float",
          "type": "number"
        },
        "software": {
          "type": "string"
        },
        "source": {
          "type": "string"
        },
        "sourcephotoscount": {
          "format": "int32",
          "type": "integer"
        },
        "spectralsensitivity": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "stitchingsoftware": {
          "type": "string"
        },
        "stripbytecounts": {
          "format": "int64",
          "type": "string"
        },
        "stripoffsets": {
          "format": "int64",
          "type": "string"
        },
        "subjectarea": {
          "format": "int32",
          "type": "integer"
        },
        "subjectcode": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "subjectdistancerange": {
          "format": "int32",
          "type": "integer"
        },
        "subjectlocation": {
          "format": "int32",
          "type": "integer"
        },
        "subjectreference": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "sublocation": {
          "type": "string"
        },
        "subsectime": {
          "type": "string"
        },
        "subsectimedigitized": {
          "type": "string"
        },
        "subsectimeoriginal": {
          "type": "string"
        },
        "supplementalcategory": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "thresholding": {
          "format": "int32",
          "type": "integer"
        },
        "thumbnailerBuildCl": {
          "description": "The build CL for the version of thumbnailer that built this image.",
          "format": "int32",
          "type": "integer"
        },
        "timesent": {
          "type": "string"
        },
        "timezoneminutes": {
          "description": "Remaining minutes of offset.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "timezoneoffset": {
          "description": "The elements in the timezone and daylight savings field arrays correspond to the following date/time fields: 0) datecreated (ie. DateTimeOriginal) 1) datetime (ie. DateTime or last modified date) 2) datetimedigitized (ie. DateTimeDigitized) If the field does not exist, then there is no valid time zone information for that date/time field. Offset in hours.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "title": {
          "type": "string"
        },
        "transmissionreference": {
          "type": "string"
        },
        "type": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "uniqueid": {
          "description": "For unique hash:",
          "type": "string"
        },
        "uno": {
          "type": "string"
        },
        "urgency": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "usageterms": {
          "type": "string"
        },
        "usepanoramaviewer": {
          "description": "GPano-related fields. A handful of these have been deprecated due to a change in the spec since its initial design.",
          "type": "boolean"
        },
        "version": {
          "type": "string"
        },
        "webstatement": {
          "type": "string"
        },
        "whitebalance": {
          "format": "int32",
          "type": "integer"
        },
        "whitepoint": {
          "format": "float",
          "type": "number"
        },
        "width": {
          "description": "width and height are before any rotation (including EXIF orientation).",
          "format": "int32",
          "type": "integer"
        },
        "xmp4c": {
          "$ref": "PhotosFourCMetadata"
        },
        "xresolution": {
          "format": "float",
          "type": "number"
        },
        "ycbcrcoefficients": {
          "format": "float",
          "type": "number"
        },
        "ycbcrpositioning": {
          "format": "int32",
          "type": "integer"
        },
        "ycbcrsubsampling": {
          "format": "int32",
          "type": "integer"
        },
        "yresolution": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PhotosPanoramaMetadata": {
      "id": "PhotosPanoramaMetadata",
      "properties": {
        "sphericalPanorama": {
          "type": "boolean"
        },
        "vr180Panorama": {
          "description": "True if the image is a VR180 image. See go/3d180 for details.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "PhotosVisionGroundtruthdbNormalizedBoundingBox": {
      "description": "Bounding box coordinates are relative to the width and height of the image. For example, if image is 100x200 and NormalizedBoundingBox is , the bounding box coordinates will be (10, 40) to (50, 180). Note parts of the bounding box may fall outside the image.",
      "id": "PhotosVisionGroundtruthdbNormalizedBoundingBox",
      "properties": {
        "xmax": {
          "format": "float",
          "type": "number"
        },
        "xmin": {
          "format": "float",
          "type": "number"
        },
        "ymax": {
          "format": "float",
          "type": "number"
        },
        "ymin": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecFeatureVector": {
      "id": "PhotosVisionObjectrecFeatureVector",
      "properties": {
        "floatData": {
          "description": "For single precision floating point data",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecGeoLocation": {
      "description": "The geo-location of a single point, or of the \"center\" of a group of points.",
      "id": "PhotosVisionObjectrecGeoLocation",
      "properties": {
        "altitudeMeters": {
          "description": "Altitude of the point above the earth's surface, in meters.",
          "format": "double",
          "type": "number"
        },
        "countryCode": {
          "description": "Country code string.",
          "type": "string"
        },
        "fromGps": {
          "description": "Indicates if the lat/lon above is assumed to come from a GPS device.",
          "type": "boolean"
        },
        "lat": {
          "description": "Latitude in degrees north. Values south of the equator are negative.",
          "format": "double",
          "type": "number"
        },
        "latErrorBound": {
          "description": "When applied to a single point, represents the estimated error bounds of manual geotagging. The estimate is based on size of the bounding box of the map used for manual geotagging. When applied to a group of points, the error bounds represent the dispersion around the group center (lat/lon above). The dispersion in this case is computed as half the interquartile range. Reference: http://en.wikipedia.org/wiki/Interquartile_range (lat +/- lat_error_bound, lng +/- lng_error_bound).",
          "format": "double",
          "type": "number"
        },
        "lon": {
          "description": "Longitude in degrees east. Values west of 0 deg are negative.",
          "format": "double",
          "type": "number"
        },
        "lonErrorBound": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecGlobalFeature": {
      "description": "Global feature for the image.",
      "id": "PhotosVisionObjectrecGlobalFeature",
      "properties": {
        "additionalInfo": {
          "description": "Optional info provided by the feature extractor.",
          "format": "byte",
          "type": "string"
        },
        "featureVector": {
          "$ref": "PhotosVisionObjectrecFeatureVector"
        },
        "quantizedFeatureVector": {
          "$ref": "PhotosVisionObjectrecQuantizedFeatureVector"
        },
        "tag": {
          "description": "Tag for this global feature. E.g., \"DELG\", \"SBv4\" or \"DELG_region1\".",
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecImageTemplate": {
      "description": "ImageTemplate contains local and/or global features generated from one image. User-defined members can be set to any value within the constraints outlined below. Algorithms usually pass these through without evaluation, unless documented otherwise. Next id: 29",
      "id": "PhotosVisionObjectrecImageTemplate",
      "properties": {
        "authorName": {
          "description": "Name of the author or image source. User-defined. Must be NULL-terminated.",
          "type": "string"
        },
        "corpus": {
          "description": "Identifier for which corpus the image belongs to. Currently Cyclone uses this field in: - photos_vision_objectrec.SpatialMatcherRequest.residual_template to select which spatial matcher should be applied to the candidate matches - photos_vision_objectrec.CustomCorpusQuantizer to map a custom corpus to one or more posting lists",
          "type": "string"
        },
        "geoLocation": {
          "$ref": "PhotosVisionObjectrecGeoLocation",
          "description": "The geolocation of the image. Assumed to represent the location where the photo was taken from."
        },
        "globalFeature": {
          "items": {
            "$ref": "PhotosVisionObjectrecGlobalFeature"
          },
          "type": "array"
        },
        "imageHeight": {
          "format": "int32",
          "type": "integer"
        },
        "imageId": {
          "description": "Unique identifier for the image used to compute this template.",
          "format": "int64",
          "type": "string"
        },
        "imageUrl": {
          "description": "URL or filename of the image used to compute this template. User-defined. Must contain only ASCII characters and be NULL-terminated.",
          "type": "string"
        },
        "imageWidth": {
          "description": "Dimension of the image used to compute this template.",
          "format": "int32",
          "type": "integer"
        },
        "info": {
          "format": "byte",
          "type": "string"
        },
        "objectInfo": {
          "description": "Tags pertaining to this image. User-defined. Must be NULL-terminated.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "objectName": {
          "description": "Name of the object/scene depicted. User-defined. Must contain only ASCII characters and be NULL-terminated.",
          "type": "string"
        },
        "opaqueData": {
          "description": "Opaque template data. May be used to pass through additional data from template sources to processing modules, that is not already covered by other members of this PB. It is the responsibility of processing modules to verify that the data is in a compatible format.",
          "format": "byte",
          "type": "string"
        },
        "roi": {
          "$ref": "PhotosVisionObjectrecROI",
          "description": "Region-of-interest: The bounding box of the object or scene depicted in the image."
        },
        "subset": {
          "items": {
            "$ref": "PhotosVisionObjectrecImageTemplateSubSet"
          },
          "type": "array"
        },
        "version": {
          "description": "Feature version.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecImageTemplateSubSet": {
      "description": "Each SubSet contains LocalDescriptors of a specific type. The type indicates which algorithm has been used to generate the descriptors. No enum is defined for the descriptor_type. For most applications it is sufficient to know if two descriptors are of the same or a different type, while ignoring the details of their generation. The descriptor type '0' is reserved and must not be used.",
      "id": "PhotosVisionObjectrecImageTemplateSubSet",
      "properties": {
        "descriptor": {
          "items": {
            "$ref": "PhotosVisionObjectrecLocalDescriptor"
          },
          "type": "array"
        },
        "descriptorType": {
          "format": "int32",
          "type": "integer"
        },
        "isBinaryDescriptor": {
          "description": "Used to indicate if the descriptor is binary or not. When decompressing feature this is useful to decide calling different decompression functions.",
          "type": "boolean"
        },
        "numDescriptors": {
          "description": "Used to store the number of descriptors for statistical purposes, if the descriptors themselves are not stored.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecLocalDescriptor": {
      "description": "LocalDescriptor holds interest point data and an optional local descriptor vector.",
      "id": "PhotosVisionObjectrecLocalDescriptor",
      "properties": {
        "affineMatrix": {
          "$ref": "PhotosVisionObjectrecMatrix2D",
          "description": "Optional affine matrix. Supersedes scale and orientation if present. r' = affine_matrix.r + (x,y) defines an affine transform from the normalized image patch (in which the interest point is centered at the origin with scale 1) to the image. If the affine matrix is set, the following approximations are recommended: scale = sqrt(0.5 * (xx*xx + xy*xy + yx*yx + yy*yy)); orientation = atan2(yx - xy, xx + yy); If not present, the affine matrix can be computed from scale and orientation as: xx = scale * cos(orientation); xy = scale * -sin(orientation); yx = scale * sin(orientation); yy = scale * cos(orientation);"
        },
        "data": {
          "format": "byte",
          "type": "string"
        },
        "dataFactor": {
          "description": "data_factor and data represent the local descriptor vector in a compressed format, using only 8 bit per value. Each byte of the data string yields one component of the local descriptor by bit-casting it to an int8 and multiplying it by data_factor. Protocol buffers do not support int8 directly.",
          "format": "float",
          "type": "number"
        },
        "featureVector": {
          "$ref": "PhotosVisionObjectrecFeatureVector",
          "description": "Unquantized feature vector (float)."
        },
        "opaqueData": {
          "description": "Opaque descriptor data. May be used to pass through descriptor data from descriptor sources to processing modules, that is not already covered by data/data_factor and/or cannot be expressed as a vector of numbers. It is the responsibility of processing modules to verify that the data is in a compatible format.",
          "format": "byte",
          "type": "string"
        },
        "orientation": {
          "description": "Orientation is optional, as some interest point detectors don't compute it. The range of orientation is [-pi,pi).",
          "format": "float",
          "type": "number"
        },
        "scale": {
          "description": "Each interest point must have a characteristic scale > 0.",
          "format": "float",
          "type": "number"
        },
        "strength": {
          "description": "The strength or weight, indicating the relative significance of this point.",
          "format": "float",
          "type": "number"
        },
        "x": {
          "description": "The position in the image with sub-pixel accuracy. The center of the upper left pixel has coordinates (0.0, 0.0). Thus the range for x and y is (-0.5, width - 0.5) x (-0.5, height - 0.5).",
          "format": "float",
          "type": "number"
        },
        "y": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecMatrix2D": {
      "description": "A 2x2 float matrix.",
      "id": "PhotosVisionObjectrecMatrix2D",
      "properties": {
        "xx": {
          "format": "float",
          "type": "number"
        },
        "xy": {
          "format": "float",
          "type": "number"
        },
        "yx": {
          "format": "float",
          "type": "number"
        },
        "yy": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecQuantizedFeatureVector": {
      "description": "Quantized/compressed feature vector (8 bit per value). Can be decoded by multiplying data_factor to each data byte.",
      "id": "PhotosVisionObjectrecQuantizedFeatureVector",
      "properties": {
        "data": {
          "format": "byte",
          "type": "string"
        },
        "dataFactor": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "PhotosVisionObjectrecROI": {
      "description": "A region of interest in the image.",
      "id": "PhotosVisionObjectrecROI",
      "properties": {
        "xMax": {
          "format": "int32",
          "type": "integer"
        },
        "xMin": {
          "format": "int32",
          "type": "integer"
        },
        "yMax": {
          "format": "int32",
          "type": "integer"
        },
        "yMin": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "PornFlagData": {
      "description": "A protocol buffer to store the url, referer and porn flag for a url. and an optional image score. Next available tag id: 51.",
      "id": "PornFlagData",
      "properties": {
        "coclickBrainScores": {
          "$ref": "ImageSafesearchContentBrainPornAnnotation",
          "description": "Aggregated brain_porn_scores for navboost co-clicked images. Historical: this signal is deprecated and no longer populated as of 2020-12-01. Refer to b/172897542 for more information."
        },
        "csaiScore": {
          "description": "Score predicting how likely an image is offensive or suggestive about CSAI (child sexual abuse imagery).",
          "format": "float",
          "type": "number"
        },
        "debugInfo": {
          "description": "DebugInfo stores debug information from the overall classifier. This allows for instance to update counters related to blacklisting without running the full classifier again.",
          "items": {
            "$ref": "ImagePornDebugInfo"
          },
          "type": "array"
        },
        "finalOffensiveScore": {
          "description": "Final offensive score based on image salient terms and image OCR vulgar and offensive scores.",
          "format": "float",
          "type": "number"
        },
        "finalViolenceScore": {
          "description": "Final violence score based on some image signals (brain pixel score, co-clicked images violence score, navboost queries score, etc.).",
          "format": "float",
          "type": "number"
        },
        "finalViolenceScoreVersion": {
          "description": "A string that indicates the version of SafeSearch classifier used to compute final_violence_score.",
          "type": "string"
        },
        "internalSignals": {
          "$ref": "SafesearchInternalImageSignals",
          "description": "A proto that stores SafeSearch internal signals that are not exported to clients. SafeSearch team does not provide any guarantees about the presence or the semantics of these signals in the future."
        },
        "numberFaces": {
          "description": "number of faces",
          "format": "int32",
          "type": "integer"
        },
        "ocrAnnotation": {
          "$ref": "ImageSafesearchContentOCRAnnotation",
          "description": "Information about image OCR text. For details see image/safesearch/content/public/ocr_annotation.proto."
        },
        "ocrVulgarScore": {
          "description": "Vulgar score of the text found by OCR in the image.",
          "format": "float",
          "type": "number"
        },
        "offensiveSymbolDetection": {
          "$ref": "ImageSafesearchContentOffensiveSymbolDetection",
          "description": "QuimbyCongas-based detection of offensive symbols in the image (currently swastika and Nazi yellow badge)."
        },
        "photodnaHash": {
          "description": "Binary version of the PhotoDNA hash (144 bytes long). If not set (has_photodna_hash() == false) it means that it was not computed, if empty (has_photodna_hash() == true && photodna_hash() == \"\") it means that the computation failed (cannot be computed for images smaller than 50 x 50).",
          "format": "byte",
          "type": "string"
        },
        "pornWithHighConfidence": {
          "description": "This field is set to true when we are pretty confident that the image is porn (with higher precision than the img_porn_moderate restrict). In particular, it means that the image might be demoted for non-porn queries when SafeSearch is Off.",
          "type": "boolean"
        },
        "qbstOffensiveScore": {
          "description": "QBST-based image offensive score, Navboost based",
          "format": "float",
          "type": "number"
        },
        "qbstSpoofScore": {
          "description": "QBST-based image spoof score, Navboost based, unrelated to the pixel-based score in PornAnnotation.",
          "format": "float",
          "type": "number"
        },
        "queryStats": {
          "$ref": "ClassifierPornQueryStats",
          "description": "Query statistics from Navboost logs. For more details see classifier/porn/proto/image_porn_classifier_signals.proto."
        },
        "queryTextViolenceScore": {
          "description": "Aggregated navboost query violence score.",
          "format": "float",
          "type": "number"
        },
        "referer": {
          "description": "url of the referer page",
          "type": "string"
        },
        "referrerCounts": {
          "$ref": "ClassifierPornReferrerCounts",
          "description": "Information about referrers and their porn classification. For details see classifier/porn/proto/image_porn_classifier_signals.proto."
        },
        "semanticSexualizationScore": {
          "description": "Starburst-based score predicting sexualization level of the image.",
          "format": "float",
          "type": "number"
        },
        "url": {
          "description": "url of the image",
          "type": "string"
        },
        "urlPornScores": {
          "$ref": "ClassifierPornAggregatedUrlPornScores",
          "description": "Information about the URL porn scores for image URLs associated with this image."
        }
      },
      "type": "object"
    },
    "PostalAddress": {
      "description": "Next free ID: 32",
      "id": "PostalAddress",
      "properties": {
        "addressLine": {
          "description": "These correspond to the \"AddressLine\" elements in xAL, which are used to hold unstructured text. This is an addendum to the structured values; when the address is formatted, the provided lines are prepended to the formatted version of the street component fields for Western countries, and appended for CJK countries. These lines are in display order. Formerly users of PostalAddress were discouraged from mixing address_line with structured address elements. Mixing is now encouraged if address_line has to be used at all.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "administrativeAreaName": {
          "description": "Top-level administrative subdivision of this country. Examples: US state, IT region, UK constituent nation, JP prefecture.",
          "type": "string"
        },
        "countryName": {
          "description": "Name corresponding to country code. Optional. This can usually be inferred from country_name_code.",
          "type": "string"
        },
        "countryNameCode": {
          "description": "xAL does not specify a scheme for country codes. We strongly recommend ISO 3166-1-alpha-2 (two letter codes, as used in DNS) if you use this field. (Use \"GB\", not \"UK\".)",
          "type": "string"
        },
        "dependentLocalityName": {
          "description": "Dependent locality or sublocality. Used for UK dependent localities, or neighborhoods or boroughs in other locations. If trying to represent a UK double-dependent locality, include both the double-dependent locality and the dependent locality in this field, e.g. \"Whaley, Langwith\".",
          "type": "string"
        },
        "dependentThoroughfareName": {
          "description": "Dependent thoroughfares are used to define UK-style dependent thoroughfares, and secondary streets in addresses in other locales, including intersections. Formatting is locale-dependent.",
          "type": "string"
        },
        "firmName": {
          "description": "NEW: The firm or organization. This goes at a finer granularity than address_lines in the address. Omit if not needed.",
          "type": "string"
        },
        "isDisputed": {
          "description": "Required to support the suppression of country names from formatted results for addresses within geo-politically disputed areas. Note that we cannot achieve this by not setting the country, as this would prevent us from selecting a suitable formatting template. Addresses converted from Oyster, by the standard conversion libraries, will have this field set if the address lies within a geo-politically disputed area (ie, contained within features of type TYPE_DISPUTED_AREA) even if the disputed area itself is not a visible part of the formatted address. An example of a disputed area is \"No Man's Land\" near Jerusalem which has the flag FLAG_NEVER_DISPLAY set for all its names. See: go/disputed-areas-2014 for more information.",
          "type": "boolean"
        },
        "languageCode": {
          "description": "Language of the address. May affect address formatting for multi- lingual countries. Also allows storing multilingual location names as repeated PostalAddress. Not in xAL. Use language codes which are accepted by i18n_identifiers::LanguageCodeCoverter::FromOther(). Examples include \"en\" and \"de-CH\".",
          "type": "string"
        },
        "localityName": {
          "description": "Locality. This is something of a fuzzy term, but it generally refers to the city/town portion of an address. In regions of the world where localities are not well defined or do not fit into this structure well (for example, Japan), leave locality_name empty and use address_line. Examples: US city, IT comune, UK post town.",
          "type": "string"
        },
        "postBoxNumber": {
          "description": "This corresponds to PostBoxNumber in xAL format. In xAL format, it's nested inside PostBox, which also contains a \"Type\" field to distinguish between PO Box, Private Bag etc. Current support in this proto is for PO Box only. Note that although this is modelled as a string, it should have the number only, with any necessary punctuation (such as \"-\"). For example, for \"P.O. Box 123\", this field would hold \"123\" - the template displaying this would prepend P.O. Box when formatting if necessary.",
          "type": "string"
        },
        "postalCodeNumber": {
          "description": "Despite the name, postal_code_number values are frequently alphanumeric. Examples: \"94043\", \"SW1W\", \"SW1W 9TQ\".",
          "type": "string"
        },
        "postalCodeNumberExtension": {
          "description": "Used for postal-code suffixes, such as the 4-digit extension of a US ZIP+4 code.",
          "type": "string"
        },
        "premiseName": {
          "description": "The \"premise\" is something like a house or building.",
          "type": "string"
        },
        "recipientName": {
          "description": "NEW: The recipient. This goes at a finer granularity than address_lines in the address. Not present in xAL. Omit if not needed.",
          "type": "string"
        },
        "sortingCode": {
          "description": "This corresponds to the SortingCode sub-element of the xAL PostalServiceElements element. Use is very country-specific. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (e.g. C\u00f4te d'Ivoire).",
          "type": "string"
        },
        "subAdministrativeAreaName": {
          "description": "Second-level administrative subdivision of this country. Examples: US county, IT province, UK county.",
          "type": "string"
        },
        "subPremiseName": {
          "description": "The \"subpremise\" is something like an apartment or suite. xAL offers more structured premise and subpremise values, but we don't.",
          "type": "string"
        },
        "thoroughfareName": {
          "description": "Name of thoroughfare. Intersections should be represented with this field or address_line. Examples: \"Amphitheatre Parkway\", \"N Shoreline Blvd & Charleston Rd\"",
          "type": "string"
        },
        "thoroughfareNumber": {
          "description": "Thoroughfare numbers (street numbers) can be very complex indeed. xAL defines fancy structures like \"ThoroughfareNumberRange\" to represent the details, but we haven't included that yet. It is worth noting that this needs to be a string, not a number. Example: \"1600\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "PrecomputedRestricts": {
      "description": "The restricts that are computed before building a Mustang index.",
      "id": "PrecomputedRestricts",
      "properties": {
        "restricts": {
          "items": {
            "enum": [
              "INVALID",
              "COLOR_BLACK",
              "COLOR_BLUE",
              "COLOR_BROWN",
              "COLOR_GRAY",
              "COLOR_GREEN",
              "COLOR_ORANGE",
              "COLOR_PINK",
              "COLOR_PURPLE",
              "COLOR_RED",
              "COLOR_TEAL",
              "COLOR_WHITE",
              "COLOR_YELLOW",
              "HAS_SIMILAR",
              "ALL",
              "CLIPART",
              "CLIPART_HR",
              "LINEART",
              "PHOTO",
              "ANIMATED",
              "TRANSPARENT",
              "PANORAMIC",
              "STOCK",
              "MONO",
              "TOLERANT_GRAY",
              "COLOR",
              "NOT_UNIVERSAL",
              "PORTRAIT",
              "FACES_ONE",
              "FACES_TWO",
              "FACES_SEVERAL",
              "FACES_MANY",
              "FACE_MALE",
              "FACE_FEMALE",
              "_img_porn_moderate",
              "_img_porn_strict",
              "_img_porn_very_strict",
              "_image_aspect_16x10",
              "_image_aspect_16x9",
              "_image_aspect_4x3",
              "_image_aspect_square",
              "_image_aspect_nearsquare",
              "_image_aspect_tall",
              "_image_aspect_xtall",
              "_image_aspect_wide",
              "_image_aspect_xwide",
              "_image_size_atleast_400x300",
              "_image_size_atleast_640x480",
              "_image_size_atleast_800x600",
              "_image_size_atleast_1024x768",
              "_image_size_atleast_1280x800",
              "_image_size_atleast_1440x900",
              "_image_size_atleast_2MP",
              "_image_size_atleast_4MP",
              "_image_size_atleast_6MP",
              "_image_size_atleast_8MP",
              "_image_size_atleast_10MP",
              "_image_size_atleast_12MP",
              "_image_size_atleast_15MP",
              "_image_size_atleast_20MP",
              "_image_size_atleast_40MP",
              "_image_size_atleast_70MP",
              "_image_size_atleast_140MP",
              "_image_size_icon",
              "_image_size_small",
              "_image_size_medium",
              "FILETYPE_JPG",
              "FILETYPE_GIF",
              "FILETYPE_PNG",
              "FILETYPE_BMP",
              "FILETYPE_SVG",
              "FILETYPE_WEBP",
              "FILETYPE_ICO",
              "FILETYPE_CRAW",
              "FILETYPE_HEIF",
              "CC_LICENSE",
              "NON_CC_LICENSE",
              "BEST",
              "ICON",
              "SMALL",
              "MEDIUM",
              "LARGE",
              "XLARGE",
              "XXLARGE",
              "_imagehuge",
              "DEPRECATED_65",
              "DEPRECATED_72"
            ],
            "enumDescriptions": [
              "",
              "The image has dominant colors.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "This restrict will be set if the image has similar images in the similar-image index.",
              "Misnamed - semantically means \"not tiny\".",
              "Genre restricts.",
              "",
              "",
              "",
              "",
              "",
              "",
              "Restriction on images coming from stock photograph sites.",
              "Earlier chrominance measures.",
              "",
              "Refers to the FULL_COLOR type defined in image_perdoc.h.",
              "Not allowed to appear in Images Universal.",
              "Has at least one large face in the image.",
              "Face-quantity restricts. The detected faces that contribute toward this count (1) are larger than some minimal size (different from the PORTRAIT criterion) and (2) have been verified by color (for color images: face has skin-color; for non-color images: always true).",
              "",
              "",
              "",
              "Face-classifier restricts. Computed over the union of all detected faces, so an image can have both FACE_MALE and FACE_FEMALE. These restricts only get applied if the face is frontal with high confidence, age is detected and is at least 13 years old. The precision should be around 98-99%.",
              "",
              "Porn restricts.",
              "",
              "",
              "Aspect ratio restricts.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "New size restricts.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Filetype restricts (should correspond to FileFormat, below).",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Restricts about image license types.",
              "",
              "--- The restricts below are on the \"to deprecate\" list. --- Misnamed - semantically means \"somewhat large\".",
              "Earlier size restricts.",
              "",
              "",
              "",
              "",
              "",
              "\"HUGE\" does not work for this enum because the symbol in the generated C++ file causes compilation problems; so, it is written in verbatim mode.",
              "Deprecated fields; place here to prevent reuse. For testing, they must have the \"DEPRECATED_\" prefix.",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "PremiumPerDocData": {
      "description": "Per-doc data for premium documents in the Google index.",
      "id": "PremiumPerDocData",
      "properties": {
        "Currency": {
          "description": "type froogle/currency/currency.h",
          "format": "int32",
          "type": "integer"
        },
        "Date": {
          "description": "publishing date (seconds since 1970,",
          "format": "int64",
          "type": "string"
        },
        "Entitlement": {
          "description": "entitlement data",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "IsArchival": {
          "description": "True if a free document is archival in nature.",
          "type": "boolean"
        },
        "IsEntitled": {
          "description": "User is entitled to see the premium content for free.",
          "type": "boolean"
        },
        "Price": {
          "description": "price * 100 if available",
          "format": "int32",
          "type": "integer"
        },
        "Publication": {
          "description": "negative values for prior dates) FP of the Premium publication name",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "Proto2BridgeMessageSet": {
      "description": "This is proto2's version of MessageSet.",
      "id": "Proto2BridgeMessageSet",
      "properties": {},
      "type": "object"
    },
    "PseudoVideoData": {
      "description": "Available tags: 14+",
      "id": "PseudoVideoData",
      "properties": {
        "AsrModel": {
          "description": "ASR model MPM version.",
          "type": "string"
        },
        "DocKey": {
          "description": "This should be the MustangDocId, we need to figure out how to generate a uint64 given the int64 we have in data_set",
          "format": "uint64",
          "type": "string"
        },
        "Lang": {
          "description": "Language of the recognizer used to generate transcript.",
          "type": "string"
        },
        "MustangDocId": {
          "description": "This is the videodocid associate to the http://video.google.com/videoplay?docid= NUMBER",
          "type": "string"
        },
        "Url": {
          "description": "URL for document.",
          "type": "string"
        },
        "s3Mode": {
          "type": "string"
        },
        "s3ModelInfoLabel": {
          "description": "S3 ASR model info.",
          "type": "string"
        },
        "transcript": {
          "$ref": "PseudoVideoDataTranscript"
        }
      },
      "type": "object"
    },
    "PseudoVideoDataTranscript": {
      "description": "A time-coded transcription of the document's audio track.",
      "id": "PseudoVideoDataTranscript",
      "properties": {
        "Text": {
          "description": "The complete transcription text.",
          "type": "string"
        },
        "timestamp": {
          "items": {
            "$ref": "PseudoVideoDataTranscriptTimestamp"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "PseudoVideoDataTranscriptTimestamp": {
      "description": "Mapping of time/character correspondences. Used to map found snippets to the time and thumbnail nearest that snippet.",
      "id": "PseudoVideoDataTranscriptTimestamp",
      "properties": {
        "CharOffset": {
          "format": "int32",
          "type": "integer"
        },
        "Confidence": {
          "description": "quantized to values in range 0-127",
          "format": "int32",
          "type": "integer"
        },
        "TimeOffset": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "PtokenPToken": {
      "description": "PToken expresses policy-relevant properties of the data objects being processed and stored in Google's production systems. See go/ptoken to learn more. PTokens are intentionally opaque: go/ptokens-are-opaque. The following should be considered implementation details. Next ID: 8 INTERNAL: If both the Scalar and the Compound extensions are populated, we use the Compound and discard the Scalar. In principle, this should never happen.",
      "id": "PtokenPToken",
      "properties": {},
      "type": "object"
    },
    "QualityActionsAppInfo": {
      "description": "Information of the app to be annotated for the query. It contains the name of the app, the package name associated with it. It also contains the confidence associated with {app, package} pair. This confidence is calculated from different signals like navboost, ranking etc. which later is used for ranking the apps for a particular query. The source of this app information is also indicated. This app info can either be from installed app (collected from device content) or from the fastmap. LINT.IfChange",
      "id": "QualityActionsAppInfo",
      "properties": {
        "androidIntent": {
          "description": "The list of android intents that the app is capable of executing.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "appName": {
          "description": "This is the string matched from the query.",
          "type": "string"
        },
        "category": {
          "$ref": "QualityActionsAppUnderstandingCategory",
          "description": "Category of this package."
        },
        "confidence": {
          "format": "float",
          "type": "number"
        },
        "displayName": {
          "description": "This is the display name of the app as shown below the app icon.",
          "type": "string"
        },
        "fallbackUrl": {
          "description": "URL for the website associated with this app.",
          "type": "string"
        },
        "packageName": {
          "description": "Note that the package_name could be empty for two reasons: - The AppInfo is annotated by device content. - The ngram exists in app name fastmap, but there are a lot of packages associated with it. e.g., there could be a lot of apps for app name \"recipes app\".",
          "type": "string"
        },
        "source": {
          "description": "For the future source, use the field in source_data.source().",
          "enum": [
            "UNKNOWN_SOURCE",
            "DEVICE_CONTENT",
            "FASTMAP",
            "NAVBOOST",
            "MARMOT",
            "WHITELIST",
            "PLAY_APPS_SEARCH",
            "ASSISTANT_DEVICE_MODEL_CONTEXT",
            "DEVICE_ATTRIBUTE",
            "TELEPORT_SEARCH",
            "FOREGROUND_SEARCH",
            "IMPLICIT_SEARCH",
            "MEDIA_PROVIDER",
            "TELEPORT",
            "AGGRESSIVE_IMPLICIT_SEARCH",
            "EMPTY_SEARCH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Whitelisted apps directly injected into the grammar or annotator.",
            "",
            "Apps are annotated from Assistant AppCapabilities, which will come from Device Model.",
            "Apps are annotated from device attribute.",
            "Used by TeleportIntentGenerator for queries such as Search $Entity on $APP.",
            "Used by TeleportIntentGenerator for queries such searchy queries that fit the current foreground app. Example: [running shoes] with Amazon in the foreground.",
            "Used by TeleportIntentGenerator for queries with special keywords such as [funny cat videos] (with the keyword being videos).",
            "Used by go/ump-provider-annotation to annotate media providers.",
            "Apps annotated by Teleport, coming from the AgentAnnotator.",
            "Used by TeleportIntentgenerator for queries such as \"install amazon\" to be directed for PlayStore. Search frames should directly trigger on this intent.",
            "Used by the TeleportIntentGenerator such as \"search on amazon\". We will ask the user what they are searching for."
          ],
          "type": "string"
        },
        "sourceData": {
          "items": {
            "$ref": "QualityActionsAppInfoSourceData"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityActionsAppInfoSourceData": {
      "description": "This deprecates the above: * confidence=3 * source=4 This allows us to merge AppInfo data per package_name.",
      "id": "QualityActionsAppInfoSourceData",
      "properties": {
        "allowListSourceData": {
          "$ref": "QualityActionsAppInfoSourceDataAllowListSourceData"
        },
        "confidence": {
          "description": "Confidence from navboost.",
          "format": "float",
          "type": "number"
        },
        "install": {
          "description": "Number of installs from marmot.",
          "format": "int64",
          "type": "string"
        },
        "isCategorical": {
          "type": "boolean"
        },
        "mediaProviderSourceData": {
          "$ref": "QualityActionsAppInfoSourceDataMediaProviderSourceData"
        },
        "source": {
          "enum": [
            "UNKNOWN_SOURCE",
            "DEVICE_CONTENT",
            "FASTMAP",
            "NAVBOOST",
            "MARMOT",
            "WHITELIST",
            "PLAY_APPS_SEARCH",
            "ASSISTANT_DEVICE_MODEL_CONTEXT",
            "DEVICE_ATTRIBUTE",
            "TELEPORT_SEARCH",
            "FOREGROUND_SEARCH",
            "IMPLICIT_SEARCH",
            "MEDIA_PROVIDER",
            "TELEPORT",
            "AGGRESSIVE_IMPLICIT_SEARCH",
            "EMPTY_SEARCH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Whitelisted apps directly injected into the grammar or annotator.",
            "",
            "Apps are annotated from Assistant AppCapabilities, which will come from Device Model.",
            "Apps are annotated from device attribute.",
            "Used by TeleportIntentGenerator for queries such as Search $Entity on $APP.",
            "Used by TeleportIntentGenerator for queries such searchy queries that fit the current foreground app. Example: [running shoes] with Amazon in the foreground.",
            "Used by TeleportIntentGenerator for queries with special keywords such as [funny cat videos] (with the keyword being videos).",
            "Used by go/ump-provider-annotation to annotate media providers.",
            "Apps annotated by Teleport, coming from the AgentAnnotator.",
            "Used by TeleportIntentgenerator for queries such as \"install amazon\" to be directed for PlayStore. Search frames should directly trigger on this intent.",
            "Used by the TeleportIntentGenerator such as \"search on amazon\". We will ask the user what they are searching for."
          ],
          "type": "string"
        },
        "teleportSourceData": {
          "$ref": "AssistantTeleportTeleportNicknameSignals",
          "description": "Signals present when the source is TELEPORT."
        }
      },
      "type": "object"
    },
    "QualityActionsAppInfoSourceDataAllowListSourceData": {
      "description": "Additional signals when the source is ATV's allow list.",
      "id": "QualityActionsAppInfoSourceDataAllowListSourceData",
      "properties": {
        "preReleaseMode": {
          "description": "Whether the app is in the pre-release stage and only available for testing.",
          "type": "boolean"
        },
        "unknownAppDeviceCompatibility": {
          "description": "Whether app compatibility is unknown. This field is needed for apps like apple tv that have different package names on different devices. Play Gateway Service (PGS) lookup is needed to validate that the app is available on the user's device. go/app-fulfillment-quality",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualityActionsAppInfoSourceDataMediaProviderSourceData": {
      "description": "The MEDIA_PROVIDER source can further specify information about the content served by the app.",
      "id": "QualityActionsAppInfoSourceDataMediaProviderSourceData",
      "properties": {
        "providerKey": {
          "description": "The unique provider key/enumeration string as used in KG. See also /base/mediaasset/provider/provider_enumerator.",
          "type": "string"
        },
        "providerType": {
          "description": "The type of content served by the App. See also chrome.dongle.pints.ProviderType.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsAppUnderstandingCategory": {
      "description": "Category that this app falls into.",
      "id": "QualityActionsAppUnderstandingCategory",
      "properties": {
        "category": {
          "enum": [
            "MUSIC",
            "GAME",
            "NEWS",
            "VIDEO",
            "CHAT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "confidence": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityActionsCustomizedNotification": {
      "id": "QualityActionsCustomizedNotification",
      "properties": {
        "buttons": {
          "description": "Buttons on the notification",
          "items": {
            "$ref": "QualityActionsCustomizedNotificationButton"
          },
          "type": "array"
        },
        "surfaceType": {
          "description": "Surface type for the notification",
          "enum": [
            "UNSPECIFIED",
            "PHONE",
            "SMART_DISPLAY"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "tapAction": {
          "$ref": "QualityActionsCustomizedNotificationPayload",
          "description": "Tap action on the notification body. This overwrites the default tap action on reminder trigger notification (which on mobile, is the reminders hub page)."
        },
        "text": {
          "description": "Notification text",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsCustomizedNotificationButton": {
      "id": "QualityActionsCustomizedNotificationButton",
      "properties": {
        "label": {
          "description": "REQUIRED. text for the button label",
          "type": "string"
        },
        "tapAction": {
          "$ref": "QualityActionsCustomizedNotificationPayload",
          "description": "REQUIRED. tap action for the button"
        }
      },
      "type": "object"
    },
    "QualityActionsCustomizedNotificationPayload": {
      "id": "QualityActionsCustomizedNotificationPayload",
      "properties": {
        "url": {
          "description": "Currently for payload we only support raw string url. More structured options may be added in the future",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsNewsProviderAnnotationData": {
      "description": "Aqua annotation data for news provider. This proto is added as an extension to NimbleAnnotationData.semantics_proto for nimble annotation.",
      "id": "QualityActionsNewsProviderAnnotationData",
      "properties": {
        "providers": {
          "items": {
            "$ref": "QualityActionsNewsProviderAnnotationDataProvider"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityActionsNewsProviderAnnotationDataProvider": {
      "description": "NextId: 6",
      "id": "QualityActionsNewsProviderAnnotationDataProvider",
      "properties": {
        "locales": {
          "description": "List of supported locales for this provider. Must follow the format from go/iii, e.g.: 'en', 'en-US', 'en-GB', etc. Short forms without regions codes, such as, 'en' match all possible regions: en-US, en-GB, en-IN, etc.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "officialName": {
          "description": "The official name of the provider. Used in TTS and should be localized.",
          "type": "string"
        },
        "officialNamePronunciation": {
          "description": "TTS hint for the pronunciation of the name. Should be left blank unless TTS performs poorly on official_name. Example: Without hinting, TTS mispronounces \"The Daily 202\" as \"the daily two hundred and two\". Feeding tts the string \"the daily two oh two\" produces correct TTS.",
          "type": "string"
        },
        "providerId": {
          "description": "The provider id used for news source URL lookup in Kansas. See b/27250779 for details.",
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "description": "A score of how confident the annotated span is a news provider. For example, a high score is assigned for span \"bbc news\", but a low score for span \"bbc\", which only triggers narrative news aqua parse for a query with explicit news intent, e.g [play news from bbc].",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityActionsReminder": {
      "description": "Next id: 32",
      "id": "QualityActionsReminder",
      "properties": {
        "archived": {
          "description": "OPTIONAL. True if the reminder is archived. Not present implies false.",
          "type": "boolean"
        },
        "archivedTime": {
          "$ref": "AssistantApiDateTime",
          "description": "OPTIONAL. The time when this reminder is archived. Deprecated. Use `archived_timestamp` instead."
        },
        "archivedTimestamp": {
          "description": "OPTIONAL. When the reminder was completed (only present when archived == true). Maps to apps_intelligence.dialog.Task's complete_time field.",
          "format": "google-datetime",
          "type": "string"
        },
        "asyncInteractionType": {
          "description": "REQUIRED. async_interaction_type of the reminder trigger notification ",
          "enum": [
            "TYPE_UNSPECIFIED",
            "ASSISTANT_EXPLORE_LINKS",
            "REMINDER",
            "REMINDER_ASSIGNABLE_NOTIFY",
            "REMINDER_CHIRP",
            "REMINDER_DRAGONGLASS",
            "REMINDER_LOCATION_BASED",
            "SHARED_REMINDER",
            "SHARED_REMINDER_LOCATION_BASED",
            "REMINDER_FORESIGHT",
            "REMINDER_FORESIGHT_TAP_TO_PAYLOAD",
            "REMINDER_FORESIGHT_LONG_ANSWER",
            "REMINDER_FORESIGHT_WHEN_IS",
            "REMINDER_FORESIGHT_UPCOMING_DATES",
            "REMINDER_FORESIGHT_PORKY_PIG",
            "REMINDER_SNAPSHOT_CALENDAR_EVENT",
            "REMINDER_SNAPSHOT_PKG_ANNIVERSARY",
            "REMINDER_SNAPSHOT_PKG_BIRTHDAY",
            "REMINDER_SNAPSHOT_PKG_MY_BIRTHDAY",
            "REMINDER_ARIS",
            "REMINDER_LOCATION_BASED_ARIS",
            "REMINDER_SHARED_ARIS",
            "REMINDER_FORESIGHT_WHEN_IS_ARIS",
            "REMINDER_FORESIGHT_PORKY_PIG_ARIS",
            "REMINDER_FORESIGHT_TAP_TO_PAYLOAD_ARIS",
            "REMINDER_FORESIGHT_LONG_ANSWER_ARIS",
            "REMINDER_FORESIGHT_ARIS",
            "REMINDER_CHIRP_ARIS",
            "REMINDER_DRAGONGLASS_ARIS",
            "REMINDER_PROACTIVE_API",
            "REMINDER_POST_TASK_MIGRATION",
            "REMINDER_VOLUNTARY_TASK_MIGRATION",
            "REMINDER_NOTIFICATION_ENABLE_FIRST_NOTICE",
            "REMINDER_NOTIFICATION_ENABLE_NOTICE",
            "REMINDER_ONE_OFF_DUP_NOTIFICATION_POST_MIGRATION",
            "CROSS_SURFACE",
            "CROSS_SURFACE_MOVIE_SHOWTIMES",
            "CROSS_SURFACE_EVENTS",
            "CROSS_SURFACE_SPORTS_LEAGUE_STANDINGS",
            "CROSS_SURFACE_THIRD_PARTY_HANDOFF",
            "CROSS_SURFACE_SPORTS_TEAM_STANDINGS",
            "CROSS_SURFACE_EXPLICIT_SEND_TO_PHONE",
            "CROSS_SURFACE_LOCAL_CATEGORICAL",
            "CROSS_SURFACE_LOCAL_DIRECTIONS",
            "CROSS_SURFACE_LOCAL_DISTANCE",
            "CROSS_SURFACE_MEDIA_SONG_DETAILS",
            "CROSS_SURFACE_MEDIA_ARTIST_DETAILS",
            "CROSS_SURFACE_TRANSLATION",
            "CROSS_SURFACE_SHOPPING_LIST",
            "CROSS_SURFACE_LOCAL_PHONE_NUMBER",
            "CROSS_SURFACE_LOCAL_SHOPPING",
            "CROSS_SURFACE_LOCAL_STATION_KP",
            "CROSS_SURFACE_LOCAL_TAXI_DIRECTIONS",
            "CROSS_SURFACE_TRANSACTIONS_THIRD_PARTY",
            "CROSS_SURFACE_TRANSACTIONS",
            "CROSS_SURFACE_TRANSACTIONS_ASYNC_RESUME",
            "CROSS_SURFACE_REMOTE_DEVICE_ACTIONS_AUTH",
            "CROSS_SURFACE_DONATIONS",
            "CROSS_SURFACE_FOOD_ORDERING",
            "CROSS_SURFACE_NOTES_AND_LISTS",
            "CROSS_SURFACE_DIETARY_RESTRICTIONS",
            "CROSS_SURFACE_AE_ACCOUNT_LINKING",
            "BTW_VM_UPGRADE",
            "BTW_NOTIFY",
            "BTW_TOPICAL_TOUR",
            "BTW_FAMILY_BELL",
            "BTW_WARM_WORDS",
            "EDIT_DIETARY_PREFERENCES",
            "GOOGLE_NOW",
            "GOOGLE_NOW_CHROMEOS",
            "PRICE_DROP",
            "PROACTIVE_FLIGHT",
            "PROACTIVE_FLIGHT_DELAYED_CANCELLED",
            "PROACTIVE_FLIGHT_WEATHER",
            "PROACTIVE_FLIGHT_LANDING",
            "PROACTIVE_HOTEL",
            "PROACTIVE_PACKAGE",
            "PROACTIVE_BILL",
            "PROACTIVE_COUPON_EXPIRES_SOON",
            "PROACTIVE_PPT",
            "ZEROSTATE_BILL",
            "PROACTIVE_EVENT",
            "PROACTIVE_TRANSPORT",
            "PROACTIVE_INFERRED_REMINDER",
            "GROCERY_DELIVERY",
            "GROCERY_PICKUP",
            "PROACTIVE_SMARTSPACE",
            "NARRATIVE_NEWS",
            "BROADCAST_CUSTOM",
            "BROADCAST_CANNED",
            "REPLY_BROADCAST_PHONE",
            "REPLY_BROADCAST_CHIRP",
            "TELL_MY_FAMILY",
            "TELL_MY_FAMILY_ALLOW_GUEST_USE",
            "FAMILY_CHECK_IN",
            "SUBSCRIPTIONS_WEATHER",
            "SUBSCRIPTIONS_WEATHER_CURRENT_CONTEXT",
            "SUBSCRIPTIONS_NEWS",
            "SUBSCRIPTIONS_FUN_CONTENT",
            "SUBSCRIPTIONS_JOKE",
            "SUBSCRIPTIONS_OTHER",
            "SUBSCRIPTIONS_DAILY_PHRASES",
            "SUBSCRIPTIONS_ANIMAL_OF_THE_DAY",
            "KEEP_SUBSCRIPTIONS_WEATHER",
            "KEEP_SUBSCRIPTIONS_NEWS",
            "KEEP_SUBSCRIPTIONS_FUN_CONTENT",
            "KEEP_SUBSCRIPTIONS_JOKE",
            "KEEP_SUBSCRIPTIONS_OTHER",
            "KEEP_SUBSCRIPTIONS_DAILY_PHRASES",
            "PROACTIVE_SPORTS_UPDATE",
            "GROWTH",
            "GROWTH_AUTOMOBILE_PAYFORGAS_PROMO",
            "MOBILE_ACTIVATION",
            "SIMON_ACTIONS",
            "SIMON_WEB_ANSWERS",
            "SIMON_CURRENCY",
            "SIMON_WEATHER",
            "SIMON_ACTIONS_TRAINING_DATA",
            "HOMEBOY",
            "WHERE_IS_MY_FAMILY_LIFE360",
            "WHERE_IS_PERSON_GEO",
            "FEATURE_AWARENESS_COMMUNICATION_HABITS",
            "FEATURE_AWARENESS_MUSIC_HABITS",
            "PHOTO_FRAME_SETUP_PROMOTIONAL",
            "ASSISTANT_PIE_SWIPE_EDUCATION",
            "ASSISTANT_PIE_OPEN_APP",
            "ASSISTANT_PIE_AGGRESSIVE",
            "ASSISTANT_PIE_HOMESCREEN_ENTRY_POINT",
            "ROUTINES",
            "ROUTINES_ALARM_DISMISSAL_TRIGGER_TIP",
            "ROUTINES_CLOUD_EXECUTION_REPORT",
            "ROUTINES_SCHEDULED_MANIFOLD",
            "ROUTINES_LOCATION_TRIGGER",
            "ROUTINES_LOCATION_NOTIFICATION",
            "ROUTINES_SCHEDULED_ON_PHONE_NOTIFICATION",
            "ROUTINES_TRIGGER_ON_MOBILE",
            "ROUTINE_HOME_APP_CARDS",
            "ROUTINES_DISABLE_COMMUTE_ACTION_TIP",
            "ROUTINE_SPECIAL_NEWS_OPT_IN_TIP",
            "ROUTINES_WFH_ROUTINE_TIP",
            "ROUTINES_ELECTION_NEWS_OPT_IN_TIP",
            "ROUTINE_ALARM_DISMISSAL_TRIGGER_NOT_TRIGGERED",
            "ROUTINES_SCHEDULE_DISCOVERY",
            "ROUTINES_PROMOTE_GM",
            "ROUTINES_PROMOTE_GN",
            "ROUTINES_PROMOTE_DISMISS_ALARM",
            "FAMILY_BELL",
            "IFTTT",
            "LIVE_CARD_SETTINGS",
            "LIVE_CARD_INSTALL_ASSISTANT",
            "LIVE_CARD_DISCLOSURE",
            "LIVE_CARD_TERMS_AND_CONDITIONS",
            "LIVE_CARD_WEB_ANSWERS",
            "LIVE_CARD_HEALTH",
            "LIVE_CARD_NEWS",
            "LIVE_CARD_RESERVE_HOTEL",
            "LIVE_CARD_SHOPPING_SETTINGS",
            "LIVE_CARD_SHOPPING_VIEW_CART",
            "LIVE_CARD_MAPS_DIRECTIONS",
            "LIVE_CARD_ATTRIBUTION",
            "LIVE_CARD_HANDOFF_ACTIVITY",
            "LIVE_CARD_HANDOFF_LINK_ACCOUNT",
            "LIVE_CARD_HANDOFF_PLAY_STORE_PURCHASE",
            "LIVE_CARD_KP_ANSWERS",
            "LIVE_CARD_BLUELINK_TTS",
            "LIVE_CARD_VOICE_RETRAIN",
            "LIVE_CARD_ENABLE_PERSONAL_RESULTS",
            "LIVE_CARD_ENABLE_DEVICE_CONTACTS",
            "LIVE_CARD_INFORMATIONAL",
            "LIVE_CARD_HELP_PAGES",
            "LIVE_CARD_SHOPPING_LIST",
            "LIVE_CARD_SPEEDDIAL_MISSING_CONTACT",
            "LIVE_CARD_SPEEDDIAL_PROMO_UNVERIFIED_USER",
            "LIVE_CARD_SPEEDDIAL_REMOVE_CONTACTS",
            "LIVE_CARD_SPEEDDIAL_SHOW_CONTACTS",
            "LIVE_CARD_REVIEW_SUMMARY",
            "LIVE_CARD_LINE_SETTINGS",
            "LIVE_CARD_LOCATE_DEVICE_NOTIFICATION_SETTINGS",
            "LIVE_CARD_APP_INTERACTION_SETTINGS",
            "SHARE_MEETING",
            "SHARE_MEETING_LIVE_CARD",
            "LINK_ZOOM",
            "CREATE_DUO_GROUP",
            "PRIVACY_ACTIONS",
            "LIVE_CARD_FAMILY_BELL",
            "LIVE_CARD_FAMILY_BELL_IOS",
            "FAMILY_BELL_RING",
            "FAMILY_BELL_GET_READY",
            "THIRD_PARTY_ORDER_STATUS_UPDATE",
            "THIRD_PARTY_ALERT",
            "THIRD_PARTY_SUBSCRIPTION",
            "THIRD_PARTY_SMART_DISPLAY_CARD",
            "PROFILE_GRANT_NOTIFICATION",
            "PROFILE_TELL_ME_MORE_NOTIFICATION",
            "HOME_AUTOMATION_DEVICE_NOTIFICATION",
            "CHANGE_DEFAULT_MEDIA_PROVIDER",
            "DOWNLOAD_NOT_INSTALLED_PROVIDER",
            "PROMOTE_PLAY_RADIO_ROUTINE",
            "MEDIA_CROSS_DEVICE_PROMOTION",
            "MEDIA_LINK_3P_PROVIDER_NOTIFICATION",
            "MEDIA_PREFERRED_PODCAST_PROVIDER_NOTIFICATION",
            "MEDIA_INITIATION",
            "VOICE_DELIGHT_DELAYED_ACTION",
            "WRAPPED_REMOTE_INTERACTION",
            "ASYNC_INTERACTION",
            "REENGAGEMENT_NOTIFICATION",
            "BLUE_GINGER_RESPONSE",
            "BLUE_GINGER_SURVEY",
            "SMARTHOME_DOORBELL",
            "SMARTHOME_ALARM",
            "SMARTHOME_ASYNCHRONOUS",
            "SMARTHOME_BROADCAST",
            "SMARTHOME_FOLLOW_UP",
            "SMARTHOME_PHONES",
            "COMMUNICATION_MISSED_CALL",
            "VUI_CONSENT_MISSING_DI",
            "VUI_CONSENT_MISSING_THIRD_PARTY_DISCLOSURE",
            "WEB_ANSWERS_NOTIFICATION",
            "PERSONAL_INTELLIGENCE_NOTIFICATION",
            "PERSONAL_INTELLIGENCE_LIVE_CARD",
            "LENS_REMINDER",
            "IQS_NOTIFICATION",
            "ASSISTANT_SURVEY",
            "ASSISTANT_SURVEY_IMPORTANCE_MIN",
            "ASSISTANT_SURVEY_PRIORITY_LOW",
            "WHEREABOUTS_CHECKIN",
            "TRAVEL_ASSISTANT_FLIGHT_CHECKIN",
            "DIALER_AUTH",
            "MODES_POI",
            "HEADY_CONCISE_ANSWERS_ATTRIBUTION",
            "HEADY_CONCISE_ANSWERS_EXPLORATION",
            "HEADY_ELENCHUS_ATTRIBUTION",
            "HEADY_ELENCHUS_EXPLORATION",
            "HEADY_GENERATED_ANSWERS_ATTRIBUTION",
            "HEADY_GENERATED_ANSWERS_EXPLORATION",
            "HEADY_INTERACTIVE_QUESTIONS_ATTRIBUTION",
            "HEADY_INTERACTIVE_QUESTIONS_EXPLORATION",
            "HEADY_KP_DESCRIPTION_ATTRIBUTION",
            "HEADY_KP_DESCRIPTION_EXPLORATION",
            "HEADY_READ_WEBANSWER_ATTRIBUTION",
            "HEADY_READ_WEBANSWER_EXPLORATION",
            "HEADY_SMART_PUNTS_WEBANSWERS",
            "HEADY_TELLMEMORE_ATTRIBUTION",
            "HEADY_TELLMEMORE_EXPLORATION",
            "HEADY_VOICE_SUGGESTIONS_ATTRIBUTION",
            "HEADY_VOICE_SUGGESTIONS_EXPLORATION",
            "HEADY_WEBANSWERS_LIST_ATTRIBUTION",
            "HEADY_WEBANSWERS_LIST_EXPLORATION",
            "COMMUNICATION_VIDEO_MESSAGE",
            "HEALTH_ASSISTANT_ADD_GOAL_PARTNER",
            "HEALTH_ASSISTANT_SUGGEST_GOAL_PARTNER",
            "HEALTH_ASSISTANT_EDUCATIONAL",
            "HEALTH_ASSISTANT_GOAL_REMINDER",
            "HEALTH_ASSISTANT_WEATHER_REMINDER",
            "HEALTH_ASSISTANT_GOAL_FOLLOWUP",
            "HEALTH_ASSISTANT_ORGANIZATIONAL",
            "HEALTH_ASSISTANT_WEEKLY_REPORT",
            "HEALTH_ASSISTANT_WEEKLY_FEEDBACK",
            "ASSISTANT_SPEAKERS_MOBILE_NOTIFICATION",
            "ASSISTANT_SPEAKERS_ACTION_RENDER_HARD",
            "ASSISTANT_SPEAKERS_CHURNOUT_ANSWER_OTHER",
            "ASSISTANT_SPEAKERS_CHURNOUT_DEVICE_MEDIA_CONTROL",
            "ASSISTANT_SPEAKERS_CHURNOUT_ALARM",
            "ASSISTANT_SPEAKERS_CHURNOUT_LIST",
            "ASSISTANT_SPEAKERS_CHURNOUT_PERSONALITY_CURATED_CONTENT",
            "ASSISTANT_SPEAKERS_ONBOARD",
            "ASSISTANT_SPEAKERS_ONBOARD_ANSWER",
            "ASSISTANT_SPEAKERS_ONBOARD_VOLUME_CONTROL",
            "ASSISTANT_SPEAKERS_ONBOARD_ALARM",
            "ASSISTANT_SPEAKERS_ONBOARD_LIST",
            "ASSISTANT_SPEAKERS_ONBOARD_JOKE",
            "ASSISTANT_SPEAKERS_ONBOARD_ACTION_RENDER",
            "ALARM_EXPIRATION",
            "SCREENLESS_WCYD_PERSONALIZED_SUGGESTION_EXPLANATION_LIVECARD",
            "FAMILY_SHARING",
            "SUPPORT_ARTICLE",
            "LOCKSCREEN_PERSONAL_RESULTS_SETTING",
            "ASSISTANT_ON_LOCKSCREEN_SETTING",
            "SKIP_VOICE_RECOGNITION_SETTING",
            "ASSISTANT_ON_LOCKSCREEN_SETTING_TNG",
            "MULTI_DEVICE_NOTIFICATION_FEEDBACK",
            "MULTI_DEVICE_FEEDBACK_CHIRP",
            "DRAGONGLASS_SPORT_MODULE",
            "DEVICES_PLATFORM",
            "DRAGONGLASS_CONCIERGE_CARD",
            "BLUE_STEEL_SETUP",
            "ZEROSTATE_VIP_BIRTHDAY",
            "ZEROSTATE_ANNIVERSARY",
            "ZEROSTATE_OWN_BIRTHDAY",
            "ZEROSTATE_VIP_BIRTHDAY_ONE_WEEK_BEFORE",
            "ZEROSTATE_VIP_BIRTHDAY_ONE_DAY_BEFORE",
            "ZEROSTATE_STARRED_CONTACT_BIRTHDAY_ONE_WEEK_BEFORE",
            "ZEROSTATE_STARRED_CONTACT_BIRTHDAY_ONE_DAY_BEFORE",
            "ZEROSTATE_OWN_BIRTHDAY_ONE_WEEK_BEFORE",
            "ZEROSTATE_OWN_BIRTHDAY_ONE_DAY_BEFORE",
            "ZEROSTATE_CALENDAR_ANNIVERSARY",
            "ZEROSTATE_CALENDAR_VIP_BIRTHDAY_ONE_WEEK_BEFORE",
            "ZEROSTATE_CALENDAR_VIP_BIRTHDAY_ONE_DAY_BEFORE",
            "ASSISTANT_FAMILY_READ_ALONG",
            "BEQUT",
            "ASSISTJS_ACTIONS_LINKS",
            "ZEROSTATE_INTEPRETER_DOWNLOAD_PACK",
            "PROACTIVE_API",
            "TRANSACTIONS_VOICE_MATCH_OPTIN",
            "TRANSACTIONS_VOICE_MATCH",
            "TRANSACTIONS_VOICE_MATCH_OPTIN_FOR_GAMES",
            "LIVE_CARD_XTALK",
            "DO_IT_AGAIN",
            "DO_IT_AGAIN_WEATHER",
            "DO_IT_AGAIN_GOOGLE_HOME",
            "DO_IT_AGAIN_FREQUENT_ACTIONS",
            "DO_IT_AGAIN_BOOSTED",
            "DO_IT_AGAIN_CROSS_DEVICE",
            "DO_IT_AGAIN_INITIAL",
            "DO_IT_AGAIN_CONFIRMATION",
            "SUBSCRIPTIONS_DO_IT_AGAIN",
            "CALENDAR_MEETING_MISSING_ROOM",
            "CALENDAR_NEWLY_ADDED_MEETING",
            "FOOD_REORDERING",
            "HEALTH_AND_FITNESS_MEDITATION",
            "HEALTH_AND_FITNESS_SLEEP_COACHING",
            "HEALTH_AND_FITNESS_WELLNESS_SETTING",
            "ZEROSTATE_ON_MY_WAY_HOME",
            "ZEROSTATE_ON_MY_WAY_HOME_DISCOVERY",
            "SMART_DISPLAY_WEB_URL_CLICK",
            "GEO_TRAFFIC_TO_PLACE",
            "GEO_TIME_TO_LEAVE",
            "GEO_TTL_CALENDAR_EVENT",
            "GEO_TTL_RESERVED_RESTAURANT",
            "GEO_TTL_RESERVED_SOCIAL_EVENT",
            "GEO_TTL_FLIGHT_PASSENGER_DEPARTURE",
            "GEO_TTL_FLIGHT_PASSENGER_DEPARTURE_RIDESHARE",
            "GEO_AAP_GROCERY_STORE",
            "GEO_AAP_BEAUTY_WELLNESS",
            "GEO_AAP_RESTAURANT",
            "GEO_AAP_TRANSIT",
            "GEO_AAP_APP_RECOMMENDATIONS",
            "GEO_AAP_HYBRID_HOTSEAT",
            "GEO_AAP_LANDMARK",
            "GEO_AAP_SHOPPING_CENTER",
            "GEO_AAP_HOTEL",
            "GEO_AAP_RESTAURANT_DEAL",
            "GEO_AAP_CHAIN_DEAL",
            "GEO_AAP_EXPERIMENT",
            "APP_ACTIONS_SHORTCUTS",
            "APP_ACTIONS_HEADSUP_NOTIFICATION",
            "APP_ACTIONS_PERSONAL_INVENTORY_NOTIFICATION",
            "WARM_WORDS_TRIGGERING_SURVEY",
            "PHOX_NEW_MOVIE_RECOMMENDATION",
            "PHOX_NEW_TASK_RECOMMENDATION",
            "GSA_NLS_PERMISSION",
            "UPDATE_STICKY_NOTES",
            "INDIAN_PREMIER_LEAGUE_PROMO_CAMPAIGN",
            "FELA_CAMPAIGN_INTRO",
            "FELA_CAMPAIGN_REENGAGEMENT",
            "FELA_CAMPAIGN_WON",
            "LOBBY_HIGHLIGHTS",
            "MORRIS_OOBE",
            "MORRIS_OOBE_FROM_GMM_OPT_IN",
            "MORRIS_OOBE_FROM_GMM_NOT_NOW",
            "MORRIS_DRIVING_SCREEN_OOBE_NEW_USER",
            "MORRIS_DRIVING_SCREEN_OOBE_ALL_PERMISSIONS",
            "MORRIS_DRIVING_SCREEN_OOBE_AR_PERMISSION",
            "MORRIS_DRIVING_SCREEN_OOBE_NA_PERMISSION",
            "MORRIS_DRIVING_SCREEN_OOBE_BT_PERMISSION",
            "MORRIS_DRIVING_SCREEN_AR",
            "MORRIS_DRIVING_SCREEN_BT",
            "MORRIS_MICRO",
            "AAE_ENABLE_CONTACT_UPLOAD_PERMISSION",
            "PHOX_OPTIN_DISCOVERABILITY",
            "VM_UPGRADE_PUNT",
            "INVITE_GUEST_USER",
            "FAMILY_NUDGE_SHARED_REMINDERS",
            "BIOGRAPHER_PROACTIVE",
            "ASPIRE_REMINDER",
            "ASPIRE_CONNECT",
            "ASPIRE_CELEBRATE",
            "PRIVACY_GROWTH",
            "LOCATE_DEVICE",
            "BIRTHDAY_COUNTDOWN",
            "PROACTIVE_RECIPES",
            "CUSTOM_PRONUNCIATION_CONTACT_NO_MATCH",
            "CUSTOM_PRONUNCIATION_CALL_HANG_UP",
            "AE_USER_ONBOARDING_NETFLIX",
            "AE_USER_ONBOARDING_ZOOM",
            "SNAPSHOT_MORNING_PROMO_CAMPAIGN",
            "PROACTIVE_API_WHAT_CAN_YOU_DO",
            "VOICE_ENROLLMENT_ON_DEVICE",
            "ENABLE_ACCOUNT_AGENDA_QUERIES",
            "CREATE_EVENT_EDUCATIONAL",
            "ZEROSTATE_CONVERSATION_STARTERS",
            "ZEROSTATE_REFRESH_MAGICAL",
            "UNUSED_DEVICE_CLEANUP",
            "REMOTE_VEHICLE_ACTION_SETUP_PROMOTION",
            "FAMILY_NUDGE_ELVIS",
            "AADC_MINOR_MOMENT",
            "PAYMENTS_SETTINGS",
            "SMARTSPACE_HOLIDAY_ALARMS",
            "CROSS_DEVICE_ALARM",
            "CROSS_DEVICE_TIMER",
            "CROSS_DEVICE_TIMER_FCM_PING",
            "MEMORY_AWARENESS",
            "MEMORY_SHORTCUT",
            "MEMORY_TAP_SAVE",
            "SHELDON_DISCLOSURE",
            "PROACTIVE_API_FASTTRACK",
            "PERSONAL_RESULTS_OPTIN",
            "HEADPHONE_PERSONAL_RESULTS_OPTIN",
            "UNIT_TESTING"
          ],
          "enumDescriptions": [
            "",
            "Support \"Send to device\" in assistant explore. See: go/assistant_explore_links_prd.",
            "Reminders.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This is deprecated. Use CROSS_SURFACE_TRANSACTIONS instead.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Smartspace notifications from the Assistant ZeroState.",
            "Notifications from the Narrative News feature.",
            "Notifications from broadcast feature. go/broadcast-design",
            "",
            "",
            "",
            "Notifications from Tell My Family feature. go/tell-my-family",
            "Notification to allow Family managers to allow guest use by deeplinking to assistant settings. go/tell-my-family-allow-guest-notification",
            "Notifications from Villager feature.",
            "Subscriptions-specific types.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notifications that are sent just before we cancel an unused subscription of the user. See http://go/automatically-cancel-assistant-subscriptions for more information.",
            "",
            "",
            "",
            "",
            "",
            "Interest-based notifications.",
            "If",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Pie notifications coming from various usecases.",
            "",
            "",
            "",
            "Notifications from the Routines feature.",
            "",
            "",
            "Notifications from the Scheduled Routines feature with Manifold.",
            "Notifications from the Location Based Routines Triggers feature.",
            "",
            "Notifications from Scheduled Routines on phone",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notifications from IFTTT.",
            "Live cards-specific types. Cards instructing the user to set up something in assistant-settings.",
            "Cards instructing the user to install assistant.",
            "Cards with terms of service / privacy policy which must be reviewed and acknowledged before continuing with the user's intent.",
            "Cards with terms and conditions that aren't explicitly requested by the user, but which provide additional information relevant to the user's intent.",
            "Cards with web answers to user questions.",
            "Cards with information about health conditions.",
            "Cards with news items.",
            "Cards for reserving hotels.",
            "Cards leading the user to Shopping settings.",
            "Cards leading the user to their Shopping carts.",
            "Cards with directions on Google Maps.",
            "Cards showing the source of some content.",
            "Cards representing all kinds of activities: go/agent-activity-api",
            "Cards instructing the user to link a 3P account for handoffs.",
            "Cards leading the user to complete digital purchases on their phones.",
            "Cards with answers to KP queries.",
            "Cards with bluelink sent by go/bluelink-tts.",
            "Cards instructing the user to retrain their voice model.",
            "Cards instructing the user to enable personal results.",
            "Cards and notifications instructing the user to enable the \"contact info from your devices\" account flag.",
            "A catch-all interaction type for live cards coming from Geppetto.",
            "A live card that takes users to google help pages.",
            "A live card that takes users to their shopping list.",
            "A live card that links to Assistant Settings lets user add missing contacts to speed dial.",
            "A live card that links to Assistant Settings lets user enable speed dial contacts, but with throttling (b/151226137, #6 in go/help-comm-punts).",
            "A live card that links to Assistant Settings lets user delete speed dial contacts.",
            "A live card that links to Assistant Settings lets user see the list of speed dial contacts.",
            "Cards for review summary response.",
            "Cards instructing the user to set up LINE settings for assistant interaction.",
            "Cards instructing the user to turn on notification settings for GHA app on iPhone so that they could use Assistant to find the phone.",
            "Cards for pointing users to the assistant app-integration settings.",
            "Notifications with meeting information.",
            "Cards with meeting information.",
            "Notifications with Zoom linking instructions.",
            "Cards for create duo group instruction.",
            "Privacy actions notifications",
            "Family Bell Live Card notifications",
            "Family Bell Live Card notifications specifically for iOS",
            "Notification to allow family bell to ring on mobile devices.",
            "Get Ready Bell Card notification for Smart Displays",
            "3P-specific notifications. Status updates for transactions.",
            "Alerts.",
            "Subscriptions.",
            "Cards (push notifications to smart displays).",
            "Notification resulted from user granting profile permission to 3P.",
            "Notification resulted from user ask \"tell me more\" about profile grant.",
            "Device notification for Home Automation: go/assistant-device-notifications.",
            "Notification sent to notify users to change default media provider in Assistant Settings. See go/change-dmp-dd for more details.",
            "",
            "",
            "Deprecated. Media specific notifications. Notification sent to promote Media Assistant on phones for existing Chirp/Jasper users. go/media-cross-device-promotion.",
            "Notification sent to notify users link their 3p music account in Assistant Settings. See go/media-notif-link-3p-account for more details.",
            "Notification sent to notify users to choose a preferred podcast provider in Assistant Settings. See b/159824581 for more details.",
            "",
            "A delayed action sent by voice delight.",
            "An interaction sent to a remote device using a PushMessage.",
            "An push message wrapping an interaction that's resulting from an asynchronous cloud execution. The resulting notification might have ui elements like buttons etc.",
            "Notifications for re-engagement.",
            "Notification sent when final answer ready for users' query on assistant.",
            "Notification sent to users some time after service to do a survey.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notification sent when the user missed a call on Dragonglass devices: go/missed-calls-on-jasper.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notification for HomeIntelligenceService(IQS) go/iqs-notification-sink",
            "",
            "Deprecated! use ASSISTANT_SURVEY_PRIORITY_LOW Similar to ASSISTANT_SURVEY but used by Android TV to set android_tv_importance to IMPORTANCE_MIN.",
            "Similar to ASSISTANT_SURVEY but used by Android TV to set android_tv_notification_priority to PRIORITY_LOW.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notifications from Health Assistant. See go/assistant-notifications-for-health-assistant-prd.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "lockscreen settings",
            "Notification for aol consent flow go/jit-notification-aol-permission-prd.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Birthday notifications from the Assistant ZeroState.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Interpreter download pack notifications from the Assistant ZeroState.",
            "",
            "Notifications from AoG Transactions",
            "Notifications from AoG Transactions placed using Voice Match.",
            "Notifications from AoG Transactions triggered when users complete playing 3P games.",
            "Cards showing the source of 3rd party content qouted in xTalk.",
            "Do-It-Again notifications.",
            "",
            "",
            "",
            "",
            "",
            "These Do It Again interaction types are deprecated and exist only because small portion of users is still receiving the notifications they have set up in a live experiment.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "On my way home notifications from the Assistant ZeroState.",
            "On my way home discovery notifications.",
            "",
            "Traffic to place notifications (commute driving) from Maps. PRD(go/ga-notifications-prd)",
            "Time to leave notifications from Maps. PRD(go/ga-notifications-prd)",
            "Calendar event time to leave notifications from Maps. PRD(go/ga-notifications-prd)",
            "Restaurant reservation Time to leave notifications from Maps. PRD(go/ga-notifications-prd)",
            "Restaurant reservation Time to leave notifications from Maps. PRD(go/ga-notifications-prd)",
            "Restaurant reservation Time to leave notifications from Maps. PRD(go/ga-notifications-prd)",
            "Flight departure Time to leave notification when \"Book a ride\" action button is triggered. This is same notification as GEO_TTL_FLIGHT_PASSENGER_DEPARTURE with the \"book a ride\" button as the only difference. PRD(go/airport-rideshare-prd)",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notifications of the App Actions team for creating a app shortcut.",
            "Notifications of the App Actions team to notify users about how to use the features of App Actions. PRD (go/app-integration-order-food) UX (go/app-integration-in-product-discovery)",
            "Notifications of the App Actions team to notify users about the use of their personal on device data. Design doc: go/personal-inventory-notification UX: go/icing-notification-demo",
            "Notification to get user feedback about warm words triggering.",
            "Notification for a new movie recommendation found in photos.",
            "Notification for a new task recommendation found in photos.",
            "Notification to request GsaNotificationListener permission.",
            "Notification to update the sticky notes cards on dragonglass.",
            "",
            "",
            "",
            "",
            "",
            "Notification to ask users to complete the Morris OOBE and use Morris in their next drive.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Notification to enable contact upload from paired device.",
            "",
            "",
            "",
            "",
            "Notification to promote Assistant memory.",
            "",
            "",
            "",
            "",
            "",
            "Notification for Birthday Countdown on DragonGlass.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AADC.",
            "",
            "",
            "",
            "",
            "Temporary solution for sending empty notification as FCM ping",
            "Memory/Stash go/memory-awareness-notification-prd",
            "",
            "",
            "Notification for legally-required disclosure of Sheldon project. go/sheldon-notification-prd.",
            "Notification configured through FastTrack UI: http://fasttrack.",
            "Notification for Personal Response (PR) opt-in: go/migrate-pr-notifs-tng-ma-prd",
            "Notification for Headphone Personal Response (HPR) opt-in: go/migrate-pr-notifs-tng-ma-prd",
            "NOTE: This should always stay at the bottom of the list."
          ],
          "type": "string"
        },
        "attachment": {
          "description": "OPTIONAL. Attachments associated with this Reminder. If the attachment has different behavior on different surfaces (e.g., deeplinks), specify multiple attachments here, and specify the surface types and links in the inner fields. There should be at most one attachment for each surface.",
          "items": {
            "$ref": "AssistantRemindersAttachment"
          },
          "type": "array"
        },
        "bareTitle": {
          "description": "OPTIONAL. Populated only for assignable reminders (E.g. \"buy milk\"). It will be used in the post-execution card-rendering. If not poulated, i.e. in non-assignable mode, caller should fallback to use $title.",
          "type": "string"
        },
        "clientId": {
          "description": "OPTIONAL. The reminders \"client\" id. This ID uniquely identifies a reminder instance and may be generated by any client that writes to our Reminder backend.",
          "type": "string"
        },
        "clientType": {
          "$ref": "QualityDialogManagerReminderClientType",
          "description": "REQUIRED. The type of this attachment. This is used for frontends (e.g., Hubpage) to customize UX. And also for customized VE logging."
        },
        "createTime": {
          "$ref": "AssistantApiDateTime",
          "description": "OPTIONAL. The create time of this reminder. This field is propagated only for the reminders fetched from backend. "
        },
        "createTimestamp": {
          "description": "OPTIONAL. The create time of this reminder. This field is propagated only only for the reminders fetched from backend.",
          "format": "google-datetime",
          "type": "string"
        },
        "creator": {
          "$ref": "QualityActionsReminderPerson",
          "description": "OPTIONAL. Creator of a reminder (owned by the current user). Used in shared reminder RUD operations."
        },
        "customizedNotificationCard": {
          "description": "OPTIONAL. Contains fields needed to build the customized notification card ",
          "items": {
            "$ref": "QualityActionsCustomizedNotification"
          },
          "type": "array"
        },
        "datetime": {
          "$ref": "AssistantApiDateTime",
          "description": "A representation of the Gregorian calendar date and timezone-relative time a reminder is scheduled for. This contains the date and time of either a single reminder or the upcoming instance of a recurring reminder."
        },
        "description": {
          "description": "OPTIONAL. Full-length description of the reminder.",
          "type": "string"
        },
        "documentAssignmentSource": {
          "$ref": "QualityActionsReminderDocument"
        },
        "dynamiteGroupAssignmentSource": {
          "$ref": "QualityActionsReminderDynamiteGroup"
        },
        "id": {
          "description": "DEPRECATED. Use `client_id` or `server_id` instead.",
          "type": "string"
        },
        "location": {
          "$ref": "QualityActionsReminderLocation"
        },
        "log": {
          "$ref": "AssistantLogsReminderLog",
          "description": "OPTIONAL. Associated logs to be plumbed through along with a reminder."
        },
        "memoryPayload": {
          "$ref": "AssistantRemindersMemoryPayload",
          "description": "OPTIONAL. Memory record payload which is associated with this reminder. This will be set for all Assistant reminders created after the first launch of the Reminder Memory integration, see go/reminders-memory for more details. Also, this might apply to all other types of reminders."
        },
        "notifying": {
          "description": "OPTIONAL. True if the reminder is notifying on the device that is making the request to the server.",
          "type": "boolean"
        },
        "personalReferenceMetadata": {
          "$ref": "CopleySourceTypeList",
          "description": "OPTIONAL. Populated if the reminder is based off of a personal reference, e.g. [my hotel] when the user has a hotel reservation. Contains the information needed for suggestion chip attribution, e.g. a link back to the email reservation."
        },
        "recipient": {
          "$ref": "QualityActionsReminderPerson",
          "description": "OPTIONAL. Recipient of a reminder (created by the current user). Used for shared reminder CRUD operations."
        },
        "recurrence": {
          "$ref": "QualityActionsReminderRecurrenceInfo"
        },
        "serverId": {
          "description": "OPTIONAL. The reminders backend \"server\" id. Only filled in some scenarios, e.g. to generate the reminders hubpage detailed-reminder view.",
          "type": "string"
        },
        "symbolicTime": {
          "enum": [
            "UNSET",
            "MORNING",
            "AFTERNOON",
            "EVENING",
            "NIGHT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "title": {
          "description": "REQUIRED. The main textual representation of the reminder with the final title. For assignable reminders, this would be e.g. \"From John: buy milk\".",
          "type": "string"
        },
        "updateTimestamp": {
          "description": "OPTIONAL. The last updated time of this reminder. This field is propagated only for the reminders fetched from ARIS (go/aris-dd).",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsReminderDocument": {
      "description": "Message representing a Document (i.e. Google Docs, Sheets, Slides) This is currently only used to indicate the existence of said document and can be later extended to include more document information as needed.",
      "id": "QualityActionsReminderDocument",
      "properties": {},
      "type": "object"
    },
    "QualityActionsReminderDynamiteGroup": {
      "description": "Message representing a Dynamite Group (AKA Google Chat space) This is currently only used to indicate the existence of said group and can be later extended to include more group information as needed.",
      "id": "QualityActionsReminderDynamiteGroup",
      "properties": {},
      "type": "object"
    },
    "QualityActionsReminderLocation": {
      "description": "A representation of reminder-triggering locations. They may be specific, resolved locations, non-specific location groups, or personal aliases. Next id: 12",
      "id": "QualityActionsReminderLocation",
      "properties": {
        "categoryInfo": {
          "$ref": "QualityActionsReminderLocationCategoryInfo"
        },
        "chainInfo": {
          "$ref": "QualityActionsReminderLocationChainInfo"
        },
        "customLocationType": {
          "description": "Optional additional information about the types of the custom location. This field is not stored in backend, and is only used to plumb NLP information to fulfillment UI.",
          "enum": [
            "UNKNOWN_TYPE",
            "BUSINESS",
            "PLACE",
            "ADDRESS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "displayAddress": {
          "description": "An address string that is suitable for displaying to the user in an application interface. It can be detailed, or brief. e.g. \"80 Absolute Ave, Unit 1708, Mississauga, ON\" e.g. \"151 Charles Street West\"",
          "type": "string"
        },
        "geoFeatureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Filled if location_type is CUSTOM and this is a resolved instance of a business (not for specific address locations)."
        },
        "lat": {
          "format": "double",
          "type": "number"
        },
        "lng": {
          "format": "double",
          "type": "number"
        },
        "locationType": {
          "enum": [
            "UNKNOWN",
            "HOME",
            "WORK",
            "CHAIN",
            "CATEGORICAL",
            "CUSTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "name": {
          "description": "Descriptive name, e.g. \"43rd st new york\", a user-edited place name (e.g. \"Gym\"), or a reverse geocoded business name. This can be any string.",
          "type": "string"
        },
        "personalLocationMetadata": {
          "$ref": "CopleySourceTypeList",
          "description": "Deprecated in favor of Reminder.personal_reference_metadata."
        },
        "ttsAddress": {
          "description": "A localized, shortened version of the address, suitable for TTS. This originates in the LocationFrame.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsReminderLocationCategoryInfo": {
      "description": "If LocationType is CATEGORICAL, this is info about the category. For example, the category \"Grocery Stores\" includes chains such as Safeway and Whole Foods.",
      "id": "QualityActionsReminderLocationCategoryInfo",
      "properties": {
        "displayName": {
          "description": "A (localized) display string describing the category. This is s generic string describing the category, and may be different than the term the user actually said, e.g. name: \"supermarket\", display_name: \"Grocery Stores\"",
          "type": "string"
        },
        "locationCategory": {
          "enum": [
            "UNKNOWN_CATEGORY",
            "GROCERY_STORES",
            "ELECTRONICS_STORES",
            "HARDWARE_STORES",
            "PET_STORES",
            "PHARMACIES",
            "SHOPPING_CENTERS",
            "SPORTING_GOODS_STORES",
            "TOY_STORES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsReminderLocationChainInfo": {
      "description": "If LocationType is CHAIN, this is info about the chain.",
      "id": "QualityActionsReminderLocationChainInfo",
      "properties": {
        "chainMid": {
          "description": "The freebase mid of the chain entity.",
          "type": "string"
        },
        "chainName": {
          "description": "The geostore.NameProto.text (corresponding to the user's language) at the time of reminder creation. In most cases, this is the same as name, but there may be corner cases where they differ, e.g. name: \"bestbuy\", chain_name: \"Best Buy\".",
          "type": "string"
        },
        "featureId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The (corporate entity) chain's MapFacts feature id."
        }
      },
      "type": "object"
    },
    "QualityActionsReminderPerson": {
      "description": "A representation of a person other than the current user, who may have created the reminder for the current user, or will receive it from them.",
      "id": "QualityActionsReminderPerson",
      "properties": {
        "displayName": {
          "description": "REQUIRED. Their full name, which will be shown/spoken when referring to this person informally, e.g. \"You have 2 reminders from Dave Smith.\"",
          "type": "string"
        },
        "emailAddress": {
          "description": "OPTIONAL. Their email address.",
          "type": "string"
        },
        "gaiaId": {
          "description": "REQUIRED. Their gaia id (used by the backend for CRUD operations).",
          "format": "int64",
          "type": "string"
        },
        "givenName": {
          "description": "REQUIRED. Their given name, which will be shown/spoken when referring to this person informally, e.g. \"You have 2 reminders from Dave.\"",
          "type": "string"
        },
        "photoUrl": {
          "description": "OPTIONAL. The URL of the photo. This field is read from photo field from go/people-api. Also see go/khdgk for URL formats. This field might be missing if user does not have photo URL available.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsReminderRecurrenceInfo": {
      "description": "Recurrence rule for specifying time-based repeating reminders.",
      "id": "QualityActionsReminderRecurrenceInfo",
      "properties": {
        "clientId": {
          "description": "OPTIONAL. Client-assigned-id for the recurring reminder",
          "type": "string"
        },
        "recurrence": {
          "$ref": "AssistantApiRecurrence",
          "description": "The recurrence pattern."
        },
        "recurrenceId": {
          "description": "An id which uniquely identifies a recurrence series. ",
          "type": "string"
        },
        "serverId": {
          "description": "REQUIRED. Server-assigned-id for the recurring reminder",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsRingtone": {
      "description": "Ringtone information used for the notification of timer and alarm.",
      "id": "QualityActionsRingtone",
      "properties": {
        "pauseDuration": {
          "$ref": "AssistantApiDuration",
          "description": "The delay between each two sounds."
        },
        "soundUrl": {
          "description": "The sound urls will be used to play.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityActionsRoom": {
      "description": "The room in which an alarm or timer resides",
      "id": "QualityActionsRoom",
      "properties": {
        "homegraphId": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityActionsTimer": {
      "description": "Conceptually, timers are clocks that count down from an initial duration and notify when they reach 0. In practice, as a timer is running, it holds a stable expiration time and computes the remaining duration using the current time. When a timer is paused, it holds a stable remaining duration.",
      "id": "QualityActionsTimer",
      "properties": {
        "creationTime": {
          "$ref": "AssistantApiTimestamp",
          "description": "The time when this timer was created"
        },
        "device": {
          "$ref": "AssistantApiSettingsDeviceSettings",
          "description": "Identifies the device this timer belongs to."
        },
        "expireTime": {
          "description": "When not paused: the time the timer is (or was) scheduled to expire, in milliseconds since the Unix epoch. This should be deprecated and replaced by the expire_timer_time with DateTime type once DateTime proto includes unix timestamp (b/63636831).",
          "format": "int64",
          "type": "string"
        },
        "expireTimerTime": {
          "$ref": "NlpSemanticParsingDatetimeDateTime",
          "description": "This is currently being only used only for the response generation when the user describe the expired datatime as a search constraint. We will used it for everything else once that for filtering once DateTime proto includes unix timestamp (b/63636831) and expire_time is deprecated."
        },
        "id": {
          "description": "A string key used as an identifier to this timer, unique for a given Provider.",
          "type": "string"
        },
        "label": {
          "description": "The label, provided by a user, associated with this timer.",
          "type": "string"
        },
        "lastUpdated": {
          "$ref": "AssistantApiTimestamp",
          "description": "The time when this timer was last updated (creation, paused, resumed, etc.)"
        },
        "originalDuration": {
          "description": "The duration of the timer when it was started, in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "originalTimerDuration": {
          "$ref": "NlpSemanticParsingDatetimeDuration",
          "description": "The duration set for the timer. The DateTimeModifier field is ignored. This field is currently only experimental until we switch the Dialog code and gramnar to the new format."
        },
        "provider": {
          "$ref": "AssistantApiCoreTypesProvider",
          "description": "The provider that owns this alarm. For Android, this includes the app that owns this alarm, where an intent should be sent to modify it."
        },
        "remainingDuration": {
          "description": "When PAUSED: the remaining duration in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "remainingTimerDuration": {
          "$ref": "NlpSemanticParsingDatetimeDuration",
          "description": "The duration remained for the timer. This is needed because there is no expiration date for paused timer. The DateTimeModifier field is ignored. This field is currently only experimental until we switch the Dialog code and gramnar to the new format."
        },
        "ringtone": {
          "$ref": "QualityActionsRingtone",
          "description": "The ringtone will be played when the timer fires, it will replace the beep sound if it is not empty."
        },
        "ringtoneTaskMetadata": {
          "$ref": "AssistantApiCoreTypesGovernedRingtoneTaskMetadata",
          "description": "Ringtone Task Metadata information used to generate sound for firing the timer."
        },
        "room": {
          "$ref": "QualityActionsRoom",
          "description": "Contains info about the room the timer is in"
        },
        "status": {
          "description": "The current status of the timer.",
          "enum": [
            "UNKNOWN_TIMER_STATUS",
            "RUNNING",
            "PAUSED",
            "EXPIRED",
            "RESET"
          ],
          "enumDescriptions": [
            "",
            "The timer is currently counting down.",
            "The timer is currently paused.",
            "The timer has expired (and has notified the user).",
            "The timer is paused at its initial duration (countdown_state is not set)."
          ],
          "type": "string"
        },
        "vibrate": {
          "description": "Whether or not the device will vibrate when the timer fires.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualityAuthorityTopicEmbeddingsVersionedItem": {
      "description": "Proto populated into shards and copied to superroot. Message storing a versioned TopicEmbeddings scores. This is copied from TopicEmbeddings in docjoins.",
      "id": "QualityAuthorityTopicEmbeddingsVersionedItem",
      "properties": {
        "pageEmbedding": {
          "format": "byte",
          "type": "string"
        },
        "siteEmbedding": {
          "description": "Compressed site/page embeddings.",
          "format": "byte",
          "type": "string"
        },
        "siteFocusScore": {
          "description": "Number denoting how much a site is focused on one topic.",
          "format": "float",
          "type": "number"
        },
        "siteRadius": {
          "description": "The measure of how far page_embeddings deviate from the site_embedding.",
          "format": "float",
          "type": "number"
        },
        "versionId": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsLink": {
      "id": "QualityCalypsoAppsLink",
      "properties": {
        "applicationId": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsUniversalAuLiveOpDetail": {
      "description": "Contains the needed information for serving a single LiveOp/LiveEvent on AU. Next ID: 9",
      "id": "QualityCalypsoAppsUniversalAuLiveOpDetail",
      "properties": {
        "countryLevelScheduleInformation": {
          "additionalProperties": {
            "$ref": "QualityCalypsoAppsUniversalAuLiveOpEvent"
          },
          "description": "Key is country, and value is the schedule information in that country.",
          "type": "object"
        },
        "defaultFormatInformation": {
          "$ref": "QualityCalypsoAppsUniversalAuLiveOpFormat",
          "description": "Fallback option for the LiveOp format. We will try en-US -> en -> any locale and get the first one that is available."
        },
        "defaultScheduleInformation": {
          "$ref": "QualityCalypsoAppsUniversalAuLiveOpEvent",
          "description": "Fallback option for the LiveOp event scheduling information. Will use earliest start time and last end time from PDC LiveOps data dump."
        },
        "eventId": {
          "description": "android",
          "type": "string"
        },
        "eventType": {
          "description": "[REQUIRED] type of live op event.",
          "enum": [
            "TYPE_UNKNOWN",
            "MAJOR_UPDATE",
            "SALE",
            "EVENT",
            "CROSSOVER",
            "PRE_REG_UPDATE",
            "LOYALTY",
            "FIRST_PARTY_PROMOTION",
            "AUTO_GENERATED_SALE",
            "NEW_RELEASE",
            "IAP_SKU_SALE",
            "OFFER",
            "IAP_SKU_DEALS",
            "FEATURED_PRODUCTS"
          ],
          "enumDescriptions": [
            "",
            "Major Update - An update which introduces major changes.",
            "Sale - Time limited discount.",
            "Event - A time limited event available in the game or app.",
            "Crossover, also known as IP collaboration in JP - This is an event involving a collaboration IP.",
            "Pre-registration update - announcement for pre-reg apps. Note that this maps to a subtype of Major Update in the Play Console UI.",
            "Loyalty LiveOps event. E.g. special points earn promotion etc.",
            "First party promotions funded by Play.",
            "Sale events auto-generated by Play for apps on sale, rather than a sale event as declared through PDC.",
            "Events for major new app releases. Auto-generated by the recommendations backend.",
            "Sale events generated by sku config, rather than a sale event as declared through PDC.",
            "Offer - see offer types below for the types. go/liveops-config-deals",
            "Out-of-app purchasable in-app promotions funded by Play.",
            "Out-of-app purchasable in-app products, configured by developers through Play Console. go/store-content-featured_product-prd go/featured-in-app-products-pc-dd, go/featured-products-serving-dd"
          ],
          "type": "string"
        },
        "eventUrl": {
          "description": "ios",
          "type": "string"
        },
        "localeLevelFormatInformation": {
          "additionalProperties": {
            "$ref": "QualityCalypsoAppsUniversalAuLiveOpFormat"
          },
          "description": "Key is locale, and value is the format information for that locale.",
          "type": "object"
        },
        "priority": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsUniversalAuLiveOpEvent": {
      "description": "Contains the schedule for a single live-op event. Next ID: 4",
      "id": "QualityCalypsoAppsUniversalAuLiveOpEvent",
      "properties": {
        "endTimestampMillis": {
          "description": "[REQUIRED] End time in UTC for the live-op event.",
          "format": "int64",
          "type": "string"
        },
        "previewTimestampMillis": {
          "description": "If specified, a live-op event must be shown only after this preview-time (in UTC). Otherwise, the event can be shown at any time as long as its before the end time.",
          "format": "int64",
          "type": "string"
        },
        "startTimestampMillis": {
          "description": "[REQUIRED] Start time in UTC for the live-op event.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsUniversalAuLiveOpFormat": {
      "description": "Contains the format information for a single LiveOp/LiveEvent. Next ID: 11",
      "id": "QualityCalypsoAppsUniversalAuLiveOpFormat",
      "properties": {
        "deeplink": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "eyebrow": {
          "description": "iOS only, kind of event type",
          "type": "string"
        },
        "imageUrl": {
          "type": "string"
        },
        "originalImageUrl": {
          "type": "string"
        },
        "squareImageUrl": {
          "type": "string"
        },
        "status": {
          "description": "iOS only, sort of start schedule",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "videoId": {
          "type": "string"
        },
        "videoUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsUniversalAuLiveOpsDetailInfo": {
      "description": "Stores all possible LiveOps/LiveEvents that are eligible to be shown for an app.",
      "id": "QualityCalypsoAppsUniversalAuLiveOpsDetailInfo",
      "properties": {
        "liveOpEvents": {
          "items": {
            "$ref": "QualityCalypsoAppsUniversalAuLiveOpDetail"
          },
          "type": "array"
        },
        "packageName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsUniversalImage": {
      "id": "QualityCalypsoAppsUniversalImage",
      "properties": {
        "fifeUrl": {
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityCalypsoAppsUniversalImageData": {
      "id": "QualityCalypsoAppsUniversalImageData",
      "properties": {
        "enhancedImage": {
          "$ref": "QualityCalypsoAppsUniversalImage",
          "description": "iOS cover image, which includes the uni image from UAM only."
        },
        "featureGraphic": {
          "$ref": "QualityCalypsoAppsUniversalImage",
          "description": "aka. promotional image / cover image."
        },
        "screenshot": {
          "items": {
            "$ref": "QualityCalypsoAppsUniversalImage"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityCopiaFireflySiteSignal": {
      "description": "Proto message containing site-level signal for search stack. Because firefly_stats.proto depends on \"//segindexer:compositedoc_proto\", we cannot make perdocdata contain it.",
      "id": "QualityCopiaFireflySiteSignal",
      "properties": {
        "dailyClicks": {
          "format": "int64",
          "type": "string"
        },
        "dailyGoodClicks": {
          "format": "int64",
          "type": "string"
        },
        "dataTimeSec": {
          "format": "int64",
          "type": "string"
        },
        "firstBoostedTimeSec": {
          "format": "int64",
          "type": "string"
        },
        "impressionsInBoostedPeriod": {
          "format": "int64",
          "type": "string"
        },
        "latestBylineDateSec": {
          "format": "int64",
          "type": "string"
        },
        "latestFirstseenSec": {
          "format": "int64",
          "type": "string"
        },
        "numOfArticles8": {
          "format": "int64",
          "type": "string"
        },
        "numOfArticlesByPeriods": {
          "description": "number of articles (lattice article score is 0.8 or more) sliced by 30 days (num_of_articles_by_periods[0] is the newest).",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "numOfGamblingPages": {
          "format": "int64",
          "type": "string"
        },
        "numOfUrls": {
          "format": "int64",
          "type": "string"
        },
        "numOfUrlsByPeriods": {
          "description": "number of urls sliced by 30 days (num_of_urls_by_periods[0] is the newest).",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "recentImpForQuotaSystem": {
          "format": "int64",
          "type": "string"
        },
        "siteFp": {
          "description": "Hash value of the site. This will be used by our experiment and analysis.",
          "format": "uint64",
          "type": "string"
        },
        "totalImpressions": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityDialogManagerExternalIds": {
      "description": "Various external IDs that we may have for a given LocalResult. These IDs can map to the corresponding result in other Google systems (KnowledgeGraph) or in third-party systems (OpenTable).",
      "id": "QualityDialogManagerExternalIds",
      "properties": {
        "blueGingerSupportedServices": {
          "$ref": "BlueGingerClientVisibleProtoBlueGingerSupportedServices",
          "description": "This field tells us whether this LocalResult supports any of the services that Blue Ginger offers."
        },
        "knowledgeGraphMid": {
          "type": "string"
        },
        "maddenSupportedActions": {
          "$ref": "GeoOndemandAssistantSupportedActions",
          "description": "Google-internal actions supported by go/madden for this LocalResult."
        },
        "openTableRestaurantId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityDialogManagerLocalIntentOptions": {
      "id": "QualityDialogManagerLocalIntentOptions",
      "properties": {
        "intent": {
          "description": "LINT.ThenChange( //depot/google3/googledata/nlp/generation/messages/assistant/\\ dialog_LOCAL_LocalAssistantSchema/\\ dialog.LOCAL.LocalAssistantSchema_zxx.genx.textpb, //depot/google3/quality/dialog_manager/verticals/local/assistant/\\ suggestion_chip_util.cc)",
          "items": {
            "enum": [
              "UNKNOWN",
              "ADDRESS",
              "CALL",
              "DIRECTIONS",
              "HOURS",
              "INTERNAL_FOOD_ORDERING",
              "NEXT",
              "MENU",
              "PHONE_NUMBER",
              "RESERVATIONS"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityDialogManagerLocalResult": {
      "description": "A generic representation of a local result returned by a local backend. Next ID: 33",
      "id": "QualityDialogManagerLocalResult",
      "properties": {
        "adminArea1": {
          "description": "This field can represent different areas depending on the country. For example in the US it is state but in Canada it would be a province.",
          "type": "string"
        },
        "availableIntents": {
          "$ref": "QualityDialogManagerLocalIntentOptions",
          "description": "The set of available intents changes with result. An intersection of available_intents and allowed_intents (See: local_config.proto), is shown to the user."
        },
        "businessType": {
          "$ref": "NlpSemanticParsingLocalBusinessType",
          "description": "Bitset of business types this result falls into. Many fields in this message may be unset - expect good coverage for restaurants and hotels for now, but not for other verticals."
        },
        "country": {
          "type": "string"
        },
        "countryCode": {
          "description": "The two-letter ISO 3166-1 country code of this result. Generated by FindFeatureCountryCode http://google3/geostore/base/public/country.h?l=39&rcl=154898119 so it should always be populated, but technically there is no guarantee.",
          "type": "string"
        },
        "distanceMeters": {
          "description": "For a directions result, this field will be the distance from the origin to this result using the best measure we have available - the distance along a route, if we have one, or just the crow's flight distance. For a local result, this field will be the crow's flight distance from the user to the result.",
          "format": "uint64",
          "type": "string"
        },
        "distanceUnits": {
          "description": "The standard units of the location where the user is based (not their current location). For example, miles for a user from the US, kilometers for the UK. A US user currently in the UK should have units read in miles.",
          "enum": [
            "UNIT_UNKNOWN",
            "UNIT_NONE",
            "UNIT_DEGREES",
            "UNIT_DEGREES_CELSIUS",
            "UNIT_DEGREES_FAHRENHEIT",
            "UNIT_DEGREES_KELVIN",
            "UNIT_MILLISECONDS",
            "UNIT_SECONDS",
            "UNIT_MINUTES",
            "UNIT_HOURS",
            "UNIT_DAYS",
            "UNIT_MILLIMETERS",
            "UNIT_CENTIMETERS",
            "UNIT_METERS",
            "UNIT_YARDS",
            "UNIT_KILOMETERS",
            "UNIT_MILES",
            "UNIT_SCANDINAVIAN_MILES",
            "UNIT_METERS_PER_SECOND",
            "UNIT_KILOMETERS_PER_HOUR",
            "UNIT_MILES_PER_HOUR",
            "UNIT_PERCENT",
            "UNIT_FEET",
            "UNIT_INCHES",
            "UNIT_HOURS_MINUTES_SECONDS",
            "UNIT_HOURS_MINUTES",
            "UNIT_SPORTS_SCORE",
            "UNIT_WEEKS",
            "UNIT_MONTHS",
            "UNIT_YEARS",
            "UNIT_CALORIES",
            "UNIT_DAYS_HOURS_MINUTES_SECONDS",
            "UNIT_WEEKS_DAYS_HOURS_MINUTES_SECONDS",
            "UNIT_ACRES",
            "UNIT_SQUARE_MILES",
            "UNIT_HECTARES",
            "UNIT_SQUARE_KILOMETERS",
            "UNIT_SQUARE_CENTIMETERS",
            "UNIT_BAR",
            "UNIT_KILOPASCAL",
            "UNIT_PSI",
            "UNIT_POUND",
            "UNIT_KILOGRAM",
            "UNIT_SHORT_TON",
            "UNIT_LONG_TON",
            "UNIT_METRIC_TON",
            "UNIT_OUNCE",
            "UNIT_GRAM"
          ],
          "enumDescriptions": [
            "",
            "for scalar values",
            "Temperature: \"unqualified degrees\", needed by GenX.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "US Mile",
            "Scandinavian Mile, only supported for Scandinavian languages, through the measurement library (not through code).",
            "",
            "",
            "US Mile/hour",
            "",
            "",
            "",
            "Compound unit that expresses a temporal duration in hours, minutes, and seconds. Used in conjunction with numeric_value expressed in seconds. Examples: numeric_value = 1 \"one second\" numeric_value = 2 \"two seconds\" numeric_value = 30 \"thirty seconds\" numeric_value = 59 \"fifty-nine seconds\" numeric_value = 60 \"one minute\" numeric_value = 61 \"one minute and one second\" numeric_value = 119 \"one minute and fifty-nine seconds\" numeric_value = 120 \"two minutes\" numeric_value = 121 \"two minute and one second\" numeric_value = 3599 \"fifty-nine minutes and fifty-nine seconds\" numeric_value = 3600 \"one hour\" numeric_value = 3601 \"one hour and one second\"",
            "Compound unit that expresses a temporal duration in hours and minutes. seconds. Used in conjunction with numeric_value expressed in minutes. Examples: numeric_value = 1 \"one minute\" numeric_value = 2 \"two minutes\" numeric_value = 30 \"thirty minutes\" numeric_value = 59 \"fifty-nine minutes\" numeric_value = 60 \"one hour\" numeric_value = 61 \"one hour one minute\" numeric_value = 119 \"one hour fifty-nine minutes\" numeric_value = 120 \"two hours\" numeric_value = 121 \"two hours one minute\" numeric_value = 3599 \"fifty-nine hours fifty-nine minutes\"\"",
            "Sports scores are generally just numbers, but sometimes these numbers need to be expressed in a certain format (for example, \"nil\" instead of \"zero\" for GB locales in EN). This unit allows this specialization, but otherwise acts as UNIT_NONE in practice.",
            "",
            "",
            "",
            "kCal (i.e. Big Calorie)",
            "Similar to UNIT_HOURS_MINUTES_SECONDS, but with more headroom.",
            "",
            "",
            "",
            "",
            "Surface areas.",
            "",
            "Pressure",
            "",
            "",
            "Mass",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "externalIds": {
          "$ref": "QualityDialogManagerExternalIds",
          "description": "Various external IDs that we may have for this result."
        },
        "featureType": {
          "enum": [
            "UNKNOWN_TYPE",
            "ESTABLISHMENT",
            "GEOCODE_ADDRESS",
            "GEOCODE_INTERSECTION",
            "GEOCODE_ROUTE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "inUserAdminArea1": {
          "description": "If true, this LocalResult is located in the same state as the user's location.",
          "type": "boolean"
        },
        "inUserCountry": {
          "description": "If true, this LocalResult is located in the same country as the user's location.",
          "type": "boolean"
        },
        "inUserLocality": {
          "description": "Whether this result is in the same city or town that the user is in.",
          "type": "boolean"
        },
        "internalFoodOrderingMetadata": {
          "$ref": "LocalsearchProtoInternalFoodOrderingActionMetadata",
          "description": "Internal Food ordering action (i.e food ordering via Google) metadata."
        },
        "isBusinessChain": {
          "description": "If the original query had a chain intent, and this result is for a business chain.",
          "type": "boolean"
        },
        "locality": {
          "description": "City/Town.",
          "type": "string"
        },
        "name": {
          "description": "The name of the result, extracted from its FeatureProto's name field.",
          "type": "string"
        },
        "neighborhood": {
          "description": "Neighborhood within a city. This field is not likely to be set for towns or smaller cities.",
          "type": "string"
        },
        "resultId": {
          "$ref": "NlpSemanticParsingLocalLocalResultId",
          "description": "All info we will need to lookup this result in search."
        },
        "streetName": {
          "type": "string"
        },
        "streetNumber": {
          "type": "string"
        },
        "synonym": {
          "description": "A list of text synonyms the user could use to refer to the result.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ttsAddress": {
          "description": "The address of this result formatted for TTS output. This formatting removes acronyms like 2-letter state codes as they cannot be spoken well.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityDialogManagerReminderClientType": {
      "description": "Define Reminder Client Type. This field is for the purposes of 1) UX Customization: Reminder frontends can be configured to have a slightly different UX (e.g., A customized button on Hubpage. A customized notification layout.) 2) Metrics: Client can count how many Reminders with a certain client type are retrieved/mutated. (e.g., VEIDs in go/oparaw.) 3) Index: ListReminder can list all Reminders with a certain client type. 4) Visibility control: some frontends (identified by provenance type, shortn/_xVC9nY2Eb8) only have access to a subset of client types.",
      "id": "QualityDialogManagerReminderClientType",
      "properties": {
        "type": {
          "enum": [
            "UNSPECIFIED",
            "ASSISTANT",
            "FORESIGHT",
            "FORESIGHT_TAP_TO_PAYLOAD",
            "NBA_ALL_STAR_VOTING",
            "FORESIGHT_LONG_ANSWER",
            "FORESIGHT_WHEN_IS",
            "FORESIGHT_PORKY_PIG",
            "NOTES_AND_LISTS_SUGGESTION_CHIP",
            "FAMILY_NOTES",
            "PEOPLE_INTELLIGENCE"
          ],
          "enumDescriptions": [
            "",
            "A regular Assistant Reminder.",
            "DEPRECATED. Foresight on WebAnswers callouts with a notification that leads to the Reminders Hub.",
            "Foresight on WebAnswers callouts with a notification that leads to the Search payload (go/foresight-reminders-callout-launch-report).",
            "",
            "",
            "",
            "",
            "",
            "",
            "People Intelligence reminders (go/cr-full)"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityDniDocPreviewRestrictions": {
      "description": "Set of per-document markup restrictions based on go/eucd-indexing-design. Used for EUCD and global preview compliance. Next ID: 17",
      "id": "QualityDniDocPreviewRestrictions",
      "properties": {
        "bylineDateSecs": {
          "description": "Publish date set by webmaster. See detailed description here: http://shortn/_1eC0zzjR7k. Note that this will currently only be set for canonical documents where byline date could be extracted.",
          "format": "int64",
          "type": "string"
        },
        "crawlTsUsec": {
          "description": "The time that the info in this attachment was computed during crawl, in microseconds.",
          "format": "int64",
          "type": "string"
        },
        "extendedNewsPreviewsDomain": {
          "$ref": "QualityDniExtendedNewsPreviews",
          "description": "Whether this document comes from a domain that is affected by Extended News Previews (ENP) and its status (approved/rejected)."
        },
        "faviconDisplay": {
          "description": "Whether the favicon for a given domain should be displayed. FAVICON_DISPLAY_UNSPECIFIED - Display the favicon DISABLE_FAVICON - the favicon should not be rendered by the feature",
          "enum": [
            "FAVICON_DISPLAY_UNSPECIFIED",
            "DISABLE_FAVICON"
          ],
          "enumDescriptions": [
            "Not specified, no preview policy-related restrictions apply (but other restrictions like Fair Use still do). go/protodosdonts#do-include-an-unspecified-value-in-an-enum",
            "Do not display the Favicon for the domain."
          ],
          "type": "string"
        },
        "firstseenDateSecs": {
          "description": "Firstseen date populated by indexing. It works as fallback to byline_date if it doesn't exist. Note that this will currently only be set for canonical documents where firstseen date could be populated.",
          "format": "int32",
          "type": "integer"
        },
        "isAmp": {
          "description": "Only be true when the page itself is an AMP page. For paired AMP, the canonical page will have this bit as false.",
          "type": "boolean"
        },
        "isEucdDomain": {
          "type": "boolean"
        },
        "maxSnippetLength": {
          "description": "The max number of snippet characters allowed. Based on document markup. No limit if value is less than 0, Google could use any length of snippets. Default value 0 is the strictest restriction, to avoid violating mistakenly If not set, there is no snippet length policy to enforce. Features must first check has_max_snippet_length to avoid applying an overly strict policy.",
          "format": "int32",
          "type": "integer"
        },
        "maxSnippetLengthFromPublisher": {
          "description": "Same as the max_snippet_length, max_thumbnail_size, max_video_preview_secs listed above. But values are based on publisher's preferences from Search Console's robots meta tag tool.",
          "format": "int32",
          "type": "integer"
        },
        "maxSnippetLengthPublisherDefault": {
          "format": "int32",
          "type": "integer"
        },
        "maxThumbnailSize": {
          "description": "The max thumbnail size allowed. Based on document markup Default value NONE is the strictest restriction, to avoid violating mistakenly. If not set, there is no thumbnail policy to enforce.",
          "enum": [
            "THUMBNAIL_UNSPECIFIED",
            "NONE",
            "STANDARD",
            "LARGE"
          ],
          "enumDescriptions": [
            "Not specified, no preview policy-related restrictions apply (but other restrictions like Fair Use still do).",
            "Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels."
          ],
          "type": "string"
        },
        "maxThumbnailSizeFromPublisher": {
          "enum": [
            "THUMBNAIL_UNSPECIFIED",
            "NONE",
            "STANDARD",
            "LARGE"
          ],
          "enumDescriptions": [
            "Not specified, no preview policy-related restrictions apply (but other restrictions like Fair Use still do).",
            "Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels."
          ],
          "type": "string"
        },
        "maxThumbnailSizePublisherDefault": {
          "format": "int32",
          "type": "integer"
        },
        "maxVideoPreviewSecs": {
          "description": "The max seconds of video preview allowed. Based on document markup. No limit if value is less than 0, Google could show any seconds of video. Default value 0 is the strictest restriction, to avoid violating mistakenly If not set, there is no preview length policy to enforce. Features must first check has_max_video_preview_secs to avoid applying an overly strict policy.",
          "format": "int32",
          "type": "integer"
        },
        "maxVideoPreviewSecsFromPublisher": {
          "format": "int32",
          "type": "integer"
        },
        "maxVideoPreviewSecsPublisherDefault": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityDniExtendedNewsPreviews": {
      "description": "When making changes to this proto, make sure to run: blaze test commerce/datastore/tools/codegen:code_generator_test blaze run commerce/datastore/tools/codegen:code_generator See http://go/cds-schema-council for details. LINT.IfChange",
      "id": "QualityDniExtendedNewsPreviews",
      "properties": {
        "countryCode": {
          "description": "Publisher's country code (ISO-3166) Used in V0.",
          "enum": [
            "UNKNOWN_TWO_CHARACTER_COUNTRY_CODE",
            "AD",
            "AE",
            "AF",
            "AG",
            "AI",
            "AL",
            "AM",
            "AN",
            "AO",
            "AQ",
            "AR",
            "AS",
            "AT",
            "AU",
            "AW",
            "AX",
            "AZ",
            "BA",
            "BB",
            "BD",
            "BE",
            "BF",
            "BG",
            "BH",
            "BI",
            "BJ",
            "BL",
            "BM",
            "BN",
            "BO",
            "BQ",
            "BR",
            "BS",
            "BT",
            "BV",
            "BW",
            "BY",
            "BZ",
            "CA",
            "CC",
            "CD",
            "CF",
            "CG",
            "CH",
            "CI",
            "CK",
            "CL",
            "CM",
            "CN",
            "CO",
            "CR",
            "CS",
            "CU",
            "CV",
            "CW",
            "CX",
            "CY",
            "CZ",
            "DE",
            "DJ",
            "DK",
            "DM",
            "DO",
            "DZ",
            "EC",
            "EE",
            "EG",
            "EH",
            "ER",
            "ES",
            "ET",
            "EU",
            "FI",
            "FJ",
            "FK",
            "FM",
            "FO",
            "FR",
            "FX",
            "GA",
            "GB",
            "GD",
            "GE",
            "GF",
            "GG",
            "GH",
            "GI",
            "GL",
            "GM",
            "GN",
            "GP",
            "GQ",
            "GR",
            "GS",
            "GT",
            "GU",
            "GW",
            "GY",
            "HK",
            "HM",
            "HN",
            "HR",
            "HT",
            "HU",
            "ID",
            "IE",
            "IL",
            "IM",
            "IN",
            "IO",
            "IQ",
            "IR",
            "IS",
            "IT",
            "JE",
            "JM",
            "JO",
            "JP",
            "KE",
            "KG",
            "KH",
            "KI",
            "KM",
            "KN",
            "KP",
            "KR",
            "KW",
            "KY",
            "KZ",
            "LA",
            "LB",
            "LC",
            "LI",
            "LK",
            "LR",
            "LS",
            "LT",
            "LU",
            "LV",
            "LY",
            "MA",
            "MC",
            "MD",
            "ME",
            "MF",
            "MG",
            "MH",
            "MK",
            "ML",
            "MM",
            "MN",
            "MO",
            "MP",
            "MQ",
            "MR",
            "MS",
            "MT",
            "MU",
            "MV",
            "MW",
            "MX",
            "MY",
            "MZ",
            "NA",
            "NC",
            "NE",
            "NF",
            "NG",
            "NI",
            "NL",
            "NO",
            "NP",
            "NR",
            "NU",
            "NZ",
            "OM",
            "PA",
            "PE",
            "PF",
            "PG",
            "PH",
            "PK",
            "PL",
            "PM",
            "PN",
            "PR",
            "PS",
            "PT",
            "PW",
            "PY",
            "QA",
            "RE",
            "RO",
            "RS",
            "RU",
            "RW",
            "SA",
            "SB",
            "SC",
            "SD",
            "SE",
            "SG",
            "SH",
            "SI",
            "SJ",
            "SK",
            "SL",
            "SM",
            "SN",
            "SO",
            "SR",
            "SS",
            "ST",
            "SV",
            "SX",
            "SY",
            "SZ",
            "TC",
            "TD",
            "TF",
            "TG",
            "TH",
            "TJ",
            "TK",
            "TL",
            "TM",
            "TN",
            "TO",
            "TR",
            "TT",
            "TV",
            "TW",
            "TZ",
            "UA",
            "UG",
            "UK",
            "UM",
            "US",
            "UY",
            "UZ",
            "VA",
            "VC",
            "VE",
            "VG",
            "VI",
            "VN",
            "VU",
            "WF",
            "WS",
            "YE",
            "YT",
            "YU",
            "ZA",
            "ZM",
            "ZW",
            "ZZ",
            "NORDICS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "desnippetedCountryCode": {
          "description": "List of countries that desnippet the publisher. ISO 3166-1-alpha-2 country code (such as FR). See go/iiuse#region-identifiers. Used in V1.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "policyCriteriaBase64": {
          "description": "Search Console Signals that modifies how policy are calculated. Didn't add `wmconsole.EnpDesnippetingOverrideRules` direcly to avoid cicular dependency issue: go/enp-v2#bookmark=id.dvb1qcltabv9 ENPv2 proto (EnpDesnippetingOverrideRules): google3/crawler/wmconsole/proto/config_enp_desnippeting_override_rules.proto",
          "type": "string"
        },
        "status": {
          "description": "ENP status.",
          "enum": [
            "STATUS_UNSPECIFIED",
            "GOOGLE_DEFAULT",
            "DEPRECATED_DO_NOT_USE_SHOW_SNIPPET_5",
            "ENP_REJECTED",
            "DEPRECATED_DO_NOT_USE_DESNIPPET_6",
            "INELIGIBLE_DOMAIN",
            "QA_DESNIPPET",
            "SHOW_SNIPPET",
            "DESNIPPET"
          ],
          "enumDescriptions": [
            "go/protodosdonts#do-include-an-unspecified-value-in-an-enum",
            "ENP accepted or pending state, no preview restrictions and can be overridden by robots meta-tag. Deprecation note: has been replaced for V1's `SHOW_SNIPPET` status",
            "Reserving old value to make F1 schema happy.",
            "Publisher rejected ENP - no snippets, no markup override. Deprecation note: has been replaced for V1's `DESNIPPET` status",
            "Reserving old value to make F1 schema happy.",
            "Domain not found in the list. Not eligible for more processing. This could behave in the same manner as the GOOGLE_DEFAULT option, but allows for separation of assumptions if need be. Deprecation note: check for status code `kNotFound` to avoid creating an ENP proto when is not needed.",
            "This state is only used for QA/testing purposes. Deprecation node: testing phase is over. Do not use.",
            "Similar to GOOGLE_DEFAULT - used in V1.",
            "Similar to ENP_REJECTED - used in V1."
          ],
          "type": "string"
        },
        "version": {
          "description": "The default version is V0 (for backward compatibility).",
          "enum": [
            "VERSION_UNSPECIFIED",
            "V0",
            "V1",
            "V2"
          ],
          "enumDescriptions": [
            "go/protodosdonts#do-include-an-unspecified-value-in-an-enum",
            "The fields that will be used: status and country_code. go/enp-v0",
            "The fields that will be used: status and desnippeted_country_code go/enp-v1",
            "go/enp-v2"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityFringeFringeQueryPriorPerDocData": {
      "description": "PerDocData for fringe-query-prior (built into the shards for eventual consumption at Fringe classification time). Not stored in DocJoins. NEXT ID: 11",
      "id": "QualityFringeFringeQueryPriorPerDocData",
      "properties": {
        "encodedCalibratedFringeSitePriorScore": {
          "format": "uint32",
          "type": "integer"
        },
        "encodedChardXlqHoaxPrediction": {
          "description": "An encoding of the Chard XLQ-hoax prediction in [0,1].",
          "format": "uint32",
          "type": "integer"
        },
        "encodedChardXlqYmylPrediction": {
          "description": "An encoding of the Chard XLQ-YMYL prediction in [0,1].",
          "format": "uint32",
          "type": "integer"
        },
        "encodedDocumentFringeVulnerability": {
          "description": "An estimate of the vulnerability of this doc to show fringe content, based on the context around the document. Can be interpreted as a 'safe' QScore threshold to use (see go/doc-fringe-vulnerability for more info). Encoded for compactness and to restrict visibility. Please contact fringe-ranking@ to get access to quality_fringe::DocumentFringeVulnerabilityEncoding to decode this field.",
          "format": "uint32",
          "type": "integer"
        },
        "encodedEntityPriorScore": {
          "description": "Highest entity prior seen for document's Headline and SingleTopic entities (see go/topicality-score for definitions of entity topicalities). Represents probability that a query is fringe, given that the entity is in the result set with topicality >= Headline. Scores scaled to integers between 0 and 1000 for compactness. Scores must be interpreted through FringeQueryPriorEncoding::Decode API.",
          "format": "uint32",
          "type": "integer"
        },
        "encodedFringePriorScore": {
          "description": "Probability that a query is fringe, given this document is in the result set. Scores scaled to integers between 0 and 1000 for compactness. Scores must be interpreted through FringeQueryPriorEncoding::Decode API.",
          "format": "uint32",
          "type": "integer"
        },
        "encodedFringeSitePriorScore": {
          "description": "Probability that a query is fringe, given this document's site is in the result set. Scores scaled to integers between 0 and 1000 for compactness. Scores must be interpreted through FringeQueryPriorEncoding::Decode API.",
          "format": "uint32",
          "type": "integer"
        },
        "encodedFringeSitePriorScoreForQfsTraining": {
          "description": "Probability that a query is fringe, given this document's site is in the result set. Does not use signals with a dependency on the QueryFringeScore of a document. Scores scaled to integers between 0 and 1000 for compactness. Scores must be interpreted through FringeQueryPriorEncoding::Decode API. Will NOT be present if the fringe_site_prior_score_for_qfs_training is not significantly different from the site_prior_score.",
          "format": "uint32",
          "type": "integer"
        },
        "encodedPredictedXlqScoreAndConfidence": {
          "description": "A combined encoding of the pXLQ score in [0,1] and the confidence with which that score should be interpreted in [0,1].",
          "format": "uint32",
          "type": "integer"
        },
        "encodedProximityScore": {
          "description": "A score in [0, 1] representing the similarity of this doc to known fringe-vulnerable 'seeds'. See go/fringe-proximity for more information. Encoded for compactness and to restrict visibility.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityGenieComplexQueriesComplexQueriesOutputRewrite": {
      "id": "QualityGenieComplexQueriesComplexQueriesOutputRewrite",
      "properties": {
        "entities": {
          "items": {
            "$ref": "QualityGenieComplexQueriesComplexQueriesOutputRewriteEntity"
          },
          "type": "array"
        },
        "rewriteType": {
          "enum": [
            "UNKNOWN",
            "SIMPLE_SPLIT_LOW_CONFIDENCE",
            "SIMPLE_SPLIT",
            "COMPLEX_SPLIT_LOW_CONFIDENCE",
            "COMPLEX_SPLIT_HIGH_CONFIDENCE",
            "COMPARATIVE",
            "HARDCODED_SPLIT_BY_REGEX"
          ],
          "enumDescriptions": [
            "",
            "E.g. A query where we are unsure if we should split.",
            "E.g. \"Set a timer for 3 minutes and set a timer for 6 minutes\".",
            "E.g. \"Set a timer for 3 and for 6 minutes\".",
            "E.g. \"Set a timer for 3 minutes and a timer for 6 minutes\".",
            "E.g. \"Who is older Barack Obama or Justin Bieber\".",
            "E.g. \"Play Madonna at volume 5\"."
          ],
          "type": "string"
        },
        "textualRewrite": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityGenieComplexQueriesComplexQueriesOutputRewriteEntity": {
      "id": "QualityGenieComplexQueriesComplexQueriesOutputRewriteEntity",
      "properties": {
        "mid": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityGeoBrainlocBrainlocAttachment": {
      "description": "Compressed version of quality_geo_brainloc.goldmine.BrainlocAnnotation for indexing. (See BrainlocAnnotation for detailed documentation.) Next ID: 10",
      "id": "QualityGeoBrainlocBrainlocAttachment",
      "properties": {
        "brainlocVersion": {
          "format": "int32",
          "type": "integer"
        },
        "topCitiesRawScores": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topCitiesVocabIds": {
          "description": "Compressed top locations and their scores. *Locations are stored using their model vocab IDs. *Location scores are stored using 14 bits of precision (2 bytes).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topCountiesRawScores": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topCountiesVocabIds": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topCountriesRawScores": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topCountriesVocabIds": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topStatesRawScores": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topStatesVocabIds": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityLabelsGoogleLabelData": {
      "id": "QualityLabelsGoogleLabelData",
      "properties": {
        "label": {
          "items": {
            "$ref": "QualityLabelsGoogleLabelDataLabel"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityLabelsGoogleLabelDataLabel": {
      "id": "QualityLabelsGoogleLabelDataLabel",
      "properties": {
        "confidence": {
          "description": "If global_label_value is present, confidence is ignored. confidence is DEPRECATED.",
          "format": "float",
          "type": "number"
        },
        "globalLabelBucket": {
          "description": "A byte-size value representing 64 * (1 + global_label_value). Use this instead of global_label_value to save on label storage. See quality_prose::LabelValueToBucket() for more info.",
          "format": "int32",
          "type": "integer"
        },
        "globalLabelValue": {
          "format": "float",
          "type": "number"
        },
        "labelId": {
          "description": "At least one of label_id and label_name must be filled in",
          "format": "int32",
          "type": "integer"
        },
        "labelName": {
          "type": "string"
        },
        "provider": {
          "items": {
            "$ref": "QualityLabelsGoogleLabelDataLabelProvider"
          },
          "type": "array"
        },
        "providerId": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityLabelsGoogleLabelDataLabelProvider": {
      "description": "If Provider group is not present the provider is the legacy classifiers (with id 0) and the label_value provided by Google is the global_label_value.",
      "id": "QualityLabelsGoogleLabelDataLabelProvider",
      "properties": {
        "feed": {
          "description": "This field is intended to be deprecated. If id == 0 and feed is true it means this label is from a feed. If id == 0 and feed is false, this label is from \"Google\" If id != 0, feed is meaningless.",
          "type": "boolean"
        },
        "id": {
          "description": "We are currently using this field to indicate an id of the set of classifiers that produced this label. This deviates from the original intention. Also see ClassifierDescription and refer to http://go/genre-labels-provider-id for further info.",
          "format": "uint64",
          "type": "string"
        },
        "labelBucket": {
          "description": "A byte-size value representing 64 * (1 + global_label_value). Use it instead of global_label_value to save on label storage.",
          "format": "int32",
          "type": "integer"
        },
        "labelValue": {
          "format": "float",
          "type": "number"
        },
        "name": {
          "description": "This name will only sometimes be filled in! Frontends can in general expect this to be filled in, but it will not usually be stored in backends.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsAgingData": {
      "id": "QualityNavboostCrapsAgingData",
      "properties": {
        "lastMonthBucket": {
          "$ref": "QualityNavboostCrapsAgingDataAgingAgeBucket",
          "description": "Documents with byline date younger than month at the event time."
        },
        "lastWeekBucket": {
          "$ref": "QualityNavboostCrapsAgingDataAgingAgeBucket",
          "description": "Documents with byline date younger than week at the event time."
        },
        "lastYearBucket": {
          "$ref": "QualityNavboostCrapsAgingDataAgingAgeBucket",
          "description": "Documents with byline date younger than year at the event time."
        },
        "yearPlusBucket": {
          "$ref": "QualityNavboostCrapsAgingDataAgingAgeBucket",
          "description": "Documents with byline date older than year at the event time."
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsAgingDataAgingAgeBucket": {
      "id": "QualityNavboostCrapsAgingDataAgingAgeBucket",
      "properties": {
        "goodClicks": {
          "format": "float",
          "type": "number"
        },
        "impressions": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsCrapsClickSignals": {
      "description": "Click / impression signals for craps. The tag numbers are the same as they were in the original CrapsData (below). This is deliberate.",
      "id": "QualityNavboostCrapsCrapsClickSignals",
      "properties": {
        "absoluteImpressions": {
          "description": "Thus far this field is only used for host level unsquashed impressions. When compressed (e.g., in perdocdata.proto, CompressedQualitySignals), this value is represented individually and thus is generally incompatible with the other values which are compressed as click-ratios.",
          "format": "double",
          "type": "number"
        },
        "badClicks": {
          "format": "double",
          "type": "number"
        },
        "clicks": {
          "format": "double",
          "type": "number"
        },
        "goodClicks": {
          "format": "double",
          "type": "number"
        },
        "impressions": {
          "format": "double",
          "type": "number"
        },
        "lastLongestClicks": {
          "format": "double",
          "type": "number"
        },
        "unicornClicks": {
          "description": "The subset of clicks that are associated with an event from a Unicorn user.",
          "format": "double",
          "type": "number"
        },
        "unsquashedClicks": {
          "description": "This is not being populated for the current format - instead two instances of CrapsClickSignals (squashed/unsquashed) are used. We are migrating to the new format where this field will be populated.",
          "format": "double",
          "type": "number"
        },
        "unsquashedImpressions": {
          "description": "This is not being populated for the current format - instead two instances of CrapsClickSignals (squashed/unsquashed) are used. We are migrating to the new format where this field will be populated.",
          "format": "double",
          "type": "number"
        },
        "unsquashedLastLongestClicks": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsCrapsData": {
      "description": "NEXT TAG: 27",
      "id": "QualityNavboostCrapsCrapsData",
      "properties": {
        "agingCounts": {
          "$ref": "QualityNavboostCrapsAgingData",
          "description": "Contains counter for Aging signal (go/freshness-aging). It's used internally by Craps/Aging pipeline."
        },
        "badClicks": {
          "format": "double",
          "type": "number"
        },
        "clicks": {
          "format": "double",
          "type": "number"
        },
        "country": {
          "description": "The two-letter uppercase country slice of the CrapsData. Examples: \"US\", \"FR\", \"BR\"",
          "type": "string"
        },
        "device": {
          "$ref": "QualityNavboostCrapsCrapsDevice",
          "description": "The device interface and os slice of the CrapsData."
        },
        "features": {
          "description": "Contains CrapsClickSignals for specific features. (i.e. for mobile, US, metro id - 123\")",
          "items": {
            "$ref": "QualityNavboostCrapsFeatureCrapsData"
          },
          "type": "array"
        },
        "goodClicks": {
          "format": "double",
          "type": "number"
        },
        "impressions": {
          "description": "These fields may become legacy fields; we may retire them and use the squashed field (below) instead, to allow for some nesting.",
          "format": "double",
          "type": "number"
        },
        "language": {
          "description": "The language slice of the CrapsData. Examples: \"en\", \"fr\", \"pt-BR\",",
          "type": "string"
        },
        "lastLongestClicks": {
          "description": "The number of clicks that were last and longest in related user queries.",
          "format": "double",
          "type": "number"
        },
        "mobileData": {
          "$ref": "QualityNavboostCrapsCrapsData",
          "description": "DO NOT USE: Use the above mobile_signals fields instead. DO NOT REMOVE: Field is present in legacy protos in golden tests."
        },
        "mobileSignals": {
          "$ref": "QualityNavboostCrapsCrapsClickSignals",
          "description": "The portion of this CrapsData aggregated on data from tier 1/2 mobile interfaces in QSessions."
        },
        "packedIpAddress": {
          "description": "Contains a packed string in network byte order, as expected by CrapsIpPrior. Only populated if we looked up the ip_prior_bad_fraction at retrieval time.",
          "format": "byte",
          "type": "string"
        },
        "patternLevel": {
          "description": "Level of pattern. More general patterns get higher values. For URL patterns this field = 0. For example, if we have \"http://abc.def.ghi/xyz.html\" level 0 pattern will be \"http://abc.def.ghi/xyz.html\" level 1 pattern will be \"p://abc.def.ghi\" level 2 pattern will be \"p://def.ghi\"",
          "format": "int32",
          "type": "integer"
        },
        "patternSccStats": {
          "$ref": "QualityNavboostCrapsStatsWithWeightsProto",
          "description": "For pattern data, this will contain stats of the SCC's of the individual urls contributing to the pattern."
        },
        "query": {
          "type": "string"
        },
        "sliceTag": {
          "description": "This field can be used by the craps pipeline to slice up signals by various attributes such as device type, country, locale etc. The slice_tag can be an arbitrary string, and the CrapsData values for each slice_tag are aggregated separately, together with the default empty slice_tag.",
          "type": "string"
        },
        "squashed": {
          "$ref": "QualityNavboostCrapsCrapsClickSignals",
          "description": "Not used yet - we will probably move the impressions / clicks / good_clicks bad clicks / last longest clicks into here from top level, and rename those fields to legacy."
        },
        "unscaledIpPriorBadFraction": {
          "description": "Used to assign a prior based on IP address. See quality/navboost/craps/craps-ip-prior.h. This value is prior to the linear transformation (scaling / offset / min / max) that's applied in craps-penalty.cc.",
          "format": "double",
          "type": "number"
        },
        "unsquashed": {
          "$ref": "QualityNavboostCrapsCrapsClickSignals",
          "description": "We will start using this one for the retuning rollout."
        },
        "unsquashedMobileSignals": {
          "$ref": "QualityNavboostCrapsCrapsClickSignals"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsCrapsDevice": {
      "description": "CrapsDevice has the gws interface, gws tier and operating system for events from QSessions.",
      "id": "QualityNavboostCrapsCrapsDevice",
      "properties": {
        "os": {
          "enum": [
            "DEVICE_OS_UNKNOWN",
            "DEVICE_OS_OTHER",
            "DEVICE_OS_WINDOWS",
            "DEVICE_OS_OSX",
            "DEVICE_OS_LINUX",
            "DEVICE_OS_ANDROID",
            "DEVICE_OS_IOS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "uxInterface": {
          "description": "An enum taken from GWSLogEntryProto that indicates what type of device a request came from. This includes an entry for DESKTOP(1), MOBILE(2), and TABLET(3) devices. Reference: - gwslog(608): GWSLogEntryProto.ux_interface",
          "format": "int32",
          "type": "integer"
        },
        "uxTier": {
          "description": "Indicates the device browser tier for the given request. 1 means modern browsers, 3 means very old browsers, and 2 is everything in the middle. See Reference: - gwslog(609): GWSLogEntryProto.ux_tier",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsFeatureCrapsData": {
      "id": "QualityNavboostCrapsFeatureCrapsData",
      "properties": {
        "country": {
          "description": "Country, like \"us\". If not present, it's an aggregation for all countries. This is the same format as one used in Glue.",
          "type": "string"
        },
        "device": {
          "description": "Device, like \"m\". If not present, it's an aggregation for all devices. \"m\" - mobile devices. \"d\" - destop devices.",
          "type": "string"
        },
        "language": {
          "description": "Language, like \"en\". If not present, it's an aggregation for all languages. This is the same format as one used in Glue.",
          "type": "string"
        },
        "locationId": {
          "description": "Location id for metro and city. If not present, it's an aggregation for all locations within current country.",
          "format": "int32",
          "type": "integer"
        },
        "signals": {
          "$ref": "QualityNavboostCrapsCrapsClickSignals",
          "description": "CRAPS Signals for the locale."
        }
      },
      "type": "object"
    },
    "QualityNavboostCrapsStatsWithWeightsProto": {
      "id": "QualityNavboostCrapsStatsWithWeightsProto",
      "properties": {
        "hi": {
          "format": "double",
          "type": "number"
        },
        "kind": {
          "format": "int32",
          "type": "integer"
        },
        "lo": {
          "format": "double",
          "type": "number"
        },
        "mean": {
          "format": "double",
          "type": "number"
        },
        "median": {
          "format": "double",
          "type": "number"
        },
        "n": {
          "format": "int32",
          "type": "integer"
        },
        "pc10": {
          "format": "double",
          "type": "number"
        },
        "pc25": {
          "format": "double",
          "type": "number"
        },
        "pc75": {
          "format": "double",
          "type": "number"
        },
        "pc90": {
          "format": "double",
          "type": "number"
        },
        "stdError": {
          "format": "double",
          "type": "number"
        },
        "stddev": {
          "format": "double",
          "type": "number"
        },
        "varOfMean": {
          "format": "double",
          "type": "number"
        },
        "variance": {
          "format": "double",
          "type": "number"
        },
        "weightedN": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityNsrExperimentalNsrTeamData": {
      "description": "Experimental NsrTeam data. This is a proto containing versioned signals which can be used to run live experiments. This proto will not be propagated to MDU shards, but it will be populated at query time by go/web-signal-joins inside the CompressedQualitySignals subproto of PerDocData proto. See go/0DayLEs for the design doc. Note how this is only meant to be used during LEs, it should *not* be used for launches.",
      "id": "QualityNsrExperimentalNsrTeamData",
      "properties": {
        "versionedSignals": {
          "items": {
            "$ref": "QualityNsrExperimentalNsrTeamScoringSignal"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityNsrExperimentalNsrTeamScoringSignal": {
      "description": "The versioned signals used by the ExperimentalNsrTeamData proto.",
      "id": "QualityNsrExperimentalNsrTeamScoringSignal",
      "properties": {
        "valueBool": {
          "type": "boolean"
        },
        "valueDouble": {
          "format": "double",
          "type": "number"
        },
        "valueFloat": {
          "format": "float",
          "type": "number"
        },
        "valueInt32": {
          "format": "int32",
          "type": "integer"
        },
        "valueUint32": {
          "format": "uint32",
          "type": "integer"
        },
        "versionId": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityNsrExperimentalNsrTeamWSJData": {
      "description": "This is a wrapper needed for the WSJ corpus. We want the WSJ RPCs to inject both the experimental_data and the keys, and as of June 2022 these need to be first level members of the proto.",
      "id": "QualityNsrExperimentalNsrTeamWSJData",
      "properties": {
        "experimentalNsrTeamData": {
          "$ref": "QualityNsrExperimentalNsrTeamData"
        },
        "lookupKey": {
          "description": "The key used to lookup this data in the WSJ corpus. The WSJ data is sitechunk-level, however the documents in the MDU shards are simply urls. WSJ does a mapping from url -> {primary_chunk, secondary, fallbacks, etc.} and retrieves all the keys from the corpus. This lookup key field will keep track of which key was used for this particular lookup.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityNsrNSRVersionedData": {
      "description": "Versioned NSR score data.",
      "id": "QualityNsrNSRVersionedData",
      "properties": {
        "value": {
          "description": "The corresponding NSR value.",
          "format": "float",
          "type": "number"
        },
        "versionId": {
          "description": "The unique id of the version, preferably just scaled: 19.1 x 10 = 191.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityNsrNsrChunksProto": {
      "description": "The NsrChunksProto corresponds to the NSRChunks class. The data saved by the proto and the class is the same. We provide utilities to go from one to the other.",
      "id": "QualityNsrNsrChunksProto",
      "properties": {
        "primaryChunk": {
          "description": "Primary NSR sitechunk. In most of the cases it's same as HOST_LEVEL_V3 sitechunked canonical url of the document. In rare, but important cases it's based on page markup (see quality/nsr/util/sitechunker.h for details).",
          "type": "string"
        },
        "secondaryChunks": {
          "description": "Secondary NSR sitechunk. When present, it provides more granular chunking than primary sitechunks (see quality/nsr/util/sitechunker.h for details). Note that the NSRChunks class does not store trivial secondary chunks. Be aware of this when constructing NsrChunksProto from scratch.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityNsrNsrChunksWithSourceInfo": {
      "id": "QualityNsrNsrChunksWithSourceInfo",
      "properties": {
        "nsrChunks": {
          "$ref": "QualityNsrNsrChunksProto"
        },
        "siteChunkSource": {
          "description": "These are annotated in the Goldmine NSR annotator.",
          "enum": [
            "UNKNOWN",
            "HOST_LEVEL_V3",
            "MARKUP_BREADCRUMBS",
            "MARKUP_AUTHOR",
            "COOKBOOK",
            "CRAWLED_SELLER_DATA",
            "FALLBACK"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityNsrNsrData": {
      "description": "NOTE: When adding a new field to be propagated to Raffia check if NsrPatternSignalSpec needs to be updated. Next ID: 52",
      "id": "QualityNsrNsrData",
      "properties": {
        "articleScore": {
          "description": "Score from article classification of the site.",
          "format": "float",
          "type": "number"
        },
        "articleScoreV2": {
          "format": "float",
          "type": "number"
        },
        "chardEncoded": {
          "description": "Site-level chard score: site quality predictor based on content.",
          "format": "int32",
          "type": "integer"
        },
        "chardVariance": {
          "format": "float",
          "type": "number"
        },
        "clusterId": {
          "description": "An id for defining clusters of sites. Used in ecosystem experiments (project Tundra).",
          "format": "int32",
          "type": "integer"
        },
        "clusterUplift": {
          "$ref": "QualityNsrNsrDataClusterUplift"
        },
        "clutterScore": {
          "description": "Delta site-level signal in Q* penalizing sites with a large number of distracting/annoying resources loaded by the site (see go/clutter-v0).",
          "format": "float",
          "type": "number"
        },
        "clutterScores": {
          "items": {
            "$ref": "QualityNsrVersionedFloatSignal"
          },
          "type": "array"
        },
        "directFrac": {
          "format": "float",
          "type": "number"
        },
        "healthScore": {
          "description": "Categorical signals.",
          "format": "float",
          "type": "number"
        },
        "host": {
          "type": "string"
        },
        "i18nBucket": {
          "description": "Currently corresponds to i18n_g42_bucket.",
          "format": "int32",
          "type": "integer"
        },
        "impressions": {
          "description": "Site-level impressions.",
          "format": "float",
          "type": "number"
        },
        "isCovidLocalAuthority": {
          "description": "Bit to determine whether the site has the local authority covid signal, as computed by go/covid-local-authority",
          "type": "boolean"
        },
        "isElectionAuthority": {
          "description": "Bit to determine whether the site has the election authority signal, as computed by go/election-authority",
          "type": "boolean"
        },
        "isVideoFocusedSite": {
          "description": "Bit to determine whether the site has mostly video content, but is not hosted on any known video-hosting domains. Site is considered to be video-focused, if it has > 50% of the URLs with watch pages (with smoothing prior). ariane/4045246",
          "type": "boolean"
        },
        "language": {
          "format": "int32",
          "type": "integer"
        },
        "largeOrgId": {
          "format": "int32",
          "type": "integer"
        },
        "localityScore": {
          "description": "Locality score of the site, i.e. the locality component of the LocalAuthority signal (see go/pq-localauthority).",
          "format": "float",
          "type": "number"
        },
        "metadata": {
          "$ref": "QualityNsrNsrDataMetadata"
        },
        "newNsr": {
          "description": "This field used as a temporary field for clean transitions when we need to roll out Q* and NSR changes simultaneously.",
          "format": "float",
          "type": "number"
        },
        "nsr": {
          "format": "float",
          "type": "number"
        },
        "nsrEpoch": {
          "description": "The epoch from which this NSR value is coming from.",
          "type": "string"
        },
        "nsrOverrideBid": {
          "description": "This signal is used to unconditionally override NSR as a bid in Q*. Should only be used in case of emergency (see go/nsr-override-bid). To have any effect, the value should be present and greater than 0.001.",
          "format": "float",
          "type": "number"
        },
        "nsrVariance": {
          "description": "NSR variance logodds [0, infinity).",
          "format": "float",
          "type": "number"
        },
        "nsrdataFromFallbackPatternKey": {
          "description": "If true indicates that we do not have NSR data computed for the chunk, and instead the data is coming from an average of other host chunks.",
          "type": "boolean"
        },
        "pnav": {
          "description": "Fractional signals.",
          "format": "float",
          "type": "number"
        },
        "priorAdjustedNsr": {
          "description": "NSR - prior. Estimate of whether the site is above/below average NSR in its slice.",
          "items": {
            "$ref": "QualityNsrVersionedFloatSignal"
          },
          "type": "array"
        },
        "secondarySiteChunk": {
          "description": "Secondary NSR sitechunk. When present, it provides more granular chunking than primary sitechunks (see quality/nsr/util/sitechunker.h for details).",
          "type": "string"
        },
        "shoppingScore": {
          "format": "float",
          "type": "number"
        },
        "siteAutopilotScore": {
          "description": "Aggregated value of url autopilot scores for this sitechunk.",
          "format": "float",
          "type": "number"
        },
        "siteChunk": {
          "description": "Primary NSR sitechunk. In most of the cases it's same as HOST_LEVEL_V3 sitechunked canonical url of the document. In rare, but important cases it's based on page markup (see quality/nsr/util/sitechunker.h for details).",
          "type": "string"
        },
        "siteChunkSource": {
          "description": "These are only annotated in the Goldmine NSR annotator.",
          "enum": [
            "SITE_CHUNK_SOURCE_UNKNOWN",
            "SITE_CHUNK_SOURCE_HOST_V2",
            "SITE_CHUNK_SOURCE_BREADCRUMBS",
            "SITE_CHUNK_SOURCE_AUTHOR",
            "SITE_CHUNK_SOURCE_COOKBOOK",
            "SITE_CHUNK_SOURCE_CRAWLED_SELLER_DATA",
            "SITE_CHUNK_SOURCE_FALLBACK"
          ],
          "enumDescriptions": [
            "",
            "As of June 2021 this actually corresponds to HOST_LEVEL_V3 granularity.",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "siteLinkIn": {
          "description": "Average value of the site_link_in for pages in the sitechunk.",
          "format": "float",
          "type": "number"
        },
        "siteLinkOut": {
          "description": "Aggregated value of url link out scores for this sitechunk.",
          "format": "float",
          "type": "number"
        },
        "sitePr": {
          "format": "float",
          "type": "number"
        },
        "siteQualityStddev": {
          "description": "Estimate of site's PQ rating stddev--spread of the page-level PQ ratings of a site. Note this is different from nsr_variance which predicts error of NSR itself from the aggregated site-level rating.",
          "format": "float",
          "type": "number"
        },
        "spambrainLavcScore": {
          "description": "The SpamBrain LAVC score, as of July 2022. See more information at go/cloverfield-lavc-deck.",
          "format": "float",
          "type": "number"
        },
        "spambrainLavcScores": {
          "items": {
            "$ref": "QualityNsrVersionedFloatSignal"
          },
          "type": "array"
        },
        "tofu": {
          "description": "Site-level tofu score: site quality predictor based on content.",
          "format": "float",
          "type": "number"
        },
        "ugcScore": {
          "format": "float",
          "type": "number"
        },
        "url": {
          "type": "string"
        },
        "versionedAsrData": {
          "description": "Versioned map of ASR (authenticity) values.",
          "items": {
            "$ref": "QualityNsrVersionedFloatSignal"
          },
          "type": "array"
        },
        "versionedData": {
          "description": "Versioned map of NSR values for experimenting with the next release.",
          "items": {
            "$ref": "QualityNsrNSRVersionedData"
          },
          "type": "array"
        },
        "videoScore": {
          "format": "float",
          "type": "number"
        },
        "vlq": {
          "description": "Score of the Video LQ model.",
          "format": "float",
          "type": "number"
        },
        "vlqNsr": {
          "description": "NSR from a headroom model targeting low-quality video sites.",
          "format": "float",
          "type": "number"
        },
        "ymylNewsV2Score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityNsrNsrDataClusterUplift": {
      "description": "The uplift-per-cluster values used in Tundra's uplift arm.",
      "id": "QualityNsrNsrDataClusterUplift",
      "properties": {
        "local": {
          "description": "Score for the local sites arm.",
          "format": "float",
          "type": "number"
        },
        "small": {
          "description": "Score for the small sites arm.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityNsrNsrDataMetadata": {
      "description": "Contains meta information about this data. This field is only available in docjoins (and potentially MDU shards), it is not populated offline. NOTE: This is a new field (Nov 2022) and we do not want clients to depend on this; please contact qscore-team@ if you want to use this information.",
      "id": "QualityNsrNsrDataMetadata",
      "properties": {
        "encodedLookupInformation": {
          "description": "Encoded lookup information. The fields set above are expensive to store. Storing them in docjoins is fine, but we cannot store them in MDU shards. In order for the MDU shards to display field provenance information, we store them as a bitfield. For details about the encoding and decoding scheme, see quality_nsr::util::EncodeMetadataLookupInformation. We expect this to occupy 8 bytes as long as there are less than 64 fields in NsrData proto, 12 bytes between 64 and 92 fields, etc.",
          "format": "byte",
          "type": "string"
        },
        "goldmineLookupKeyPerField": {
          "additionalProperties": {
            "format": "int32",
            "type": "integer"
          },
          "description": "Same as raffia_lookup_key_per_field. Note that the goldmine_lookups have priority; if a field appears in both goldmine and raffia entries, it means it was taken from goldmine. If it's missing here but present in raffia_lookup_key_per_field, it was taken from raffia.",
          "type": "object"
        },
        "goldmineLookupKeys": {
          "description": "The lookup keys attempted by goldmine. Note that goldmine only runs for urls which can be chunked differently than raffia; in those cases, goldmine related fields are empty.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "lastTimeProcessedGoldmineInSeconds": {
          "format": "int64",
          "type": "string"
        },
        "lastTimeProcessedMduInSeconds": {
          "description": "This field is populated only during MDU population, so it's *not* present in docjoins, but it's present in production so that it can be displayed.",
          "format": "int64",
          "type": "string"
        },
        "lastTimeProcessedRaffiaInSeconds": {
          "description": "Records the last time each system has processed the proto. These are recorded as seconds from the unix epoch. Ideally these fields would be google.protobuf.Timestamp, but the scoring bundle (which depends on this proto) does not understand proto3 syntax. See cl/500942047 for details.",
          "format": "int64",
          "type": "string"
        },
        "nsrChunksWithSourceInfo": {
          "$ref": "QualityNsrNsrChunksWithSourceInfo",
          "description": "Stores the NSRChunks (computed by goldmine) which were used to populate the data."
        },
        "raffiaLookupKey": {
          "type": "string"
        },
        "raffiaLookupKeyPerField": {
          "additionalProperties": {
            "format": "int32",
            "type": "integer"
          },
          "description": "Returns the raffia lookup key per each field in the NsrData proto (with exclusion of the Metadata sub-message (i.e. this)). It contains information like 3 : 1, meaning that the field inside NsrData with id '3' (in this case 'host') has been taken by raffia from the raffia lookup key at index 1.",
          "type": "object"
        },
        "raffiaLookupKeys": {
          "description": "This is an internal field set by Raffia, to indicate which lookup keys have been attempted to populate the NsrData for this document. This will allow us to determine which key has been used to populate each field in the proto. The keys are ordered by lookup priority; raffia will give priority to earlier keys, and only take fields from later keys if they are missing.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "raffiaSignalMergerUrl": {
          "description": "The url used by NsrSignalMerger (http://google3/indexing/signals/signal-merger.h;l=1801;rcl=509297232) to select which NsrData value to keep. The SignalMerger merges all the NsrData coming from the dup url cluster, and select the NsrData value to return by choosing a single url in the cluster (see NsrSignalMerger class for details). NOTE: This field is populated only when there *is* a cluster. If there is no cluster, this is empty and the key used is the canonical (and only) url.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityNsrPQData": {
      "description": "Next id: 17",
      "id": "QualityNsrPQData",
      "properties": {
        "chard": {
          "description": "URL-level chard prediction (encoded as an int).",
          "format": "int32",
          "type": "integer"
        },
        "deltaAutopilotScore": {
          "format": "float",
          "type": "number"
        },
        "deltaLinkIncoming": {
          "format": "float",
          "type": "number"
        },
        "deltaLinkOutgoing": {
          "format": "float",
          "type": "number"
        },
        "deltaPageQuality": {
          "description": "The delta score of the URL-level quality predictor.",
          "format": "float",
          "type": "number"
        },
        "deltaSubchunkAdjustment": {
          "description": "Total deltaNSR adjustment based on subchunks. This is a page-level adjustment (subchunks are retrieved based on the page classification).",
          "format": "float",
          "type": "number"
        },
        "linkIncoming": {
          "format": "float",
          "type": "number"
        },
        "linkOutgoing": {
          "format": "float",
          "type": "number"
        },
        "numOffdomainAnchors": {
          "description": "The total number of offdomain anchors seen by the NSR pipeline for this page.",
          "format": "float",
          "type": "number"
        },
        "page2vecLq": {
          "format": "float",
          "type": "number"
        },
        "subchunkData": {
          "items": {
            "$ref": "QualityNsrPQDataSubchunkData"
          },
          "type": "array"
        },
        "tofu": {
          "description": "URL-level tofu prediction.",
          "format": "float",
          "type": "number"
        },
        "urlAutopilotScore": {
          "format": "float",
          "type": "number"
        },
        "vlq": {
          "description": "URL-level score of the VLQ model.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityNsrPQDataSubchunkData": {
      "description": "Data used to compute delta_subchunk_adjustment. (I.e, the subchunks looked up, with their confidences and weights). This data is not propagated to ascorer.",
      "id": "QualityNsrPQDataSubchunkData",
      "properties": {
        "confidence": {
          "description": "Confidence associated with the chunk.",
          "format": "float",
          "type": "number"
        },
        "deltaNsr": {
          "description": "Subchunk delta in nsr.",
          "format": "float",
          "type": "number"
        },
        "pageWeight": {
          "description": "Weight with which this document belong to this subchunk (greater than 0).",
          "format": "float",
          "type": "number"
        },
        "type": {
          "description": "Type of this chunk. Eg, ymyl_health, d2v, etc.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityNsrVersionedFloatSignal": {
      "id": "QualityNsrVersionedFloatSignal",
      "properties": {
        "value": {
          "description": "The corresponding float value.",
          "format": "float",
          "type": "number"
        },
        "versionId": {
          "description": "Unique version id.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityOrbitAsteroidBeltDocumentIntentScores": {
      "id": "QualityOrbitAsteroidBeltDocumentIntentScores",
      "properties": {
        "imageIntentScores": {
          "additionalProperties": {
            "$ref": "QualityOrbitAsteroidBeltImageIntentScores"
          },
          "description": "Map of imageid key to ImageIntentScores, for images on cdoc.doc_images",
          "type": "object"
        },
        "intents": {
          "description": "The 'intents' and 'scores' fields are stored as parallel lists for compactness. The 'scores' field should not be accessed directly, but instead through the functions in document_intent_scores_utils.",
          "items": {
            "enum": [
              "NONE",
              "TUTORIAL",
              "MAP",
              "TRANSLATE",
              "LISTEN",
              "PROMOTION",
              "GIF",
              "REGISTER",
              "EVENT_LISTING",
              "RANKING",
              "DISCOGRAPHY",
              "DIRECTIONS",
              "NEWS",
              "SOCIAL_MEDIA",
              "FAN_FICTION",
              "RECIPES",
              "HOURS_OF_OPERATION",
              "DEFINITION",
              "REAL_ESTATE_LISTING",
              "PREVIEW",
              "PURCHASE",
              "MENU",
              "UNBOXING",
              "NUTRITION_FACTS",
              "TRAVEL_GUIDE",
              "SPECS",
              "CALCULATOR",
              "DOWNLOAD",
              "SCORES",
              "QUOTES",
              "SHOWTIMES",
              "CATALOG",
              "CALENDAR",
              "LOCATION_FINDER",
              "RENT",
              "STUDY_GUIDE",
              "REVIEW",
              "SHEET_MUSIC",
              "LOGIN",
              "TRIVIA",
              "CONTACT_PAGE",
              "RESERVATION",
              "CUSTOMER_SUPPORT",
              "INTERVIEW",
              "COUPON",
              "FLIGHT_TRACKER",
              "COMPANY_FINANCIALS",
              "FORUM",
              "THESAURUS",
              "MANUAL",
              "JOB_POSTING",
              "LYRICS",
              "SYMPTOMS",
              "REPAIR",
              "BUYING_GUIDE",
              "PRODUCT_EDITORIAL_REVIEW",
              "SHOPPING_MERCHANT_PRODUCT",
              "SHOPPING_REVIEW_OR_BUYING_GUIDE",
              "PRODUCT_REVIEW",
              "PRODUCT_COMPARISON",
              "PRODUCT_BUYING_GUIDE",
              "SHOPAHOLIC",
              "GOOGLE_SCREENSHOT",
              "MUGSHOT",
              "CRIME",
              "SHOPPING_TOPN",
              "AUTHENTICITY",
              "RESERVED_FOR_NEW_ENUM_128",
              "RESERVED_FOR_NEW_ENUM_129",
              "RESERVED_FOR_NEW_ENUM_130",
              "RESERVED_FOR_NEW_ENUM_131",
              "RESERVED_FOR_NEW_ENUM_132",
              "RESERVED_FOR_NEW_ENUM_133",
              "RESERVED_FOR_NEW_ENUM_134",
              "RESERVED_FOR_NEW_ENUM_135",
              "RESERVED_FOR_NEW_ENUM_136",
              "RESERVED_FOR_NEW_ENUM_137",
              "RESERVED_FOR_NEW_ENUM_138",
              "RESERVED_FOR_NEW_ENUM_139",
              "RESERVED_FOR_NEW_ENUM_140",
              "RESERVED_FOR_NEW_ENUM_141",
              "RESERVED_FOR_NEW_ENUM_142",
              "RESERVED_FOR_NEW_ENUM_143",
              "RESERVED_FOR_NEW_ENUM_144",
              "RESERVED_FOR_NEW_ENUM_145",
              "RESERVED_FOR_NEW_ENUM_146",
              "RESERVED_FOR_NEW_ENUM_147",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_98",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_99",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_100",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_101",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_102",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_103",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_104",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_105",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_106",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_107",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_108",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_109",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_110",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_111",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_112",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_113",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_114",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_115",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_116",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_117",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_118",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_119",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_120",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_121",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_122",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_123",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_124",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_125",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_126",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_127",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_2",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_5",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_8",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_10",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_17",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_18",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_21",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_23",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_24",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_28",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_29",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_31",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_34",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_36",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_38",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_39",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_40",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_46",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_50",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_52",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_54",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_56",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_57",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_59",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_60",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_63",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_67",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_71",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_75",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_78",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_81"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "This is specifically for the buying guides carousel (go/oshop-buying-guides). Consider using PRODUCT_BUYING_GUIDE instead.",
              "",
              "",
              "This is basically an \"or\" of PRODUCT_REVIEW, PRODUCT_COMPARISON, and PRODUCT_BUYING_GUIDE. Use those three intents instead.",
              "",
              "",
              "",
              "This is the unmodified http://go/shopaholic score \"forwarded\" through Orbit. Note that scores less than 0.4 are not written to cdoc and will show up as 0.0.",
              "This is an image intent",
              "Image intent representing whether there is a mugshot in the image (or if the image is itself a mugshot).",
              "Document intent representing whether a page is crime-related (go/crime-demotion-in-image-search-dd)",
              "Document intent representing whether a page is recommending best shopping products fulfilling certain application (e.g. \"best laptops for students\"). See go/shopping_topn_orbit.",
              "AuthenticityScore for document. see go/astar-dd.",
              "========== Enums for new intents ========== Instructions: When adding a new intent, use the reserved enum number from the start of this list, and add a new reserved enum number to the end for the next person. There is a unit test that checks there are at least 20 reserved enums. See go/new-intentkeyenum for details.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "========== Enums for new large intents ========== Please ask orbit@ before using these.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "========== Enums for deleted intents ==========",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "scores": {
          "description": "The intent scores, scaled to integers between 0 and 100 for compactness.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "version": {
          "description": "Version 0: Presence of an intent label in the 'intents' field represents our best-effort classification. The 'scores' field is not meaningful. Version 1: Values in the 'scores' field represent the estimated precision of the classifier for a threshold at that score.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityOrbitAsteroidBeltImageIntentScores": {
      "id": "QualityOrbitAsteroidBeltImageIntentScores",
      "properties": {
        "intents": {
          "description": "The unique identifier for an Asteroid Belt document intent is being reused here",
          "items": {
            "enum": [
              "NONE",
              "TUTORIAL",
              "MAP",
              "TRANSLATE",
              "LISTEN",
              "PROMOTION",
              "GIF",
              "REGISTER",
              "EVENT_LISTING",
              "RANKING",
              "DISCOGRAPHY",
              "DIRECTIONS",
              "NEWS",
              "SOCIAL_MEDIA",
              "FAN_FICTION",
              "RECIPES",
              "HOURS_OF_OPERATION",
              "DEFINITION",
              "REAL_ESTATE_LISTING",
              "PREVIEW",
              "PURCHASE",
              "MENU",
              "UNBOXING",
              "NUTRITION_FACTS",
              "TRAVEL_GUIDE",
              "SPECS",
              "CALCULATOR",
              "DOWNLOAD",
              "SCORES",
              "QUOTES",
              "SHOWTIMES",
              "CATALOG",
              "CALENDAR",
              "LOCATION_FINDER",
              "RENT",
              "STUDY_GUIDE",
              "REVIEW",
              "SHEET_MUSIC",
              "LOGIN",
              "TRIVIA",
              "CONTACT_PAGE",
              "RESERVATION",
              "CUSTOMER_SUPPORT",
              "INTERVIEW",
              "COUPON",
              "FLIGHT_TRACKER",
              "COMPANY_FINANCIALS",
              "FORUM",
              "THESAURUS",
              "MANUAL",
              "JOB_POSTING",
              "LYRICS",
              "SYMPTOMS",
              "REPAIR",
              "BUYING_GUIDE",
              "PRODUCT_EDITORIAL_REVIEW",
              "SHOPPING_MERCHANT_PRODUCT",
              "SHOPPING_REVIEW_OR_BUYING_GUIDE",
              "PRODUCT_REVIEW",
              "PRODUCT_COMPARISON",
              "PRODUCT_BUYING_GUIDE",
              "SHOPAHOLIC",
              "GOOGLE_SCREENSHOT",
              "MUGSHOT",
              "CRIME",
              "SHOPPING_TOPN",
              "AUTHENTICITY",
              "RESERVED_FOR_NEW_ENUM_128",
              "RESERVED_FOR_NEW_ENUM_129",
              "RESERVED_FOR_NEW_ENUM_130",
              "RESERVED_FOR_NEW_ENUM_131",
              "RESERVED_FOR_NEW_ENUM_132",
              "RESERVED_FOR_NEW_ENUM_133",
              "RESERVED_FOR_NEW_ENUM_134",
              "RESERVED_FOR_NEW_ENUM_135",
              "RESERVED_FOR_NEW_ENUM_136",
              "RESERVED_FOR_NEW_ENUM_137",
              "RESERVED_FOR_NEW_ENUM_138",
              "RESERVED_FOR_NEW_ENUM_139",
              "RESERVED_FOR_NEW_ENUM_140",
              "RESERVED_FOR_NEW_ENUM_141",
              "RESERVED_FOR_NEW_ENUM_142",
              "RESERVED_FOR_NEW_ENUM_143",
              "RESERVED_FOR_NEW_ENUM_144",
              "RESERVED_FOR_NEW_ENUM_145",
              "RESERVED_FOR_NEW_ENUM_146",
              "RESERVED_FOR_NEW_ENUM_147",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_98",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_99",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_100",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_101",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_102",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_103",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_104",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_105",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_106",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_107",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_108",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_109",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_110",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_111",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_112",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_113",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_114",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_115",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_116",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_117",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_118",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_119",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_120",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_121",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_122",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_123",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_124",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_125",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_126",
              "RESERVED_FOR_NEW_ENUM_LARGE_PLEASE_ASK_ORBIT_127",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_2",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_5",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_8",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_10",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_17",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_18",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_21",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_23",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_24",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_28",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_29",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_31",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_34",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_36",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_38",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_39",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_40",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_46",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_50",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_52",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_54",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_56",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_57",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_59",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_60",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_63",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_67",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_71",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_75",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_78",
              "RESERVED_FOR_DELETED_ENUM_DO_NOT_REUSE_81"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "This is specifically for the buying guides carousel (go/oshop-buying-guides). Consider using PRODUCT_BUYING_GUIDE instead.",
              "",
              "",
              "This is basically an \"or\" of PRODUCT_REVIEW, PRODUCT_COMPARISON, and PRODUCT_BUYING_GUIDE. Use those three intents instead.",
              "",
              "",
              "",
              "This is the unmodified http://go/shopaholic score \"forwarded\" through Orbit. Note that scores less than 0.4 are not written to cdoc and will show up as 0.0.",
              "This is an image intent",
              "Image intent representing whether there is a mugshot in the image (or if the image is itself a mugshot).",
              "Document intent representing whether a page is crime-related (go/crime-demotion-in-image-search-dd)",
              "Document intent representing whether a page is recommending best shopping products fulfilling certain application (e.g. \"best laptops for students\"). See go/shopping_topn_orbit.",
              "AuthenticityScore for document. see go/astar-dd.",
              "========== Enums for new intents ========== Instructions: When adding a new intent, use the reserved enum number from the start of this list, and add a new reserved enum number to the end for the next person. There is a unit test that checks there are at least 20 reserved enums. See go/new-intentkeyenum for details.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "========== Enums for new large intents ========== Please ask orbit@ before using these.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "========== Enums for deleted intents ==========",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "scores": {
          "description": "The intent scores, scaled to integers between 0 and 100 for compactness.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityPreviewChosenSnippetInfo": {
      "description": "Information for chosen snippet. Next ID: 8",
      "id": "QualityPreviewChosenSnippetInfo",
      "properties": {
        "isVulgar": {
          "description": "Whether this snippet is a vulgar candidate.",
          "type": "boolean"
        },
        "leadingTextType": {
          "type": "string"
        },
        "snippetHtml": {
          "description": "The rendered snippet html.",
          "type": "string"
        },
        "snippetType": {
          "enum": [
            "SNIPPET_TYPE_UNSPECIFIED",
            "SEQUENCE",
            "SEQUENCE_V2",
            "FULL",
            "FULL_V2",
            "META",
            "LEADING_TEXT",
            "SAFT_SENTENCE",
            "RADISH_SENTENCE",
            "RADISH_LIST",
            "RADISH_TABLE",
            "ANNOTATED_FULL",
            "PEREGRINE"
          ],
          "enumDescriptions": [
            "For historical reason, this `SNIPPET_TYPE_UNSPECIFIED` type is defined as value 15 instead of 0.",
            "A sequence snippet is generated from query term matches (from meta and body sections) and typically consists of multiple tidbits. Currently we only keep one single best combination of the retrieved tidbits.",
            "",
            "A full snippet is also generated from query term matches. Unlike the sequence snippet, this only consists of one expanded tidbit that are scored as the best single tidbit among the retrieved tidbits.",
            "",
            "This is a leading text of meta description.",
            "This is a leading text of main body text (skipping headers), and its starting position is typically identified in the indexing phase.",
            "saft sentences.",
            "Candidates created from radish attachment.",
            "",
            "",
            "Candidates from quality_snippets.SnippetSpansInfo.",
            "Candidates generated by SnippetFlow in SR."
          ],
          "type": "string"
        },
        "source": {
          "description": "Source of the chosen snippet, decided in PORC. String value of quality.porc.TextSnippetCandidate.TextSnippetSource defined at google3/quality/porc/proto/text_snippet.proto",
          "type": "string"
        },
        "tidbits": {
          "items": {
            "$ref": "QualityPreviewChosenSnippetInfoTidbitInfo"
          },
          "type": "array"
        },
        "trailingEllipsis": {
          "description": "Whether this snippet has trailing ellipsis.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualityPreviewChosenSnippetInfoTidbitInfo": {
      "description": "Information to identify tidbits.",
      "id": "QualityPreviewChosenSnippetInfoTidbitInfo",
      "properties": {
        "sectionName": {
          "description": "Section name of current snippet.",
          "type": "string"
        },
        "separator": {
          "description": "Separator to put before this tidbit.",
          "type": "string"
        },
        "tidbitText": {
          "description": "Tidbit text for validation.",
          "type": "string"
        },
        "tokenBegin": {
          "description": "Tidbit token range in the section.",
          "format": "uint64",
          "type": "string"
        },
        "tokenEnd": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityPreviewRanklabSnippet": {
      "description": "Snippet candidate related information and signal scores. This message is used for both snippet scoring and ranklab features recording. Next ID: 12 ================== Features populated in production =======================",
      "id": "QualityPreviewRanklabSnippet",
      "properties": {
        "brainFeatures": {
          "$ref": "QualityPreviewSnippetBrainFeatures",
          "description": "Features from SnippetFlow in Superroot."
        },
        "documentFeatures": {
          "$ref": "QualityPreviewSnippetDocumentFeatures"
        },
        "experimentalFeatures": {
          "$ref": "QualityPreviewSnippetExperimentalFeatures",
          "description": "For experimental usage, not populated yet."
        },
        "finalScore": {
          "description": "The final score of this candidate.",
          "format": "float",
          "type": "number"
        },
        "isMuppetSelectedSnippet": {
          "description": "Is this the candidate chosen by Muppet scorer.",
          "type": "boolean"
        },
        "originalQueryTermCoverageFeatures": {
          "$ref": "QualityPreviewSnippetQueryTermCoverageFeatures",
          "description": "Query term (original terms only) coverage features."
        },
        "qualityFeatures": {
          "$ref": "QualityPreviewSnippetQualityFeatures"
        },
        "queryFeatures": {
          "$ref": "QualityPreviewSnippetQueryFeatures",
          "description": "Core set of snippet features."
        },
        "queryTermCoverageFeatures": {
          "$ref": "QualityPreviewSnippetQueryTermCoverageFeatures",
          "description": "Query term (including synonyms) coverage features."
        },
        "radishFeatures": {
          "$ref": "QualityPreviewSnippetRadishFeatures",
          "description": "Radish related information."
        },
        "snippetInfo": {
          "$ref": "QualityPreviewChosenSnippetInfo",
          "description": "Information to identify current chosen snippet."
        }
      },
      "type": "object"
    },
    "QualityPreviewRanklabTitle": {
      "description": "A collection of data corresponding to a single title candidate. This will be used as: - a collection of signals to score and select titles in production - an input for training title models NOTE: When adding a floating point value for Ranklab purposes, use float32 instead of float64, because some of the Ranklab library still does not fully support float64. Next ID: 67",
      "id": "QualityPreviewRanklabTitle",
      "properties": {
        "baseGoldmineFinalScore": {
          "description": "`goldmine_final_score` value in base.",
          "format": "float",
          "type": "number"
        },
        "baseRank": {
          "description": "The ranking index of this candidate (starting from 0) in base.",
          "format": "int32",
          "type": "integer"
        },
        "dataSourceType": {
          "description": "Title source type.",
          "enum": [
            "BODY",
            "BODY_SWAPPED",
            "OPEN_GRAPH",
            "OPEN_GRAPH_HYBRID",
            "ALT",
            "SOURCEMETA",
            "META",
            "BODY_HYBRID",
            "LEADING_TEXT",
            "CHIMERA",
            "EXPERIMENTAL",
            "DEPRECATED_LEARNED",
            "DEPRECATED_LOCAL",
            "NUM_TITLE_TYPES"
          ],
          "enumDescriptions": [
            "The title is from (a substring of) the tag.",
            "This title is for homepages, whose body title contains site title at the end, and we swap the site title to the beginning and pass it from gwd.",
            "The title is from tag.",
            "OPEN_GRAPH title with a site title appended.",
            "The title is from the alternative title pipeline.",
            "The title is a blogs, scholar, or news title in the sourcemeta section.",
            "The title comes from (a substring of) the title tag.",
            "The title is a body title with a site title appended.",
            "The title comes from some other leading text in the",
            "body. The title is created as a compound of multiple different",
            "sources, via Chimera-Title geneartion subsystem. The title is created as of some experimental system",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "docLang": {
          "description": "Document language for this title. It is used for model inference and hence flattened into RanklabTitle instead of RanklabDoc.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "docRelevance": {
          "description": "Represents how relavant this title candidate is to the document. Ranged in [0, 1], and this signal is basically calculated as Cosine-similarity between salient term vector and pQ2T model of title candidate sentence.",
          "format": "float",
          "type": "number"
        },
        "dupTokens": {
          "description": "Numbers of duplicated tokens. For example, duplicated tokens for a title \"dog cat cat cat\" is 2 (for 2 extra \"cat\").",
          "format": "int32",
          "type": "integer"
        },
        "forcedExperimentScore": {
          "description": "A score assigned for candidates forced by experiments.",
          "format": "int32",
          "type": "integer"
        },
        "goldmineAdjustedScore": {
          "description": "The score for `text` computed in Goldmine (AlternativeTitlesAnnotator) with additional scoring adjustments applied. Currently includes Blockbert scoring.",
          "format": "float",
          "type": "number"
        },
        "goldmineAnchorFactor": {
          "description": "=============================================================== Internal boost feature signals used to compute `goldmine_page_score`. They are exposed only for debugging purpose.",
          "format": "float",
          "type": "number"
        },
        "goldmineAnchorSupportOnly": {
          "format": "float",
          "type": "number"
        },
        "goldmineBlockbertFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineBodyFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineFinalScore": {
          "description": "Deprecated: use `goldmine_page_score` instead.",
          "format": "float",
          "type": "number"
        },
        "goldmineForeign": {
          "format": "float",
          "type": "number"
        },
        "goldmineGeometryFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineHasBoilerplateInTitle": {
          "format": "float",
          "type": "number"
        },
        "goldmineHasTitleNgram": {
          "format": "float",
          "type": "number"
        },
        "goldmineHeaderIsH1": {
          "format": "float",
          "type": "number"
        },
        "goldmineHeadingFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineIsBadTitle": {
          "format": "float",
          "type": "number"
        },
        "goldmineIsHeadingTag": {
          "format": "float",
          "type": "number"
        },
        "goldmineIsTitleTag": {
          "format": "float",
          "type": "number"
        },
        "goldmineIsTruncated": {
          "format": "float",
          "type": "number"
        },
        "goldmineLocalTitleFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineLocationFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineNavboostFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineOgTitleFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineOnPageDemotionFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineOtherBoostFeatureCount": {
          "description": "The number of BoostFeatures present in AlternativeTitlesGeneator but not populated above.",
          "format": "int32",
          "type": "integer"
        },
        "goldminePageScore": {
          "description": "The score for the `text` computed in Goldmine (AlternativeTitlesAnnotator). ",
          "format": "float",
          "type": "number"
        },
        "goldmineReadabilityScore": {
          "format": "float",
          "type": "number"
        },
        "goldmineSalientTermFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineSitenameFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineSubHeading": {
          "format": "float",
          "type": "number"
        },
        "goldmineTitleTagFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineTrustFactor": {
          "format": "float",
          "type": "number"
        },
        "goldmineUrlMatchFactor": {
          "format": "float",
          "type": "number"
        },
        "hasSiteInfo": {
          "description": "Whether a title contains site information.",
          "type": "boolean"
        },
        "isTruncated": {
          "description": "Whether this title candidate is truncated or not.",
          "type": "boolean"
        },
        "isValid": {
          "description": "Whether a title is valid (i.e., not empty).",
          "type": "boolean"
        },
        "perTypeQuality": {
          "description": "How good or bad this title is as a `data_source_type` title type.",
          "enum": [
            "UNKNOWN_QUALITY",
            "VERY_GOOD",
            "GOOD",
            "NORMAL",
            "BAD"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "perTypeRank": {
          "description": "Rank of this title among titles of the same `data_source_type`.",
          "format": "int32",
          "type": "integer"
        },
        "percentBodyTitleTokensCovered": {
          "description": "Numbers of body title tokens covered by this title, in range of [0, 1]. Not set if body title is considered \"bad\".",
          "format": "float",
          "type": "number"
        },
        "percentTokensCoveredByBodyTitle": {
          "description": "Numbers of tokens covered by body title, in range of [0, 1]. Not set if body title is considered \"bad\".",
          "format": "float",
          "type": "number"
        },
        "queryMatch": {
          "description": "The number of (different) terms with a query match. It may include the match with any SQuery node (e.g., synonyms).",
          "format": "int32",
          "type": "integer"
        },
        "queryMatchFraction": {
          "description": "A number of matched query terms divided by the number of all terms in query. Synonyms or other terms that appear in squery but not in the raw query are excluded. Takes values in [0, 1].",
          "format": "float",
          "type": "number"
        },
        "queryRelevance": {
          "description": "Represents how relavant this title candidate is to the query. Ranged in [0, 1], and this signal is basically calculated as Cosine-similarity between QBST term vector and pQ2T model of title candidate sentence.",
          "format": "float",
          "type": "number"
        },
        "sourceGeometry": {
          "type": "boolean"
        },
        "sourceHeadingTag": {
          "type": "boolean"
        },
        "sourceLocalTitle": {
          "type": "boolean"
        },
        "sourceOffdomainAnchor": {
          "type": "boolean"
        },
        "sourceOndomainAnchor": {
          "type": "boolean"
        },
        "sourceOnsiteAnchor": {
          "type": "boolean"
        },
        "sourceTitleTag": {
          "description": "=============================================================== Title candidate's original source information. They are populated only for non-production environment for debugging purposes.",
          "type": "boolean"
        },
        "sourceTransliteratedTitle": {
          "type": "boolean"
        },
        "testGoldmineFinalScore": {
          "description": "`goldmine_final_score` value in test.",
          "format": "float",
          "type": "number"
        },
        "testRank": {
          "description": "The ranking index of this candidate (starting from 0) in test.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "Title text to display. Populated for debugging purpose only, and won't be used for model inferences. This represetns the exact display text in SERP, with modifications like truncations or site-title appending involved.",
          "type": "string"
        },
        "widthFraction": {
          "description": "A rendered width of this title divided by the max allowed width for title. Takes values in [0, 1].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetBrainFeatures": {
      "description": "Snippet brain scores.",
      "id": "QualityPreviewSnippetBrainFeatures",
      "properties": {
        "isSnippetBrainBoldingTriggered": {
          "description": "Is the bolding triggered.",
          "type": "boolean"
        },
        "modelScore": {
          "description": "The score by SnippetBrain model.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetDocumentFeatures": {
      "description": "Document related features used in snippets scoring. Next ID: 10",
      "id": "QualityPreviewSnippetDocumentFeatures",
      "properties": {
        "experimentalTitleSalientTermsScore": {
          "format": "float",
          "type": "number"
        },
        "leadingtextDistanceScore": {
          "format": "float",
          "type": "number"
        },
        "metaBoostScore": {
          "format": "float",
          "type": "number"
        },
        "salientPositionBoostScore": {
          "format": "float",
          "type": "number"
        },
        "salientTermsScore": {
          "format": "float",
          "type": "number"
        },
        "schemaOrgDescriptionBoostScore": {
          "format": "float",
          "type": "number"
        },
        "unstableTokensScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetExperimentalFeatures": {
      "id": "QualityPreviewSnippetExperimentalFeatures",
      "properties": {
        "isLikelyHomepage": {
          "type": "boolean"
        },
        "numQueryItems": {
          "format": "uint32",
          "type": "integer"
        },
        "numTidbits": {
          "format": "uint32",
          "type": "integer"
        },
        "numVisibleTokens": {
          "format": "uint32",
          "type": "integer"
        },
        "radish": {
          "$ref": "QualityPreviewSnippetRadishFeatures"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetQualityFeatures": {
      "description": "Quality related features used in snippets scoring. Next ID: 10",
      "id": "QualityPreviewSnippetQualityFeatures",
      "properties": {
        "foreignMetaScore": {
          "format": "float",
          "type": "number"
        },
        "hiddenRatioScore": {
          "format": "float",
          "type": "number"
        },
        "numTidbitsScore": {
          "format": "float",
          "type": "number"
        },
        "numVisibleTokensScore": {
          "format": "float",
          "type": "number"
        },
        "outlinkScore": {
          "format": "float",
          "type": "number"
        },
        "redundancyScore": {
          "format": "float",
          "type": "number"
        },
        "sentenceStartScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetQueryFeatures": {
      "description": "Query related features used in snippets scoring. Next ID: 7",
      "id": "QualityPreviewSnippetQueryFeatures",
      "properties": {
        "experimentalQueryTitleScore": {
          "format": "float",
          "type": "number"
        },
        "passageembedScore": {
          "format": "float",
          "type": "number"
        },
        "queryHasPassageembedEmbeddings": {
          "type": "boolean"
        },
        "queryScore": {
          "format": "float",
          "type": "number"
        },
        "radishScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetQueryTermCoverageFeatures": {
      "description": "Snippet query term coverage features.",
      "id": "QualityPreviewSnippetQueryTermCoverageFeatures",
      "properties": {
        "snippetQueryTermCoverage": {
          "format": "float",
          "type": "number"
        },
        "titleQueryTermCoverage": {
          "format": "float",
          "type": "number"
        },
        "titleSnippetQueryTermCoverage": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityPreviewSnippetRadishFeatures": {
      "id": "QualityPreviewSnippetRadishFeatures",
      "properties": {
        "answerScore": {
          "description": "Answer score of the passage for this `navboost_query`.",
          "format": "float",
          "type": "number"
        },
        "navboostQuery": {
          "description": "Navboost query for this radish signal.",
          "type": "string"
        },
        "passageCoverage": {
          "description": "The ratio of overlapping tokens between the radish passage and snippet candidate.",
          "format": "float",
          "type": "number"
        },
        "passageType": {
          "description": "Integer value of indexing::annotations::wa_passages::Passage::Type.",
          "format": "uint32",
          "type": "integer"
        },
        "queryPassageIdx": {
          "description": "The index of this passage under `navboost_query`.",
          "format": "uint32",
          "type": "integer"
        },
        "similarityMethod": {
          "description": "How the similarity score is computed. Integer value of mustang_repos_www_snippets::RadishSignalScoringInfo::SimilarityMethod.",
          "format": "uint32",
          "type": "integer"
        },
        "similarityScore": {
          "description": "Similarity score between this `navboost_query` and the incoming query.",
          "format": "float",
          "type": "number"
        },
        "snippetCoverage": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityProductProductSiteData": {
      "description": "Protocol message for data related to product sites. This data is stored as signals data in docjoins.",
      "id": "QualityProductProductSiteData",
      "properties": {
        "locale": {
          "description": "Data for each locale.",
          "items": {
            "$ref": "QualityProductProductSiteDataLocaleData"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityProductProductSiteDataLocaleData": {
      "description": "Data for one locale.",
      "id": "QualityProductProductSiteDataLocaleData",
      "properties": {
        "boostFactor": {
          "description": "Site boosting multiplier.",
          "format": "float",
          "type": "number"
        },
        "gobiSite": {
          "description": "Whether this is a gobi site, ie, a site from a gobi domain that should be boosted for a category query with this gobi domain. For example, amazon.com is a gobi store domain for category query [hdtv] but some sites (like askville.amazon.com) from amazon.com should not be boosted.",
          "type": "boolean"
        },
        "locale": {
          "description": "Locale for this data.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityProseCSEUrlInfo": {
      "id": "QualityProseCSEUrlInfo",
      "properties": {
        "cseId": {
          "description": "There were defined back in 2007, but were never used. optional string label = 2; optional uint64 user = 3; optional float score = 4;",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityQrewriteAccountProvenance": {
      "description": "Used to annotate the source of cross-account personal data. See go/cross-account-understanding.",
      "id": "QualityQrewriteAccountProvenance",
      "properties": {
        "dataSources": {
          "items": {
            "enum": [
              "UNKNOWN_MULTI_ACCOUNT_DATA_SOURCE",
              "PRODUCTIVITY_ACCOUNT",
              "ASSISTANT_SHARED_CONTACT",
              "CALENDAR_EVENT_TITLES"
            ],
            "enumDescriptions": [
              "",
              "Data is from a linked A4W account. See go/multiaccount-a4w.",
              "Shared contacts from another user on the same device. See go/shared-contacts-assistant.",
              "Calendar event titles (currently preloaded). See go/event-title-annotation."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "googleAccount": {
          "$ref": "QualityQrewriteAccountProvenanceGoogleAccount"
        },
        "thirdPartyAccount": {
          "$ref": "QualityQrewriteAccountProvenanceThirdPartyAccount",
          "description": "Note google_account and third_party_account could both exist. For example, a user could share her Spotify account with other users registered on the same device."
        }
      },
      "type": "object"
    },
    "QualityQrewriteAccountProvenanceGoogleAccount": {
      "description": "The Google account the annotated personal data belongs to.",
      "id": "QualityQrewriteAccountProvenanceGoogleAccount",
      "properties": {
        "email": {
          "type": "string"
        },
        "gaiaId": {
          "format": "int64",
          "type": "string"
        },
        "isDasherAccount": {
          "type": "boolean"
        },
        "isSecondaryAccount": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualityQrewriteAccountProvenanceThirdPartyAccount": {
      "description": "The 3P account the annotated personal data belongs to.",
      "id": "QualityQrewriteAccountProvenanceThirdPartyAccount",
      "properties": {
        "email": {
          "description": "Email address of the linked account (eg foo@outlook.com).",
          "type": "string"
        },
        "thirdPartyProviderId": {
          "description": "Unique identifier for the third party provider. Defined by Google via AoG.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityQrewriteAlternativeNameInfo": {
      "description": "Alternative names with info like RecognitionAlternateSource indicating where is it from.",
      "id": "QualityQrewriteAlternativeNameInfo",
      "properties": {
        "matchSignal": {
          "$ref": "AssistantVerticalsCommonContactMatchSignal"
        },
        "name": {
          "type": "string"
        },
        "source": {
          "enum": [
            "NONE",
            "S3_HYPOTHESES",
            "GENIE_QUERY_ALTERNATIVES",
            "NAME_CORRECTION_LOG",
            "FUZZY_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH_DARK_LAUNCH"
          ],
          "enumDescriptions": [
            "",
            "Alternate name from S3 recognition topN hypothesis.",
            "Alternate name from Genie query alternatives.",
            "Alternate name from contact correction history.",
            "Fuzzy match with user's contacts.",
            "Neural match. See go/phonetic-contact-match.",
            "The dark launch for a neural match. We found a match, but we ignore it for serving and just log it."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityQrewriteCalendarReference": {
      "id": "QualityQrewriteCalendarReference",
      "properties": {
        "calendarAlias": {
          "$ref": "QualityQrewriteQRewriteAccountAwareCalendarAliasWrapper"
        },
        "contactCalendarName": {
          "$ref": "QualityQrewriteContactCalendarName"
        },
        "familyCalendarAlias": {
          "$ref": "QualityQrewriteFamilyCalendarAlias"
        },
        "primaryCalendarAlias": {
          "$ref": "QualityQrewritePrimaryCalendarAlias"
        }
      },
      "type": "object"
    },
    "QualityQrewriteCandidateId": {
      "description": "A complete query candidate Id includes a list of Id fields. The Id field order is maintained as the order by which each field is appended to the list.",
      "id": "QualityQrewriteCandidateId",
      "properties": {
        "field": {
          "items": {
            "$ref": "QualityQrewriteCandidateIdField"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityQrewriteCandidateIdField": {
      "description": "The message represents a field in the query candidate Id.",
      "id": "QualityQrewriteCandidateIdField",
      "properties": {
        "index": {
          "description": "If needed, a servlet can use this field to assign an ID to distinguish between different candidates of the same CandidateType.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "enum": [
            "CANDIDATE_TYPE_UNSPECIFIED",
            "IDENTITY",
            "SPELLING",
            "S3_TOP_HYPOTHESIS",
            "AUTO_TRANSLATE",
            "ADS_ALTERNATIVE_RUN",
            "NEARBY_RETRIEVAL",
            "CONTEXTUAL_REWRITE",
            "SAFT_TOKENIZER",
            "CONVO_FPR",
            "SPOKEN_INTENT",
            "AUTO_TRANSLATE_ARGUMENT_TRANSFER",
            "CONTEXT_AWARE_SPEECH_RECOGNITION_REWRITE",
            "MAST",
            "FUZZY_MATCHER_REWRITE",
            "SHOPPING_PREFERENCES_REWRITE",
            "MAGI_CONTEXT_ENGINE_REWRITE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Indicates it is Ads qrewrite request candidate, and it should run on alternative data version. go/ads-qrewrite-multiversion",
            "NearbyRetrieval creates a supplemental QRewriteResult to send to Superroot where it is used for a supplemental index lookup.",
            "Indicates that Genie rewrote the query using contextual information.",
            "",
            "ConversationalRewriteServlet rewrote the query using context",
            "",
            "Auto Translate with argument transfer. go/missandei-argument-transfer-through-qus The query was rewritten because it is probably a speech recognition error. go/asr-rewriter.",
            "",
            "go/mast-query",
            "go/afm",
            "Rewrite with user explicit shopping preferences.",
            "Rewrite with context from chat conversation with Magi."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityQrewriteContactCalendarName": {
      "id": "QualityQrewriteContactCalendarName",
      "properties": {
        "contact": {
          "$ref": "NlpSemanticParsingModelsPersonPerson"
        }
      },
      "type": "object"
    },
    "QualityQrewriteFamilyCalendarAlias": {
      "id": "QualityQrewriteFamilyCalendarAlias",
      "properties": {
        "familyCalendarId": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityQrewritePersonalContactData": {
      "description": "Contact metadata Next Id: 36",
      "id": "QualityQrewritePersonalContactData",
      "properties": {
        "accountProvenance": {
          "$ref": "QualityQrewriteAccountProvenance",
          "description": "Tracks the account owner of this contact. See go/cross-account-understanding."
        },
        "additionalContactMetadata": {
          "description": "Other metadata relating with the contact. This field is added so that the value can be copied to the corresponding field |additional_contact_metadata| in person.proto, that later will be logged to Assistant Interaction Event footprint from client side.",
          "items": {
            "additionalProperties": {
              "description": "Properties of the object. Contains field @type with type URL.",
              "type": "any"
            },
            "type": "object"
          },
          "type": "array"
        },
        "commonNameAliasConfidence": {
          "description": "Populated only if matched_name_type is GIVEN_NAME_ALIAS or FULL_NAME_ALIAS.",
          "format": "float",
          "type": "number"
        },
        "conceptId": {
          "description": "Concept id for relationships in query language, e.g. \"Mother\" in English, \"M\u00e8re\" in French. It's only populated for source = RELATIONSHIP.",
          "type": "string"
        },
        "conceptIdEn": {
          "description": "Concept id for relationships in English, e.g. \"Mother\" for all non-English locales. It's only populated for source = RELATIONSHIP. It is used as the key to store relationship in memory (see http://go/assistant-relationship). For English, this field is not filled, and we will use concept_id field as the relationship key in memory.",
          "type": "string"
        },
        "displayName": {
          "description": "TODO(shuaiwang) these are kept here temporarily because aqua regression tests are still referring to them, migrating aqua regression tests to use the new person_data field depends on binary change (i.e. this proto change) so there's a period we need to keep both.",
          "type": "string"
        },
        "familyName": {
          "type": "string"
        },
        "ffracScore": {
          "description": "The ffrac score of the suggested contact from Starlight.",
          "format": "double",
          "type": "number"
        },
        "gaiaId": {
          "format": "int64",
          "type": "string"
        },
        "givenName": {
          "type": "string"
        },
        "hasAddressForDeviceContacts": {
          "description": "Whether we have address info for this contact. IMPORTANT, READ BEFORE USING THIS FIELD: - This is a temporary solution to export this info for device contacts. - This could only be set for device contacts, contacts from other sources won't have this bit set even if there's address available inside person_data. - This will go away once Starlight supports device contacts, addresses will be available inside person_data the same way as Focus contacts. TODO(shuaiwang) remove after b/20412551",
          "type": "boolean"
        },
        "hasGplusProfile": {
          "type": "boolean"
        },
        "isFromOnDeviceLookup": {
          "description": "If the contact data is from on device lookup.",
          "type": "boolean"
        },
        "isTransliteratedMatch": {
          "description": "Indicate the contact matches the transliterated query.",
          "type": "boolean"
        },
        "isVisibleToGuestsRelationship": {
          "description": "If the lookup was done using relationship which is visible to guests. This value will only be set if lookup was done using relationship. E.g. user has a guest relationship (doctor) -> (John) And user says \"call doctor\", then this value will be true.",
          "type": "boolean"
        },
        "lookupNameSource": {
          "enum": [
            "UNKNOWN",
            "SPELLING"
          ],
          "enumDescriptions": [
            "",
            "User spelled the name after contact no match."
          ],
          "type": "string"
        },
        "matchSignal": {
          "$ref": "AssistantVerticalsCommonContactMatchSignal",
          "description": "Populate only if AlternateSource is not NONE."
        },
        "matchedNameType": {
          "description": "LINT.ThenChange(//depot/google3/assistant/verticals/communication/\\ fulfillment/proto/contact_logging_enums.proto, //depot/google3/assistant/api/dialog_state/values/person.proto, //depot/google3/assistant/context/proto/person.proto)",
          "enum": [
            "UNSPECIFIED",
            "GIVEN_NAME",
            "FAMILY_NAME",
            "FULL_NAME",
            "NICKNAME",
            "OTHER",
            "INITIAL_WITH_FAMILY_NAME",
            "EMAIL_USERNAME",
            "VANITY_NICKNAME",
            "GIVEN_NAME_ALIAS",
            "FULL_NAME_ALIAS",
            "HOMOPHONE_GIVEN_NAME",
            "HOMOPHONE_FAMILY_NAME",
            "HOMOPHONE_FULL_NAME",
            "HOMOPHONE_NICKNAME",
            "GIVEN_MIDDLE_NAME",
            "GIVEN_NAME_WITH_FAMILY_NAME_INITIAL",
            "EMAIL_OF_FAMILY_MEMBER"
          ],
          "enumDescriptions": [
            "",
            "Contact's given name, or first word in name, or last word if query is in CJK.",
            "Contact's family name, or last word in name, or first word if query is in CJK.",
            "Contact's display name, or given+family, or family+given if query is in CJK. Contact's middle name is optional.",
            "Query span matches contact's nickname.",
            "Not used yet.",
            "Either or both of first/middle initials along with family name.",
            "Email username, controlled by FocusNameParams.annotate_email_username.",
            "Vanity nicknames like \"myself\", data is at //quality/qrewrite/servlets/internal/focus_name/data/vanity_nickname.txt",
            "Contact's given name is a common name alias of query span, e.g. query [Bob] may match contact with given name \"Robert\".",
            "Contact's given name is a common name alias of first word in query span, while remaining parts fully matched.",
            "Homophone name match of given name, or last word. Only for CJK query.",
            "Homophone name match of family name, or first word. Only for CJK query.",
            "Homophone name match of full name, or family+given. Only for CJK query.",
            "Homophone name match of nickname. Only for CJK query.",
            "Contact's given name + middle name. Only for contacts with 3 words.",
            "Contact's given name along with last name initial. Only support non-CJKT contact name.",
            "This type indicates we find a match of the user's family member - as defined by families.google.com - by matching the email full address. Controlled by FocusNameParams.annotate_email_full_address."
          ],
          "type": "string"
        },
        "matchedRecognitionAlternateName": {
          "description": "Alternate name from recognition that has contact matched. Need this to make name correction history log consistent.",
          "type": "string"
        },
        "personData": {
          "$ref": "AppsPeopleOzExternalMergedpeopleapiPerson",
          "description": "Metadata such as name, email, phone, etc."
        },
        "personalContactDataLog": {
          "$ref": "AssistantLogsCommunicationPersonalContactDataLog",
          "description": "Log version of PersonalContactData. Holds e.g. FUZZY match results. It is populated in NamedContactFrame when fuzzy match is performed: http://google3/quality/dialog_manager/frames/contact/named_contact_frame.cc?l=255&rcl=331994299 Currently only fuzzy ngram match results are logged here."
        },
        "pkgPerson": {
          "$ref": "NlpSemanticParsingQRefAnnotation",
          "description": "Contains information about a Copley Person resolution (go/copley-people). This field is used to propagate metadata related to the resolved person, used for attribution and logging. Meaningful data (addresses, phone numbers) are copied into person_data."
        },
        "pkgReferenceType": {
          "enum": [
            "UNKNOWN_PKG_REFERENCE_TYPE",
            "PKG_NAME_REFERENCE",
            "PKG_RELATIONSHIP_REFERENCE"
          ],
          "enumDescriptions": [
            "",
            "Ann [Charlie]",
            "my family dad my sister's kids"
          ],
          "type": "string"
        },
        "recognitionAlternateScore": {
          "description": "Populate only if AlternateSource is not NONE.",
          "format": "float",
          "type": "number"
        },
        "recognitionAlternateSource": {
          "description": "If not none, then it indicates the personal contact data is alternate and how the alternate is fulfilled.",
          "enum": [
            "NONE",
            "S3_HYPOTHESES",
            "GENIE_QUERY_ALTERNATIVES",
            "NAME_CORRECTION_LOG",
            "FUZZY_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH",
            "NEURAL_CONTACT_MATCH_DARK_LAUNCH"
          ],
          "enumDescriptions": [
            "",
            "Alternate name from S3 recognition topN hypothesis.",
            "Alternate name from Genie query alternatives.",
            "Alternate name from contact correction history.",
            "Fuzzy match with user's contacts.",
            "Neural match. See go/phonetic-contact-match.",
            "The dark launch for a neural match. We found a match, but we ignore it for serving and just log it."
          ],
          "type": "string"
        },
        "relationshipLexicalInfo": {
          "$ref": "CopleyLexicalMetadata",
          "description": "Lexical information for relationships in query language, e.g. \"Mother\" in English, \"M\u00e8re\" in French. It's only populated for source = RELATIONSHIP."
        },
        "relationshipMemory": {
          "description": "Resolved relationship names and contact pointers from Assistant Memory. This field is populated into both relationship annotation (source = RELATIONSHIP) and Focus/device contacts retrieved by that contact name. The data from Assistant Memory comes from two different columns: ASSISTANT_SETTINGS and PWS_CONTACT_ANNOTATION. We support multiple people with same relationship (e.g. multiple brothers) by using a repeated relationship_memory field. Examples are at go/person-subgrammar-relationship.",
          "items": {
            "$ref": "QualityQrewriteRelationshipMemoryData"
          },
          "type": "array"
        },
        "sharedContactOwnerGaiaId": {
          "description": "Gaia ID of the user this contact belongs to. Only populates if contact is shared from another user. See go/shared-contacts-assistant. E.g. user A triggers the request and uses user B's contact data (which is marked as visible to user A). This field will be populated with user B's gaia id.",
          "format": "int64",
          "type": "string"
        },
        "source": {
          "description": "LINT.ThenChange(//depot/google3/assistant/verticals/communication/\\ fulfillment/proto/contact_logging_enums.proto, //depot/google3/assistant/api/dialog_state/values/person.proto) Data source of the contact data.",
          "enum": [
            "FOCUS_CONTACT",
            "DEVICE_CONTACT",
            "GMAIL_INFERENCE",
            "S3_DECORATOR",
            "RELATIONSHIP",
            "VANITY",
            "SIGNED_OUT_DEVICE",
            "SHARED_CONTACT",
            "FAMILY_MEMBER",
            "SHARED_DEVICE_USER",
            "ON_DEVICE_CONTACT_LOOKUP"
          ],
          "enumDescriptions": [
            "Contacts from Focus",
            "Contacts from device, see go/device-content",
            "Contacts inferred from Gmail",
            "Contacts from S3 decorator",
            "Whitelisted relationships no matter if user has such contact, see go/sls-personal_relationship_names_and_aliases.",
            "Vanity nicknames or user's own profile name.",
            "Signed out device contact names",
            "Contacts shared from other users. See go/multi-user-shared-contact.",
            "People in the user's family group in http://families.google.com who are not contacts.",
            "People who share a device with the user who are not contacts.",
            "Contacts from on device lookup during contact fulfillment."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityQrewritePrimaryCalendarAlias": {
      "id": "QualityQrewritePrimaryCalendarAlias",
      "properties": {},
      "type": "object"
    },
    "QualityQrewriteQRewriteAccountAwareCalendarAliasWrapper": {
      "description": "A calendar alias wrapper used for query annotation. Aliases values are defined in the extension with build visibility restrictions as they may contain data from an account other than the user's primary account. This proto is used as an metadata output from the QRewrite annotation. It can be used for calendar aliases from different sources i.e. aliases based on the domain of the account associated with the calendar (go/calendar-aliases-annotation).",
      "id": "QualityQrewriteQRewriteAccountAwareCalendarAliasWrapper",
      "properties": {},
      "type": "object"
    },
    "QualityQrewriteRelationshipMemoryData": {
      "description": "Relationship->contact data provided by Assistant Memory.",
      "id": "QualityQrewriteRelationshipMemoryData",
      "properties": {
        "contactPointer": {
          "$ref": "FocusBackendContactPointer",
          "description": "The contact pointer. See http://go/assistant-contact-id."
        },
        "value": {
          "description": "The contact name copied from UserAttribute.value.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityRankembedMustangMustangRankEmbedInfo": {
      "description": "Used as Mustang attachment DO NOT: - ACCESS THE PROTO FIELDS DIRECTLY - USE THE DECODING LIBRARY IN quality/rankembed/mustang/fixed_point_decoding_helpers.h INSTEAD. - USE HARDCODED MustangRankEmbedInfo TEXT PROTOS IN TESTS! USE quality/rankembed/test_utils/mustang_rankembed_info_utils.h INSTEAD.",
      "id": "QualityRankembedMustangMustangRankEmbedInfo",
      "properties": {
        "compressedDocumentEmbedding": {
          "$ref": "QualityRankembedMustangMustangRankEmbedInfoCompressedEmbedding",
          "description": "Each uint64 encodes 8 8-bit values for the quantized document embedding"
        },
        "fixedPointEncoding": {
          "description": "This field replaces the above 3 \"per-encoding-type-fields\", where the encoding type (and the embedding type) are part of the encoding, and is stored in the first byte. The remaining bytes are the same as the previous 3 fields, but shifted by 1 byte. - byte[0]: encoding type & embedding type - byte[1....]: similar to the above depending on the encoding type.",
          "format": "byte",
          "type": "string"
        },
        "scaledFixedPoint4Encoding": {
          "description": "- byte[0]: version - bytes[1...4]: scalar - bytes[5,...]: the values, one byte per 2 values",
          "format": "byte",
          "type": "string"
        },
        "scaledFixedPoint8Encoding": {
          "description": "- byte[0]: version - bytes[1...4]: scalar - bytes[5,...]: the values, one byte per value",
          "format": "byte",
          "type": "string"
        },
        "scaledShiftedFixedPoint4Encoding": {
          "description": "- byte[0]: version - bytes[1...4]: scalar - bytes[5...8]: shift - bytes[9,...]: the values, one byte per 2 values",
          "format": "byte",
          "type": "string"
        },
        "versionAndImprovInfo": {
          "description": "First 7 bits encode the version, then each chunck of 5 bits encode the index of a potential improv query (lsb to msb) -------|-----|-----|-----|-----|----- version| id1 | id2 | id3 | id4 | id5 where id1 is the index of the first improv query in the improv debug table. As of cl/270008220, this field only contains the version info. For backward compatibility, version still only uses the first 7 bits, and is still prepended by 5 1 bits.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityRankembedMustangMustangRankEmbedInfoCompressedEmbedding": {
      "id": "QualityRankembedMustangMustangRankEmbedInfoCompressedEmbedding",
      "properties": {
        "packedValue": {
          "description": "using fixed64 instead of uint64 saves ~14% is storage",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "value": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData": {
      "id": "QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData",
      "properties": {
        "app": {
          "items": {
            "$ref": "QualityRichsnippetsAppsProtosLaunchableAppPerDocData"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityRichsnippetsAppsProtosLaunchableAppPerDocData": {
      "description": "A subset of LaunchableApplication, which is stored in the PerDocData proto (indexer/perdocdata/perdocdata.proto) and thus stored in the Search Mustang index. It is used to identify documents containing app links at serving time by SuperRoot. A subset of LaunchableApplication is used to save on storage requirements.",
      "id": "QualityRichsnippetsAppsProtosLaunchableAppPerDocData",
      "properties": {
        "indexStatus": {
          "enum": [
            "DISCOVERED",
            "VALIDATED"
          ],
          "enumDescriptions": [
            "This deeplink has been associated with a web document. There is no additional information whether the deeplink's content matches the web document's content.",
            "The contents of this deeplink match the web document it is associated with."
          ],
          "type": "string"
        },
        "packageIdFingerprint": {
          "description": "Android package id of the application associated with this document (example: 'com.imdb.mobile'), encoded with the Fingerprint2011() function.",
          "format": "uint64",
          "type": "string"
        },
        "perAppInfoEncoded": {
          "description": "A subset of the data in the PerAppInfo message, encoded to save on space. See quality/calypso/utils/app_info_utils.h for encoding/decoding.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySalientCountriesSalientCountry": {
      "description": "This is a measure of how salient this country is for the document.",
      "id": "QualitySalientCountriesSalientCountry",
      "properties": {
        "country": {
          "description": "2-letter country format.",
          "type": "string"
        },
        "salience": {
          "description": "How salient this country is for the document. [0,1] range.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualitySalientCountriesSalientCountrySet": {
      "description": "Set of SalientCountry for a document.",
      "id": "QualitySalientCountriesSalientCountrySet",
      "properties": {
        "packedCountry": {
          "description": "Packed Country and salience optimized for index storage",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "packedSalience": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "salientCountry": {
          "items": {
            "$ref": "QualitySalientCountriesSalientCountry"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualitySalientTermsDocData": {
      "description": "DocData contains additional salient-term-set-level information that complements a SalientTermSet.",
      "id": "QualitySalientTermsDocData",
      "properties": {
        "confidence": {
          "description": "confidence is a measurement of how much data we had to compute the SalientTermSet. Range: [0.0, 1.0]",
          "format": "float",
          "type": "number"
        },
        "headVolumeRatio": {
          "description": "head_volume_ratio is the ratio of the sum of term frequency of the top K terms over the volume of all terms. Range: [0.0, 1.0]. K is defined by Accumulator2Params::head_size.",
          "format": "float",
          "type": "number"
        },
        "language": {
          "description": "language is the main language of this SalientTermSet.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "signalData": {
          "description": "signal_data contains signal-specific (e.g., body, anchors, clicks) data for this SalientTermSet.",
          "items": {
            "$ref": "QualitySalientTermsSignalData"
          },
          "type": "array"
        },
        "virtualVolume": {
          "description": "virtual_volume is a measurement of how much data we had to compute the SalientTermSet. Range: [0.0, +infinity)].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualitySalientTermsSalientTerm": {
      "description": "SalientTerm can be two things depending on where this message is. When right under a SalientTermSet, it is a normalized term and weight pair, along with other term-level data. When under another SalientTerm message, it is a non-normalized original term (see original_term field).",
      "id": "QualitySalientTermsSalientTerm",
      "properties": {
        "idf": {
          "description": "idf of the original_term. Used by Accumulator2. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "label": {
          "description": "label can be two things depending on where this message is. When right under a SalientTermSet, it is the normalized term returned by quality_salient_terms::utils::NormalizeTerm() from salient_terms_utils.h. When under another SalientTerm message, it is the original term as found in a signal (see original_term field).",
          "type": "string"
        },
        "originalTerm": {
          "description": "original_term are the different ways we found this normalized term in the signals. They are in increasing idf order (the most common version first). An empty string means that this original term is the same as the label field in the parent SalientTerm message. NOTE: Please do not access this field directly. Use quality_salient_terms::utils::OriginalTermsIterator from salient_terms_utils.h instead.",
          "items": {
            "$ref": "QualitySalientTermsSalientTerm"
          },
          "type": "array"
        },
        "salience": {
          "description": "salience is the importance of the term as a descriptor in [0, 1] (the higher the more important). This field takes precedence over weight field below. NOTE: Please do not access this field directly. Use quality_salient_terms::utils::GetSalience() from salient_terms_utils.h instead.",
          "format": "float",
          "type": "number"
        },
        "signalTerm": {
          "description": "signal_term contains extra signal-specific (e.g., body, anchors, clicks) data for this term.",
          "items": {
            "$ref": "QualitySalientTermsSignalTermData"
          },
          "type": "array"
        },
        "virtualTf": {
          "description": "virtual_tf is the accumulated corrected term frequency from all the signals. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "weight": {
          "description": "weight is the importance of the term as a descriptor in [0, 100] (the higher the more important). NOTE: Please do not access this field directly. Use quality_salient_terms::utils::GetSalience() from salient_terms_utils.h instead. DEPRECATED: prefer salience field above.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualitySalientTermsSalientTermSet": {
      "description": "SalientTermSet is a collection of terms (unigrams and bigrams) with associated weights that can describe something. The \"salient terms\".",
      "id": "QualitySalientTermsSalientTermSet",
      "properties": {
        "docData": {
          "$ref": "QualitySalientTermsDocData",
          "description": "doc_data contain additional salient-term-set-level data."
        },
        "salientTerm": {
          "description": "salient_term is the list of terms that are good descriptors, sorted in decreasing order of weight.",
          "items": {
            "$ref": "QualitySalientTermsSalientTerm"
          },
          "type": "array"
        },
        "version": {
          "description": "version is the Salient Terms version used to create the SalientTermSet. This is specific to web documents salient terms.",
          "enum": [
            "UNKNOWN",
            "V1",
            "V2",
            "V2_1",
            "V2_2",
            "V3",
            "V3_1",
            "V3_2",
            "V4",
            "V4_1",
            "V4_2",
            "V5",
            "V5_1",
            "V5_2",
            "V1_BODYONLY",
            "V2_BODYONLY",
            "RENAME_ME_TO_ADD_NEW_ENUM_16",
            "RENAME_ME_TO_ADD_NEW_ENUM_17",
            "RENAME_ME_TO_ADD_NEW_ENUM_18",
            "RENAME_ME_TO_ADD_NEW_ENUM_19",
            "RENAME_ME_TO_ADD_NEW_ENUM_20",
            "RENAME_ME_TO_ADD_NEW_ENUM_21",
            "RENAME_ME_TO_ADD_NEW_ENUM_22",
            "RENAME_ME_TO_ADD_NEW_ENUM_23",
            "RENAME_ME_TO_ADD_NEW_ENUM_24",
            "RENAME_ME_TO_ADD_NEW_ENUM_25"
          ],
          "enumDescriptions": [
            "In case an old binary doesn't know a recently added version.",
            "Approximate AScorer version (ariane/104957).",
            "Tucano version (ariane/115621).",
            "Tucano 2.1 version (ariane/125789).",
            "Tucano 2.2 version (ariane/139157).",
            "Lyrebird: Salient Terms V3 (ariane/183676).",
            "Lyrebird V2: Salient Terms V3.1 (ariane/194368).",
            "Lyrebird V3: Salient Terms V3.2 (ariane/201742).",
            "Lyrebird V4: Salient Terms V4 (ariane/279440).",
            "Lyrebird V4.1: Salient Terms V4.1 (ariane/4015709 &",
            "ariane/4031318). Lyrebird V4.2: Salient Terms V4.2 (ariane/4057245)",
            "Lyrebird V5: Salient Terms V5 (ariane/4076831)",
            "Lyrebird V5.1: Salient Terms V5.1 (ariane/4144754)",
            "Lyrebird V5.2: Salient Terms V5.2 (ariane/4218250)",
            "Lyrebird BodyOnly V1.",
            "Experimental version of Lyrebird BodyOnly V2.",
            "Dummy enum values to be renamed when a new enum value is needed. Note that this is a requirement from go/cds-schema-council. If you rename one of these enum values, be sure to add (at least one) more below.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySalientTermsSignalData": {
      "description": "SignalData stores signal-specific salient-term-set-level information. Stores mostly internal data as it is one of the primary data structures used in the populators.",
      "id": "QualitySalientTermsSignalData",
      "properties": {
        "bias": {
          "description": "A fixed bias for this signal, the higher the stronger. This can be used to balance the weight of signals independently of the confidence we give it. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "confidence": {
          "description": "The measurement of how much we trust this signal. Range: [0.0, 1.0] This field is available is both debug and non-debug mode.",
          "format": "float",
          "type": "number"
        },
        "halfSalience": {
          "description": "Raw saliences equal to half_salience will be equal to 0.5 normalized. Range: [0, volume]. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "noiseCorrection": {
          "description": "The minimum TF for a term not to be considered noise. While the possible range of values for this field is [0, observed_volume], it is expected to be a somewhat small percentage of observed_volume (e.g. 5%). This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "observedConfidence": {
          "description": "The measurement of how much we trust this signal, calculated using the observed volume. Range: [0.0, 1.0] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "observedVolume": {
          "description": "The amount of signal we observed for a document. Range: [0.0, +infinity) This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "rawVolume": {
          "description": "The amount of raw signal we observed for a document. Range: [0.0, +infinity) This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "source": {
          "description": "source is the type of the signal of this SignalData.",
          "enum": [
            "BODY",
            "ANCHORS",
            "CLICKS",
            "TITLE",
            "NAME",
            "DATE",
            "URL",
            "ENTITY_NAVBOOST",
            "SYNTHETIC_BODY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Only used for Entity Salient Terms.",
            "Only used for Entity Salient Terms."
          ],
          "type": "string"
        },
        "volume": {
          "description": "The amount of signal left after applying all corrections. Range: [0.0, +infinity) This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualitySalientTermsSignalTermData": {
      "description": "SignalTermData is signal-specific term-level information. Stores mostly internal data as it is one of the primary data structures used in the populators.",
      "id": "QualitySalientTermsSignalTermData",
      "properties": {
        "bigramDiscountTf": {
          "description": "The deduction of bigram counts from its unigram children. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "bigramness": {
          "description": "How much we trust this bigram. For bigrams only. Range: [0.0, 1.0] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "centrality": {
          "description": "Measures how topical this term is to a particular signal. A term like \"lincoln\" in the Abraham Lincoln's Wikipedia page should have a centrality close to 1.0 while non-central terms like \"florida\" should have a centrality close to 0.0. Range: [0.0, 1.0] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "correctedTf": {
          "description": "The final term frequency for a particular term. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "expectedTf": {
          "description": "The term frequency we were expecting for a term given its IDF. Range: [0, observed_volume] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "globalNpmi": {
          "description": "Global NPMI. For bigrams only. This is a measure of the quality of bigrams calculated using IDF. Range: [-1.0, 1.0] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "idf": {
          "description": "The IDF of the label of a particular term. For a canonical term, this is the mean IDF of its originals, weighted by their observed TF. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "isBigram": {
          "description": "Whether or not this term is a bigram. This field is only available in debug mode.",
          "type": "boolean"
        },
        "label": {
          "description": "Raw string that identifies a particular term. This field is only available in debug mode.",
          "type": "string"
        },
        "localNpmi": {
          "description": "Local NPMI (normalized pointwise mutual information). For bigrams only. This is a measure of the quality of bigrams calculated using observed TF. Range: [-1.0, 1.0] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "observedTf": {
          "description": "The observed term frequency in a particular signal. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "originalTerm": {
          "description": "The list of the original terms for a canonical. This is used in the pipeline and it is not present in the final output. This field is only available in debug mode.",
          "items": {
            "$ref": "QualitySalientTermsSignalTermData"
          },
          "type": "array"
        },
        "rawTf": {
          "description": "The raw term frequency in a particular signal. This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "salience": {
          "description": "The measure of how important this term is in this signal. Range: [0.0, 1.0] This field is only available in debug mode.",
          "format": "float",
          "type": "number"
        },
        "source": {
          "description": "source is the type of the signal of this SignalTermData.",
          "enum": [
            "BODY",
            "ANCHORS",
            "CLICKS",
            "TITLE",
            "NAME",
            "DATE",
            "URL",
            "ENTITY_NAVBOOST",
            "SYNTHETIC_BODY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Only used for Entity Salient Terms.",
            "Only used for Entity Salient Terms."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySherlockKnexAnnotation": {
      "id": "QualitySherlockKnexAnnotation",
      "properties": {
        "item": {
          "items": {
            "$ref": "QualitySherlockKnexAnnotationItem"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualitySherlockKnexAnnotationItem": {
      "id": "QualitySherlockKnexAnnotationItem",
      "properties": {
        "calibratedScore": {
          "description": "in [0, 1].",
          "format": "float",
          "type": "number"
        },
        "debugName": {
          "type": "string"
        },
        "equivalentMid": {
          "description": "in /m/ or /g/.",
          "type": "string"
        },
        "score": {
          "description": "in [0, 1].",
          "format": "float",
          "type": "number"
        },
        "version": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachment": {
      "description": "This proto is a lightweight version of ShoppingAnnotation in docjoin attachment. We're doing a deep copy of protos defined in ShoppingAnnotation so that we can control individual fields that will sit in Muppet. Data here will be used for scoring organic shopping web results and previews. Many shopping related signals, e.g., product review score, are also served from this attachment. Next ID: 21",
      "id": "QualityShoppingShoppingAttachment",
      "properties": {
        "datasetModelArticleScore": {
          "description": "Score from the blockbert article classifier model. go/article-understanding-project",
          "format": "int32",
          "type": "integer"
        },
        "datasetModelBuyingGuideScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelForumListScore": {
          "description": "From forum and qna confidence score * 100, http://go/sdu-ugc-page-intro",
          "format": "int32",
          "type": "integer"
        },
        "datasetModelForumSingleScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelInStoreOnlyScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelIndirectAvailabilityScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelMultiProductScore": {
          "description": "From indexing.ml.PageType.confidence * 100 (DatasetModelAnnotation in cdoc) go/sdu-shopping-page-intro",
          "format": "int32",
          "type": "integer"
        },
        "datasetModelProductComparisonScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelProductReviewScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelProductTopnScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelQnaListScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelQnaSingleScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelSingleProductScore": {
          "format": "int32",
          "type": "integer"
        },
        "datasetModelSoldOutScore": {
          "format": "int32",
          "type": "integer"
        },
        "expiredShoppingPageScore": {
          "description": "From indexing.badpages.CollapserInfo.expired_shopping_page_score * 100",
          "format": "int32",
          "type": "integer"
        },
        "multiProductScore": {
          "description": "From MagicPageTypeAnnotation.multiplicity.confidence_score * 100 Deprecated as of July 2020 when dataset_model_multi_product_score and dataset_model_single_product_score were added.",
          "format": "int32",
          "type": "integer"
        },
        "product": {
          "items": {
            "$ref": "QualityShoppingShoppingAttachmentProduct"
          },
          "type": "array"
        },
        "shoppingSiteScore": {
          "description": "From ShoppingSiteClassifier.score * 100",
          "format": "int32",
          "type": "integer"
        },
        "shoppingSiteScoreShopfab": {
          "description": "From ShoppingSiteClassifierShopfab.score * 100",
          "format": "int32",
          "type": "integer"
        },
        "singleProductScore": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachmentLocale": {
      "id": "QualityShoppingShoppingAttachmentLocale",
      "properties": {
        "languageId": {
          "description": "Use integers for fast scoring. Note: 26 is UNKNOWN_LANGUAGE_ID, 0 is UNKNOWN region, see i18n::languages::Language and StableInternalRegionconverter Use -1 as default for both.",
          "format": "int32",
          "type": "integer"
        },
        "regionId": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachmentMokaFacetValue": {
      "description": "Moka product attribute facet (go/gx).",
      "id": "QualityShoppingShoppingAttachmentMokaFacetValue",
      "properties": {
        "facetId": {
          "format": "int64",
          "type": "string"
        },
        "measureValue": {
          "format": "double",
          "type": "number"
        },
        "tagId": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachmentOffer": {
      "id": "QualityShoppingShoppingAttachmentOffer",
      "properties": {
        "condition": {
          "enum": [
            "CONDITION_UNKNOWN",
            "CONDITION_NEW",
            "CONDITION_REFURBISHED",
            "CONDITION_USED",
            "CONDITION_OTHER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "controlType": {
          "enum": [
            "OFFER_CONTROL_TYPE_UNKNOWN",
            "OFFER_CONTROL_TYPE_MERCHANT_MANAGED",
            "OFFER_CONTROL_TYPE_UNMANAGED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "fingerprintOfOfferUrls": {
          "description": "fingerprint of original offer item_urland mobile_offer_url (if present) to be able to understand if offer data came from different url.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "imageId": {
          "description": "image_id is sorted and distinct for efficient search during serving.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "inferredImages": {
          "description": "inferred_images are sorted by inferred_image_id for efficient search during serving.",
          "items": {
            "$ref": "ShoppingWebentityShoppingAnnotationInferredImage"
          },
          "type": "array"
        },
        "isLensBuildable": {
          "description": "Is the offer Lens buildable. The corresponding field in Shopping Annotation is SurfaceSelection.",
          "type": "boolean"
        },
        "matchingType": {
          "description": "information about methods used to match offer with indexed url. See shopping_annotation.proto",
          "format": "int64",
          "type": "string"
        },
        "merchantAccountId": {
          "description": "account_id of the merchant in shopping systems.",
          "format": "int64",
          "type": "string"
        },
        "merchantItemId": {
          "description": "merchant_item_id is meaningless without the merchant_account_id.",
          "type": "string"
        },
        "nonDisplayableBrandMerchantRelationship": {
          "description": "direct to consumer brand merchant relationship",
          "enum": [
            "OFFER_BRAND_MERCHANT_RELATIONSHIP_UNKNOWN",
            "OFFER_BRAND_MERCHANT_RELATIONSHIP_DTC_CHANNEL"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "nonDisplayableCurrency": {
          "type": "string"
        },
        "nonDisplayableOrganicScoreMillis": {
          "description": "Normalized riskiness score for Organic destinations. It's in range [1,1000] with 1 being the worst score and 1000 being the best.",
          "format": "int32",
          "type": "integer"
        },
        "offerDocid": {
          "format": "uint64",
          "type": "string"
        },
        "refType": {
          "enum": [
            "REFERENCE_TYPE_UNKNOWN",
            "REFERENCE_TYPE_MAIN_OFFER_PAGE",
            "REFERENCE_TYPE_OUTLINK"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "soriVersionId": {
          "$ref": "ShoppingWebentityShoppingAnnotationSoriVersionId"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachmentPBlock": {
      "description": "Next ID: 18",
      "id": "QualityShoppingShoppingAttachmentPBlock",
      "properties": {
        "fullTitle": {
          "description": "Field full_title may contain duplicate info from title and list_title.",
          "type": "string"
        },
        "imageDocid": {
          "description": "Ordering for `image_docid`, and `image_info` are the same.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "imageInfo": {
          "items": {
            "$ref": "QualityShoppingShoppingAttachmentPBlockImageInfo"
          },
          "type": "array"
        },
        "isFreeDelivery": {
          "type": "boolean"
        },
        "isFreeReturn": {
          "type": "boolean"
        },
        "listTitle": {
          "type": "string"
        },
        "maxPriceValue": {
          "format": "float",
          "type": "number"
        },
        "minPriceValue": {
          "format": "float",
          "type": "number"
        },
        "price": {
          "type": "string"
        },
        "priceCurrency": {
          "type": "string"
        },
        "priceValue": {
          "format": "float",
          "type": "number"
        },
        "title": {
          "description": "Product info extracted by Product Blocks go/sdu-shopping-page-intro and go/product-block-extraction. Here is an example of a page with a ## list_title (Shoes) and 3 blocks with their own titles: | Shoes | | ---------------------| | * For Running | | ---------------------| | * Men's Hiking | | ---------------------| ## | * Dress Shoes | The field full_title is what we constructed to best describe the product in the block. For example, for the above 3 blocks, their full_titles will contain info from list_title: \"Shoes For Running\", \"Shoes Men's Hiking\", \"Dress Shoes\". Note that the list_title is not repeated for the 3rd block Real sample pages: http://screen/6UaoBtwWsLfbSKg http://screen/BDHRgDonKG3KcXu, http://screen/53tLwNaX8mmYzDz",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachmentPBlockImageInfo": {
      "id": "QualityShoppingShoppingAttachmentPBlockImageInfo",
      "properties": {
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityShoppingShoppingAttachmentProduct": {
      "id": "QualityShoppingShoppingAttachmentProduct",
      "properties": {
        "aggregateRating": {
          "$ref": "ShoppingWebentityShoppingAnnotationProductRating"
        },
        "brandEntityId": {
          "format": "uint64",
          "type": "string"
        },
        "catalogId": {
          "format": "uint64",
          "type": "string"
        },
        "globalProductClusterId": {
          "format": "uint64",
          "type": "string"
        },
        "locale": {
          "$ref": "QualityShoppingShoppingAttachmentLocale"
        },
        "mokaFacet": {
          "items": {
            "$ref": "QualityShoppingShoppingAttachmentMokaFacetValue"
          },
          "type": "array"
        },
        "nonDisplayableDescription": {
          "type": "string"
        },
        "nonDisplayableTitle": {
          "type": "string"
        },
        "offer": {
          "$ref": "QualityShoppingShoppingAttachmentOffer"
        },
        "outlinkDomainRelationship": {
          "description": "Whether an outlink points to the same domain or off-domain. Only added if the relationship is known, and the Offer has ref_type of OUTLINK.",
          "enum": [
            "OUTLINK_TARGET_RELATIONSHIP_UNKNOWN",
            "OUTLINK_TARGET_RELATIONSHIP_SAME_DOMAIN",
            "OUTLINK_TARGET_RELATIONSHIP_OFF_DOMAIN"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "pblock": {
          "$ref": "QualityShoppingShoppingAttachmentPBlock",
          "description": "Client needs to make decision on which field to use when both non_displayable_title and pblock.final_title are present."
        },
        "productClusterMid": {
          "format": "uint64",
          "type": "string"
        },
        "productPopularity": {
          "description": "Organic product popularity.",
          "format": "double",
          "type": "number"
        },
        "relevanceEmbedding": {
          "description": "Relevance embedding from ShoppingAnnotation.Product",
          "items": {
            "$ref": "QualityRankembedMustangMustangRankEmbedInfo"
          },
          "type": "array"
        },
        "weakGlobalProductClusterId": {
          "description": "Matched/Inferred weak product identity - set only if the global_product_cluster_id is missing",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapBreadcrumbTarget": {
      "description": "Sitelink candidates that is generated from breadcrumbs.",
      "id": "QualitySitemapBreadcrumbTarget",
      "properties": {
        "docs": {
          "items": {
            "$ref": "QualitySitemapBreadcrumbTargetDoc"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualitySitemapBreadcrumbTargetDoc": {
      "id": "QualitySitemapBreadcrumbTargetDoc",
      "properties": {
        "count": {
          "description": "The number of web pages that contains the url in their breadcrumbs.",
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapCoClickTarget": {
      "id": "QualitySitemapCoClickTarget",
      "properties": {
        "docs": {
          "items": {
            "$ref": "QualitySitemapCoClickTargetDoc"
          },
          "type": "array"
        },
        "language": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapCoClickTargetDoc": {
      "id": "QualitySitemapCoClickTargetDoc",
      "properties": {
        "coClickByLocale": {
          "items": {
            "$ref": "QualitySitemapCoClickTargetDocCoClickByLocale"
          },
          "type": "array"
        },
        "title": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapCoClickTargetDocCoClickByLocale": {
      "id": "QualitySitemapCoClickTargetDocCoClickByLocale",
      "properties": {
        "coClicks": {
          "format": "float",
          "type": "number"
        },
        "coClicksCapped": {
          "format": "float",
          "type": "number"
        },
        "coClicksParent": {
          "format": "float",
          "type": "number"
        },
        "locale": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapScoringSignals": {
      "description": "Scoring signals for computing the sitelink score. This message is currently intended only for debugging. Accordingly, this is populated in CDoc but not in MDU. It is enforced by the [(exclude_from_mdu) = true] annotation of the corresponding fields in Target and TargetGroup.",
      "id": "QualitySitemapScoringSignals",
      "properties": {
        "annotations": {
          "items": {
            "enum": [
              "UNSET",
              "LOW_RELATIVE_CONFIDENCE_IMPRESSIONS"
            ],
            "enumDescriptions": [
              "As per Protocol buffer best practice.",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "chromeTransCount": {
          "format": "uint64",
          "type": "string"
        },
        "chromeTransProb": {
          "format": "float",
          "type": "number"
        },
        "chromeWeight": {
          "format": "float",
          "type": "number"
        },
        "country": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "countryConfidence": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "impressions": {
          "format": "uint64",
          "type": "string"
        },
        "langConfidence": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "language": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "localCountryIdentifier": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "longClicks": {
          "format": "uint64",
          "type": "string"
        },
        "longCtr": {
          "format": "float",
          "type": "number"
        },
        "navboostScore": {
          "format": "float",
          "type": "number"
        },
        "navmenuScore": {
          "format": "float",
          "type": "number"
        },
        "pagerank": {
          "format": "int32",
          "type": "integer"
        },
        "recentLongCtr": {
          "format": "float",
          "type": "number"
        },
        "targetCdocLanguages": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "titleScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualitySitemapSubresult": {
      "description": "Information about a single sub-result.",
      "id": "QualitySitemapSubresult",
      "properties": {
        "docid": {
          "format": "uint64",
          "type": "string"
        },
        "itemMetadata": {
          "$ref": "QualitySitemapThirdPartyCarouselsListItemMuppetMetadata"
        }
      },
      "type": "object"
    },
    "QualitySitemapSubresultList": {
      "description": "A container for encapsulating a list of sub-results.",
      "id": "QualitySitemapSubresultList",
      "properties": {
        "subresult": {
          "items": {
            "$ref": "QualitySitemapSubresult"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualitySitemapTarget": {
      "description": "Represents a single sitelink target, contains basic information used to display the target (such as url and title) and to, maybe, dynamically change the way targets are selected and/or ranked (such as score and is_mobile). Please update the TargetInternal message if you make a change to this proto. See \"Note on adding new fields\".",
      "id": "QualitySitemapTarget",
      "properties": {
        "DEPRECATEDSnippet": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isGoodForMobile": {
          "type": "boolean"
        },
        "isMobileN1dup": {
          "type": "boolean"
        },
        "languages": {
          "description": "The languages of the document, taken from its cdoc.properties().languages()",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "salientImage": {
          "$ref": "WWWResultInfoSubImageDocInfo",
          "description": "The image data will be copied from the DocInfo response, and will be retrieved online, so this field should not be populated during indexing. This is a temporary field for experimentation."
        },
        "score": {
          "format": "float",
          "type": "number"
        },
        "scoringSignals": {
          "$ref": "QualitySitemapScoringSignals"
        },
        "sectionTexts": {
          "description": "Section texts used for Page Anchors Preview (go/page-anchor-preview-dd).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "snippetResponse": {
          "$ref": "GenericSnippetResponse",
          "description": "The snippet response for the target document for an empty query."
        },
        "sourceAnchor": {
          "type": "boolean"
        },
        "title": {
          "type": "string"
        },
        "twoLevelScore": {
          "format": "float",
          "type": "number"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapTargetGroup": {
      "description": "Represents a set of targets. The group may have a label field to uniquely identify this target group among others - for instance, if these targets' titles were generated using an alternative title algorithm, the label can be \"newtitles\". See \"Note on adding new fields\".",
      "id": "QualitySitemapTargetGroup",
      "properties": {
        "DEPRECATEDCountry": {
          "format": "int32",
          "type": "integer"
        },
        "Target": {
          "items": {
            "$ref": "QualitySitemapTarget"
          },
          "type": "array"
        },
        "allTargetsNamedAnchors": {
          "description": "If all the targets in this group are named anchors on the source page.",
          "type": "boolean"
        },
        "allTargetsNamedTopictagsScrollto": {
          "description": "If all the targets in this group are named topictags_scrollto on the source page.",
          "type": "boolean"
        },
        "breadcrumbTarget": {
          "$ref": "QualitySitemapBreadcrumbTarget"
        },
        "coClickTarget": {
          "items": {
            "$ref": "QualitySitemapCoClickTarget"
          },
          "type": "array"
        },
        "countryCode": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "language": {
          "format": "int32",
          "type": "integer"
        },
        "modifiedByHostcardHandler": {
          "type": "boolean"
        },
        "scoringSignals": {
          "$ref": "QualitySitemapScoringSignals"
        },
        "topUrl": {
          "description": "A list of top urls with highest two_level_score, i.e., chrome_trans_clicks.",
          "items": {
            "$ref": "QualitySitemapTopURL"
          },
          "type": "array"
        },
        "twoLevelTarget": {
          "items": {
            "$ref": "QualitySitemapTwoLevelTarget"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualitySitemapThirdPartyCarouselsListItemMuppetMetadata": {
      "description": "A set of metadata about a list item that is passed on to Muppet from indexing.",
      "id": "QualitySitemapThirdPartyCarouselsListItemMuppetMetadata",
      "properties": {
        "urlFoundOnPage": {
          "description": "DEPRECATED. No longer populated, and not used anywhere.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualitySitemapTopURL": {
      "id": "QualitySitemapTopURL",
      "properties": {
        "score": {
          "format": "float",
          "type": "number"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySitemapTwoLevelTarget": {
      "id": "QualitySitemapTwoLevelTarget",
      "properties": {
        "firstLevelTarget": {
          "$ref": "QualitySitemapTarget"
        },
        "secondLevelTarget": {
          "items": {
            "$ref": "QualitySitemapTarget"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualitySnippetsTruncationSnippetBoldedRange": {
      "description": "A bolded range in printed snippet lines.",
      "id": "QualitySnippetsTruncationSnippetBoldedRange",
      "properties": {
        "begin": {
          "$ref": "QualitySnippetsTruncationSnippetBoldedRangePosition",
          "description": "Bolded range [begin, end)"
        },
        "end": {
          "$ref": "QualitySnippetsTruncationSnippetBoldedRangePosition"
        },
        "text": {
          "description": "Only populated for debugging.",
          "type": "string"
        },
        "type": {
          "enum": [
            "TYPE_UNSPECIFIED",
            "QUERY_TERM_MATCH",
            "RADISH",
            "BRAIN",
            "QUOTED_TERM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualitySnippetsTruncationSnippetBoldedRangePosition": {
      "id": "QualitySnippetsTruncationSnippetBoldedRangePosition",
      "properties": {
        "byteOffset": {
          "format": "int32",
          "type": "integer"
        },
        "index": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityTimebasedLastSignificantUpdate": {
      "id": "QualityTimebasedLastSignificantUpdate",
      "properties": {
        "adjustmentInfo": {
          "$ref": "QualityTimebasedLastSignificantUpdateAdjustments",
          "description": "This is stored only for debugging purposes. Please consult dates@ team before making a dependency on this field."
        },
        "date": {
          "description": "LastSignificantUpdate as UNIX timestamp in seconds. This is the new signal (go/lsu-dd) from LSU Selector V2 (once that is enabled, see b/171879888 for status), falling back to the legacy V1 signal if the HIGH_PRECISION signal does not exist. Please use the 'source' field to determine where the value comes from.",
          "format": "int64",
          "type": "string"
        },
        "source": {
          "description": "The source the signal comes from.",
          "enum": [
            "UNSET",
            "LSU_LOW_PRECISION",
            "LSU_HIGH_PRECISION_UPDATE_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_HIGH_PRECISION_UPDATE_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_HIGH_PRECISION_ANNOTATION_WITH_UPDATE_TAG",
            "LSU_HIGH_PRECISION_PUBLICATION_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_HIGH_PRECISION_PUBLICATION_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_HIGH_PRECISION_ANNOTATION_WITH_PATTERN_BYLINE_TAG",
            "LSU_HIGH_PRECISION_RELIABLE_CONTENT_AGE_SUPPORTED_BY_ANNOTATION",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_LOW_SUPPORT",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_MEDIUM_SUPPORT",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_HIGH_SUPPORT",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_FULL_SUPPORT",
            "LSU_V1",
            "LSU_V2_UPDATE_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_V2_UPDATE_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_V2_ANNOTATION_WITH_UPDATE_TAG",
            "LSU_V2_PUBLICATION_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_V2_PUBLICATION_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_V2_ANNOTATION_WITH_PATTERN_BYLINE_TAG",
            "LSU_V2_RELIABLE_CONTENT_AGE_SUPPORTED_BY_ANNOTATION"
          ],
          "enumDescriptions": [
            "",
            "The signal from legacy selector (quality/timebased/lastsignificantupdate/lsu-selector.h). It's a fallback for clients relying on ~100% recall of the signal.",
            "The signal comes from update markup date supported by ContentAge.",
            "The signal comes from update markup date supported by annotation.",
            "The signal comes from date annotation representing update date of a page.",
            "The signal comes from publication markup date supported by ContentAge.",
            "The signal comes from publication markup date supported by annotation.",
            "The signal comes from date annotation often selected as a byline.",
            "The signal comes from ContentAge that's supported by date annotation.",
            "",
            "",
            "",
            "",
            "Legacy names. Do not use. These are kept around for ~2 months to ease transitions.",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityTimebasedLastSignificantUpdateAdjustments": {
      "id": "QualityTimebasedLastSignificantUpdateAdjustments",
      "properties": {
        "adjustmentSource": {
          "description": "If the selected LSU has been adjusted, i.e. the maximum passage timestamp, firstseen or contentage were assigned to LSU, the adjustment source is stored here.",
          "enum": [
            "UNSET",
            "PASSAGE_TIMESTAMP",
            "FIRSTSEEN",
            "CONTENT_AGE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "isUpperboundTimestampPrecise": {
          "description": "The timestamp is precise when it's derived from existing (>March 2022) passage timestamp.",
          "type": "boolean"
        },
        "unboundedTimestampInSeconds": {
          "description": "The timestamp that was picked up by the component indicated in the LastSignificantUpdateSource but was dropped due to exceeding the upper bound. Set only if it is not equal to final LSU.",
          "format": "int64",
          "type": "string"
        },
        "unboundedTimestampSource": {
          "description": "The source that produced the unbounded timestamp.",
          "enum": [
            "UNSET",
            "LSU_LOW_PRECISION",
            "LSU_HIGH_PRECISION_UPDATE_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_HIGH_PRECISION_UPDATE_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_HIGH_PRECISION_ANNOTATION_WITH_UPDATE_TAG",
            "LSU_HIGH_PRECISION_PUBLICATION_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_HIGH_PRECISION_PUBLICATION_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_HIGH_PRECISION_ANNOTATION_WITH_PATTERN_BYLINE_TAG",
            "LSU_HIGH_PRECISION_RELIABLE_CONTENT_AGE_SUPPORTED_BY_ANNOTATION",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_LOW_SUPPORT",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_MEDIUM_SUPPORT",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_HIGH_SUPPORT",
            "LSU_MEDIUM_PRECISION_FRESH_SALIENT_ANNOTATION_FULL_SUPPORT",
            "LSU_V1",
            "LSU_V2_UPDATE_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_V2_UPDATE_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_V2_ANNOTATION_WITH_UPDATE_TAG",
            "LSU_V2_PUBLICATION_MARKUP_SUPPORTED_BY_CONTENTAGE",
            "LSU_V2_PUBLICATION_MARKUP_SUPPORTED_BY_ANNOTATION",
            "LSU_V2_ANNOTATION_WITH_PATTERN_BYLINE_TAG",
            "LSU_V2_RELIABLE_CONTENT_AGE_SUPPORTED_BY_ANNOTATION"
          ],
          "enumDescriptions": [
            "",
            "The signal from legacy selector (quality/timebased/lastsignificantupdate/lsu-selector.h). It's a fallback for clients relying on ~100% recall of the signal.",
            "The signal comes from update markup date supported by ContentAge.",
            "The signal comes from update markup date supported by annotation.",
            "The signal comes from date annotation representing update date of a page.",
            "The signal comes from publication markup date supported by ContentAge.",
            "The signal comes from publication markup date supported by annotation.",
            "The signal comes from date annotation often selected as a byline.",
            "The signal comes from ContentAge that's supported by date annotation.",
            "",
            "",
            "",
            "",
            "Legacy names. Do not use. These are kept around for ~2 months to ease transitions.",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "upperboundTimestampInSeconds": {
          "description": "The upperbound value derived from passage timestamps. If present, the LSU date should never exceed this value. Design doc: go/lsu-max-passage-timestamp",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityTimebasedPageType": {
      "id": "QualityTimebasedPageType",
      "properties": {
        "isForumPage": {
          "description": "Set to true if this page is classified as a forum page.",
          "type": "boolean"
        },
        "isPageWithFreshRepeatedDates": {
          "description": "Set to true if this page has a fresh repeated date sequence.",
          "type": "boolean"
        },
        "isQnaPage": {
          "description": "Set to true if this page is classified as a question answers page.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualityTimebasedSyntacticDate": {
      "description": "Next ID: 21",
      "id": "QualityTimebasedSyntacticDate",
      "properties": {
        "bylineDate": {
          "description": "The following field is set only when the byline date is different from the \"date\" field above. Currently this happens when the byline date is within the 24 hours of the crawl time, or close but not exactly the same as blog post date due to time zone. The syntactic date is never later than the crawl time. NOTE: If this field is set, use_as_byline_date will be meaningless, and better to be cleared.",
          "format": "int64",
          "type": "string"
        },
        "date": {
          "description": "The number of seconds since epoch (Jan 1, 1970). This can be negative to indicate a publication date that is before 1970. For example, the ones from NY Times archive: \"http://select.nytimes.com/gst/abstract.html?res=F10B13FB3D5A10728FDDAF089\" \"4DD405B8588F1D3&scp=91&sq=world+war+II&st=p\"",
          "format": "int64",
          "type": "string"
        },
        "daterange": {
          "$ref": "QualityTimebasedSyntacticDateDateRange"
        },
        "debugInfo": {
          "type": "string"
        },
        "fromExplicitTimeZone": {
          "description": "If set to true, the source of the date has explicit time zone specification. Note: This is only used internally and should not be populated in docjoins.",
          "type": "boolean"
        },
        "info": {
          "description": "Used to store extra information about the syntactic date. For now only two bits are set. Please refer to the encoding/decoding functions provided in: quality/timebased/syntacticdate/util.h Bit 1 = High confidence byline. This bit is set if the syntactic date has a byline date and this date is considered to be high confidence. Bit 2 = High confidence byline without content age. This bit is set if the syntactic date has a byline date and this date is considered to be high confidence without support from content age.",
          "format": "int32",
          "type": "integer"
        },
        "position": {
          "$ref": "QualityTimebasedSyntacticDatePosition"
        },
        "precisionMark": {
          "description": "The precision mark should be of type PRECISION_MARK.",
          "format": "int32",
          "type": "integer"
        },
        "syntacticDateNotForRestrict": {
          "description": "If this is true, do not use syntactic date in date restricts.",
          "type": "boolean"
        },
        "timeZoneOffsetSeconds": {
          "description": "Indicates the time zone offset in seconds applied to derive `date' in UTC. Example: Annotation: \"1pm PST\" (UTC-8) => -8 * 3600 = -28800 Note: This is only used internally and should not be populated in docjoins.",
          "format": "int64",
          "type": "string"
        },
        "trustSyntacticDateInRanking": {
          "description": "This bit is set if we believe that the syntactic date is really high confidence, but does not qualify as a byline date.",
          "type": "boolean"
        },
        "useAsBylineDate": {
          "description": "Whether this date is good for display as the snippet byline date.",
          "type": "boolean"
        },
        "useInTimeZoneGuessingMode": {
          "description": "This bit is set if the syntactic date is good to be used in site-level timezone guessing statistics calculation. (The date should be absolute date having a timestamp with hour and minute level information. It can come with or without time zone information, which is indicated in from_explicit_time_zone field defined below.)",
          "type": "boolean"
        },
        "useRangeInsteadOfDateForRestrict": {
          "description": "If true, the DateRange is used as date restrict, if false, the date is used as date restrict. Has no effect if syntactic_date_not_for_restrict is true.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "QualityTimebasedSyntacticDateDateRange": {
      "description": "If the single date (plus the precision mark) is still not good enough, we will use the following fields for a date range. In this case, the fields above may all be empty.",
      "id": "QualityTimebasedSyntacticDateDateRange",
      "properties": {
        "end": {
          "format": "int64",
          "type": "string"
        },
        "start": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityTimebasedSyntacticDatePosition": {
      "description": "The following positions are the byte offset in doc body, which is consistent with the date annotations. (See google3/repository/annotations/proto/annotations.proto) These are given when we want to use the date as a byline date, so the snippet generating code will know the positions.",
      "id": "QualityTimebasedSyntacticDatePosition",
      "properties": {
        "begin": {
          "format": "int32",
          "type": "integer"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "QualityTravelGoodSitesData": {
      "description": "Protocol message for data related to good travel sites. This data is stored as signals data in docjoins.",
      "id": "QualityTravelGoodSitesData",
      "properties": {
        "i18n": {
          "items": {
            "$ref": "QualityTravelGoodSitesDataI18n"
          },
          "type": "array"
        },
        "isAggr": {
          "type": "boolean"
        },
        "isAttractionOfficial": {
          "type": "boolean"
        },
        "isEntity": {
          "type": "boolean"
        },
        "isHotelOfficial": {
          "type": "boolean"
        },
        "normalizationFactor": {
          "description": "Factor that determines how local anchor credit is scaled before being added to global anchors.",
          "format": "float",
          "type": "number"
        },
        "signal": {
          "items": {
            "$ref": "QualityTravelGoodSitesDataSignal"
          },
          "type": "array"
        },
        "site": {
          "type": "string"
        },
        "totalScore": {
          "description": "Site quality score, which determines the site type.",
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "NOT_GOOD",
            "LOCAL_OKAY",
            "OKAY",
            "GOOD",
            "OFFICIAL",
            "NUM_TYPES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityTravelGoodSitesDataI18n": {
      "id": "QualityTravelGoodSitesDataI18n",
      "properties": {
        "locale": {
          "type": "string"
        },
        "type": {
          "enum": [
            "NOT_GOOD",
            "LOCAL_OKAY",
            "OKAY",
            "GOOD",
            "OFFICIAL",
            "NUM_TYPES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityTravelGoodSitesDataSignal": {
      "description": "Raw signals that determine the site quality score.",
      "id": "QualityTravelGoodSitesDataSignal",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "QualityVidyaVideoLanguageVideoLanguage": {
      "description": "Audio-based language information about a Watch Page. For more information: https://g3doc.corp.google.com/video/timedtext/g3doc/ali.md",
      "id": "QualityVidyaVideoLanguageVideoLanguage",
      "properties": {
        "language": {
          "description": "Audio language of video classified by Automatic Language Identification. It corresponds to the first language (the highest confidence) in ALIResults.lang_results.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "speechClass": {
          "description": "Type of detected speech.",
          "enum": [
            "UNKNOWN",
            "NO_SPEECH",
            "HAS_SPEECH_FOR_ASR"
          ],
          "enumDescriptions": [
            "Unspecified, or string label not recognized.",
            "",
            "Currently corresponds to simple speech"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityViewsExtractionClusterInfo": {
      "description": "Stores cluster scoring information for an entity Next Id: 6",
      "id": "QualityViewsExtractionClusterInfo",
      "properties": {
        "clusterId": {
          "description": "The cluster_id represents the id of the set entity that WebRef provides.",
          "type": "string"
        },
        "clusterSetScore": {
          "description": "Cluster set qref confidence score.",
          "format": "float",
          "type": "number"
        },
        "clusterSiblingMid": {
          "description": "The mids of cluster members that are part of the same cluster. Note that cluster members may end up having their own interpretation (EntityInfo which includes a ClusterInfo) or not (eg because they do not explain the full query, and so aqua does not output an interpretation for them). The latter case (a cluster member is output only as part of this field), is equivalent to its score being 0.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "score": {
          "description": "The score represents the score of the entity within the cluster.",
          "format": "float",
          "type": "number"
        },
        "subCluster": {
          "items": {
            "$ref": "QualityViewsExtractionClusterInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityWebanswersTranscriptAnnotations": {
      "description": "Wraps other annotations that are run over auto-generated video captions.",
      "id": "QualityWebanswersTranscriptAnnotations",
      "properties": {
        "videoTranscriptAnnotations": {
          "items": {
            "$ref": "QualityWebanswersVideoTranscriptAnnotations"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "QualityWebanswersVideoTranscriptAnnotations": {
      "id": "QualityWebanswersVideoTranscriptAnnotations",
      "properties": {
        "amarnaDocid": {
          "description": "Should precisely match the amarna_docid in ContentBasedVideoMetadata.",
          "type": "string"
        },
        "asrRepair": {
          "$ref": "IndexingVideosAsrTranscriptRepairAnnotation",
          "description": "The results of ASR transcript quality analysis."
        },
        "lang": {
          "description": "The language of the transcript as recorded in Amarna.",
          "type": "string"
        },
        "punctuatedTranscript": {
          "type": "string"
        },
        "saftDocument": {
          "$ref": "NlpSaftDocument"
        },
        "saftSentenceBoundary": {
          "$ref": "SentenceBoundaryAnnotations"
        },
        "timingInfo": {
          "$ref": "QualityWebanswersVideoYouTubeCaptionTimingInfoAnnotations",
          "description": "Timing information that maps sentence boundaries in the punctuated transcript with timing offsets for the start and end of those sentences."
        },
        "webrefEntities": {
          "$ref": "RepositoryWebrefWebrefEntities"
        }
      },
      "type": "object"
    },
    "QualityWebanswersVideoYouTubeCaptionTimingInfoAnnotations": {
      "description": "YouTube caption timing information for http://go/video-answers.",
      "id": "QualityWebanswersVideoYouTubeCaptionTimingInfoAnnotations",
      "properties": {
        "durationMs": {
          "format": "int32",
          "type": "integer"
        },
        "instances": {
          "items": {
            "$ref": "QualityWebanswersVideoYouTubeCaptionTimingInfoAnnotationsInstance"
          },
          "type": "array"
        },
        "uploaderName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "QualityWebanswersVideoYouTubeCaptionTimingInfoAnnotationsInstance": {
      "description": "Byte-offset and timing information in videos. In CompositeDoc, we will store the instance per sentence.",
      "id": "QualityWebanswersVideoYouTubeCaptionTimingInfoAnnotationsInstance",
      "properties": {
        "begin": {
          "description": "Byte offsets in HTML. begin is inclusive and end is exclusive.",
          "format": "int32",
          "type": "integer"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "videoBeginMs": {
          "format": "int32",
          "type": "integer"
        },
        "videoEndMs": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RegistrationInfo": {
      "description": "Domain registration information for the document. NEXT ID TO USE: 3",
      "id": "RegistrationInfo",
      "properties": {
        "createdDate": {
          "description": "This is the number of days since January 1st 1995 that this domain was last created. This should always fit in 15 bits.",
          "format": "int32",
          "type": "integer"
        },
        "expiredDate": {
          "description": "This is the number of days since January 1st 1995 that this domain last expired. This should always fit in 15 bits. Jan 1st 1995 was chosen by the history project as a special epoch date. Both the registrationinfo dates and the linkage dates are measured in days since this epoch.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsGeoTopic": {
      "description": "GeoTopicality of a document is a set of GeoTopics ordered by their normalized scores.",
      "id": "RepositoryAnnotationsGeoTopic",
      "properties": {
        "address": {
          "$ref": "GeostoreAddressProto",
          "description": "Stores parent/container information containing city, province & country."
        },
        "componentScores": {
          "description": "The raw scores used to calculate the normalized_score. Note that not all these scores may be exposed to the users.",
          "items": {
            "$ref": "RepositoryAnnotationsGeoTopicalityScore"
          },
          "type": "array"
        },
        "confidence": {
          "description": "A score [0, 1] indicating the confidence.",
          "format": "float",
          "type": "number"
        },
        "denseCity": {
          "description": "Is this a dense city (e.g., population > 100k)?",
          "type": "boolean"
        },
        "establishmentType": {
          "description": "Sub type for POI types like ESTABLISHMENT_POI, ESTABLISHMENT_GROUNDS & ESTABLISHMENT_BUILDING",
          "format": "int32",
          "type": "integer"
        },
        "latE7": {
          "description": "Latitude and Longitude of the location.",
          "format": "uint32",
          "type": "integer"
        },
        "lngE7": {
          "format": "uint32",
          "type": "integer"
        },
        "locationName": {
          "description": "Name of the Geographic location. This is the normalized name.",
          "type": "string"
        },
        "normalizedScore": {
          "description": "A score [0, 1] indicating the likelihood of the location being the GeoTopicality.",
          "format": "float",
          "type": "number"
        },
        "oysterId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Oyster Feature ID of the location."
        },
        "oysterType": {
          "description": "Oyster Feature Type",
          "format": "int32",
          "type": "integer"
        },
        "sumContainedPoiNormalizedScores": {
          "description": "The sum of the normalized scores of POIs contained within a particular locality.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsGeoTopicality": {
      "id": "RepositoryAnnotationsGeoTopicality",
      "properties": {
        "geotopics": {
          "description": "The geotopics are ordered by normalized_score in descending order.",
          "items": {
            "$ref": "RepositoryAnnotationsGeoTopic"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsGeoTopicalityScore": {
      "id": "RepositoryAnnotationsGeoTopicalityScore",
      "properties": {
        "rawScore": {
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "TITLE_SCORE",
            "LEADING_MENTIONS_SCORE",
            "QUALIFIER_BOOST",
            "TAG_BOOST",
            "FREQUENCY_SCORE",
            "AVERAGE_PARENT_BOOST",
            "OVERALL_SCORE",
            "ON_PAGE_NORMALIZED_SCORE",
            "OFF_PAGE_NORMALIZED_SCORE",
            "ANCHOR_COUNT",
            "ENDMARKER_FOR_SCORES"
          ],
          "enumDescriptions": [
            "On-Page Scores Indicates the presence of the geopoint in the title of the document. Range of values - [0, 2].",
            "Indicates the presence of the geopoint in the leading few tokens of the document. This is useful for newspaper articles where the significant location is byline. Range of values - [0, infinity].",
            "Boost associated with the presence of CandidateGeoPointAnnotationTags RESOLVED_BY_FQGA. This is pretty common for Byline locations. Range of values - [0, infinity]",
            "Boost associated with the presence of the rest of the CandidateGeoPointAnnotationTags. Range of values - [0, infinity]",
            "Score associated with the number of mentions of the location in the document. This is a log function of the number of mentions.",
            "Score associated with the parental support (support by parent features) for the location. Range of values - [0, 1.0)",
            "Overall Score obtained by the combining all the individual scores. Range of values - [0, infinity]",
            "A score [0, 1] indicating the likelihood of the location being GeoTopicality using on page signals.",
            "Off-Page Scores A score [0, 1] indicating the likelihood of the location being GeoTopicality using off-page signals (mainly incoming links).",
            "Number of incoming links to the document with the location in question being part of the anchor text. Range of values [0, infinity]",
            "This value should be one bigger than the largest Score that is actually used."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsMustangSentimentSnippetAnnotations": {
      "description": "A conceptual structure for storing sentiment snippet information in mustang. Essentially an adaptation of PhraseAnnotationProperties from //repository/annotations/proto/annotations.proto.",
      "id": "RepositoryAnnotationsMustangSentimentSnippetAnnotations",
      "properties": {
        "deprecatedMagnitude": {
          "description": "Deprecated: use snippet_score instead",
          "format": "float",
          "type": "number"
        },
        "deprecatedPolarity": {
          "description": "Deprecated: use snippet_score instead",
          "format": "float",
          "type": "number"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "isTruncated": {
          "type": "boolean"
        },
        "phraseType": {
          "enum": [
            "UNKNOWN",
            "POSITIVE",
            "NEGATIVE",
            "MIXED",
            "NEUTRAL"
          ],
          "enumDescriptions": [
            "Not analyzed.",
            "",
            "",
            "Sentiment is present, but neither positive or negative is clearly prevailing.",
            "There is no significant sentiment present."
          ],
          "type": "string"
        },
        "snippetScore": {
          "format": "int32",
          "type": "integer"
        },
        "snippetText": {
          "description": "This protobuffer is serving double duty as both a Mustang attachment and the response proto that gets returned by Mustang in the WWWSnippetResponse's info MessageSet. When stored as an attachment, this field will always be empty. However, when returned with the WWWSnippetResponse, Mustang will print and store the actual sentiment snippet's text here.",
          "type": "string"
        },
        "start": {
          "description": "begin and end are token offsets.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaBreadcrumbs": {
      "id": "RepositoryAnnotationsRdfaBreadcrumbs",
      "properties": {
        "crumb": {
          "description": "Each crumb represents one link of the breadcrumb chain.",
          "items": {
            "$ref": "RepositoryAnnotationsRdfaCrumb"
          },
          "type": "array"
        },
        "url": {
          "description": "The URL of the document from which this breadcrumb trail was extracted.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaCrumb": {
      "description": "The information contained in a single crumb.",
      "id": "RepositoryAnnotationsRdfaCrumb",
      "properties": {
        "title": {
          "description": "The text that represented this crumb in the document.",
          "type": "string"
        },
        "url": {
          "description": "The URL linked from this crumb.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaRdfaRichSnippetsApplication": {
      "description": "This structure holds data for application information for rich snippets Next ID: 53",
      "id": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplication",
      "properties": {
        "appTypeData": {
          "$ref": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationAppTypeData"
        },
        "applicationUrl": {
          "description": "Fields for internal use",
          "type": "string"
        },
        "breadcrumbs": {
          "$ref": "RepositoryAnnotationsRdfaBreadcrumbs"
        },
        "category": {
          "description": "Application information.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "countriesSupported": {
          "description": "These are currently used only for Google Play.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "countryPrices": {
          "items": {
            "$ref": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationCountryPrice"
          },
          "type": "array"
        },
        "currency": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "devConsoleId": {
          "description": "Developer console ID of the app if it exists. The ID is available for an app registered to Google Developers Console, not Play Developer Console.",
          "type": "string"
        },
        "extractedIconColor": {
          "description": "Top 1 of extracted icon colors. We keep this field for backward compatibility.",
          "format": "int32",
          "type": "integer"
        },
        "extractedIconColors": {
          "description": "Top 10 of extracted icon colors. r = (rgb >> 16) & 0xff; g = (rgb >> 8) & 0xff; b = rgb & 0xff;",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "filteringTag": {
          "description": "Tags to be indexed for filtering, e.g. \"ft_popular_score_gt_1m\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "genre": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "hasEditorsChoiceBadge": {
          "description": "Whether the app has editors choice tag",
          "type": "boolean"
        },
        "iconUrlHref": {
          "description": "Icon and Screenshots",
          "type": "string"
        },
        "iconUrlThumbnail": {
          "type": "string"
        },
        "imageData": {
          "$ref": "QualityCalypsoAppsUniversalImageData",
          "description": "Copied from google3/contentads/shared/boulder/mobile-app-data-image-data.proto."
        },
        "inAppPurchase": {
          "description": "Whether the app offers in-app purchase.",
          "type": "boolean"
        },
        "isDefaultLangLocale": {
          "description": "Indicates if the localized data comes from default locale. This is needed because the default localized data does not specify its locale. If this is true, lang_locale may not be the correct locale and should be ignored.",
          "type": "boolean"
        },
        "langLocale": {
          "description": "locale for the localized data, such as name, description and screenshots",
          "type": "string"
        },
        "lastUpdated": {
          "type": "string"
        },
        "liveOpDetails": {
          "$ref": "QualityCalypsoAppsUniversalAuLiveOpsDetailInfo",
          "description": "Unified proto for android LiveOps and iOS LiveEvents."
        },
        "localizedTrustedGenome": {
          "$ref": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationLocalizedTrustedGenome"
        },
        "marketplace": {
          "description": "Market Android or itunes",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "numDownloads": {
          "type": "string"
        },
        "operatingSystems": {
          "description": "See google3/quality/richsnippets/schema/data/operating_systems_rules.txt for possible values.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "optionalResult": {
          "description": "Whether this App is optional result for Grid UI.",
          "type": "boolean"
        },
        "originalRating": {
          "type": "string"
        },
        "physicalDeviceTags": {
          "items": {
            "enum": [
              "UNKNOWN_MOBILE",
              "IOS_IPHONE_OR_IPOD",
              "IOS_IPAD"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "platformTags": {
          "items": {
            "enum": [
              "UNKNOWN_BROWSER",
              "CHROME",
              "FIREFOX"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "popularScore": {
          "format": "float",
          "type": "number"
        },
        "price": {
          "description": "Price",
          "type": "string"
        },
        "rankData": {
          "$ref": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationRankData"
        },
        "rating": {
          "description": "Ratings and reviews Either for this version only or for all versions to be displayed.",
          "type": "string"
        },
        "ratingCount": {
          "type": "string"
        },
        "releaseDate": {
          "type": "string"
        },
        "reviewAuthor": {
          "type": "string"
        },
        "reviewCount": {
          "type": "string"
        },
        "screenUrlHref": {
          "description": "TODO(b/260128276) deprecate this field in favor of image_data.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "screenUrlThumbnail": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "size": {
          "description": "bytes or numeric with MB or GB",
          "type": "string"
        },
        "subcategory": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "supportsAndroidTv": {
          "description": "Whether this App supports Android TV. Note that some App supports more than one platforms. So we would use boolean for a platform.",
          "type": "boolean"
        },
        "supportsChromecast": {
          "description": "Whether this App supports Google Cast.",
          "type": "boolean"
        },
        "totalRating": {
          "format": "float",
          "type": "number"
        },
        "totalRatingCount": {
          "description": "Rating_count including all versions of this application.",
          "format": "int32",
          "type": "integer"
        },
        "trustedGenomeData": {
          "additionalProperties": {
            "$ref": "VendingConsumerProtoTrustedGenomeAnnotation"
          },
          "description": "Trusted Genome data with categorical app information key: locale (e.g. en, en_US)",
          "type": "object"
        },
        "vendor": {
          "description": "Vendor",
          "type": "string"
        },
        "vendorCanonicalUrl": {
          "type": "string"
        },
        "vendorUrl": {
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationAppTypeData": {
      "id": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationAppTypeData",
      "properties": {
        "playStoreAppType": {
          "description": "Top level app category type (GAME or APPLICATION). Copied from playwright.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationCountryPrice": {
      "id": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationCountryPrice",
      "properties": {
        "countryCode": {
          "type": "string"
        },
        "currencyCode": {
          "description": "ISO 4217 currency code.",
          "type": "string"
        },
        "price": {
          "description": "Price string converted from double value in a standard currency unit, like '199.35' or '1400'.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationLocalizedTrustedGenome": {
      "id": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationLocalizedTrustedGenome",
      "properties": {
        "language": {
          "description": "The chosen language",
          "type": "string"
        },
        "localizedTg": {
          "$ref": "VendingConsumerProtoTrustedGenomeAnnotation",
          "description": "The TG tags matching the locale of the doc, if available"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationRank": {
      "id": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationRank",
      "properties": {
        "appStoreLink": {
          "type": "string"
        },
        "categoryId": {
          "type": "string"
        },
        "categoryName": {
          "type": "string"
        },
        "chartType": {
          "type": "string"
        },
        "rank": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationRankData": {
      "id": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationRankData",
      "properties": {
        "playwrightCategoryId": {
          "description": "Copied from the category_id field from Playwright docs. It helps decide which category to show in app ranking info.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "rank": {
          "items": {
            "$ref": "RepositoryAnnotationsRdfaRdfaRichSnippetsApplicationRank"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAggregatedEntityNameScores": {
      "description": "Represents the aggregated score of the entities for a given name, aggregated over all sources. Next available tag: 3.",
      "id": "RepositoryWebrefAggregatedEntityNameScores",
      "properties": {
        "entityScore": {
          "items": {
            "$ref": "RepositoryWebrefEntityNameScore"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnchorIndices": {
      "description": "Identifies a set of anchors in the CompositeDoc. Typically these anchors were collapsed by WebRef into a single anchor and they were treated by the annotator as equivalent. They all contain the same mentions (at the same offsets).",
      "id": "RepositoryWebrefAnchorIndices",
      "properties": {
        "index": {
          "description": "The set of indices in the Anchors::anchor() array that belong to the collapsed anchors.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnnotatedCategoryInfo": {
      "description": "Information about a category annotation on a name.",
      "id": "RepositoryWebrefAnnotatedCategoryInfo",
      "properties": {
        "debugString": {
          "description": "A debug string for the category.",
          "type": "string"
        },
        "listiness": {
          "description": "Listiness score of the category.",
          "format": "float",
          "type": "number"
        },
        "mid": {
          "description": "The mid of the entity representing the category.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnnotationDebugInfo": {
      "description": "Debug info about the concept annotations. Note that it might not be present in the output.",
      "id": "RepositoryWebrefAnnotationDebugInfo",
      "properties": {
        "description": {
          "description": "Only use for debugging, this should not be displayed to user or used for any kind of logic/processing.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnnotationRatings": {
      "description": "Human ratings of webref annotations (document-level ratings, mention-level ratings, etc.).",
      "id": "RepositoryWebrefAnnotationRatings",
      "properties": {
        "docLevelRelevanceRatings": {
          "$ref": "RepositoryWebrefDocLevelRelevanceRatings"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnnotationStatsPerType": {
      "description": "Annotation statistics for each token type. Next available tag: 8.",
      "id": "RepositoryWebrefAnnotationStatsPerType",
      "properties": {
        "avgOpenWorld": {
          "description": "The average score for the open world for: - all ranges of this segment_type; - all capitalized ranges of this segment_type; - all uncapitalized ranges of this segment_type.",
          "format": "float",
          "type": "number"
        },
        "avgOpenWorldCap": {
          "format": "float",
          "type": "number"
        },
        "avgOpenWorldUncap": {
          "format": "float",
          "type": "number"
        },
        "numRangesWithCandidates": {
          "description": "The number of ranges with candidates that made it past primary pruning for: - all ranges of this segment_type; - all capitalized ranges of this segment_type; - all uncapitalized ranges of this segment_type.",
          "format": "int64",
          "type": "string"
        },
        "numRangesWithCandidatesCap": {
          "format": "int64",
          "type": "string"
        },
        "numRangesWithCandidatesUncap": {
          "format": "int64",
          "type": "string"
        },
        "tokenType": {
          "description": "The segment type.",
          "enum": [
            "INVALID",
            "CONTENT",
            "URL",
            "ANCHOR",
            "QUERY",
            "INSTANT_QUERY",
            "A_HREF_TAG",
            "LINK_HREF_TAG",
            "IMG_ALT_TAG",
            "IMG_SRC_TAG",
            "META_CONTENT_TAG",
            "TITLE",
            "ANY",
            "IMAGE_QUERY",
            "CONTEXT_ENTITY",
            "RESULT_ENTITY",
            "CONTEXT_QUERY",
            "SIMILAR_QUERIES",
            "SPORE_GRAPH",
            "OFFDOMAIN_ANCHOR",
            "ONSITE_ANCHOR",
            "NAME_CANDIDATE",
            "TOPIC_LINK",
            "QUERY_NAME_CANDIDATE",
            "ANCHOR_NAME_CANDIDATE",
            "INJECTED_NAME_CANDIDATE",
            "REFERENCE_PAGE_URL",
            "REFERENCE_PAGE_LINK",
            "DEPRECATED_ENTITY_METADATA",
            "STRONG_IDENTIFIER",
            "REFERENCE_PAGE_URL_INLINK",
            "REFERENCE_PAGE_LINK_INLINK",
            "GEO_LINK",
            "PRINCIPAL_NAME",
            "NAME_BLACKLIST",
            "ENTITY_CONTEXT_TOKENS",
            "VIDEO_TRANSCRIPT",
            "VIDEO_OCR",
            "IMAGE_OCR",
            "LENS",
            "ONLY_LOOKUP_METADATA",
            "EMBEDDED_CONTENT"
          ],
          "enumDescriptions": [
            "To be used to mark an invalid token type. This proto enum does not follow the good practices, which suggest that such a value should be with tag 0: go/protodosdonts#do-include-an-unspecified-value-in-an-enum. Because this is a legacy situation and it is not safe to just change the tags, the enum contains an invalid type at this tag and can be used to specify the default value wherever this is needed.",
            "The main html content of a document.",
            "The urls of a document/",
            "The anchors pointing to a document.",
            "The navboost queries of a document",
            "The instant navboost queries of a document",
            "The href-value of the tags in the document's content",
            "The href-value of the tags in the document's content",
            "The alt-value of the tags in the document's content",
            "The src-value of the tags in the document's content",
            "The content-value of the tags \"description\" and \"keyword\"",
            "The document ",
            "Special value used to represent any other tokentype.",
            "The Image Search navboost queries.",
            "Entities added from annotation context.",
            "Represents an entity found in the results for Qref.",
            "A query used as additional context for Qref annotations.",
            "Similar Queries. They are only used to retrieve entities that might be able to explain original query. As in Q2@2018 we don't want them to be scored or provide context for scoring because of their overall big CPU impact on qrewrite (+50%).",
            "A freetext dump + metadata from Spore GraphAnnotations.",
            "Offdomain anchors pointing to a document.",
            "Onsite anchors pointing to a document.",
            "Name candidate extracted from the topic or generated from trusted source.",
            "A link extracted directly from the topic:",
            "Queries to reference pages which are potential names of the entity:",
            "Anchor texts to reference pages which are potential names of the entity: Tokenized potential reference page URLs of the entity. Token matching is none because lookups are external annotations only.",
            "Injected name candidates are appended using this segment type.",
            "",
            "URLs that are linked to the reference page of the entity. Token matching is none because lookups are external annotations only.",
            "A special position that is used for lookup of entity metadata in name table.",
            "Tokenized potential strong id of the entity, like phone number, ISBN. Token matching is none because lookups are external annotations only.",
            "A special position used for lookup of inlinks to reference page urls.",
            "A special position used for lookup of inlink scores for reference page outlinks.",
            "",
            "A name used in the name matching library for all types of matching. The type NAME_CANDIDATE is used for names that are only used for inexpensive types of matching.",
            "Name blacklist for enriched entity.",
            "Lyrics for song entities.",
            "",
            "",
            "",
            "",
            "Entries which are created in order to instruct the fprint-loader to load metadata for the contained ngrams.",
            "The embedded content in the document (e.g., within json scripts)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnnotatorCheckpointFprint": {
      "description": "Holds annotator checkpoints which record the state of the annotations. This is useful for tracking down the source of diffs, in particular for non-determinism.",
      "id": "RepositoryWebrefAnnotatorCheckpointFprint",
      "properties": {
        "fingerprint": {
          "format": "uint64",
          "type": "string"
        },
        "label": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefAnnotatorProfile": {
      "description": "A message to collect annotator performance data.",
      "id": "RepositoryWebrefAnnotatorProfile",
      "properties": {
        "numCandidateMentions": {
          "format": "int32",
          "type": "integer"
        },
        "numEntities": {
          "format": "int32",
          "type": "integer"
        },
        "numMentions": {
          "format": "int32",
          "type": "integer"
        },
        "numTokens": {
          "format": "int32",
          "type": "integer"
        },
        "processorTimingsRoot": {
          "$ref": "RepositoryWebrefProcessorTiming",
          "description": "Root/total of the timings from all the processors that worked on the given document or query."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefBookEditionMetadata": {
      "description": "Book editions metadata for a book entity. This metadata is a pair of \"/book/book_edition\" mid and its ISBN number.",
      "id": "RepositoryWebrefBookEditionMetadata",
      "properties": {
        "bookEditionIsbn": {
          "description": "Use varint encoding to save space.",
          "format": "uint64",
          "type": "string"
        },
        "bookEditionMid": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefBootstrappingScore": {
      "id": "RepositoryWebrefBootstrappingScore",
      "properties": {
        "scoreRatio": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCategoryAnnotation": {
      "description": "High level category annotations for documents and queries.",
      "id": "RepositoryWebrefCategoryAnnotation",
      "properties": {
        "browsyTopic": {
          "$ref": "RepositoryWebrefCategoryAnnotationBrowsyTopic",
          "description": "Experimental scores to be used by Discover."
        },
        "debugString": {
          "description": "Title of the category. Eg \"Politics\", \"Technology\".",
          "type": "string"
        },
        "hitcat": {
          "$ref": "RepositoryWebrefCategoryAnnotationHitCatSource",
          "description": "Sources asserting the category. In the future we may have one calibrated confidence score."
        },
        "mid": {
          "description": "Mid representation of the category. Eg \"/m/05qt0\". WARNING: In UDR this field is not populated, use document_entity.entity.mid instead of document_entity.category.mid.",
          "type": "string"
        },
        "shopping": {
          "$ref": "RepositoryWebrefCategoryAnnotationShoppingSignals",
          "description": "Qprime asserting this category."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCategoryAnnotationBrowsyTopic": {
      "description": "Experimental scores for browsy topics, see * go/example-docs-with-implicit-fashion-styles * go/browsy-entities",
      "id": "RepositoryWebrefCategoryAnnotationBrowsyTopic",
      "properties": {
        "confidence": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCategoryAnnotationHitCatSource": {
      "description": "The HitCat page classifier. See go/hitcat2 If you use any HitCat score, please: 1. Add your use-case to go/hits-clients. 2. Subscribe to hits-users@ to receive general updates.",
      "id": "RepositoryWebrefCategoryAnnotationHitCatSource",
      "properties": {
        "confidence": {
          "description": "Confidence of the category in the range [0.0, 1.0). If a page has the category \"NBA\" with high confidence we also expect it to have the \"Basketball\" with high confidence. Categories with a confidence lower than 0.05 are omitted. This can be interpreted as a confidence of 0, i.e. a strong signal that the category is not relevant for the page. For some categories this score is calibrated per-category to estimate the true precision. E.g., 70% of documents retrieved within the confidence range [0.7 - eps, 0.7 + eps] will be relevant when eps is close to 0.",
          "format": "float",
          "type": "number"
        },
        "cumulativeConfidence": {
          "description": "Calibrated cumulative confidence guaranteeing maxmial recall for a precision target. E.g., At least 90% of documents retrieved with cumulative_confidence >= 0.9 will be relevant. This score is always calibrated per-category to estimate the true cumulative precision and is not set for uncalibrated categories.",
          "format": "float",
          "type": "number"
        },
        "experimentalConfidence": {
          "description": "Note: For testing the next version. May change at any time. Experimental confidence of the category in the range (0.0, 1.0).",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCategoryAnnotationShoppingSignals": {
      "description": "The QPrime query classifier signals.",
      "id": "RepositoryWebrefCategoryAnnotationShoppingSignals",
      "properties": {
        "isShoppingAnnotation": {
          "description": "Whether QPrime asserts that particular category.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCategoryInfo": {
      "description": "All informations about category types of the entity.",
      "id": "RepositoryWebrefCategoryInfo",
      "properties": {
        "allTypes": {
          "description": "Contains all types relevant for this entity, along with their provenances and confidences. This field basically replicates information above in a unified way, so that Refcon scroing can make better use of it. If present, Refcon scoring will use all_types, and ignore other fields like freebase_type. Note: there is some basic conflict resolution applied when all_types are computed (implemented in type-extractor.cc, IsLikelyConflictingFreebase).",
          "items": {
            "$ref": "RepositoryWebrefFreebaseType"
          },
          "type": "array"
        },
        "freebaseType": {
          "items": {
            "$ref": "RepositoryWebrefFreebaseType"
          },
          "type": "array"
        },
        "kgCollection": {
          "items": {
            "$ref": "RepositoryWebrefKGCollection"
          },
          "type": "array"
        },
        "oysterType": {
          "$ref": "RepositoryWebrefOysterType"
        },
        "salientCategory": {
          "description": "verticals4 categories that cooccur with this entity, aggregated over D2E. See where we read from CompactDocClassification in http://google3/repository/webref/preprocessing/fatcat-categories.cc.",
          "items": {
            "$ref": "RepositoryWebrefFatcatCategory"
          },
          "type": "array"
        },
        "wikipediaCategory": {
          "items": {
            "$ref": "RepositoryWebrefWikipediaCategory"
          },
          "type": "array"
        },
        "wpCategory": {
          "description": "WPCat CategotyResult classification.",
          "items": {
            "$ref": "RepositoryWebrefFreebaseType"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefClusterMetadata": {
      "description": "Metadata about clusters. See go/webref-variants for details. Next available tag: 6.",
      "id": "RepositoryWebrefClusterMetadata",
      "properties": {
        "isSet": {
          "description": "If true, this entity is a synthetic entity created to represent a \"set\" in a cluster, i.e. to represent a set of entities (its children in the cluster graph) when we cannot disambiguate among them. This is similar to a KG Collection, but this is not in KG.",
          "type": "boolean"
        },
        "ruleInstance": {
          "$ref": "RepositoryWebrefClusterProtoRuleInstance",
          "description": "Explanation of where this cluster, and this entity, come from. All entities in a cluster have this, not just entities that have been created because of the cluster."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefClusterProtoMidListRule": {
      "description": "A rule that defines a Cluster based on a list of mids. It creates a single Set, and makes it the parent of each of the mids in the list.",
      "id": "RepositoryWebrefClusterProtoMidListRule",
      "properties": {
        "id": {
          "description": "Id of this rule; this is used to generate ids for the synthetic entities created for a cluster. Required.",
          "type": "string"
        },
        "mid": {
          "description": "The mids of the entities that will be made into a cluster.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefClusterProtoMidListRuleInstance": {
      "description": "An instance of a \"mid list\" rule. Each \"mid list\" rule defines exactly one cluster.",
      "id": "RepositoryWebrefClusterProtoMidListRuleInstance",
      "properties": {
        "role": {
          "enum": [
            "ELEMENT",
            "SET"
          ],
          "enumDescriptions": [
            "One of the entities explicitly given in the rule.",
            "The entity that represents ambiguity among all ELEMENTs."
          ],
          "type": "string"
        },
        "rule": {
          "$ref": "RepositoryWebrefClusterProtoMidListRule",
          "description": "The rule that this is an instance of. Required."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefClusterProtoRelationRule": {
      "description": "A rule that defines a Cluster based on a relation. Given a relation (a link type) R, then: For each entity B that has incoming links of type R This defines an instance of this rule, with argument=B We create a Set S We make B a child of S For each entity A that has a link R to B, we make A a child of S Next available tag: 6",
      "id": "RepositoryWebrefClusterProtoRelationRule",
      "properties": {
        "relation": {
          "description": "The topic_property_name for the link that defines the relation, e.g. \"/tv/tv_series_episode/series\". Can start with a \"!\" to indicate that this link is reversed during extraction and we want the reversed case. Required.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefClusterProtoRelationRuleInstance": {
      "description": "An instance of a \"relation\" rule. Each \"relation\" rule defines a number of clusters, one for each entity B that that has incoming links of a certain type R; all entities with an outgoing link to B of type R are part of that cluster.",
      "id": "RepositoryWebrefClusterProtoRelationRuleInstance",
      "properties": {
        "role": {
          "enum": [
            "SOURCE",
            "TARGET",
            "SET"
          ],
          "enumDescriptions": [
            "One entity with an outgoing link of type R.",
            "The entity with the incoming link of type R.",
            "The entity that represents ambiguity among SOURCEs and TARGET."
          ],
          "type": "string"
        },
        "rule": {
          "$ref": "RepositoryWebrefClusterProtoRelationRule",
          "description": "The rule that this is an instance of. Required."
        },
        "target": {
          "$ref": "RepositoryWebrefWebrefEntityId",
          "description": "The one entity that the links of type R point to. Required."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefClusterProtoRuleInstance": {
      "description": "When we apply a rule to define a particular cluster, we have a RuleInstance. Some kinds of rules for clusters define more than one cluster. In those rules we say things like \"for each entity X with this property, we create a cluster where...\"; each particular cluster that we create is the result of an *instance* of that rule, where the argument X has been bound to a particular entity (note that this also applies to rules that define only one cluster; in that case, there are no arguments). An entity that is part of a cluster plays a \"role\" in such a cluster. This message describes such an instantiation of a rule with a role and with concrete values for the arguments.",
      "id": "RepositoryWebrefClusterProtoRuleInstance",
      "properties": {
        "midList": {
          "$ref": "RepositoryWebrefClusterProtoMidListRuleInstance",
          "description": "Exactly one of these *RuleInstance fields needs to be present for clusters which have not been merged; it selects the specific kind of rule instance. For merged clusters both fields may be present."
        },
        "relation": {
          "items": {
            "$ref": "RepositoryWebrefClusterProtoRelationRuleInstance"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCompactFlatPropertyValue": {
      "description": "Flattened version of possibly nested compound values. This means that the `value` in here is *never* a `compound_value` and all predicate MIDs on the nested path are collapsed into the repeated `predicate_encoded_mid` field. When `predicate_encoded_mid` contains only one predicate, this is equivalent to a CompactKgPropertyValue.",
      "id": "RepositoryWebrefCompactFlatPropertyValue",
      "properties": {
        "predicateEncodedMid": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "propertyName": {
          "description": "The property corresponding to predicte_encoded_mid above. This is populated in some non-serving tables.",
          "type": "string"
        },
        "value": {
          "items": {
            "$ref": "RepositoryWebrefCompactKgValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCompactKgPropertyValue": {
      "description": "Analog to freebase::PropertyValue",
      "id": "RepositoryWebrefCompactKgPropertyValue",
      "properties": {
        "encodedMid": {
          "format": "uint64",
          "type": "string"
        },
        "hrid": {
          "type": "string"
        },
        "value": {
          "items": {
            "$ref": "RepositoryWebrefCompactKgValue"
          },
          "type": "array"
        },
        "valueStatus": {
          "enum": [
            "HAS_UNKNOWN_VALUE",
            "HAS_NO_VALUE"
          ],
          "enumDescriptions": [
            "There are values, but we don't know what they are. (e.g. person is known to have children, but we don't know who they are) (This is only sensible if len(values) == 0; it is an error to see this value if len(values) > 0)",
            "We know that there are no values for this predicate. (e.g. person is known to have zero children) (This is only sensible if len(values) == 0; it is an error to see this value if len(values) > 0)"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCompactKgTopic": {
      "description": "Analog to freebase::Topic",
      "id": "RepositoryWebrefCompactKgTopic",
      "properties": {
        "mid": {
          "description": "Mid of the topic; only filled in if no values.",
          "format": "uint64",
          "type": "string"
        },
        "propertyValue": {
          "items": {
            "$ref": "RepositoryWebrefCompactKgPropertyValue"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefCompactKgValue": {
      "description": "Analog to freebase::Value TODO(b/144526840) This representation has several quality and performance issues. Next available tag number: 12",
      "id": "RepositoryWebrefCompactKgValue",
      "properties": {
        "boolValue": {
          "description": "Present when value is bool.",
          "type": "boolean"
        },
        "compoundValue": {
          "$ref": "RepositoryWebrefCompactKgTopic",
          "description": "Compound values are those that contain either a number of simple valued facets (such as a latitude/longitude pair), or \"mediator\" topics representing multi-dimensional relationships between topics. See metaweb/data/topictable/topic.proto for more details."
        },
        "datetimeValue": {
          "description": "Present when value is datetime.",
          "type": "string"
        },
        "enumValue": {
          "description": "Present when value is enum.",
          "type": "string"
        },
        "floatValue": {
          "description": "Present when value is float.",
          "format": "double",
          "type": "number"
        },
        "idValue": {
          "description": "Present when value is an id.",
          "format": "uint64",
          "type": "string"
        },
        "intValue": {
          "description": "Present when value is int.",
          "format": "int64",
          "type": "string"
        },
        "serializedProtoValue": {
          "description": "Present when value is a serialized protocol buffer.",
          "format": "byte",
          "type": "string"
        },
        "textValue": {
          "description": "Present when value is text.",
          "type": "string"
        },
        "uriValue": {
          "description": "Present when value is URI.",
          "type": "string"
        },
        "uriValueFprint32": {
          "description": "32-bit fprint of uri. Can be used instead of `uri_value` to save space. See `GetNormalizedUriFprint32()`.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefComponentReference": {
      "description": "The ArgumentValue reference to Mention.CompoundMention.Component. Next available tag number: 4",
      "id": "RepositoryWebrefComponentReference",
      "properties": {
        "debugEntity": {
          "description": "Optionally the freebase_mid of the WebrefEntity which the Component identifies via entity_index. This is purely to help humans diagnose the WebrefEntities structure, may not always be present and should not be used by production code. Use QueryJoinToMeaningStructConverter to compose a proper value in place of the component reference.",
          "type": "string"
        },
        "funcallName": {
          "description": "The WebrefEntity referenced by `index` is equivalent to this function call in this context, but not universally such that we don't want to recursively expand its MRF. Use this for example if an entity corresponds to a category in an Intersect: CellPhones() & RelatedTo(/m/foo), where /m/cell_phones is equivalent to CellPhones() (and may or may not have an annotated span), but we don't want to generally assert that /m/cell_phones == CellPhones(). This cannot be an actual FunctionCall to avoid a circular dependency.",
          "type": "string"
        },
        "index": {
          "description": "The index of the Component of the CompoundMention which has the mrf_index of this MRF expression in WebrefEntity. Required.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefConceptNameMetadata": {
      "description": "Metadata proto to be stored in concept tables. Note: Name table only stores name_type_mask for better performance. Remember to change NameToConceptEntry if you add a field to this proto.",
      "id": "RepositoryWebrefConceptNameMetadata",
      "properties": {
        "nameTypeMask": {
          "description": "Bitfield of ConceptNameMetadata::NameType bits.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDetailedEntityScores": {
      "description": "Detailed scores about the topicality of an entity. Next available tag: 16",
      "id": "RepositoryWebrefDetailedEntityScores",
      "properties": {
        "connectedness": {
          "description": "Represents how much the entity is connected/related to the other entities in the document. This signal partially influences the topicality score, but it is not totally aligned with it: an entity can be very related to the rest of the document, but not central for understanding it. Likewise, an entity can be central to understand a document, but not very related to the rest of the document. The value is in [0, 1].",
          "format": "float",
          "type": "number"
        },
        "docScore": {
          "description": "How well the document scores for the entity. The score is unnormalized, and serves as a relative ranking signal between different documents for an entity.",
          "format": "float",
          "type": "number"
        },
        "geoTopicNormalizedScore": {
          "description": "If the annotation corresponds to a geo topic, this is populated with GeoTopic::normalized_score.",
          "format": "float",
          "type": "number"
        },
        "isAuthor": {
          "description": "True if the entity is the author of the document. This was mainly developed and tuned for news articles (e.g. /m/02x27qn on \"www.vogue.com/article/flint-town-netflix\") but is also popluated for other content (e.g. scientific articles). Important: the semantics of this field may change in the future or it might be removed and replaced with a different API. If you want to use this field, please reach out to ke-authors@ first.",
          "type": "boolean"
        },
        "isPublisher": {
          "description": "True if the entity is the publisher of the page (e.g. CNN on \"http://www.cnn.com/foo/bar\").",
          "type": "boolean"
        },
        "isReferencePage": {
          "description": "Set to true iff the entity matches the full URL of the document, meaning that it is a reference page or related page of the entity.",
          "type": "boolean"
        },
        "localEntityLocationConfidence": {
          "description": "If the annotation corresponds to a local entity, this is populated with LocalEntityAnnotations::Instance::location_confidence.",
          "format": "float",
          "type": "number"
        },
        "normalizedTopicality": {
          "description": "Representation of the topicality score that is normalized in [0, 1] and which sum over all entities in the document is 1. It represents the \"proportion\" of the document that talks about the entity. This score is less human interpretable as the bucketized topicality score (EntityAnnotations.topicality_score), but is more suited for some usages like aggregations.",
          "format": "float",
          "type": "number"
        },
        "referencePageScores": {
          "$ref": "RepositoryWebrefReferencePageScores",
          "description": "Signals used for mining new reference pages, set by the reference-page-scorer processor (that is turned off by default). This field is not populated, except for special reference page extraction runs."
        },
        "relevanceScore": {
          "description": "Relevance score generated by a Machine Learning entity classifier. This signal is similar to topicality, but machine learning based and supported by EntitySignals, not Webref. See http://go/entityclassifier for details on the classifier.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDetailedMentionScores": {
      "id": "RepositoryWebrefDetailedMentionScores",
      "properties": {
        "resultEntityScore": {
          "description": "How much support this mention received from the results for PostRef. This is populated only if explicitly requested and different from 0.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDisplayInfo": {
      "description": "Information that can be used to display the entity (e.g. title, image...).",
      "id": "RepositoryWebrefDisplayInfo",
      "properties": {
        "displayName": {
          "description": "Per language display name from reliable sources.",
          "items": {
            "$ref": "RepositoryWebrefDisplayName"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDisplayName": {
      "description": "Per language display name from reliable sources (e.g. Freebase, Wikipedia). The name can be ambiguous (e.g. \"Springfield\" rather than \"Springfield, Idaho\"), and is thus to be used in a context which provides sufficient disambiguation. See: http://go/entity-names WARNING: This data is DEPRECATED and any user-visible entity names need to be fetched from TopicServer. Note that any display names included in this proto are merely a pass-through from KG and have no freshness guarantees.",
      "id": "RepositoryWebrefDisplayName",
      "properties": {
        "canonicalName": {
          "description": "An encylopedia style topic name (e.g. \"Dog\", not \"Dogs\"). Corresponds to Freebase /type/object/name and similar sources.",
          "type": "string"
        },
        "language": {
          "description": "The language of this name. See http://goto/iii for all the details on the language identifiers.",
          "type": "string"
        },
        "subjectName": {
          "description": "A name as it would be used for a news topic, an interest, the subject of a story. E.g. in list of things (\"Related topics: Smartphones, computers, accidents\". \"Interests: Dogs\"). *Fall back:* If the field is not populated, fall back to the \"canonical_name\" field. This field is usually not populated since (a) in most cases the subject form name is the same as the canonical name, and (b) data coverage of subject-form names is currently much lower than data coverage of canonical names. Note: In some languages (e.g. French) the difference between canonical names and subject names is larger than in English (not just plural vs. singular), but still strictly grammatical (including an article, capitalization, plural vs. singular). Corresponds to Freebase /freebase/linguistic_hint/subject_form.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDocLevelRelevanceRatings": {
      "description": "List of PerDocRelevanceRatings for Precision@5 evals done via ewok (template 2282).",
      "id": "RepositoryWebrefDocLevelRelevanceRatings",
      "properties": {
        "perDocRelevanceRatings": {
          "items": {
            "$ref": "RepositoryWebrefPerDocRelevanceRatings"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDocumentMetadata": {
      "description": "Information about the document which is not produced by webref, typically copied from the docjoin. Next available tag: 15",
      "id": "RepositoryWebrefDocumentMetadata",
      "properties": {
        "crawlTime": {
          "description": "The timestamp of when the document was crawled (if known). Copied from CompositeDoc.Content.CrawlTime.",
          "format": "int64",
          "type": "string"
        },
        "docFp": {
          "description": "Fingerprint of the document. We compute and set this fingerprint when creating the pagesets that we use for evals. Otherwise, this field is not normally set. We use the field to make sure that the human ratings that we have are generated for the same version of the document, otherwise they might be invalid. We do not compute the fingerprint on the fly (e.g. as a fingerprint of the proto buffer serialization of the cdoc) because protocol buffer serialization is not stable.",
          "format": "uint64",
          "type": "string"
        },
        "docId": {
          "description": "DocId of the annotated document as read from cdoc.doc().docid().",
          "format": "uint64",
          "type": "string"
        },
        "forwardingUrls": {
          "$ref": "RepositoryWebrefForwardingUrls",
          "description": "Urls that forward to this url. Needed for url -> topical entity entries."
        },
        "isDisambiguationPage": {
          "description": "Set to true if the document is a known disambiguation page, e.g. https://en.wikipedia.org/wiki/Orange.",
          "type": "boolean"
        },
        "language": {
          "description": "The document language, as read from doc().content().language(). This is go/language-enum value.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "numIncomingAnchors": {
          "description": "The (weighted) number of incoming anchors (links from other documents).",
          "format": "float",
          "type": "number"
        },
        "salientTerms": {
          "$ref": "QualitySalientTermsSalientTermSet",
          "description": "The salient terms for this document. Only set if --webref_doc_metadata_copy_salient_terms is true. Same motivation as the title field above."
        },
        "title": {
          "description": "The title of the document. Only set if --webref_doc_metadata_set_title is true. The idea is that we can use this to more easily learn things like: title contains \"restaurants\" -> more likely to be a list page.",
          "type": "string"
        },
        "totalClicks": {
          "description": "The total clicks on this document, taken from navboost data.",
          "format": "float",
          "type": "number"
        },
        "url": {
          "description": "The url of the document.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefDomainSpecificRepresentation": {
      "description": "Represents a domain specific entity data.",
      "id": "RepositoryWebrefDomainSpecificRepresentation",
      "properties": {
        "entityData": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "The actual domain specific data. For example it can be freebase.Topic, repository_wikipedia.WikiJoin, ocean.WorkMetadata, geostore.Feature."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEnricherDebugData": {
      "description": "Top level proto for enricher specific debug data that is only displayed in the Webref demo and should not be used for anything production-related. Next id: 4.",
      "id": "RepositoryWebrefEnricherDebugData",
      "properties": {
        "nonMidProperties": {
          "description": "Contains selected properties (from KG) whose values are not other entities (in which case they would be represented in link_info) but scalar values, possibly reachable through (multiple) CVTs.",
          "items": {
            "$ref": "RepositoryWebrefCompactFlatPropertyValue"
          },
          "type": "array"
        },
        "referencePage": {
          "description": "This field contains reference pages for this entity. A reference page is a page that is highly topical for this entity, which can be used to mine additional information about this entity. Example reference pages for Apple Inc. would be the composite docs for \"http://en.wikipedia.org/wiki/Apple_Inc.\" and http://www.apple.com. For actors or movies, you can also have the imdb page. Also see: http://go/refx-pages.",
          "items": {
            "$ref": "RepositoryWebrefSimplifiedCompositeDoc"
          },
          "type": "array"
        },
        "relatedPage": {
          "description": "This field contains mined related pages for the entity. A related page is a page that is moderately topical for this entity (More details: http://shortn/_KCE0GfQlpJ). This is mainly used to mine additional information for entities which do not have reference pages Unlike reference pages, a single doc can be a related page for multiple mids.",
          "items": {
            "$ref": "RepositoryWebrefSimplifiedCompositeDoc"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityAnnotations": {
      "description": "All annotations for a given concept (in one document collection). Available tags: [10-15], [19-]",
      "id": "RepositoryWebrefEntityAnnotations",
      "properties": {
        "confidenceScore": {
          "description": "The overall confidence that the entity is annotated somewhere in the document or query. For WebRef it is computed as a function of the mention confidences weighted by the importance of each mention, where for documents a mention is of greater importance if it occurs in the title, h1 or anchors. For QRef it is just the maximum of the confidence over all mentions. NOTE: You probably want to use the mention-level segment_mentions.mention.confidence_score field instead of this one.",
          "format": "float",
          "type": "number"
        },
        "debugInfo": {
          "$ref": "RepositoryWebrefAnnotationDebugInfo"
        },
        "detailedEntityScores": {
          "$ref": "RepositoryWebrefDetailedEntityScores",
          "description": "Additional information about how the entity relates to the page, for example whether it is a business entity which published the page."
        },
        "explainedRangeInfo": {
          "$ref": "RepositoryWebrefExplainedRangeInfo",
          "description": "All ranges explained by the entity or any other entity it implies. Used in the context of partial query interpretation (go/partial-understanding)."
        },
        "isImplicit": {
          "description": "An entity is marked as implicit if there is no explicit mention of the entity in the content of the page. For instance, all mentions of the entity are in query, url and/or anchors; or the entity has only implicit content mentions.",
          "type": "boolean"
        },
        "isResolution": {
          "description": "True if the entity is an MDVC summary entity, i.e. it might not be mentioned directly on the query, but it is the product of resolving a set of explicit annotations. E.g. \"2014 FIFA World Cup\" can be the summary for the query: [soccer world cup in brazil] even though none of the names of the entity is mentioned on the query. Summary nodes can also be synthetic, i.e. have a /t/ mid, as they represent the intersection between a set of regular annotations. For more information, see http://go/mdvc-output.",
          "type": "boolean"
        },
        "segmentMentions": {
          "description": "All mentions of a given concept grouped by segments. For Webref, there are many different kinds of segment, such as content, title and anchors; while for QRef, there is only one segment called CONTENT. For QRef this field contains the primary output of the annotator, and for WebRef it together with topicality_score does.",
          "items": {
            "$ref": "RepositoryWebrefSegmentMentions"
          },
          "type": "array"
        },
        "topicalityRank": {
          "description": "Rank of the entity when sorted by topicality score.",
          "format": "int32",
          "type": "integer"
        },
        "topicalityScore": {
          "description": "The WebRef topicality score of the entity for this document. This score indicates how related is the entity to the overall topic of the document. See https://goto.google.com/topicality-score for details. This field is not present in QRef output. Note that the topicality and the confidence score are orthogonal measures. It is possible that the annotator is absolutely sure that an entity is mentioned in a given range in the document, but this entity may be unrelated to the overall topic of the page (e.g. the entity \"RSS\" is mentioned in the footer of appleinsider.com). In this case the mention has a very high confidence score, but very low topicality score.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityDebugInfo": {
      "description": "Provides some debug info for the entity. This data shown to engineers (for debugging) and to raters (so it ultimately impacts eval metrics), but is also used to train ML models (see below). IMPORTANT: Despite the proto naming, this data has production quality impact. The data below is mostly human-readable text that is useful to help engineers with debugging. However the text is also used as input to machine-learned natural language processing models, which are used in production Webref.",
      "id": "RepositoryWebrefEntityDebugInfo",
      "properties": {
        "description": {
          "description": "A human-readable description of the entity. This can range from brief, machine-generated notes to lengthy human-written paragraphs from Wikipedia.",
          "type": "string"
        },
        "language": {
          "description": "The language (III LanguageCode) of the `title` and `description` fields.",
          "type": "string"
        },
        "score": {
          "description": "Internal score to merge debug info. should not set in final entityjoins.",
          "format": "double",
          "type": "number"
        },
        "title": {
          "description": "A short human-readable name/title of the entity, similar to what is displayed at the top of a Hume page. Suitable to be displayed in a list.",
          "type": "string"
        },
        "url": {
          "description": "Link to a page with more information about the entity (internal Hume page, external Wikipedia page, etc.).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityJoin": {
      "description": "Next available tag: 35. Represents all the information that we have for a given entity.",
      "id": "RepositoryWebrefEntityJoin",
      "properties": {
        "annotatedEntityId": {
          "$ref": "RepositoryWebrefWebrefEntityId",
          "description": "The id of this entity, prefer accessing through webref-entities-util.h functions."
        },
        "cdoc": {
          "description": "This field contains reference pages for this entity. A reference page is a page that is highly topical for this entity, which can be used to mine additional information about this entity. Example reference pages for Apple Inc. would be the composite docs for \"http://en.wikipedia.org/wiki/Apple_Inc.\" and http://www.apple.com. For actors or movies, you can also have the imdb page. Also see: http://go/refx-pages.",
          "items": {
            "$ref": "RepositoryWebrefSimplifiedCompositeDoc"
          },
          "type": "array"
        },
        "contextNameInfo": {
          "description": "The context names (with scores) of this entity. The difference to regular names (aka name_info) is that context names are not used for finding mentions in a document as they consist of names somehow related to the entity (e.g. name \"fisherman s wharf\" for the entity \"Gary Danko\"). Used for reconciling freebase and oyster.",
          "items": {
            "$ref": "RepositoryWebrefGlobalNameInfo"
          },
          "type": "array"
        },
        "debugInfo": {
          "description": "Debug information about the entity.",
          "items": {
            "$ref": "RepositoryWebrefEntityDebugInfo"
          },
          "type": "array"
        },
        "enricherAnnotatorProfile": {
          "$ref": "RepositoryWebrefAnnotatorProfile",
          "description": "Optional profiling data from the enricher that enriched this entity (and produced this EntityJoin as debug output)."
        },
        "enricherDebugData": {
          "$ref": "RepositoryWebrefEnricherDebugData",
          "description": "Contains debug data produced by enricher and only used for debug purpose (e.g. demo)."
        },
        "extraData": {
          "$ref": "RepositoryWebrefExtraMetadata",
          "description": "Additional metadata about the entity, that can be derived from the \"raw data\" (composite doc, domain specific data...), or come from other sources. Despite its name, this field often contains quite important information."
        },
        "humanRatings": {
          "$ref": "RepositoryWebrefHumanRatings",
          "description": "Human ratings (e.g. ratings from EWOK). This is typically only populated in the evaluation pipelines (e.g. P@5)."
        },
        "linkInfo": {
          "description": "Contains all links (with scores) that Webref knows for this entity. Links are relationships between entities. The data in this field is very important for the quality of the model.",
          "items": {
            "$ref": "RepositoryWebrefGlobalLinkInfo"
          },
          "type": "array"
        },
        "nameInfo": {
          "description": "Contains all names (with scores) that Webref knows for this entity. The data in this field is very important for the quality of the model.",
          "items": {
            "$ref": "RepositoryWebrefGlobalNameInfo"
          },
          "type": "array"
        },
        "refconNameInfo": {
          "description": "Contains names and names metadata used by Refcon.",
          "items": {
            "$ref": "RepositoryWebrefRefconRefconNameInfo"
          },
          "type": "array"
        },
        "representation": {
          "description": "An entity can have metadata from various data sources. Generally speaking all sources will be / should be reconciled into a single KG Topic entry. However, in some cases we pull in additional chunks of metadata from these sources; these are stored in this field. For example a local business could have a KG entry (topic proto), wikipedia entry (WikiJoin) and a MapFacts entry (Feature proto).",
          "items": {
            "$ref": "RepositoryWebrefDomainSpecificRepresentation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityLinkMetadata": {
      "description": "Metadata about the nature of the link.",
      "id": "RepositoryWebrefEntityLinkMetadata",
      "properties": {
        "aggregateFlags": {
          "$ref": "RepositoryWebrefLinkKindFlags",
          "description": "The aggregate kind flags for the link."
        },
        "kindInfo": {
          "description": "Information about all the link kinds associated with the link.",
          "items": {
            "$ref": "RepositoryWebrefLinkKindInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityLinkSource": {
      "description": "All link data for a given source.",
      "id": "RepositoryWebrefEntityLinkSource",
      "properties": {
        "kgProperty": {
          "description": "KG-property if the SourceType is associated with a KG-property (TOPIC_PROPERTY, NEW_TOPIC_PROPERTY).",
          "type": "string"
        },
        "score": {
          "description": "Score in [0, \\infty) that represents how relatively likely it is to see that entity cooccurring with the main entity (in the entity join). A value of 1.0 means that the two entities are basically independent. The higher the more likely (relatively to the individual entity probabilities) they are to cooccur.",
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "UNKNOWN_LINK_SOURCE",
            "REFERENCE_PAGE_MENTIONS",
            "OYSTER_RELATIONS",
            "TYPE_BASED_LINKS",
            "TIME_LINKS",
            "COMPOUND_LINKS",
            "HUMAN_LANGUAGE_LINKS",
            "NEW_TOPIC_PROPERTY",
            "EXPERIMENTAL_LINKS",
            "PERSONAL_LINKS",
            "EBSE"
          ],
          "enumDescriptions": [
            "",
            "Entity mentions from a reference page. Those mentions come from wikilinks.",
            "Links added based on relations in oyster feature protos.",
            "Links generated to topics related to a topic's type.",
            "Links between year entity and month entity.",
            "Links between compound and attribute entity. Data comes from WikiJoin.",
            "Links between for human languages, currently we have human_language <-> human_language and human_language <-> translation. Reason to have these links: link weights for them from other sources (e.g., REFERENCE_PAGE_MENTIONS) are too small. In order to improve annotation for language entities, we need to manually increase these link weights.",
            "Links from kg-properties.",
            "For experiments only, see flag enricher_experimental_link_table in enricher-link-scorer.cc.",
            "Links from the Personal Knowledge Graph indexing pipeline.",
            "Entity-based salient entities."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityNameRatings": {
      "description": "Stores all human ratings collected for a given entity name.",
      "id": "RepositoryWebrefEntityNameRatings",
      "properties": {
        "language": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "ratings": {
          "description": "Every entity name receives one or a few ratings from human raters.",
          "items": {
            "$ref": "RepositoryWebrefEntityNameRatingsEntityNameRating"
          },
          "type": "array"
        },
        "tags": {
          "description": "Multiple tags can be assigned to a rated entity name. The tags can be used when computing metrics in the Name Eval, so that different metrics are computed separately for different sets of examples that have the same tag.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityNameRatingsEntityNameRating": {
      "id": "RepositoryWebrefEntityNameRatingsEntityNameRating",
      "properties": {
        "comment": {
          "description": "Comment left by the rater to justify the rating decision.",
          "type": "string"
        },
        "label": {
          "enum": [
            "LABEL_UNSPECIFIED",
            "LABEL_GOOD",
            "LABEL_BAD",
            "LABEL_I_DONT_KNOW"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "source": {
          "enum": [
            "SOURCE_UNSPECIFIED",
            "SOURCE_REFX",
            "SOURCE_QAAS",
            "SOURCE_SLS"
          ],
          "enumDescriptions": [
            "",
            "Ratings from RefX engineers.",
            "Ratings from QaaS raters.",
            "Ratings from Search Language Specialists (go/sls) raters."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityNameScore": {
      "description": "Represents a score for an entity. Next available tag: 39.",
      "id": "RepositoryWebrefEntityNameScore",
      "properties": {
        "bootstrappingPreviousIteration": {
          "$ref": "RepositoryWebrefBootstrappingScore",
          "description": "If the EntityNameScore is part of a bootstrapped model, then this field contains the score_ratio from the previous model (\"Model 0\"). If Model 0 does not have a corresponding entry, because it did not know about this name for this entity, then bootstrapping_previous_iteration is left empty."
        },
        "confidence": {
          "description": "Confidence that this name is a trusted name of the entity. A reasonable threshold for name trust is 0.6. A name can be trusted and still have very low score_ratio, esp. if it is ambiguous (e.g. 'mercury') and/or not the dominant interpretation (e.g. \"siberian husky\" -> /m/06krnsr (a book)).",
          "format": "float",
          "type": "number"
        },
        "debugInfo": {
          "description": "Debug information about the entity.",
          "items": {
            "$ref": "RepositoryWebrefEntityDebugInfo"
          },
          "type": "array"
        },
        "debugVariantSignals": {
          "description": "Source and score data, this is internal to refx (e.g. for demo/debug).",
          "items": {
            "$ref": "RepositoryWebrefPreprocessingNameVariantSignals"
          },
          "type": "array"
        },
        "entity": {
          "$ref": "RepositoryWebrefEntityJoin",
          "description": "Sparse metadata about the entity, usage should be moved back to individual fields, this avoids having cyclic dependencies."
        },
        "extendedScoreRatio": {
          "description": "Stores region specific score ratios for the entity when it is significantly different from the language version above.",
          "items": {
            "$ref": "RepositoryWebrefExtendedEntityNameScore"
          },
          "type": "array"
        },
        "includeInModel": {
          "description": "Include this name in the name lookup table.",
          "type": "boolean"
        },
        "internalBootstrapIsOpenWorld": {
          "description": "Transient field, only used in bootstrap pipeline.",
          "type": "boolean"
        },
        "internalIsClusterParent": {
          "type": "boolean"
        },
        "isClusterGlobal": {
          "description": "Set to true iff the concept is cluster parent and the name can be a name for any child of the cluster. (e.g. 'starbucks' is cluster_global for the [Starbucks] chain cluster).",
          "type": "boolean"
        },
        "isDropped": {
          "description": "Documened at: repository/webref/universal/webref_data/enricher/entity-data.h",
          "type": "boolean"
        },
        "isMatchlessResultContext": {
          "description": "Only for context names: Whether this EntityNameScore represents an entity that was dominant in the search results but was not annotated by QRef during learning. Matchless result contexts are useful for bootstrapping, where different model iterations may have different names and thus context scores from Model 0 that are inconsistent with the names from Model 1.",
          "type": "boolean"
        },
        "isPruned": {
          "description": "Documened at: repository/webref/universal/webref_data/enricher/entity-data.h",
          "type": "boolean"
        },
        "mid": {
          "description": "The id of the entity.",
          "format": "uint64",
          "type": "string"
        },
        "nameMetadata": {
          "$ref": "RepositoryWebrefPreprocessingNameEntityMetadata",
          "description": "Metadata about this name aggregated from name signals."
        },
        "rangeMetadata": {
          "description": "Metadata of segment range, which is annotated by this entity.",
          "items": {
            "$ref": "RepositoryWebrefRangeMetadata"
          },
          "type": "array"
        },
        "score": {
          "description": "The absolute score of that entity. score = artificial_score + volume_based_score",
          "format": "float",
          "type": "number"
        },
        "scoreRatio": {
          "description": "Ratio between this entity score and the total score over all entities. This is including the \"open world\" information if it was estimated.",
          "format": "float",
          "type": "number"
        },
        "useAsNameCandidate": {
          "description": "When this field is true, we consider this context name as candidate in Enricher's names pipeline.",
          "type": "boolean"
        },
        "volumeBasedScore": {
          "description": "Absolute score that comes from quantitative sources such as navboost clicks, anchors, etc. artificial_score = score - volume_based_score",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityNameSource": {
      "description": "Represents the data for a given source of names, including all entity scores. Notice that a source of name can be just a signal like a multiplier. Next available tag: 8.",
      "id": "RepositoryWebrefEntityNameSource",
      "properties": {
        "entityScore": {
          "description": "All the entity-name scores from that source. Keyed by the EntityNameScore.entity_id field.",
          "items": {
            "$ref": "RepositoryWebrefEntityNameScore"
          },
          "type": "array"
        },
        "type": {
          "description": "Describes where the data comes from.",
          "enum": [
            "SOURCE_TITLE",
            "SOURCE_QUERY",
            "SOURCE_ANCHOR",
            "PRODUCT_TITLE",
            "PRODUCT_QUERY",
            "COMMON_NGRAM_CONCEPT_BOOST",
            "FREEBASE_NAME",
            "TYPE_BASED_INVERSE_DEMOTION_FACTOR",
            "STRONG_IDENTIFIER",
            "UNTRUSTED_ANCHOR",
            "PERSON_NAME",
            "OYSTER_NAME",
            "UNTRUSTED_QUERY",
            "OYSTER_NAME_DERIVED",
            "RELATED_CONTEXT",
            "WIKI_DESCRIPTION",
            "WIKI_INFOBOX",
            "FREEBASE_PROPERTY",
            "WIKI_IS_A_TYPE",
            "OYSTER_TYPE",
            "OYSTER_ADDRESS",
            "SOURCE_MODEL",
            "LEAKED_NAME_DEMOTION",
            "PRODUCT_TITLE_VARIATION",
            "TRUSTED_NAME",
            "SUBSET_NAME",
            "UNTRUSTED_COOCCURRENCE_NAME",
            "RESULTS_ENTITIES_QUERY",
            "RELATED_ENTITIES_NGRAM",
            "CLIENT_PROVIDED_NAME",
            "GENERATED_CONTAINING_CONTEXT",
            "DOC_NAME_AGGREGATES",
            "QUERY_NAME_AGGREGATES",
            "SOURCE_LEARNED_QUERY",
            "COMPANY_OR_WEBSITE_DERIVED_NAME",
            "GENERATED_SPARSE_CONTEXT",
            "GENERATED_ARTIFICIAL_CONTEXT",
            "GENERATED_S2CELL_CONTEXT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "Special source that contains data on how much to boost the score of the entity because it is a common word/ngram concept (as opposed for example to proper noun).",
            "A freebase name or alias.",
            "Special source that contains data on how much to demote the score of the entity because of its type. This contains the inverse of the demotion.",
            "The name comes from a strong identifier, for example a URL, ISBN, UPC...",
            "The name comes from an untrusted anchor (for example from an untrusted external page).",
            "The name comes from a person full or partial name.",
            "The name comes from an Oyster NameProto associated with a location.",
            "The name comes from query clicks on untrusted pages.",
            "The name is derived from an Oyster NameProto, e.g., by adding an address component or a type.",
            "The name is extracted from related entities (e.g. based on link_info).",
            "Textual description of the entity (e.g. from first wikipedia paragraph). Usually longer than a regular entity name (can include multiple sentences).",
            "Names extracted from a wikipedia infobox.",
            "Names extracted from text-valued freebase properties (other than the ones which are already included in FREEBASE_NAME).",
            "Is-a type extracted from wikipedia description.",
            "The name is derived from an Oyster type.",
            "The name is derived from an Oyster address.",
            "The name contains aggregated scores from a run of the model pipeline. This is used to store old prior scores when learning new priors from e.g. queries.",
            "Demotion due to the name is suspected to be leaked from a related entity.",
            "The name is a generated variation based on Product Search titles.",
            "Trusted names are not squashed, and have a high confidence. A name should get source type trusted if: - None of the above types is more appropriate. - We are very confident that the names are correct for the given entity. An example usage is for stock ticker names which originate from Google Finance data. Trusted name's scores are not squashed (i.e. the total score volume for trusted names for a given name is not bounded.) In addition trusted names are canonical names, so they are not dropped in the preprocessing pipeline.",
            "This name has been recognized as a (fuzzy/partial) subset of a strong name, hence gets some score and trust because of that.",
            "Names from Cooccurrence pipeline.",
            "The name is a query for which the entity was featured in the results.",
            "The name is an ngram for which the entity was featured in the results.",
            "Names from clients' complementary data.",
            "A possibly disambiguating context for the entity generated from the model data, for example \" \" for a city.",
            "Scores from the document name aggregated scores.",
            "Scores from the query name aggregated scores.",
            "The name score comes from the query learn prior stage.",
            "Company or website derived name.",
            "Retrieval contexts made out of bigrams pairing tokens from names of related entities.",
            "Retrieval contexts made out of a name, followed by an artificial contextual token representing e.g. a type or coarse geo location. The annotator will generate lookups when it has reason to believe the range may contain an entity with the property.",
            "Retrieval contexts made out of bigrams pairing tokens of pruned names and the S2 cells around the entity (if the entity has a geo location)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefEntityScores": {
      "description": "Keeps a set of scores about an entity. Next available tag: 20.",
      "id": "RepositoryWebrefEntityScores",
      "properties": {
        "allCapsProb": {
          "description": "Probability that any given name of this entity is fully capitalized.",
          "format": "float",
          "type": "number"
        },
        "alphaEntityIdf": {
          "description": "This field is only for debugging and link weight experiments. It stores the entity's idf from the alpha model. Alpha idfs are used for link weight computations and available during model omega building via enricher_current_entity_idf_for_link_direction.",
          "format": "float",
          "type": "number"
        },
        "commonNgramProb": {
          "description": "Probability that the entity is a common ngram (e.g. from dictionary).",
          "format": "float",
          "type": "number"
        },
        "entityIdf": {
          "description": "The final (model omega) idf of an entity. Equals log2(1 / probability of the entity to appear in a document). This probability is currently estimated from its names (i.e. it is a sum of the name frequency weighted by P(entity | name)).",
          "format": "float",
          "type": "number"
        },
        "nameCapitalizationProb": {
          "description": "Probability that any given name of this entity is capitalized.",
          "format": "float",
          "type": "number"
        },
        "personProb": {
          "description": "The following fields are deprecated and should eventually be removed. They use data and rules that have not been refreshed for ~10y and KG has changed a lot in the meantime. ",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefExplainedRangeInfo": {
      "description": "Information about all ranges explained by the entity or any other entity it implies. For example, the Zurich entity may explain both tokens \"Zurich\" and \"Switzerland\" in [FIFA Zurich Switzerland], the first directly, the other via implication. Only used in the context of query annotation.",
      "id": "RepositoryWebrefExplainedRangeInfo",
      "properties": {
        "explainedRange": {
          "description": "All ranges explained by the entity.",
          "items": {
            "$ref": "RepositoryWebrefExplainedRangeInfoExplainedRange"
          },
          "type": "array"
        },
        "geoQueryCoverage": {
          "enum": [
            "NONE",
            "PARTIAL",
            "FULL"
          ],
          "enumDescriptions": [
            "",
            "Represents a PU result (go/partial-understanding).",
            "Represents a Sirius result (go/sirius)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefExplainedRangeInfoExplainedRange": {
      "description": "A range of the annotated document explained by an entity.",
      "id": "RepositoryWebrefExplainedRangeInfoExplainedRange",
      "properties": {
        "mention": {
          "$ref": "RepositoryWebrefSegmentMention",
          "description": "SegmentMention describing the occurrence of the token in the document."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefExtendedEntityNameScore": {
      "description": "Used to store region-specific score ratio per entity. Next available tag: 4.",
      "id": "RepositoryWebrefExtendedEntityNameScore",
      "properties": {
        "domain": {
          "description": "The domain name of the website, e.g. \"play.google.com\".",
          "type": "string"
        },
        "region": {
          "description": "The region in the III standard (http://go/iii). Eg. \"US\", \"GB\"",
          "type": "string"
        },
        "scoreRatio": {
          "description": "Score ratio for the entity, same as the EntityNameScore score ratio.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefExtraMetadata": {
      "description": "Additional metadata about the entity, that can be derived from the \"raw data\" (composite doc, domain specific data...), or come from other sources. Next available tag is 35.",
      "id": "RepositoryWebrefExtraMetadata",
      "properties": {
        "bookEditionMetadata": {
          "description": "For a book entity, store its book editions metadata. Used by Juggernaut to do /book/book_edition recon, see ariane/265006. This field is used by Juggernaut only.",
          "items": {
            "$ref": "RepositoryWebrefBookEditionMetadata"
          },
          "type": "array"
        },
        "categoryInfo": {
          "$ref": "RepositoryWebrefCategoryInfo",
          "description": "Information about category types of the entity."
        },
        "clusterMetadata": {
          "$ref": "RepositoryWebrefClusterMetadata",
          "description": "Metadata about clusters."
        },
        "displayInfo": {
          "$ref": "RepositoryWebrefDisplayInfo",
          "description": "Information for displaying the entity in applications."
        },
        "entityScores": {
          "$ref": "RepositoryWebrefEntityScores",
          "description": "Additional scores for the entity."
        },
        "equivalentEntityId": {
          "description": "An entity in KG that represents the same (or equivalent) entity in the real world. In particular, this is used for mid-forwarding: when de-duping entities in KG, the old ids represent the exact same entity as the one they were merged with. So when we see one id in the query and the other in a document, they are treated as the same entity.",
          "items": {
            "$ref": "RepositoryWebrefWebrefEntityId"
          },
          "type": "array"
        },
        "geoMetadata": {
          "$ref": "RepositoryWebrefGeoMetadataProto",
          "description": "Geo-specific entity metadata."
        },
        "kcAttributeMetadata": {
          "$ref": "RepositoryWebrefKCAttributeMetadata",
          "description": "Metadata related to KC attributes and Question & Answer triggering."
        },
        "latentEntities": {
          "$ref": "RepositoryWebrefLatentEntities",
          "description": "A list of entities that are latent given this entity. For example, \"Lionel Messi\" can have the latent entity \"FC Barcelona\". The latent entity links are materialized in an offline pipeline using r/w/scripts/latent_entities/latent-entities.pq. For more information, see go/latent-entities."
        },
        "mdvcMetadata": {
          "$ref": "RepositoryWebrefMdvcMetadata",
          "description": "Metadata about MDVC."
        },
        "otherMetadata": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Other metadata."
        },
        "primaryRecording": {
          "description": "The primary recording mid of a recording cluster entity. Used by Juggernaut to do /music/recording recon, see b/139901317. The primary recording is unique to a recording cluster. This field is used by Juggernaut only.",
          "format": "uint64",
          "type": "string"
        },
        "productMetadata": {
          "$ref": "RepositoryWebrefProductMetadata",
          "description": "Products-specific entity metadata."
        },
        "specialEntityType": {
          "description": "# LINT.ThenChange( //depot/google3/repository/webref/evaluation/query/metrics/util.cc)",
          "enum": [
            "UNDEFINED",
            "COLLECTION",
            "DATETIME",
            "MRF",
            "SHOPPING_CATALOG_TOKEN",
            "LIGHTWEIGHT_TOKEN"
          ],
          "enumDescriptions": [
            "Used for all entities for which SpecialEntityType has not yet been implemented. Treat this value as equivalent to having no information about whether the entity is special or not, i.e. treat it like !has_special_entity_type.",
            "The entity represents not a single KG entity but a collection or collection set. For example, consider the query [when was john smith born]. We don't know for sure which John Smith the query refers to, but we're >90% sure that it refers to a person (/collection/people). For entities with special_entity_type == COLLECTION, the main MID field is set to a /t MID derived deterministically from the entire query, the annotated subrange and the collection. The actual collection ID(s) can be found in webref_entity.collections (assuming this message is stored in webref_entity.entity_join.extra_data).",
            "The entity represents a date, such as \"January 24, 2018\", \"November 17\", or \"September 1999\". For entities of type DATETIME, the main MID field is set to a /t MID derived deterministically from the specific date, which itself can be found in datetime_metadata.",
            "This entity has a 'mrf' field with a MRF compound representation.",
            "The entity represents an ungrounded concept that is a shopping catalog token and has a /t MID.",
            "This entity has lightweight token semantic. It should be used with compound representation (go/lwt-tmids, go/compounds-in-refx). For example, a /t MID entity will be annotated to a range [from zurich], SpecialEntityType::LIGHTWEIGHT_TOKEN will be attached to the resulting EntityJoin."
          ],
          "type": "string"
        },
        "specialWord": {
          "items": {
            "$ref": "MapsQualitySpecialWordsProto"
          },
          "type": "array"
        },
        "supportTransferRules": {
          "description": "Metadata about support transfer rules defined for this entity.",
          "items": {
            "$ref": "RepositoryWebrefSupportTransferRule"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefFatcatCategory": {
      "id": "RepositoryWebrefFatcatCategory",
      "properties": {
        "id": {
          "description": "The category ID from verticals4. See go/verticals4 and where we read them in http://google3/repository/webref/preprocessing/fatcat-categories.cc",
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "description": "The relative weight of the category within a distribution.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefForwardingUrls": {
      "description": "Submessage for forwarding urls in DocumentMetadata.",
      "id": "RepositoryWebrefForwardingUrls",
      "properties": {
        "forwardingUrl": {
          "description": "Urls that forward to this url. Used for url -> topical entity entries.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefFprintModifierProto": {
      "description": "--------------------------------------------------------------------------- Enums defining the available modifier options.",
      "id": "RepositoryWebrefFprintModifierProto",
      "properties": {
        "capitalization": {
          "enum": [
            "CAPITALIZATION_ANY",
            "CAPITALIZATION_FIRST_ONLY",
            "CAPITALIZATION_SOME",
            "CAPITALIZATION_ALL"
          ],
          "enumDescriptions": [
            "Unspecified capitalization.",
            "Only the first character of the first token is capitalized.",
            "At least one character other than the first character of the first token is capitalized.",
            "All characters are capitalized."
          ],
          "type": "string"
        },
        "enclosing": {
          "enum": [
            "ENCLOSING_ANY",
            "ENCLOSING_QUOTES",
            "ENCLOSING_PARENTHESIS",
            "ENCLOSING_OTHER"
          ],
          "enumDescriptions": [
            "Unspecified enclosing characters.",
            "The name is enclosed in quotes (single or double)",
            "The name is enclosed in some kind of parenthesis.",
            "The name is enclosed in other characters such as \"|\" or \"*\"."
          ],
          "type": "string"
        },
        "language": {
          "description": "i18.languages.Language enum defined in i18n/languages/proto/languages.proto UNKNOWN_LANGUAGE",
          "format": "int32",
          "type": "integer"
        },
        "namespaceType": {
          "enum": [
            "NAMESPACE_DEFAULT",
            "NAMESPACE_WEBIT"
          ],
          "enumDescriptions": [
            "The default namespace to which all WebRef names are added.",
            "The namespace for WebIt-specific classification data."
          ],
          "type": "string"
        },
        "punctuation": {
          "enum": [
            "PUNCTUATION_ANY",
            "PUNCTUATION_INNER"
          ],
          "enumDescriptions": [
            "Unspecified punctuation.",
            "The name contains punctuation characters."
          ],
          "type": "string"
        },
        "sentence": {
          "enum": [
            "SENTENCE_ANY",
            "SENTENCE_BEGINNING"
          ],
          "enumDescriptions": [
            "Unspecified position of the name with respect to the sentence.",
            "The name occurs at the beginning of a sentence (i.e., after certain punctuation characters like \".\" or \"!\")."
          ],
          "type": "string"
        },
        "sourceType": {
          "enum": [
            "SOURCE_ANY",
            "SOURCE_NEWS",
            "SOURCE_YOUTUBE"
          ],
          "enumDescriptions": [
            "Unspecified source type.",
            "The source is a news page.",
            "The source is a youtube page."
          ],
          "type": "string"
        },
        "stemming": {
          "enum": [
            "STEMMING_ANY",
            "STEMMING_YES"
          ],
          "enumDescriptions": [
            "Unspecified stemming.",
            "The name results from stemming."
          ],
          "type": "string"
        },
        "style": {
          "enum": [
            "STYLE_ANY",
            "STYLE_DISTINCT"
          ],
          "enumDescriptions": [
            "Unspecified formatting.",
            "The name has a different format than the surrounding tokens."
          ],
          "type": "string"
        },
        "tokenType": {
          "enum": [
            "INVALID",
            "CONTENT",
            "URL",
            "ANCHOR",
            "QUERY",
            "INSTANT_QUERY",
            "A_HREF_TAG",
            "LINK_HREF_TAG",
            "IMG_ALT_TAG",
            "IMG_SRC_TAG",
            "META_CONTENT_TAG",
            "TITLE",
            "ANY",
            "IMAGE_QUERY",
            "CONTEXT_ENTITY",
            "RESULT_ENTITY",
            "CONTEXT_QUERY",
            "SIMILAR_QUERIES",
            "SPORE_GRAPH",
            "OFFDOMAIN_ANCHOR",
            "ONSITE_ANCHOR",
            "NAME_CANDIDATE",
            "TOPIC_LINK",
            "QUERY_NAME_CANDIDATE",
            "ANCHOR_NAME_CANDIDATE",
            "INJECTED_NAME_CANDIDATE",
            "REFERENCE_PAGE_URL",
            "REFERENCE_PAGE_LINK",
            "DEPRECATED_ENTITY_METADATA",
            "STRONG_IDENTIFIER",
            "REFERENCE_PAGE_URL_INLINK",
            "REFERENCE_PAGE_LINK_INLINK",
            "GEO_LINK",
            "PRINCIPAL_NAME",
            "NAME_BLACKLIST",
            "ENTITY_CONTEXT_TOKENS",
            "VIDEO_TRANSCRIPT",
            "VIDEO_OCR",
            "IMAGE_OCR",
            "LENS",
            "ONLY_LOOKUP_METADATA",
            "EMBEDDED_CONTENT"
          ],
          "enumDescriptions": [
            "To be used to mark an invalid token type. This proto enum does not follow the good practices, which suggest that such a value should be with tag 0: go/protodosdonts#do-include-an-unspecified-value-in-an-enum. Because this is a legacy situation and it is not safe to just change the tags, the enum contains an invalid type at this tag and can be used to specify the default value wherever this is needed.",
            "The main html content of a document.",
            "The urls of a document/",
            "The anchors pointing to a document.",
            "The navboost queries of a document",
            "The instant navboost queries of a document",
            "The href-value of the tags in the document's content",
            "The href-value of the tags in the document's content",
            "The alt-value of the tags in the document's content",
            "The src-value of the tags in the document's content",
            "The content-value of the tags \"description\" and \"keyword\"",
            "The document ",
            "Special value used to represent any other tokentype.",
            "The Image Search navboost queries.",
            "Entities added from annotation context.",
            "Represents an entity found in the results for Qref.",
            "A query used as additional context for Qref annotations.",
            "Similar Queries. They are only used to retrieve entities that might be able to explain original query. As in Q2@2018 we don't want them to be scored or provide context for scoring because of their overall big CPU impact on qrewrite (+50%).",
            "A freetext dump + metadata from Spore GraphAnnotations.",
            "Offdomain anchors pointing to a document.",
            "Onsite anchors pointing to a document.",
            "Name candidate extracted from the topic or generated from trusted source.",
            "A link extracted directly from the topic:",
            "Queries to reference pages which are potential names of the entity:",
            "Anchor texts to reference pages which are potential names of the entity: Tokenized potential reference page URLs of the entity. Token matching is none because lookups are external annotations only.",
            "Injected name candidates are appended using this segment type.",
            "",
            "URLs that are linked to the reference page of the entity. Token matching is none because lookups are external annotations only.",
            "A special position that is used for lookup of entity metadata in name table.",
            "Tokenized potential strong id of the entity, like phone number, ISBN. Token matching is none because lookups are external annotations only.",
            "A special position used for lookup of inlinks to reference page urls.",
            "A special position used for lookup of inlink scores for reference page outlinks.",
            "",
            "A name used in the name matching library for all types of matching. The type NAME_CANDIDATE is used for names that are only used for inexpensive types of matching.",
            "Name blacklist for enriched entity.",
            "Lyrics for song entities.",
            "",
            "",
            "",
            "",
            "Entries which are created in order to instruct the fprint-loader to load metadata for the contained ngrams.",
            "The embedded content in the document (e.g., within json scripts)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefFreebaseType": {
      "description": "The Freebase type information.",
      "id": "RepositoryWebrefFreebaseType",
      "properties": {
        "provenance": {
          "description": "Optional - for inferred types the principal source of information.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "score": {
          "description": "Optional score. Not present in KG directly but e.g. in WPCat.",
          "format": "float",
          "type": "number"
        },
        "typeMid": {
          "description": "Mid of this type. Equivalent to type_name, but is more compact. When present, overrides type_name (which can be omitted in this case to save space).",
          "format": "uint64",
          "type": "string"
        },
        "typeName": {
          "description": "e.g.: \"/business/industry\", \"/book/book_subject\", \"/people/person\"...",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefGenericIndices": {
      "description": "Identifies the segment index for Webref SegmentTypes not covered by other *Indices messages.",
      "id": "RepositoryWebrefGenericIndices",
      "properties": {
        "index": {
          "description": "The segment index.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefGeoMetadataProto": {
      "description": "Geo-specific information about the entity. Next available tag: 34.",
      "id": "RepositoryWebrefGeoMetadataProto",
      "properties": {
        "address": {
          "$ref": "GeostoreAddressProto",
          "description": "Stores parent/container information containing city, province & country."
        },
        "addressSynonyms": {
          "items": {
            "$ref": "RepositoryWebrefGeoMetadataProtoAddressSynonym"
          },
          "type": "array"
        },
        "areaKm2": {
          "description": "Area in km^2 of the feature if the feature has polygon.",
          "format": "double",
          "type": "number"
        },
        "bound": {
          "$ref": "GeostoreRectProto",
          "description": "The tight bounds of this feature. Note that these are different from the FeatureProto.bound field."
        },
        "countryCode": {
          "description": "Country code of the country of the entity. Only available in qref-metadata.",
          "type": "string"
        },
        "location": {
          "$ref": "GeostorePointProto",
          "description": "The geographic location (center) and geometry of this entity. See geostore.FeatureProto for more details."
        },
        "name": {
          "$ref": "GeostoreNameProto",
          "description": "The best name from Oyster for this entity. Is only included for some types of entities, and is a trimmed version of the proto (some fields are cleared)."
        },
        "oysterId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "The oyster id of the entity"
        },
        "stableIntegerCountryCode": {
          "description": "Numerical country code, converted with i18n/identifiers/stableinternalregionconverter.h. It is the same as country_code, but it is available in the annotator model (and takes less space).",
          "format": "int32",
          "type": "integer"
        },
        "timezone": {
          "description": "Timezone if the feature is contained inside one.",
          "type": "string"
        },
        "wpLocation": {
          "description": "Information about the geographic location (center) extracted from the wikijoins.",
          "items": {
            "$ref": "RepositoryWebrefWikipediaGeocode"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefGeoMetadataProtoAddressSynonym": {
      "description": "Terms from AddressComponent proto that we can use as address synonyms. At the time of annotation we have the entire AddressProto, however we can't use it all due to size. So only store relevant pieces of components (defined in superroot/impls/localweb/s2_synoyms.h).",
      "id": "RepositoryWebrefGeoMetadataProtoAddressSynonym",
      "properties": {
        "language": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "type": {
          "description": "The type of the geocoded address. e.g. Road, Lake, Ocean, building. This comes from TypeCategory field in geostore/base/proto/feature.proto",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefGlobalLinkInfo": {
      "description": "Groups together the LinkInfo for all locales.",
      "id": "RepositoryWebrefGlobalLinkInfo",
      "properties": {
        "debugTitle": {
          "description": "A short human-readable name/title of the entity, similar to what is displayed at the top of a Hume page. Do not use for any production purpose as it does not provide guarantees for stability or policy checks (access requirements).",
          "type": "string"
        },
        "isBoostedPrimaryWeightLink": {
          "description": "Whether this is a BoostedPrimaryWeight link. For these links in some cases a higher weight is used for primary scoring.",
          "type": "boolean"
        },
        "targetMid": {
          "description": "The mid of the linked entity.",
          "format": "uint64",
          "type": "string"
        },
        "variantInfo": {
          "description": "The information about this link for each locale.",
          "items": {
            "$ref": "RepositoryWebrefLinkInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefGlobalNameInfo": {
      "description": "Groups together the NameInfo for all variants of a given name. The variants of a name have the same normalized string, but they have a different original string and/or a different language/region. Example: For the name \"apple\", there may be variants such as \"apple|en\", \"apple|en|US\", \"apple|de\", \"Apple|en\"...",
      "id": "RepositoryWebrefGlobalNameInfo",
      "properties": {
        "normalizedName": {
          "description": "The normalized name.",
          "type": "string"
        },
        "variantInfo": {
          "description": "All the variants of this name together with associated information such as score, sources, etc.",
          "items": {
            "$ref": "RepositoryWebrefNameInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefHumanRatings": {
      "id": "RepositoryWebrefHumanRatings",
      "properties": {
        "annotationRatings": {
          "$ref": "RepositoryWebrefAnnotationRatings"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefImageQueryIndices": {
      "description": "Identifies a set of Image NavBoost queries in the CompositeDoc. Each CompositeDoc can contain several images, so we store the image index from the CompositeDoc::doc_images with the index of the particular query inside ImageData::image_data_navboost.",
      "id": "RepositoryWebrefImageQueryIndices",
      "properties": {
        "canonicalDocid": {
          "description": "The (canonical) image docid of the ImageData this image query is part of. Useful for identifying the ImageData even after doc_images are updated in between Webref annotation runs. Use docid only when canonical_docid == 0.",
          "format": "uint64",
          "type": "string"
        },
        "docid": {
          "format": "uint64",
          "type": "string"
        },
        "imageIndex": {
          "description": "WARNING: The doc_images in docjoins are subject to updates including non-deterministic reordering of doc_images and their image_nb_data extensions. This means that without re-running WebrefAnnotator one cannot rely on the accuracy or even consistency of either image_index or query_index when parsing a cdoc from docjoins. In those situations one ought to rely on canonical_docid (or docid when canonical_docid is absent viz. 0). The index of the source image in CompositeDoc::doc_images.",
          "format": "int32",
          "type": "integer"
        },
        "queryIndex": {
          "$ref": "RepositoryWebrefQueryIndices",
          "description": "Queries index in ImageData::image_data_navboost."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefJuggernautIndices": {
      "description": "Identifies the source of Spore segments in the CompositeDoc.",
      "id": "RepositoryWebrefJuggernautIndices",
      "properties": {
        "index": {
          "description": "Index within the proto. Several indices are necessary in case of nested repeated fields. The data can be accessed as follows: TOPICS: topic_annotations.kg_schema_topic(index(0)) .property_value(index(1)) .value(index(2)); TRIPLES: reconcile_request.triple(index(0));",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "type": {
          "enum": [
            "NONE",
            "TOPICS",
            "TRIPLES"
          ],
          "enumDescriptions": [
            "Synthetic segment without a source in the cdoc.",
            "repository_annotations::spore::extractor::TopicAnnotations.",
            "repository_webref::ReconcileRequest."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefKCAttributeMetadata": {
      "description": "Metadata related to KC attributes and Question & Answer triggering. Next available tag: 2.",
      "id": "RepositoryWebrefKCAttributeMetadata",
      "properties": {
        "equivalentAttributeId": {
          "description": "Equivalent kc attribute id for the given entity if applicable. E.g. for Daughter (/m/029wnx) this will be 'kc:/people/person:daughter'.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefKGCollection": {
      "description": "See go/kg-collections",
      "id": "RepositoryWebrefKGCollection",
      "properties": {
        "debugId": {
          "description": "A human friendly identifier (collection hrid). NOTE: The field name is a misnomer, this is the preferred field to use in production.",
          "type": "string"
        },
        "id": {
          "description": "Identifier of the collection, usually a MID (/m/xyz or /g/zyw). NOTE: In most cases, this is not the id that should be used, debug_id is the preferred identifier. The main reason is the this is not a stable id (mid for collection sometimes shift around).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLatentEntities": {
      "description": "A list of entities that are latent given this entity. For example, \"Lionel Messi\" can have the latent entity \"FC Barcelona\". See go/refx-latent-entities for detailed description.",
      "id": "RepositoryWebrefLatentEntities",
      "properties": {
        "latentEntity": {
          "description": "Latent entities with associated metadata including source of the relationship. This is pruned (\"compacted\") from the concept table and will never reach the annotator.",
          "items": {
            "$ref": "RepositoryWebrefLatentEntity"
          },
          "type": "array"
        },
        "latentMid": {
          "description": "List of broader MIDs from the Sports Hierarchy. Named incorrectly, it does not contain all latent mids.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLatentEntity": {
      "description": "Metadata about a latent entity and its relationship to a given child. See go/hits.",
      "id": "RepositoryWebrefLatentEntity",
      "properties": {
        "broaderImportance": {
          "description": "The relatedness score of the two entities corresponding to each source above.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "mid": {
          "description": "The mid of the latent entity.",
          "type": "string"
        },
        "sources": {
          "description": "The sources this generalization relationship is coming from.",
          "items": {
            "enum": [
              "INVALID",
              "VERTICAL_SPECIFIC_RELATIONS",
              "NN_HIERARCHY_V1"
            ],
            "enumDescriptions": [
              "",
              "Hierarchical relations from the Sports hierarchy. The Sports hierarchy is derived from a set of manually curated KG properties.",
              "The HITS hierarchy."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLexicalAnnotation": {
      "description": "LexicalAnnotation is public lightweight serving structure for both WordGraph features and LWT annotations to expose lexical information downstream from RefX, e.g. in LooseParser.",
      "id": "RepositoryWebrefLexicalAnnotation",
      "properties": {
        "lexicalRange": {
          "items": {
            "$ref": "RepositoryWebrefLexicalRange"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLexicalRange": {
      "description": "A single understood lexicon of the |category| on byte range from |begin_offset| (inclusive) to |end_offset| (exclusive). The offsets are all byte offsets relative to the full original query and cover both the mentions and surrounding markers.",
      "id": "RepositoryWebrefLexicalRange",
      "properties": {
        "beginOffset": {
          "description": "Begin byte offset relative to the full original query.",
          "format": "int32",
          "type": "integer"
        },
        "category": {
          "enum": [
            "UNKNOWN",
            "RELATIONAL_ADJECTIVE",
            "SUPERLATIVE",
            "PLURAL",
            "FEMALE",
            "ASPECT",
            "TARGET_AUDIENCE",
            "TARGET_PURPOSE",
            "SETTING_BY_LOCATION",
            "DECORATIVE_PATTERN",
            "ELECTRONIC_DEVICE_CONNECTIVITY",
            "DIETARY_RESTRICTION",
            "ACTOR",
            "ADAPTATION_SOURCE",
            "AGE",
            "AUTHOR",
            "AUTHOR_OF_ADAPTATION_SOURCE",
            "AWARD_NOMINATED_FOR",
            "AWARD_WON",
            "BATTERY_LIFE",
            "BATTERY_TYPE",
            "BRAND",
            "COLOR",
            "COUNTRY_OF_ORIGIN",
            "DEGREE_OF_BRIGHTNESS",
            "DEGREE_OF_SEXINESS",
            "DURATION",
            "EXCLUDED_INGREDIENT",
            "FICTIONAL_CHARACTER",
            "FILM_DIRECTOR",
            "GENRE",
            "INTENDED_SPECIAL_OCCASION",
            "LENGTH",
            "MATERIAL",
            "MEDIA_PROVIDER",
            "MUSIC_COMPOSER",
            "ORIGINAL_MEDIA_PROVIDER",
            "PRIMARY_GENRE",
            "PRODUCTION_COMPANY",
            "PUBLICATION_DATE",
            "RECENCY",
            "RELATED_ARTISTIC_WORK",
            "RELEASE_DATE",
            "SECONDARY_GENRE",
            "SETTING_BY_FICTIONAL_LOCATION",
            "SETTING_BY_REAL_LOCATION",
            "SETTING_BY_TIME",
            "SUPPORTED_VIRTUAL_ASSISTANT",
            "TEMPERATURE",
            "THEME",
            "TVM_ATTRIBUTE",
            "WEIGHT",
            "EXCLUSION"
          ],
          "enumDescriptions": [
            "",
            "A range that is an adjectival expression referring to a base entity.",
            "An adjectival range is expressed in the superlative degree.",
            "A range which is lexically plural.",
            "A range expressing unequivocally a (semantic) female gender. This could be for expressions that are intrinsically female (\"aunt\") or the female expression of an entity that is lexically gendered (\"chairwoman\" as opposed to \"chairman\" or \"chairperson\").",
            "The range designates an aspect, that is, a modifier of some other range.",
            "Facets.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of facets. This line marks where to generate new values for facets."
          ],
          "type": "string"
        },
        "direction": {
          "description": "Direction defines the relation between the measurable aspect and the facet.",
          "enum": [
            "MEASURABLE_ASPECT_DIRECTION_UNSPECIFIED",
            "MEASURABLE_ASPECT_INCREASING",
            "MEASURABLE_ASPECT_DECREASING"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "endOffset": {
          "description": "End byte offset relative to the full original query.",
          "format": "int32",
          "type": "integer"
        },
        "facetMid": {
          "description": "The mid of the facet associated with ASPECT category.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLightweightTokensMatchedLightweightToken": {
      "description": "Necessary information of lightweight token pattern with entity retrieval to pass to downstream clients. For example: FpTokenRange: normalized_text: \"zurichben\" language: Hungarian retrieved_entity: /m/08966 (with name \"zurich\") will get: MatchedLightweightToken: LightweightTokenType: \"LOCATIVE\" begin_offset: 6 end_offset: 9 pattern_id: 8141703461898598811 source_entity_index: 0 FpTokenRange: normalized_text: \"egyesult allamokott\" language: Hungarian retrieved_entity: /m/09c7w0 (with name \"egyesult allamok\") will get: MatchedLightweightToken: LightweightTokenType: \"LOCATIVE\" begin_offset: 16 end_offset: 19 pattern_id: 10449962977910715124 source_entity_index: 0 Note that begin_offset and end_offset marks the input byte range of the matched input text. For example, if the input text is [tannlegas] in Norwegian, this matches with the rewrite rule \"*e:*as\" to transform \"tannlegas\" to \"tannlege\". The matched byte range is [7, 9) on \"as\", therefore begin_offset = 7 and end_offset = 9. This must not be confused with the rewritten range [7, 8) on \"e\". Also, keep in mind these are byte offsets, not codepoints.",
      "id": "RepositoryWebrefLightweightTokensMatchedLightweightToken",
      "properties": {
        "additionalBeginOffset": {
          "description": "The byte offset of the beging of the additional lightweight token match. e.g. the prefix pattern of the circumfix.",
          "format": "int32",
          "type": "integer"
        },
        "additionalEndOffset": {
          "description": "The byte offset of the end of the additional lightweight token match. e.g. the suffix pattern of the circumfix.",
          "format": "int32",
          "type": "integer"
        },
        "beginOffset": {
          "description": "The byte offset of the begin of the lightweight token match within each range. The default value of -1 (std::string::npos) means that there's no affix or adposition detected.",
          "format": "int32",
          "type": "integer"
        },
        "endOffset": {
          "description": "The byte offset of the end of the lightweight token match within each range. The default value of 0 means that there's no affix or adposition detected.",
          "format": "int32",
          "type": "integer"
        },
        "patternId": {
          "description": "Matched pattern Id which will be used to retrieve back pattern features. Pattern id is only populated for Enricher model.",
          "format": "uint64",
          "type": "string"
        },
        "sourceEntityIndex": {
          "description": "The index of the source entity in the resulting WebrefEntities or WebrefEntitiesWrapper, to which the lightweight token rule is applied. This field is only populated at the end of Qref scorer when we are sure which source entity should output.",
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "The type of the lightweight token match, which provides the semantic information.",
          "enum": [
            "UNKNOWN",
            "DEFINITE",
            "INDEFINITE",
            "ABLATIVE",
            "ADESSIVE",
            "ALLATIVE",
            "LOCATIVE",
            "ACROSS_FROM",
            "BEHIND",
            "IN_FRONT",
            "EAST",
            "WEST",
            "NORTH",
            "SOUTH",
            "LEFT",
            "RIGHT",
            "ADJACENT",
            "GENITIVE",
            "ACCUSATIVE",
            "INSTRUMENTAL",
            "DATIVE",
            "CAUSATIVE",
            "SOCIATIVE",
            "INTERROGATIVE",
            "PREPOSITIONAL",
            "VOCATIVE",
            "OBLIQUE",
            "EMPHATIC",
            "MESSAGE_RECIPIENT",
            "MESSAGE_INITIATOR",
            "MY_POSSESSION",
            "OUR_POSSESSION",
            "YOUR_SINGULAR_POSSESSION",
            "YOUR_PLURAL_POSSESSION",
            "YOUR_POLITE_POSSESSION",
            "TRANSLATE_SOURCE_LANGUAGE",
            "TRANSLATE_TARGET_LANGUAGE",
            "NEW_MODIFIER",
            "RECENT_MODIFIER",
            "COURTESY_WORD",
            "GENERIC_ADPOSITION",
            "TARGET_CURRENCY",
            "SOURCE_CURRENCY",
            "PLURAL",
            "CONJUNCTIVE",
            "OPPOSITION_CONJUNCTIVE",
            "MASCULINE_HONORIFIC",
            "FEMININE_HONORIFIC",
            "GENERIC_HONORIFIC",
            "NEGATIVE_SUPERLATIVE",
            "SUPERLATIVE",
            "FACET_AUDIENCE",
            "FACET_PURPOSE",
            "FACET_EXCLUSION",
            "FACET_SETTING_BY_LOCATION",
            "FACET_DECORATIVE_PATTERN",
            "FACET_ELECTRONIC_DEVICE_CONNECTIVITY",
            "FACET_DIETARY_RESTRICTION",
            "FACET_ACTOR",
            "FACET_ADAPTATION_SOURCE",
            "FACET_AGE",
            "FACET_AUTHOR",
            "FACET_AUTHOR_OF_ADAPTATION_SOURCE",
            "FACET_AWARD_NOMINATED_FOR",
            "FACET_AWARD_WON",
            "FACET_BATTERY_LIFE",
            "FACET_BATTERY_TYPE",
            "FACET_BRAND",
            "FACET_COLOR",
            "FACET_COUNTRY_OF_ORIGIN",
            "FACET_DEGREE_OF_BRIGHTNESS",
            "FACET_DEGREE_OF_SEXINESS",
            "FACET_DURATION",
            "FACET_EXCLUDED_INGREDIENT",
            "FACET_FICTIONAL_CHARACTER",
            "FACET_FILM_DIRECTOR",
            "FACET_GENRE",
            "FACET_INTENDED_SPECIAL_OCCASION",
            "FACET_LENGTH",
            "FACET_MATERIAL",
            "FACET_MEDIA_PROVIDER",
            "FACET_MUSIC_COMPOSER",
            "FACET_ORIGINAL_MEDIA_PROVIDER",
            "FACET_PRIMARY_GENRE",
            "FACET_PRODUCTION_COMPANY",
            "FACET_PUBLICATION_DATE",
            "FACET_RECENCY",
            "FACET_RELATED_ARTISTIC_WORK",
            "FACET_RELEASE_DATE",
            "FACET_SECONDARY_GENRE",
            "FACET_SETTING_BY_FICTIONAL_LOCATION",
            "FACET_SETTING_BY_REAL_LOCATION",
            "FACET_SETTING_BY_TIME",
            "FACET_SUPPORTED_VIRTUAL_ASSISTANT",
            "FACET_TEMPERATURE",
            "FACET_THEME",
            "FACET_TVM_ATTRIBUTE",
            "FACET_WEIGHT"
          ],
          "enumDescriptions": [
            "",
            "Articles or markers that express the definitess of a noun (see go/wordgraph/definiteness).",
            "Articles or markers that express the indefiniteness of a noun (see go/wordgraph/definiteness).",
            "Linguistic markers that express the movement from a place (like the English preposition *from* in a sentence like \"I came *from* my place\").",
            "Linguistic markers that express the location *near* a place (like in the English preposition *near* in a sentence like \"I am near the house\").",
            "Linguistic markers that express the movement towards a place (like the English preposition *to* in a sentence like \"I go *to* my house\").",
            "Linguistic markers that express the location *in* a place (like the English preposition *in* in a sentence like \"I am *in* my house\").",
            "Reference to a physical entity that is located on the opposite side of/across the road from the location of another entity.",
            "Refer to a physical entity that is *behind* another entity.",
            "Refer to a physical entity that is located *in front* of another entity.",
            "Refer to a physical entity that is located *in the east* of another entity.",
            "Refer to a physical entity that is located *in the west* of another entity.",
            "Refer to a physical entity that is located *in the north* of another entity.",
            "Refer to a physical entity that is located *in the south* of another entity.",
            "Refer to a physical entity that is located *on the left* of another entity.",
            "Refer to a physical entity that is located *on the right* of another entity.",
            "Refers to a physical entity that is located in the immediate proximity to a place. This semantic is much more specific than the ADESSIVE one",
            "Linguistic markers that express the relation of a noun with another noun (like the 's marker in English in \"Mary's book\"). Please note that this is different from possessive makers in the sense that the adposition precedes or succeeds the 'OWNER' instead of the 'OWNED' noun.",
            "Linguistic markers that would be used to mark the accusative, generally the direct object of a verb.",
            "Linguistic marker that is used to mark the instrumental case, indicating the instrument or means by which an action is accomplished.",
            "Linguistic markers that would be used to mark the dative case, generally the indirect object of a verb.",
            "Linguistic markers that would be used to indicate that a subject either causes someone or something else to do or be something or causes a change in state of a non-volitional event.",
            "Linguistic markers that would be used to indicate association, or means by which action is done.",
            "Linguistic markers that would be used to make questions.",
            "Linguistic markers that mark the object of a preposition. This term can be used in languages where nouns have a declensional form that appears exclusively in combination with certain prepositions. These markers do not include the actual preposition but only the corresponding inflection pattern.",
            "Linguistic markers that would be used in addressing or invoking a person or thing.",
            "Linguistic markers used to indicate that the noun generally can not be used in a subject position.",
            "Linguistic markers used to express attitude or emphasis. They can occur with nouns, adjectives, verbs and adverbs.",
            "Linguistic markers that mark the recipient (or receiver) of a message or a call.",
            "Linguistic markers that mark the initiator of a message or a call.",
            "Linguistic markers (like English determiner \"my\") that mark a possession from a first person singular possessor.",
            "Linguistic markers (like English determiner \"our\") that mark a possession from a first person plural possessor.",
            "Linguistic markers (like English determiner \"your\") that mark a possession from a second person singular possessor.",
            "Linguistic markers (like Italian determiner \"vostro\") that mark a possession from a second person plural possessor.",
            "Linguistic markers (like Italian determiner \"suo\") that mark a possession from a second person possessor in polite form.",
            "Linguistic markers that mark the source language in an expression like \"translate *from* English\".",
            "Linguistic markers that mark the target language in an expression like \"translate *into* French\".",
            "",
            "",
            "",
            "",
            "Linguistic markers that mark the target currency in an expression like \"how much is 5 dollars *in* pounds\".",
            "Linguistic markers that mark the source currency in an expression like \"convert *from* dollars to pounds\".",
            "Plural markers",
            "Conjunctive coordinator or marker (like English \"and\").",
            "Opposition conjunctive or marker (like English \"versus\", \"v.s.\").",
            "Masculine Honorific markers.",
            "Feminine Honorific markers.",
            "Non-specific Honorifc markers.",
            "Superlatives",
            "",
            "Facets.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of facets. This line marks where to generate new values for facets."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLightweightTokensPerMentionLightweightToken": {
      "description": "Collects all lightweight token patterns for each CandidateMention or Mention.",
      "id": "RepositoryWebrefLightweightTokensPerMentionLightweightToken",
      "properties": {
        "matchedLightweightToken": {
          "items": {
            "$ref": "RepositoryWebrefLightweightTokensMatchedLightweightToken"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLightweightTokensPerNameLightweightToken": {
      "description": "Collects all lightweight token patterns for each NameToConceptEntry.",
      "id": "RepositoryWebrefLightweightTokensPerNameLightweightToken",
      "properties": {
        "matchedLightweightToken": {
          "items": {
            "$ref": "RepositoryWebrefLightweightTokensMatchedLightweightToken"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLinkInfo": {
      "description": "Represents all information we have about a specific/localized link. Next available tag: 11.",
      "id": "RepositoryWebrefLinkInfo",
      "properties": {
        "aggregatedScore": {
          "description": "The score aggregated from all sources.",
          "format": "float",
          "type": "number"
        },
        "isPreferredDirection": {
          "description": "The EntityJoin keeps bi-directional links, but for some applications we only need them in one direction. This value indicates whether this is the preferred direction to keep. (We usually prefer keeping the link from the less common to the more common entity for performance reasons). For categorical links the preferred direction is from child to parent.",
          "type": "boolean"
        },
        "metadata": {
          "$ref": "RepositoryWebrefEntityLinkMetadata",
          "description": "The metadata associated with the link."
        },
        "source": {
          "description": "The per-source scores.",
          "items": {
            "$ref": "RepositoryWebrefEntityLinkSource"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLinkKindFlags": {
      "description": "A bitmap of bool values associated with a link kind. Next available tag: 12",
      "id": "RepositoryWebrefLinkKindFlags",
      "properties": {
        "cluster": {
          "enum": [
            "NO_CLUSTER",
            "CLUSTER_CHILD_OF",
            "CLUSTER_PARENT_OF"
          ],
          "enumDescriptions": [
            "",
            "The main entity is a child of the linked entity.",
            "The main entity is a parent of the linked entity."
          ],
          "type": "string"
        },
        "geoContainment": {
          "enum": [
            "NO_CONTAINMENT",
            "CONTAINED_BY",
            "CONTAINS",
            "PARTIAL_OVERLAP",
            "HAS_STREET_NUMBER",
            "LOCATED_ON_STREET"
          ],
          "enumDescriptions": [
            "",
            "The main entity is a geographically contained by",
            "the linked entity. The main entity is a geographical container of",
            "the linked entity. The main entity partially overlaps with the",
            "linked entity. The main entity is a street and contains the",
            "street number that is represented by the linked entity. The main entity is a street number and is"
          ],
          "type": "string"
        },
        "implication": {
          "enum": [
            "NO_IMPLICATION",
            "IMPLIED_BY",
            "IMPLIES",
            "BIDIRECTIONAL_IMPLICATION",
            "UNDERMERGED"
          ],
          "enumDescriptions": [
            "",
            "The main entity is implied by the linked entity.",
            "The main entity implies the linked entity.",
            "Both entities imply each other.",
            "Both entities are the same concept."
          ],
          "type": "string"
        },
        "latentEntity": {
          "enum": [
            "NO_LATENT_ENTITY",
            "LATENT_ENTITY",
            "MANIFEST_ENTITY",
            "LATENT_ENTITY_V2",
            "MANIFEST_ENTITY_V2"
          ],
          "enumDescriptions": [
            "There is no latent entity relationship between the entities. Default value, should not be explicitly set.",
            "The relationship points to a latent entity. For example, if \"Lionel Messi\" has latent entity \"FC Barcelona\", this should be populated on the relationship from Messi to Barcelona.",
            "The reverse of LATENT_ENTITY, e.g. from \"FC Barcelona\" to \"Lionel Messi\".",
            "Links pointing to latent entities according to the new hierarchy. See go/refx-latent-entities.",
            "Links pointing to manifest entities according to the new hierarchy."
          ],
          "type": "string"
        },
        "mdvc": {
          "enum": [
            "NO_MDVC",
            "MDVC_SPECIALIZATION_OF",
            "MDVC_GENERALIZATION_OF",
            "MDVC_DIMENSION_VALUE",
            "MDVC_DIMENSION_VALUE_OF",
            "MDVC_RESOLUTION",
            "MDVC_EXPANDED_OUTPUT"
          ],
          "enumDescriptions": [
            "",
            "(Transitive) descendant in MDVC hierarchy.",
            "(Transitive) ancestor in MDVC hierarchy.",
            "MDVC attribute.",
            "MDVC attribute owner.",
            "MDVC resolution.",
            "MDVC_EXPANDED_OUTPUT is used to mark the link between annotated entities and the entities that were added by output expansion, e.g. from a car model to the latest model year."
          ],
          "type": "string"
        },
        "property": {
          "enum": [
            "NO_PROPERTY",
            "EQUIVALENT_TOPIC",
            "EQUIVALENT_PROPERTY"
          ],
          "enumDescriptions": [
            "There is no property relationship between the entities. Default value, should not be explicitly set.",
            "The relationship points from a property to its equivalent topic. For example, from /people/person/parents to /m/Parent.",
            "The relationship points from a topic to an equivalent property. For example, from /m/Parent to /people/person/parents."
          ],
          "type": "string"
        },
        "resolution": {
          "enum": [
            "NO_RESOLUTION",
            "MAY_BE_RESOLVED_FROM",
            "MAY_RESOLVE_TO",
            "RESOLVED_FROM",
            "RESOLVES_TO"
          ],
          "enumDescriptions": [
            "",
            "The link type is such that we may add a",
            "RESOLVED_FROM attribute to it later. The link type is such that we may add a",
            "RESOLVES_TO attribute to it later. The current entity is resolved from the linked",
            "entity (e.g. the link goes from to ). The current entity is one of the entities that"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLinkKindInfo": {
      "description": "Information about one of the types of a linked entity.",
      "id": "RepositoryWebrefLinkKindInfo",
      "properties": {
        "flags": {
          "$ref": "RepositoryWebrefLinkKindFlags",
          "description": "The flags associated with the link kind."
        },
        "kcLinkName": {
          "description": "Link name extracted from Knowledge Card facts.",
          "type": "string"
        },
        "topicPropertyName": {
          "description": "If the link was extracted from a property, the name of the property. Can start with an exclamation mark \"!\" to indicate that the inverse relationship is specified. (e.g. \"!/tv/tv_series_episode/series\" is the inverse of \"tv/tv_program/episodes\").",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefLocalizedString": {
      "description": "Next available tag: 8.",
      "id": "RepositoryWebrefLocalizedString",
      "properties": {
        "domain": {
          "description": "The domain name from which results come, e.g. \"play.google.com\".",
          "type": "string"
        },
        "fprintModifier": {
          "$ref": "RepositoryWebrefFprintModifierProto",
          "description": "FprintModifier describing the formatting of the string. If fprint_modifier is set, then original_string, language and region should not be set."
        },
        "language": {
          "description": "The language in the III standard (http://go/iii)",
          "type": "string"
        },
        "normalizedString": {
          "type": "string"
        },
        "originalString": {
          "type": "string"
        },
        "region": {
          "description": "The region in the III standard (http://go/iii)",
          "type": "string"
        },
        "sourceType": {
          "description": "Which querybase pipeline the data comes from.",
          "enum": [
            "SOURCE_NAVBOOST",
            "SOURCE_SCRAPE",
            "SOURCE_INSTANT_NAVBOOST"
          ],
          "enumDescriptions": [
            "From queries derived from regular NavBoost data and stored in querybase, querybase-zero or querybase-zero-dev.",
            "From scraped queries.",
            "From queries derived from Instant NavBoost data and stored in querybase-fresh-zero or querybase-fresh-zero-dev."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMdvcMetadata": {
      "description": "Metadata about MDVC (go/mdvc). Next available tag: 18.",
      "id": "RepositoryWebrefMdvcMetadata",
      "properties": {
        "dimension": {
          "description": "Undergoing migration into the PerVertical message. Avoid using it. Concept ids of MDVC dimensions of this concept.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "expandedOutputConceptId": {
          "description": "Undergoing migration into the PerVertical message. Avoid using it. List of encoded mids to be expanded in WebRef/QRef output whenever this entity gets annotated. Will be populated in the annotators once static data is deprecated. b/78866814.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "generalization": {
          "description": "Undergoing migration into the PerVertical message. Avoid using it. Concept ids of MDVC generalizations of this concept.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "isSynthetic": {
          "description": "True iff the topic is synthetically created during by MDVC extraction.",
          "type": "boolean"
        },
        "perVertical": {
          "description": "Data, specific to particular verticals.",
          "items": {
            "$ref": "RepositoryWebrefMdvcMetadataPerVertical"
          },
          "type": "array"
        },
        "resolutionPriority": {
          "description": "Undergoing migration into the PerVertical message. Avoid using it. Resolution priority for this entity. In case a query has many possible resolutions, only the ones with the highest resolution priority are annotated.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMdvcMetadataPerVertical": {
      "description": "Per-vertical part. Next available tag: 19",
      "id": "RepositoryWebrefMdvcMetadataPerVertical",
      "properties": {
        "compatibleIds": {
          "description": "Concept ids compatible with this topic: specializations and/or ones having this concept as a dimension. Always includes the topic itself.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "dimensionIds": {
          "description": "Concept ids of the dimension values of this topic.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "expandedOutputIds": {
          "description": "Concept ids to annotate whenever this entity is annotated.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "generalizationIds": {
          "description": "Concept ids of the generalizations of this topic.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "isCore": {
          "description": "True if the topic is considered a \"core topic\" for the vertical.",
          "type": "boolean"
        },
        "isDimension": {
          "description": "If true, the entity is a dimension for some entities in the vertical.",
          "type": "boolean"
        },
        "isGeneralization": {
          "description": "If true, the entity is a generalization for some entities in the vertical.",
          "type": "boolean"
        },
        "resolutionPriority": {
          "description": "Resolution priority for this entity. If there are many possible resolutions to a MDVC understanding, only the ones with the highest priority are annotated.",
          "format": "int32",
          "type": "integer"
        },
        "subVerticalFp": {
          "description": "Fingerprints that identify the topic's sub-verticals, if any.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "verticalName": {
          "description": "Name of the vertical this message is about.",
          "enum": [
            "UNKNOWN",
            "CARS",
            "CVG",
            "PRODUCTS",
            "SYMPTOMS",
            "CHAINS",
            "MOVIES",
            "SPORTS_TEAM",
            "EXAMS",
            "MOTORCYCLES",
            "PRIMEREF",
            "SONGS",
            "EDUCATION",
            "EVENTS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMention": {
      "description": "Multiple entities can be identified on a document or query. Each entity can be mentioned several times in different positions on the document or query. This message describes a single mention of the entity. Note that a mention can be either explicit or implicit mentions. All explicit mentions refer to exact range in the document where the entity occurred, but implicit mentions may or may not have corresponding range. Next available tag number: 40",
      "id": "RepositoryWebrefMention",
      "properties": {
        "addedByCloseAnswers": {
          "description": "Whether this mention was created by CloseAnswers on Postref. This bit is populated into corresponding intent_query through Aqua.",
          "type": "boolean"
        },
        "additionalExplainedRange": {
          "description": "If the mention's range is discontinuous, additional ranges that are a part of the mention but are not included in the begin/end range above.",
          "items": {
            "$ref": "RepositoryWebrefMentionAdditionalExplainedRange"
          },
          "type": "array"
        },
        "begin": {
          "description": "The [begin, end) byte offset, compatible with the Goldmine DocState representation. - For CONTENT, TITLE, META_CONTENT_TAG and IMG_ALT_TAG segments, the offsets are relative to the beginning of the document content. - For ANCHOR, QUERY, URL, IMAGE_QUERY, CONTEXT_ENTITY, CONTEXT_QUERY, SPORE_GRAPH, INSTANT_QUERY and VIDEO_TRANSCRIPT segments, the offsets are relative to the beginning of the corresponding (sub-)segment or text from doc attachment. The (indexing.annotations.goldmine) options are marks for Goldmine AnnotationsFinder to locate begin and end offsets in order to extract them",
          "format": "int32",
          "type": "integer"
        },
        "beginTokenIndex": {
          "description": "The [begin end) token offsets in the Goldmine DocState. They follow similar rules as \"begin\" and \"end\" above, but for tokens rather than byte offsets. These fields are currently only populated by the query annotator.",
          "format": "int32",
          "type": "integer"
        },
        "compoundMention": {
          "description": "For a compound mention, the references to the entity and mention of the components. Each compound_mention claims one or more 'mrf' fields from the WebrefEntity owning this mention. Use QueryJoinToMeaningStructConverter to expand compound mentions into complete MRF.",
          "items": {
            "$ref": "RepositoryWebrefMentionCompoundMention"
          },
          "type": "array"
        },
        "confidenceScore": {
          "description": "A probabilistic score describing how certain the annotator is that this exact range in the document or query refers to the entity. Probability that a mention is correct corresponds to confidence score roughly as follows: 0.3 -> 75% 0.5 -> 87% 0.7 -> 89% 0.9 -> 94% 1.0 -> 98% However if you consider all mentions with a score above 0.3, then most of these will have scores close to 1, so the overall precision of these mentions is around 95%.",
          "format": "float",
          "type": "number"
        },
        "debugInfo": {
          "$ref": "RepositoryWebrefMentionDebugInfo",
          "description": "Debug information."
        },
        "detailedMentionScores": {
          "$ref": "RepositoryWebrefDetailedMentionScores",
          "description": "Additional detailed scores about this mention."
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "endTokenIndex": {
          "format": "int32",
          "type": "integer"
        },
        "evalInfo": {
          "$ref": "RepositoryWebrefMentionEvalInfo",
          "description": "Information used by the evaluation tools to mark mentions annotations as correct/incorrect. This will never be annotated in production (would be nice if was, though :-))."
        },
        "interpretationNumber": {
          "description": "DEPRECATED and not populated anymore.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "isImplicit": {
          "description": "True if the entity is mentioned implicitly. Note that a mention can be implicit *and* have a non-empty range, for example if the entity is Sports, and this is inferred from the mention of \"gym\".",
          "type": "boolean"
        },
        "lexicalAnnotation": {
          "$ref": "RepositoryWebrefLexicalAnnotation",
          "description": "Provides a Wordgraph lexical signals for the mentioned range so it can be use in LooseParsing. Please don't use this field before consulting wordgraph-team."
        },
        "lowConfidence": {
          "description": "Qref & Postref only: Set to true for candidates part of qref candidate output for which there was no mention in qref. Internal to qref and LooseParsing. Do not use outside of these systems.",
          "type": "boolean"
        },
        "matchingText": {
          "description": "Refcon-only: Annotated span in Refcon-normalized textual format, corresponding to the [begin end) offset interval in the CDoc. It will only be populated for CDocs originated from Docjoin extraction.",
          "type": "string"
        },
        "nameMetadata": {
          "$ref": "RepositoryWebrefConceptNameMetadata",
          "description": "Metadata attatched to the name."
        },
        "nonLocationalScore": {
          "description": "Whether the mention is a non-locational reference to a geographical entity. Ranges from 0 (locational) to 1 (non-locational).",
          "format": "float",
          "type": "number"
        },
        "perMentionLightweightToken": {
          "$ref": "RepositoryWebrefLightweightTokensPerMentionLightweightToken",
          "description": "Provides concised access to all matched MatchedLightweightToken."
        },
        "personalizationContextOutputs": {
          "$ref": "RepositoryWebrefPersonalizationContextOutputs",
          "description": "Additional personalization output scores about this mention."
        },
        "priorProbability": {
          "description": "The prior probability of the entity for this mention.",
          "format": "float",
          "type": "number"
        },
        "referenceScore": {
          "description": "Whether the mention is a reference (e.g. it could be resolved to an entity coming from personal data) or not, currently only used for personal resolutions. Scores from 0 (not a reference) to 1 (reference). Use at your own risk as they are subject to change, advised to talk to refx-personal first.",
          "format": "float",
          "type": "number"
        },
        "resolutionScore": {
          "description": "Whether the mention is a resolution or not, currently only used for personal resolutions. Scores from 0 (not a resolution) to 1 (resolution). Use at your own risk as they are subject to change, advised to talk to refx-personal first.",
          "format": "float",
          "type": "number"
        },
        "stuff": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Assorted things that can be added to a Mention."
        },
        "subsegmentIndex": {
          "$ref": "RepositoryWebrefSubSegmentIndex",
          "description": "Identifies the sub-segment where the annotation occurs. See SubSegmentIndex for details. Not present in QRef, also deprecated for URL segment types."
        },
        "timeOffsetConfidence": {
          "description": "Confidence for the time_offset_ms annotation, quantized to values in range 0-127 (see speech::VideoASRServerUtil::ConfidenceQuantize for how the quantization was done). Confidence can be empty for special characters (e.g. spaces).",
          "format": "int32",
          "type": "integer"
        },
        "timeOffsetMs": {
          "description": "Timestamp that this mention appeared in the video. The field is only populated for VIDEO_TRANSCRIPT when the byte offset is the same. It is extracted from cdoc.doc_videos.content_based_metadata.transcript_asr.transcript.timestamp.",
          "format": "int32",
          "type": "integer"
        },
        "trustedNameConfidence": {
          "description": "Confidence that this name is a trusted name of the entity. This is set only in case the confidence is higher than an internal threshold (see ConceptProbability).",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionAdditionalExplainedRange": {
      "description": "Additional ranges covered by the mention. Next available tag: 5",
      "id": "RepositoryWebrefMentionAdditionalExplainedRange",
      "properties": {
        "begin": {
          "description": "Like begin/end, begin_token_index/end_token_index above.",
          "format": "int32",
          "type": "integer"
        },
        "beginTokenIndex": {
          "format": "int32",
          "type": "integer"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "endTokenIndex": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionComponent": {
      "description": "Reference to a component of a compound mention. Next available tag: 5",
      "id": "RepositoryWebrefMentionComponent",
      "properties": {
        "entityIndex": {
          "description": "The indices to identify the entity within the WebrefEntities.entities, the segment within its EntityAnnotations.segment_mentions, and the mention within that segment. entity_index is always guaranteed to be set, but segment_mentions_index and mention_index are omitted if the component reference is implicit.",
          "format": "int32",
          "type": "integer"
        },
        "isHeadComponent": {
          "description": "The source of the compound has designated this component as the head. Only one of the components can be a head, but it's possible none are.",
          "type": "boolean"
        },
        "mentionIndex": {
          "format": "int32",
          "type": "integer"
        },
        "segmentMentionsIndex": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionCompoundMention": {
      "description": "A single compound mention. Next available tag: 3",
      "id": "RepositoryWebrefMentionCompoundMention",
      "properties": {
        "component": {
          "description": "References to the component mentions which the MRF needs to be fully expanded. It is guaranteed that for a given set of components there exists only a single CompoundMention, i.e. the CompoundMentions are deduped to be unique so each set of components is present only once. The ArgumentValue of the WebrefEntity.mrf refer to these components via ComponentReference; it is guaranteed there are as many components as the MRF expression refers to.",
          "items": {
            "$ref": "RepositoryWebrefMentionComponent"
          },
          "type": "array"
        },
        "mrfIndex": {
          "description": "The WebrefEntity.mrf indices which this compound applies to. There can be at most one CompoundMention which claims an MRF index, but it is possible there are MRF expressions which are not claimed by any CompoundMention.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionDebugInfo": {
      "id": "RepositoryWebrefMentionDebugInfo",
      "properties": {
        "cleanText": {
          "description": "A clean version of text. This is mostly used for compatibility with other Goldmine annotators.",
          "type": "string"
        },
        "infoString": {
          "description": "Optional debug information.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "snippet": {
          "description": "A snippet of the parsed text (html tags removed) in the page around this mention. Useful for human evaluation of the quality of the annotations. Outputted by WebrefAnnotator if --webref_output_mention_snippet_size is set to a value greater than 0.",
          "type": "string"
        },
        "text": {
          "description": "Original UTF-8 document text occurring in the range [begin, end).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionEvalInfo": {
      "id": "RepositoryWebrefMentionEvalInfo",
      "properties": {
        "atmWeight": {
          "description": "Weight of the mention used in the ATM score.",
          "format": "float",
          "type": "number"
        },
        "rating": {
          "description": "The aggregate numerical rating of this mention. 0.0 means completely incorrect, and 1.0 completely correct.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionRatings": {
      "description": "Per document mention ratings. Next id: 10",
      "id": "RepositoryWebrefMentionRatings",
      "properties": {
        "begin": {
          "description": "Byte offsets of the mention.",
          "format": "uint32",
          "type": "integer"
        },
        "end": {
          "format": "uint32",
          "type": "integer"
        },
        "mentionMatch": {
          "items": {
            "enum": [
              "SUBPART",
              "SUPER",
              "EXACT"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "singleMentionRating": {
          "items": {
            "$ref": "RepositoryWebrefMentionRatingsSingleMentionRating"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefMentionRatingsSingleMentionRating": {
      "description": "Next available tag: 11",
      "id": "RepositoryWebrefMentionRatingsSingleMentionRating",
      "properties": {
        "isCorrectRange": {
          "description": "Set for mentions got from the new topicality template. True if the raters checked this range as being a good range for the entity. If the range is not correct we demote the mention score. This field is only used in template version V1. From template version V2 and forward it is now set via phrase_refer.",
          "type": "boolean"
        },
        "mentionMatch": {
          "enum": [
            "SUBPART",
            "SUPER",
            "EXACT"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "mentionRelevant": {
          "enum": [
            "NOT_RELEVANT",
            "RELEVANT",
            "CORRECT",
            "NOT_VALID"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Note that raters might give one of the above (valid) ratings even if the task is not readable. However, when the task is not readable, we override the EWOK rating with NOT_VALID."
          ],
          "type": "string"
        },
        "phraseRefer": {
          "enum": [
            "PHRASE_REFER",
            "PHRASE_MAYBE_REFER",
            "PHRASE_NOT_REFER"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "raterCanUnderstandTopic": {
          "description": "Whether rater can understand the topic.",
          "type": "boolean"
        },
        "ratingSource": {
          "description": "The source of the rating, possibly a golden set external to EWOK.",
          "enum": [
            "RATING_SOURCE_UNKNOWN",
            "RATING_SOURCE_EWOK",
            "RATING_SOURCE_SAFT_GOLDEN",
            "RATING_SOURCE_CROWDCOMPUTE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "resultCount": {
          "format": "int32",
          "type": "integer"
        },
        "taskData": {
          "$ref": "RepositoryWebrefTaskData"
        },
        "topicMentionedInResult": {
          "items": {
            "enum": [
              "RESULT_MENTIONED",
              "RESULT_MAYBE_MENTIONED",
              "RESULT_NOT_MENTIONED"
            ],
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefNameDebugInfo": {
      "description": "Collects signals from one query used for prior learning.",
      "id": "RepositoryWebrefNameDebugInfo",
      "properties": {
        "candidates": {
          "description": "List of per-candidate signals derived from annotation of this query.",
          "items": {
            "$ref": "RepositoryWebrefNameDebugInfoCandidateInfo"
          },
          "type": "array"
        },
        "query": {
          "$ref": "RepositoryWebrefLocalizedString",
          "description": "Query with region (language is set in parent NameInfo)."
        },
        "weight": {
          "description": "Query weight used in learning.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefNameDebugInfoCandidateInfo": {
      "description": "Collects signals from one query and one candidate. Next available tag: 9",
      "id": "RepositoryWebrefNameDebugInfoCandidateInfo",
      "properties": {
        "isMatchlessResultContext": {
          "description": "Whether the entity is purely from strong result entities, and is matchless in query annotation.",
          "type": "boolean"
        },
        "mid": {
          "description": "Mid of the candidate entity or empty string for the full world.",
          "type": "string"
        },
        "name": {
          "description": "Debug name of the entity (not usually populated).",
          "type": "string"
        },
        "resultEntityScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefNameInfo": {
      "description": "Represents all information we have about a specific/localized name. Next available tag: 13. NOTE: If you add a field to the NameInfo proto and wish to retain it *after* the GlobalNameInfo merging steps in //r/w/enricher/pipeline:topic-enricher-flume-main then the appropriate combining logic for turning a flume stream of NameInfo protos into a single NameInfo must be updated with the new field in mind, in either or both of CombineContextNameInfosFn/CombineNameInfosFn. If not, the newly added field will be ignored during the merging steps (presumably because it is a transient field or a debug field that is not necessary to be retained).",
      "id": "RepositoryWebrefNameInfo",
      "properties": {
        "aggregatedScores": {
          "$ref": "RepositoryWebrefAggregatedEntityNameScores",
          "description": "The score aggregated from all sources."
        },
        "annotatedCategory": {
          "description": "Information on categories annotated on the range.",
          "items": {
            "$ref": "RepositoryWebrefAnnotatedCategoryInfo"
          },
          "type": "array"
        },
        "debugDetails": {
          "description": "DEBUG ONLY: stores a list of queries with per-candidate scores about signals used for prior learning.",
          "items": {
            "$ref": "RepositoryWebrefNameDebugInfo"
          },
          "type": "array"
        },
        "includeInModel": {
          "description": "Field which decides if this NameInfo should be included in model creation.",
          "type": "boolean"
        },
        "name": {
          "$ref": "RepositoryWebrefLocalizedString",
          "description": "The specific name to which this information applies."
        },
        "ngramData": {
          "$ref": "RepositoryWebrefUniversalNgramData",
          "description": "N-gram data (e.g. n-gram IDF)."
        },
        "perNameLightweightToken": {
          "$ref": "RepositoryWebrefLightweightTokensPerNameLightweightToken",
          "description": "Lightweight token semantic metadata for inflected name."
        },
        "scores": {
          "$ref": "RepositoryWebrefNameScores",
          "description": "The name-specific scores. These scores only depend on the name and are independent of the entity."
        },
        "source": {
          "description": "The per-source scores.",
          "items": {
            "$ref": "RepositoryWebrefEntityNameSource"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefNameScores": {
      "description": "Represents some name-specific scores. (Unlike EntityNameScore, these scores are independent of the entities the name is associated with). These scores are available for each name as well as for each name/source. Next available tag: 31.",
      "id": "RepositoryWebrefNameScores",
      "properties": {
        "completeWorldVolume": {
          "description": "Approximates volume of this name including entities we don't have in our set. This is useful to estimate the size of the \"open world\". For example, this field can be equal to the total number of clicks for the query. Note that for now, we ignore the number of clicks but just use the idf if available.",
          "format": "float",
          "type": "number"
        },
        "contextFringeScore": {
          "description": "The fringe score in [0, 1] for this context name. This is only populated for full-query context names.",
          "format": "float",
          "type": "number"
        },
        "contextWeight": {
          "description": "The amount of evidence available for this context name.",
          "format": "float",
          "type": "number"
        },
        "idfScore": {
          "description": "The idf of this name.",
          "format": "float",
          "type": "number"
        },
        "openWorldVolumeModifier": {
          "description": "'Raw' open world is computed based on ngram count data. For some names however, we modify the open world based on entities associated with them. This field contains the additive open world modifier. open_world_volume = raw open world + open_world_volume_modifier",
          "format": "float",
          "type": "number"
        },
        "totalScore": {
          "description": "The total score of that name/source. It describes how much data we have for that name/source. It can for example be the sum of all the entity scores for this name.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefNgramContext": {
      "description": "An N-gram context encountered on the document.",
      "id": "RepositoryWebrefNgramContext",
      "properties": {
        "mention": {
          "description": "The entities that were annotated on the context",
          "items": {
            "$ref": "RepositoryWebrefNgramMention"
          },
          "type": "array"
        },
        "text": {
          "description": "The context (original) text.",
          "type": "string"
        },
        "weight": {
          "description": "The weight of the context on the document; depends on how many times we saw the string in the document.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefNgramMention": {
      "description": "A mention that has been matched in the context (or a substring of it).",
      "id": "RepositoryWebrefNgramMention",
      "properties": {
        "mid": {
          "description": "The entity the mention was referring to.",
          "type": "string"
        },
        "score": {
          "description": "The average score the mention was given across all occurrences of the n-gram.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefOysterType": {
      "description": "Oyster type information.",
      "id": "RepositoryWebrefOysterType",
      "properties": {
        "featureType": {
          "description": "The Oyster feature type, which provides a rough categorization. This is a value of the enum geostore.FeatureProto.TypeCategory.",
          "format": "int32",
          "type": "integer"
        },
        "gconcepts": {
          "$ref": "GeostoreOntologyRawGConceptInstanceContainerProto",
          "description": "Geo Ontology GConcept Instances from the FeatureProto. - Design doc linked off http://wiki/Main/GeoOntology - Use the accessor library to read this field: geostore/base/public/gconcept_instance.h"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPerDocRelevanceRating": {
      "description": "Per document ratings relevance ratings. Next id: 21.",
      "id": "RepositoryWebrefPerDocRelevanceRating",
      "properties": {
        "contentRelevant": {
          "enum": [
            "NONE",
            "NOT_APPLICABLE",
            "NOT_RELEVANT",
            "BARELY_RELEVANT",
            "RELEVANT",
            "IMPORTANT",
            "VITAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "displayString": {
          "description": "How this rating is displayed in the evals, pre-computed from the other fields.",
          "type": "string"
        },
        "furballUrl": {
          "description": "The url of the ewok task that resulted in this rating. Example: https://furball.corp.google.com/project/view-item?itemId=1&projectId=2",
          "type": "string"
        },
        "itemId": {
          "format": "uint64",
          "type": "string"
        },
        "pageIsAboutChain": {
          "description": "If the topic is about a business chain, whether the",
          "enum": [
            "PAGE_IS_ABOUT_CHAIN_NONE",
            "NOT_SAME_CHAIN_AS_TOPIC",
            "ALL_LOCATIONS_OF_TOPIC_CHAIN",
            "SEVERAL_LOCATIONS_OF_TOPIC_CHAIN",
            "EXACT_LOCATION_OF_TOPIC_CHAIN",
            "DIFFERENT_LOCATION_OF_TOPIC_CHAIN"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "projectId": {
          "description": "Metadata for task-level ratings. Not filled for aggregated doc-level ratings. ",
          "format": "uint64",
          "type": "string"
        },
        "raterCanUnderstandTopic": {
          "description": "Whether rater can understand the topic.",
          "type": "boolean"
        },
        "taskDetails": {
          "$ref": "RepositoryWebrefTaskDetails"
        },
        "taskId": {
          "format": "uint64",
          "type": "string"
        },
        "topicIsChain": {
          "description": "Whether the topic is about a business chain.",
          "enum": [
            "TOPIC_IS_ABOUT_CHAIN_NONE",
            "CHAIN_SPECIFIC_LOCATION",
            "CHAIN_ENTITY",
            "NOT_CHAIN",
            "UNSURE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPerDocRelevanceRatings": {
      "description": "Aggregates ratings by url/doc_fp.",
      "id": "RepositoryWebrefPerDocRelevanceRatings",
      "properties": {
        "docFp": {
          "description": "- In topicality ratings this is Fingerprint2011() of the normalized cdoc. - In query-mention ratings this is a hash of the QueryJoin. - In doc-content-mention ratings this is a hash of a QueryJoin in which the mention rating task has been embedded. - ",
          "format": "uint64",
          "type": "string"
        },
        "entityNameRating": {
          "items": {
            "$ref": "RepositoryWebrefEntityNameRatings"
          },
          "type": "array"
        },
        "mentionRating": {
          "items": {
            "$ref": "RepositoryWebrefMentionRatings"
          },
          "type": "array"
        },
        "taskLevelRating": {
          "items": {
            "$ref": "RepositoryWebrefPerDocRelevanceRating"
          },
          "type": "array"
        },
        "url": {
          "description": "- In topicality ratings this is the url of the document. - In query-mention ratings this is the query in format \"en:US:query text\". - In doc-content-mention ratings this is %x:%s where %x is the hex doc_fp of the cdoc (TODO(b/139799592) or sometimes the doc_fp below), and %s is the text of the eval range. - In entity-name ratings this is the MID of the entity.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPersonalizationContextOutput": {
      "description": "Key-Value-like message to store values associated with a personalization type. Next id: 3",
      "id": "RepositoryWebrefPersonalizationContextOutput",
      "properties": {
        "score": {
          "description": "Score corresponding to some kind of biasing strength which was applied. The exact semantics of this score is subject to further changes. Don't make assumptions about specific values or ranges. Values > 0 represents that a boost was applied. Values < 0 represents that a penalty was appled.",
          "format": "float",
          "type": "number"
        },
        "type": {
          "enum": [
            "UNKNOWN",
            "USER_CORRECTIONS",
            "MEDIA_HISTORY",
            "ANIMA_ENTITY_INTERESTS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPersonalizationContextOutputs": {
      "description": "Details about personalization and contextual scoring decisions from Personalized Query Understanding (go/pqu). This message represents information about what kind of biasing was applied, including what type of data were used and how strongly. Intended to be used by client code for fine-tuning necessary ranking or triggering logic if it's not possible to rely on the aggregated annotation confidence alone. To minimize unwanted dependencies and incorrect usage of the data this proto has restricted visibility. Please reach out to refx-pqu@google.com if you want to have access. Next id: 2",
      "id": "RepositoryWebrefPersonalizationContextOutputs",
      "properties": {
        "outputs": {
          "description": "Detailed output scores per personalization type.",
          "items": {
            "$ref": "RepositoryWebrefPersonalizationContextOutput"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingNameEntityMetadata": {
      "description": "Metadata about a name. There are two metadata protos, whose content is meant to be similar but their usage different: NameEntityMetadata for readability and ConceptNameMetadata for size / decoding speed. NameEntityMetadata is propagated to GlobalNameInfo and EntityJoin tables, while ConceptNameMetadata is propagated from EntityJoins to the name matching tables and later to the Webref's/QRef's output. To add a new metadata field in the Names pipeline, and propagate it to EntityJoins and Names matching tables, it is necessary to: (1) Add the field to NameEntityMetadata, and a corresponding data representation in ConceptNameMetadata. (2) Populate the field in NameVariantSignals.name_metadata, from any source. This can be done in a corresponding NameProcessor. (3) Update the library name-metadata.h/cc to make sure that the metadata field is: a) merged correctly when merging two NameSignals; and b) transformed to the corresponding field in ConceptNameMetadata proto. Next available tag: 22.",
      "id": "RepositoryWebrefPreprocessingNameEntityMetadata",
      "properties": {
        "isBypassedName": {
          "description": "There is a limit of entities per name for which we can keep name signals and score. This flag is set to true for names that by-passed per-name-scoring, as there were too many entities for the name.",
          "type": "boolean"
        },
        "isCompoundName": {
          "description": "This name is a generated compound name to pass primary pruning.",
          "type": "boolean"
        },
        "isCompoundRetrievalKey": {
          "description": "Indicates special compound retrieval keys, like \"Compound $mid1 $mid2\"",
          "type": "boolean"
        },
        "isDictionaryTerm": {
          "description": "This is set to true if the entity corresponds to a dictionary term.",
          "type": "boolean"
        },
        "isEventRetrievalKey": {
          "description": "If true, this name is an event retrieval key.",
          "type": "boolean"
        },
        "isGeneratedName": {
          "description": "This name is generated from other names.",
          "type": "boolean"
        },
        "isGeneratedStreetname": {
          "description": "This name is a generated street name.",
          "type": "boolean"
        },
        "isHierarchyPropagated": {
          "description": "This name is added by name propagation in hierarchy.",
          "type": "boolean"
        },
        "isIsbn": {
          "description": "This name is an ISBN.",
          "type": "boolean"
        },
        "isLyricsContent": {
          "description": "This name comes from recording lyrics content.",
          "type": "boolean"
        },
        "isPhoneNumber": {
          "description": "This name is a phone number.",
          "type": "boolean"
        },
        "isRefconName": {
          "description": "This name is used for refcon.",
          "type": "boolean"
        },
        "isReferenceName": {
          "description": "This name is a reference name, only for internal usage, this name should not go into matching table without support of other signals.",
          "type": "boolean"
        },
        "isRefpageUrl": {
          "description": "This name is the URL of a reference page.",
          "type": "boolean"
        },
        "isReverseUniquePropertyName": {
          "description": "This name is generated from a reverse unique property of the entity.",
          "type": "boolean"
        },
        "isStrongIdentifier": {
          "description": "This name is a strong identifier for this entity.",
          "type": "boolean"
        },
        "isSynonymOrFuzzyMatch": {
          "description": "Set if the name is coming from synonyms.",
          "type": "boolean"
        },
        "isTrustedAllcapsName": {
          "description": "If true, this name is a trusted name if it is in ALLCAPS.",
          "type": "boolean"
        },
        "isUnnormalizedName": {
          "description": "If true, do not do tokenization when compute fprint hash for this name.",
          "type": "boolean"
        },
        "notGeneratedName": {
          "description": "This name is clearly not generated(aka. at least one source of this name is not generated). This field is added for simplifying generated name tag while merging. Do not use this metadata directly.",
          "type": "boolean"
        },
        "originalNames": {
          "$ref": "RepositoryWebrefPreprocessingOriginalNames",
          "description": "Original versions of the name (before normalization). Used as query for the entity by Explicit Entity Search."
        },
        "suppressTokenization": {
          "description": "Whether or not to suppress tokenization on this name.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingNameEntityScores": {
      "description": "Abstract, source independent scores. Next available tag: 7",
      "id": "RepositoryWebrefPreprocessingNameEntityScores",
      "properties": {
        "priorScore": {
          "description": "An unnormalized measure of how much evidence we have that this name variant refers to the key entity. Should be comparable to all scores from the same source for: - other entities having the same name variant - the open world score computed for this name variant",
          "format": "double",
          "type": "number"
        },
        "volumeBasedScore": {
          "description": "Prior score come from source that is quantifiable. artificial_score = prior_score - volume_based_score.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingNameVariantSignals": {
      "description": "Next available tag: 33.",
      "id": "RepositoryWebrefPreprocessingNameVariantSignals",
      "properties": {
        "scores": {
          "$ref": "RepositoryWebrefPreprocessingNameEntityScores",
          "description": "Common prior_score/trust proto This field is shared by all sources providing this kind of data, the information has to be considered in context with the source."
        },
        "source": {
          "description": "The source of this NameVariantSignals proto",
          "enum": [
            "INVALID",
            "KG",
            "KG_NAME",
            "KG_ALIAS",
            "KG_ISBN13",
            "KG_GTIN",
            "KG_STOCK_TICKER",
            "KG_AVIATION",
            "KG_TRUSTED_ALIAS",
            "KG_CHEMICAL_SYMBOL",
            "KG_RADIO_STATION",
            "KG_REVERSE_UNIQUE_PROPERTY",
            "KG_TRANSIT_STATION_CODE",
            "KG_SYMBOL",
            "KG_ALLCAPS_NAME",
            "KG_NICKNAME",
            "KG_WORDGRAPH_NAME",
            "KG_SOCIAL_PROFILE_ID",
            "KG_SOCIAL_PROFILE_SITECHUNK",
            "ENTITY_NAME_TRANSLATIONS_GENERATOR",
            "MAPFACTS",
            "MAPFACTS_PHONENUMBER",
            "MAPFACTS_STREET_NAME_GENERATOR",
            "MAPFACTS_FUZZY_PHONENUMBER",
            "MAPFACTS_NAME_GENERATOR",
            "MAPFACTS_GEOCODES_ADDRESS_LINES",
            "MAPFACTS_GEOCODES_UNLINKED",
            "MAPFACTS_TRIMMED_POSTAL_CODE",
            "MAPFACTS_MERGED_POSTAL_CODE",
            "MAPFACTS_POSTAL_CODE_WITH_COUNTRY_CODE",
            "MAPFACTS_TRANSIT_LINE_NAME_GENERATOR",
            "MAPFACTS_HOUSE_ID",
            "CDOCS",
            "CDOCS_ANCHOR",
            "CDOCS_NAVBOOST",
            "CDOCS_REFERENCE_PAGE_URL",
            "WIKIJOINS",
            "WIKIDATA_AKA",
            "WIKIDATA_LABEL",
            "PRODUCT",
            "PRODUCT_TITLE",
            "PRODUCT_MANUFACTURER_PART_NUMBER",
            "PRODUCT_MODEL_VARIATION",
            "PRODUCT_COMPANY_OR_BRAND_STRIPPING",
            "PRODUCT_AGGRESSIVE_STRIP",
            "PRODUCT_AGGRESSIVE_BRAND_STRIP",
            "SCORER",
            "SCORER_CATEGORICAL_NAME_SUPPRESSOR",
            "SCORER_BAD_SUBNAME_DEMOTION",
            "SCORER_YEAR_NAME_DEMOTION",
            "SCORER_NAME_BLACKLIST",
            "NAME_LEAKAGE_PREVENTION",
            "INCOMPATIBLE_NUMBER_DEMOTION",
            "BAD_STRIPPED_NAME",
            "BAD_FRINGE_NAME",
            "BAD_PERSON_NAME",
            "PERSON_NAME_GENERATOR",
            "PERSON_NAME_GENERATOR_WITH_INITIALS",
            "INJECTED",
            "AFFIXED_NAME_GENERATOR",
            "BUSINESS_SUFFIX_STRIPPED_NAME",
            "CHAIN_NAME_GENERATOR",
            "LOCATION_STRIPPED_NAME",
            "PUNCTUATION_STRIPPED_NAME",
            "LEXICON_GENERATOR",
            "COMPOUND_NAME",
            "INDIC_NORMALIZER",
            "STRIP_FIRST_STOPWORD",
            "MIX_CASE_NORMALIZE",
            "MOVIE_YEAR",
            "STRIP_IMPLICATION",
            "MIX_STRIP",
            "OYSTER_NAME",
            "STRIP_WIKI",
            "CIVICS_NAME_GENERATOR",
            "STRIPPED_THEATER_NAME",
            "NUMBER_VARIANT_GENERATOR",
            "PERSONAL_MEDIA_NAME_GENERATOR",
            "MRF_INDEXING_NAME_TV_SHOWS",
            "MATCH_WITH_MIDDLE_INITIALS",
            "COMBINED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "KG aliases that were manually generated, e.g. SxEy names for TV episodes",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Translations are injected into the model from a static sstable found here: /namespace/webref/static-data/entity-name-translations/",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Postal codes with a prefixed country code, e.g. I 39303, A 6604, CH 8005.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Scorer that checks and kills year-like names.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "This source is used for names injected in the name pipeline. This injection is a shortcut to get names in the model and should only be used as a temporary solution waiting to either put the names in KG or mine them directly in this pipeline.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Names used for entity retrieval by MRF.",
            "Name is matched on middle initials.",
            "Source indicating a composition of signal sources."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingOriginalNames": {
      "id": "RepositoryWebrefPreprocessingOriginalNames",
      "properties": {
        "count": {
          "description": "The total number of original names that a normalized name has (all versions from all different sources).",
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "items": {
            "$ref": "RepositoryWebrefPreprocessingOriginalNamesOriginalName"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingOriginalNamesOriginalName": {
      "id": "RepositoryWebrefPreprocessingOriginalNamesOriginalName",
      "properties": {
        "count": {
          "description": "The total number of different sources from where this version of the original name comes from.",
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "description": "Score estimating how good this original name is: - some sources are considered more authoritative than others (e.g. KG) - a name found in more sources is better.",
          "format": "double",
          "type": "number"
        },
        "source": {
          "description": "The sources this name comes from.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "text": {
          "description": "One original name version.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingUrlMatchingMetadata": {
      "description": "Proto with metadata related to why a particular cdoc was selected for an entityjoin.",
      "id": "RepositoryWebrefPreprocessingUrlMatchingMetadata",
      "properties": {
        "source": {
          "description": "The sources the url was suggested by.",
          "items": {
            "$ref": "RepositoryWebrefPreprocessingUrlSourceInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingUrlSourceInfo": {
      "description": "Information about where the url comes from.",
      "id": "RepositoryWebrefPreprocessingUrlSourceInfo",
      "properties": {
        "deprecatedOldSchema": {
          "$ref": "RepositoryWebrefPreprocessingUrlSourceInfoOldSchema"
        },
        "newSchema": {
          "$ref": "RepositoryWebrefPreprocessingUrlSourceInfoNewSchema"
        },
        "originalUrl": {
          "type": "string"
        },
        "source": {
          "enum": [
            "DEPRECATED_OLD_SCHEMA",
            "KG",
            "KG_TRUSTED",
            "WIKIJOIN",
            "PRODUCT_OFFER",
            "OYSTER_FEATURE",
            "EXTRACTED_REFPAGE",
            "EXPERIMENT",
            "SOURCE_PROTO",
            "MINED_REFERENCE_PAGE",
            "WEBREF_YEAR",
            "BOOK_REF_PAGES_MINING_PIPELINE",
            "LYRICS_REFERENCE_PAGE",
            "KG_WEAK_DATA",
            "RELATED_PAGE",
            "MINED_RELATED_PAGE",
            "KG_SOCIAL_PROFILE"
          ],
          "enumDescriptions": [
            "",
            "",
            "From kg topic and has trusted provenance (e.g. ziki-basic, hume-curry).",
            "",
            "",
            "",
            "",
            "",
            "A fake reference page based on a text extracted from the source proto. For example, product clusters get such refpages based on the descriptions pulled from their source protos (catalog offers).",
            "Since cl/142284568 this field represents also book reference pages.",
            "Wikipedia URLs for webref year topic.",
            "Pages mined by book reference pages mining pipeline.",
            "Reference pages for songs mined by matching content of lyrics pages to the known lyrics of a song. NOTE: The pipeline that produces these is maintained by the kg-music@.",
            "From kg topic and all provenances were marked as go/weak-data.",
            "The URL of a webpage related to this entity. The page should contain information about this entity, but this entity does not need to be central to it. Examples would be news stories in which this entity figures. RELATED_PAGE are provided by clients and MINED_RELATED_PAGE are mined programmatically (go/related-pages).",
            "",
            "Url to a social profile belonging to the entity as read from KG."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingUrlSourceInfoNewSchema": {
      "description": "Source information for the new reference url Freebase schema.",
      "id": "RepositoryWebrefPreprocessingUrlSourceInfoNewSchema",
      "properties": {
        "sourceProperty": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefPreprocessingUrlSourceInfoOldSchema": {
      "description": "Source information for the old reference url Freebase schema.",
      "id": "RepositoryWebrefPreprocessingUrlSourceInfoOldSchema",
      "properties": {
        "isOfficial": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefProcessorCounter": {
      "description": "A single processor counter stored as a pair of the counter name and the value.",
      "id": "RepositoryWebrefProcessorCounter",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefProcessorTiming": {
      "description": "Processor timings as produced by NestedPerfCounter, see google3/repository/webref/base/nested-perf-counter.h.",
      "id": "RepositoryWebrefProcessorTiming",
      "properties": {
        "cpuInstructions": {
          "description": "Cpu instructions spent.",
          "format": "int64",
          "type": "string"
        },
        "name": {
          "description": "A string identifying the processor timing context.",
          "type": "string"
        },
        "processorCounters": {
          "description": "Document counters defined by processors. A processor can add and increment counters with NestedPerfCounter::IncrementCounterBy. See go/webref-annotator-metrics.",
          "items": {
            "$ref": "RepositoryWebrefProcessorCounter"
          },
          "type": "array"
        },
        "processorTimings": {
          "description": "Nested measurements, see NestedPerfCounter::ScopedPerfCounter.",
          "items": {
            "$ref": "RepositoryWebrefProcessorTiming"
          },
          "type": "array"
        },
        "wallTimeNs": {
          "description": "Wall time (in nanoseconds).",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefProductMetadata": {
      "description": "Products-specific information about the entity. Next available tag: 16.",
      "id": "RepositoryWebrefProductMetadata",
      "properties": {
        "productLineId": {
          "description": "Shopping product line ids (typically moka product line tag) of this entity. Represents shopping product lines, such as iPhone or Canon EOS. Typically, we expect only one id. But keeping repeated, in case we want to merge or aggregate product lines. Using int64, as tag_id in commerce/datastore/processors/moka/proto/moka_annotations.proto.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "shoppingIds": {
          "$ref": "KnowledgeAnswersIntentQueryShoppingIds",
          "description": "All ShoppingIds for this MID that need to be copied to IntentQuery (FunctionCall) if this MID is used in intent generation. See go/iql-shopping-ids for details."
        },
        "type": {
          "enum": [
            "CATALOG_ENTRY",
            "VARIANT_CLUSTER",
            "OTHER",
            "PRODUCT_LINE",
            "BRAND",
            "CATEGORY",
            "NOT_PRODUCT"
          ],
          "enumDescriptions": [
            "It's an entity that maps to a single product catalog entry.",
            "It's an entity that maps to a product variant cluster.",
            "Higher level product entities.",
            "A product line entity that includes more than one similar product from the same brand.",
            "The entity is a product brand.",
            "The entity is a category of products.",
            "The entity does not have a known product type. This is equivalent to not having the type field set."
          ],
          "type": "string"
        },
        "variantClusterId": {
          "description": "All unique variant cluster ids (shopping's GPCs) of this entity.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefQueryIndices": {
      "description": "Identifies a set of NavBoost queries in the CompositeDoc. Typically these queries were collapsed by WebRef into a single query and they were treated by the annotator as equivalent. They all contain the same mentions (at the same offsets).",
      "id": "RepositoryWebrefQueryIndices",
      "properties": {
        "featuresIndex": {
          "description": "The set of indices in the NavBoostQuery::features() array that belong to the collapsed features.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "queriesIndex": {
          "description": "The index of the query in NavBoostDocument::queries() array.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRangeAnnotations": {
      "description": "The fields hold \"non-entity\" annotations of text.",
      "id": "RepositoryWebrefRangeAnnotations",
      "properties": {
        "segmentMentions": {
          "description": "The actual mentions. Note SegmentMentions contains some fields specific to entity annotation, and those are typically not populated here.",
          "items": {
            "$ref": "RepositoryWebrefSegmentMentions"
          },
          "type": "array"
        },
        "type": {
          "description": "The type of ranges contained in this message.",
          "enum": [
            "STOPWORDS",
            "SHOPPING_STOPWORDS"
          ],
          "enumDescriptions": [
            "In some annotation modes, we mark which fields are considered stopwords, that is terms that do not alter the entity meaning of the query.",
            "QPrime stopwords."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRangeMetadata": {
      "description": "Metadata keeper for an annotated range of a segment. Next available tag: 3.",
      "id": "RepositoryWebrefRangeMetadata",
      "properties": {
        "beginOffset": {
          "description": "Start index of range (within the segment) being annotated.",
          "format": "uint32",
          "type": "integer"
        },
        "tokenCount": {
          "description": "Number of tokens in the range being annotated.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRefconDocumentMentionSpans": {
      "description": "Encapsulates the textual mention spans extracted from a document, split per token.",
      "id": "RepositoryWebrefRefconDocumentMentionSpans",
      "properties": {
        "mentionSpan": {
          "description": "Per token mention spans.",
          "items": {
            "$ref": "RepositoryWebrefRefconMentionSpans"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRefconMentionSpans": {
      "description": "Describes a mention annotated by Webref in the given document.",
      "id": "RepositoryWebrefRefconMentionSpans",
      "properties": {
        "segment": {
          "description": "Segment types in which the mention appears. Now deprecated, because we only care about CONTENT segments.",
          "items": {
            "enum": [
              "CONTENT",
              "ANCHOR",
              "QUERY",
              "URL",
              "TITLE",
              "IMAGE_QUERY",
              "CONTEXT_ENTITY",
              "CONTEXT_QUERY",
              "SPORE_GRAPH",
              "META_CONTENT_TAG",
              "IMG_ALT_TAG",
              "INSTANT_QUERY",
              "VIDEO_TRANSCRIPT",
              "VIDEO_OCR",
              "IMAGE_OCR",
              "LENS"
            ],
            "enumDescriptions": [
              "The document content (excluding the title) or the text of the query.",
              "One of the anchors of the document.",
              "One of the navboost queries pointing to the document.",
              "The document URL.",
              "The title of the document.",
              "One of the image navboost queries pointing to an image in the document.",
              "Contextual entity injected by an outside attachment. For details, see go/webref-priors.",
              "Contextual query that can be provided in Qref.",
              "Names and URLs from Spore GraphAnnotations.",
              "The content-value of the tags \"description\" and \"keyword\".",
              "The content of alt text in tags.",
              "One of the instant navboost queries of the document. They can be found in cdoc.doc_attachments().GetExtension(InstantNavBoostDocument:: message_set_extension).instant_nav_boost_document().",
              "The transcript of a video.",
              "The ocr text of a video.",
              "The ocr text of an image.",
              "Fake segment that contains all Lens entity mids in a given image."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "shortToken": {
          "description": "Fingerprinted tokens which form the mention span. We are using 32-bit instead of usual 64bit fingerprints - this greatly reduces the memory footprint while still keeping the chance of collision reasonably low for our specific use case (1 in 4 billion).",
          "items": {
            "format": "uint32",
            "type": "integer"
          },
          "type": "array"
        },
        "token": {
          "description": "Fingerprinted tokens which form the mention span.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRefconQueryStats": {
      "description": "Contains high level search query statistics of the document.",
      "id": "RepositoryWebrefRefconQueryStats",
      "properties": {
        "aggregatedQueryCount": {
          "description": "Total query count for the document from all the query terms. Can be used to estimate the popularity of the document.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRefconRefconDocumentMetadata": {
      "description": "Encapsulates additional CDoc metadata needed by Refcon.",
      "id": "RepositoryWebrefRefconRefconDocumentMetadata",
      "properties": {
        "queryStats": {
          "$ref": "RepositoryWebrefRefconQueryStats"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefRefconRefconNameInfo": {
      "description": "Refcon name representation in split concepts sstable. This is a simplified version of repository_webref.GlobalNameInfo.",
      "id": "RepositoryWebrefRefconRefconNameInfo",
      "properties": {
        "confidence": {
          "format": "float",
          "type": "number"
        },
        "idfScore": {
          "format": "float",
          "type": "number"
        },
        "isGeneratedName": {
          "type": "boolean"
        },
        "isI18nName": {
          "type": "boolean"
        },
        "isStrongIdentifier": {
          "type": "boolean"
        },
        "isTranslatedName": {
          "type": "boolean"
        },
        "language": {
          "description": "Languages of the name, unknown language is not kept. TODO(b/145976266) Don't use the deprecated language enum.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "namePrior": {
          "description": "Name prior to use. We read this from the prior for the \"unknown\" language.",
          "format": "float",
          "type": "number"
        },
        "normalizedName": {
          "description": "The normalized name.",
          "type": "string"
        },
        "originalName": {
          "description": "Filled only if different than normalized_name.",
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefReferencePageScores": {
      "description": "Signals used for mining new reference pages, set by the reference-page-scorer processor.",
      "id": "RepositoryWebrefReferencePageScores",
      "properties": {
        "bookScore": {
          "description": "Stores score for later offline voting to choose reference pages. If zero, it's not a good book reference page.",
          "format": "float",
          "type": "number"
        },
        "firstScore": {
          "description": "The raw topicality score of the primary entity.",
          "format": "float",
          "type": "number"
        },
        "hasSpecialLinks": {
          "description": "Whether the primary entity has any \"special\" links. Currently a link is considered special if it has a good implication probability and has no negative disambiguation probability.",
          "type": "boolean"
        },
        "medianMentionScore": {
          "description": "The median mentions core of the primary entity.",
          "format": "float",
          "type": "number"
        },
        "navboostCoverage": {
          "description": "The navboost token coverage ratio. All queries are taken into account.",
          "format": "float",
          "type": "number"
        },
        "referencePageScore": {
          "description": "Reference page score used to select the reference page owner.",
          "format": "float",
          "type": "number"
        },
        "selected": {
          "description": "True if the entity is selected as the reference page owner.",
          "type": "boolean"
        },
        "singleTopicness": {
          "description": "A score in [0, 1] which indicates the single topicness of the entity.",
          "format": "float",
          "type": "number"
        },
        "singleTopicnessV2": {
          "description": "This should have the same semantic as single_topicness, and should replace it in the long term.",
          "format": "float",
          "type": "number"
        },
        "titleCoverage": {
          "description": "=================================== Signals for the single topicness. Only filled in for the primary (i.e., top ranked) entity. The title token coverage ratio.",
          "format": "float",
          "type": "number"
        },
        "totalSum": {
          "description": "The sum of raw topicality scores for all entities in this page.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSegmentMention": {
      "description": "A single Mention within a segment as defined by SegmentMentions.SegmentType",
      "id": "RepositoryWebrefSegmentMention",
      "properties": {
        "mention": {
          "$ref": "RepositoryWebrefMention"
        },
        "segmentType": {
          "enum": [
            "CONTENT",
            "ANCHOR",
            "QUERY",
            "URL",
            "TITLE",
            "IMAGE_QUERY",
            "CONTEXT_ENTITY",
            "CONTEXT_QUERY",
            "SPORE_GRAPH",
            "META_CONTENT_TAG",
            "IMG_ALT_TAG",
            "INSTANT_QUERY",
            "VIDEO_TRANSCRIPT",
            "VIDEO_OCR",
            "IMAGE_OCR",
            "LENS"
          ],
          "enumDescriptions": [
            "The document content (excluding the title) or the text of the query.",
            "One of the anchors of the document.",
            "One of the navboost queries pointing to the document.",
            "The document URL.",
            "The title of the document.",
            "One of the image navboost queries pointing to an image in the document.",
            "Contextual entity injected by an outside attachment. For details, see go/webref-priors.",
            "Contextual query that can be provided in Qref.",
            "Names and URLs from Spore GraphAnnotations.",
            "The content-value of the tags \"description\" and \"keyword\".",
            "The content of alt text in tags.",
            "One of the instant navboost queries of the document. They can be found in cdoc.doc_attachments().GetExtension(InstantNavBoostDocument:: message_set_extension).instant_nav_boost_document().",
            "The transcript of a video.",
            "The ocr text of a video.",
            "The ocr text of an image.",
            "Fake segment that contains all Lens entity mids in a given image."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSegmentMentions": {
      "description": "Annotations of a single docjoin segment. A CDoc has several distinct data types which we call \"segments\" (see SegmentType for complete list). SegmentMentions contains all the mentions for a given (document, segment) pair. For queries there is only a single CONTENT segment.",
      "id": "RepositoryWebrefSegmentMentions",
      "properties": {
        "mention": {
          "description": "A list of all the places the entity in question was annotated within this segment. The (indexing.annotations.goldmine) option is for Goldmine AnnotationsFinder to include Mention only when segment_type=\"CONTENT\"",
          "items": {
            "$ref": "RepositoryWebrefMention"
          },
          "type": "array"
        },
        "segmentType": {
          "enum": [
            "CONTENT",
            "ANCHOR",
            "QUERY",
            "URL",
            "TITLE",
            "IMAGE_QUERY",
            "CONTEXT_ENTITY",
            "CONTEXT_QUERY",
            "SPORE_GRAPH",
            "META_CONTENT_TAG",
            "IMG_ALT_TAG",
            "INSTANT_QUERY",
            "VIDEO_TRANSCRIPT",
            "VIDEO_OCR",
            "IMAGE_OCR",
            "LENS"
          ],
          "enumDescriptions": [
            "The document content (excluding the title) or the text of the query.",
            "One of the anchors of the document.",
            "One of the navboost queries pointing to the document.",
            "The document URL.",
            "The title of the document.",
            "One of the image navboost queries pointing to an image in the document.",
            "Contextual entity injected by an outside attachment. For details, see go/webref-priors.",
            "Contextual query that can be provided in Qref.",
            "Names and URLs from Spore GraphAnnotations.",
            "The content-value of the tags \"description\" and \"keyword\".",
            "The content of alt text in tags.",
            "One of the instant navboost queries of the document. They can be found in cdoc.doc_attachments().GetExtension(InstantNavBoostDocument:: message_set_extension).instant_nav_boost_document().",
            "The transcript of a video.",
            "The ocr text of a video.",
            "The ocr text of an image.",
            "Fake segment that contains all Lens entity mids in a given image."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSemanticDateRange": {
      "description": "A date range for an entity. E.g. lifespan of a person, release date of a movie, ...",
      "id": "RepositoryWebrefSemanticDateRange",
      "properties": {
        "confidence": {
          "description": "Indicates how confident we are this extracted range is relevant to a document (document to be infered from context).",
          "format": "float",
          "type": "number"
        },
        "end": {
          "description": "End date extracted from the entity along end_source_property.",
          "type": "string"
        },
        "endSourceProperty": {
          "description": "KG-property that links the entity to the end date.",
          "type": "string"
        },
        "sourceEntityMid": {
          "description": "Entity from which this range was extracted.",
          "type": "string"
        },
        "start": {
          "description": "Start date extracted from the entity along start_source_property.",
          "type": "string"
        },
        "startSourceProperty": {
          "description": "KG-property that links the entity to the start date.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSimplifiedAnchor": {
      "description": "Represents a subpart of the anchor data of the docjoins, but is much smaller. When we build this SimplifiedAnchor from the anchor data of the docjoins, by specifying the option separate_onsite_anchors to SimplifiedAnchorsBuilder, we can also separate the onsite anchors from the other (offdomain) anchors. So onsite anchors and offdomain anchors will have their own count, score, normalized score, and total volume (.._offdomain and .._onsite fields). For example, if there are 10 onsite anchors and 20 offdomain anchors for the anchor text \"mountain view\", then the count_from_onsite is 10, and the count_from_offdomain is 20 when we separate onsite anchors out. Otherwise (if we don't separate onsite anchors), the count is 30 (10 + 20) and we don't have values in the .._offdomain and .._onsite fields.",
      "id": "RepositoryWebrefSimplifiedAnchor",
      "properties": {
        "anchorIndices": {
          "$ref": "RepositoryWebrefAnchorIndices",
          "description": "The set of (equivalent from WebRef point of view) anchors used to produce this segment."
        },
        "anchorText": {
          "$ref": "RepositoryWebrefLocalizedString",
          "description": "The anchor text. Note that the normalized text is not populated."
        },
        "count": {
          "description": "The number of times we see this anchor text.",
          "format": "uint64",
          "type": "string"
        },
        "countFromOffdomain": {
          "description": "Count, score, normalized score, and volume of offdomain anchors.",
          "format": "uint64",
          "type": "string"
        },
        "countFromOnsite": {
          "description": "Count, score, normalized score, and volume of onsite anchors.",
          "format": "uint64",
          "type": "string"
        },
        "normalizedScore": {
          "description": "The normalized score, which is computed from the score and the total_volume.",
          "format": "float",
          "type": "number"
        },
        "normalizedScoreFromOffdomain": {
          "format": "float",
          "type": "number"
        },
        "normalizedScoreFromOnsite": {
          "format": "float",
          "type": "number"
        },
        "score": {
          "description": "The sum/aggregate of the anchor scores that have the same text.",
          "format": "float",
          "type": "number"
        },
        "scoreFromFragment": {
          "description": "The sum/aggregate of the anchor scores that direct to a fragment and have the same text.",
          "format": "float",
          "type": "number"
        },
        "scoreFromOffdomain": {
          "format": "float",
          "type": "number"
        },
        "scoreFromOffdomainFragment": {
          "format": "float",
          "type": "number"
        },
        "scoreFromOnsite": {
          "format": "float",
          "type": "number"
        },
        "scoreFromOnsiteFragment": {
          "format": "float",
          "type": "number"
        },
        "scoreFromRedirect": {
          "description": "The sum/aggregate of the anchor scores that direct to a different wiki title and have the same text. NOTE: url direct to a fragment score is not included in this value.",
          "format": "float",
          "type": "number"
        },
        "totalVolume": {
          "description": "The total score volume used for normalization.",
          "format": "float",
          "type": "number"
        },
        "totalVolumeFromOffdomain": {
          "format": "float",
          "type": "number"
        },
        "totalVolumeFromOnsite": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSimplifiedAnchors": {
      "id": "RepositoryWebrefSimplifiedAnchors",
      "properties": {
        "anchor": {
          "items": {
            "$ref": "RepositoryWebrefSimplifiedAnchor"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSimplifiedCompositeDoc": {
      "description": "Represents an information which is very close to composite doc, but compresses how the anchors are represented to save space. Next available tag: 15.",
      "id": "RepositoryWebrefSimplifiedCompositeDoc",
      "properties": {
        "anchors": {
          "$ref": "RepositoryWebrefSimplifiedAnchors",
          "description": "The composite doc anchors trimmed and transformed in a smaller data structure and aggregated (if they have the exact same text)."
        },
        "cdocContainer": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "IMPORTANT: do not access this field directly, use the simplified-cdoc-access library functions to get the composite doc out of this proto."
        },
        "documentMentionSpans": {
          "$ref": "RepositoryWebrefRefconDocumentMentionSpans",
          "description": "The composite doc spans which were annotated with entities by Webref."
        },
        "matchingMetadata": {
          "$ref": "RepositoryWebrefPreprocessingUrlMatchingMetadata",
          "description": "Metadata related to why this doc was matched to its owning entity."
        },
        "refconDocumentMetadata": {
          "$ref": "RepositoryWebrefRefconRefconDocumentMetadata",
          "description": "Additional document metadata needed by Refcon."
        },
        "sourceSnapshotType": {
          "enum": [
            "BASE",
            "DAILY",
            "ALEXANDRIA_BASE_SNAPSHOTS",
            "UNIFIED_ZEPPELIN",
            "UNIFIED_ZEPPELIN_HIGH_QUALITY",
            "UNIFIED_ZEPPELIN_MEDIUM_QUALITY",
            "UNIFIED_ZEPPELIN_LOW_QUALITY",
            "UNIFIED_LANDFILL",
            "UZLQ_AND_UL",
            "QUALITY_SWAP_BASE",
            "QUALITY_SWAP_UNIFIED_ZEPPELIN",
            "QUALITY_SWAP_UNIFIED_ZEPPELIN_HIGH_QUALITY",
            "QUALITY_SWAP_UNIFIED_ZEPPELIN_MEDIUM_QUALITY",
            "QUALITY_SWAP_UNIFIED_ZEPPELIN_LOW_QUALITY",
            "ADWORDS_BASE"
          ],
          "enumDescriptions": [
            "Rank: 0 - 10B",
            "",
            "Prefer BASE instead.",
            "Rank: 10B - 100B",
            "Rank: 10B - 20B",
            "In the Docjoins repository (go/dj2qi), we split documents ranking from 10B to 100B into two corpora. UNIFIED_ZEPPELIN_MEDIUM_QUALITY is the tier that is only internally used by Docjoin access API, indicating the corpus with documents from 20B to 100B. Rank: 20B - 100B",
            "Rank: 100B - 140B",
            "Rank: 140B - 520B",
            "In the Docjoins repository (go/dj2qi), we merge UZLQ and UL into one corpus. UZLQ_AND_UL tier is only interanlly used by Docjoin access API, indicating the corpus with documents covering UZLQ and UL. Please contact docjoin-access@ before you use it. Rank: 100B - 520B",
            "Quality docjoins in Union. Note: To perform a read of the quality swap that roughly corresponds to BASE, you should read both QUALITY_SWAP_BASE and QUALITY_SWAP_FRESH.",
            "",
            "",
            "",
            "",
            "This is dead, but there are still several references to it in google3."
          ],
          "type": "string"
        },
        "url": {
          "description": "The URL, populated independently of whether we have a CompositeDoc proto. If the cdoc exists, the url is the same as CompositeDoc.doc.url.",
          "type": "string"
        },
        "webrefOutlinks": {
          "$ref": "Proto2BridgeMessageSet"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSubSegmentIndex": {
      "description": "LINT.IfChange Some document segments may consist of multiple sub-segments (e.g. a document might have multiple anchors or navboost queries). SubSegmentIndex contains all information needed to identify the sub-segment (e.g. specific query, query feature or or anchor) where the mention is located.",
      "id": "RepositoryWebrefSubSegmentIndex",
      "properties": {
        "anchorIndex": {
          "$ref": "RepositoryWebrefAnchorIndices",
          "description": "Pointer to the exact set of anchors in the cdoc."
        },
        "genericIndex": {
          "$ref": "RepositoryWebrefGenericIndices",
          "description": "Pointer to the Webref-internal Segment indices. Can't be mapped back to the CDoc."
        },
        "imageQueryIndex": {
          "$ref": "RepositoryWebrefImageQueryIndices",
          "description": "Pointer to the exact set of image navboost queries in the cdoc."
        },
        "jgnIndex": {
          "$ref": "RepositoryWebrefJuggernautIndices",
          "description": "Pointer to the proto in the cdoc and index within the proto for Spore."
        },
        "queryIndex": {
          "$ref": "RepositoryWebrefQueryIndices",
          "description": "Pointer to the exact set of queries in the cdoc."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefSupportTransferRule": {
      "description": "Each SupportTransferRule proto represents a single STBR (go/stbr) rule. These rules are attached to entities (called STBR sources). Each rule attached to an STBR source talks about a single entity (called STBR target). If an STBR source gets annotated, its attached rules result in creation of annotations for corresponding STBR targets. An STBR source might have more than one STBR rule attached to it. STBR rules allow us to address cases where otherwise annotations for what people say do not match what people mean. For example, a query [france vs spain] uses names of countries while in sports context the query would actually be about national sports teams of those countries. In other words, STBR rules have meaning of \"in this particular context (see domain + target_collection fields below) a mention of this particular STBR source (the entity this rule is attached to) actually should be treated as that STBR target (see the target field below)\". To describe the meaning of STBR settings (proto fields below), we are going to use a hypothetical example of an STBR rule making Search stack treat annotations for /m/France as annotations for /m/Louis_XIV, since he was the one saying \"I am the state\". In this example /m/France is going to be the STBR source. NOTICE: When adding new fields also update client::support_transfer::SortDeterministically to ensure deterministic sorting of the SupportTransferRule objects. Next available tag: 11. LINT.IfChange",
      "id": "RepositoryWebrefSupportTransferRule",
      "properties": {
        "allowWildcardIntents": {
          "description": "If set to true, allow STBR targets to trigger intents like ShowEntity that do not have explicit lists of allowed collections, accepting entities with any collections instead. This setting together with target_collection define what intents are allowed to be triggered by the STBR target. Be careful with setting this option to 'true', as in the case of our example the query [france] would result in the knowledge panel for the monarch. Louis XIV might've wanted such a behaviour, but you are probably not him.",
          "type": "boolean"
        },
        "domain": {
          "description": "Name of Aqua grammar domain this STBR rule is restricted to. If the domain is set to anything other than \"default\", the STBR rule is only going to result in an annotation for the STBR target inside of the Aqua domain of the corresponding name. If there is no such Aqua domain, the rule is going to be ignored. The default value of string \"default\" for domain makes it possible for the STBR rule to be used inside Loose Parser.",
          "type": "string"
        },
        "isReverseLink": {
          "description": "Whether this rule points from an STBR target to its STBR source. This field is an internal implementation detail that is not configurable by customers. Inside QRewrite we have to keep track of relations between entities. Among other things it is useful to remember which STBR target a given STBR source came from. For that purpose we attach an STBR proto to the STBR target, reversing the rule, i.e, putting STBR source's mid as the target etc. For this reversed rule we set is_reverse_link to true.",
          "type": "boolean"
        },
        "mentionsOnly": {
          "description": "STBR doesn't just create annotations for STBR targets. It also can modify search result support (useful in PostRef) in order for web pages supporting the STBR source to also support the STBR target. Otherwise in PostRef annotations for STBR targets are going to be demoted, resulting in the STBR rule potentially not affecting anything. Regarding treatment of this result support, STBR has 3 possible modes that for historical reasons are represented as 2 booleans - mentions_only and support_share. No more than one of these bools is supposed to be set to 'true' for a rule. Setting both to 'true' at once would lead to undefined behaviour. These 3 modes are: 1. (default) All the support gets assigned to the STBR target. The STBR source is left with no support. To be extra sure, interpretations that still managed to get triggered by STBR source are suppressed later unless STBR target has no interpretations of its own. In other words this is \"we are pretty sure that if France is mentioned in a query that might be talking about a person, we want to treat the query as if it is about Louis XIV\". This mode would result in a query [age of france] being treated as [age of louis xiv], while [population of france] still being about the country unless [population of louis xiv] matches some intents. For this mode both mentions_only and support_share should be set to 'false'. 2. Support is shared between STBR source ans STBR target. That allows both STBR source and STBR target to trigger some intents with KScorer later deciding which intent is better. In other words, this is \"when it is not clear whether a query is about France of Louis XIV, provide KScorer with both options and let it decide\". For this mode mentions_only should be set to 'false' and support_share should be set to 'true'. 3. While annotations for the STBR target are created, no support is given to those annotations. This is more like \"we are mostly sure that a mention of France is about the country, but just for a rare case it is about the monarch, we would like to have Louis XIV annotated\". For this mode mentions_only should be set to 'true' and support_share should be set to 'false'.",
          "type": "boolean"
        },
        "supportShare": {
          "type": "boolean"
        },
        "target": {
          "description": "Mid of the STBR target, e.g. \"/m/04pwg\" for Louis XIV.",
          "type": "string"
        },
        "targetCollection": {
          "$ref": "RepositoryWebrefKGCollection",
          "description": "Collection that is going to be assigned to the target when the annotation for the target is created. This setting together with allow_wildcard_intents define what intents are allowed to be triggered by the STBR target. At the moment those annotations get created, we can not afford to fetch information about the STBR target from Topic Server, but the target mid by itself doesn't mean much for the Search stack. Setting up the collection for that annotated mid allows us to provide at least some information to the stack on how to treat the mid. This collection together with domain and allow_wildcard_intents fields (see below) defines what intents can be triggered by annotations created for this STBR target. Intents that accept only entities of specific collections can only be triggered if the value of this field matches one of the allowed collections for that intent. In our example, KGCollection.debug_id might be \"/collection/people\" if we care about context of the monarch as a person, e.g. if we would like to understand queries like [how many children does france have] as [how many childred does lous xiv have]. Or, if we would like to be more restrictive and to only apply the rule to contexts that only make sense for monarch, e.g. [how long did france reign], we might decide to use more specific \"/collection/monarchs\" instead."
        },
        "userCountry": {
          "description": "The user country this rule is for. Rules only take effect if the country is not set, set to an empty string or matches the country that is detected for the user - like the country user issued the query from. E.g. \"US\" for the United States.",
          "type": "string"
        },
        "userLanguage": {
          "description": "User language this rule is for. Rules only take effect if the language is not set, set to an empty string or matches the language that is detected for the user's query. E.g. set it to \"en\" if you want the STBR rule to only work for users working from computers with English being set as the main language. Keep it unset if you want the rule not to depend on local language settings of user's computer.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefTaskData": {
      "id": "RepositoryWebrefTaskData",
      "properties": {
        "isReadable": {
          "description": "Signals about quality of data that was shown to raters. If document/query and concept description are readable.",
          "type": "boolean"
        },
        "itemId": {
          "format": "uint64",
          "type": "string"
        },
        "projectId": {
          "format": "uint64",
          "type": "string"
        },
        "taskDetails": {
          "$ref": "RepositoryWebrefTaskDetails"
        },
        "taskId": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefTaskDetails": {
      "description": "Information about what the raters saw, how the information was presented to them, or how they interacted with the task. Next id: 6",
      "id": "RepositoryWebrefTaskDetails",
      "properties": {
        "experimentId": {
          "description": "The id of the experiment in case we are dealing with a refx data experiment. Should only be set in case of data experiments to gather topicality ratings, in order to allow separating these ratings from regular ratings.",
          "type": "string"
        },
        "lastSubmitTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "topicDescription": {
          "type": "string"
        },
        "topicName": {
          "type": "string"
        },
        "topicUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefTripleAnnotation": {
      "id": "RepositoryWebrefTripleAnnotation",
      "properties": {
        "confidenceScore": {
          "description": "Triple annotation confidence_score (value between 0 and 1). Higher values correspond to higher confidence.",
          "format": "float",
          "type": "number"
        },
        "isImplied": {
          "description": "The information in this triple is implied by other triple(s) in the document.",
          "type": "boolean"
        },
        "kgVerified": {
          "description": "Set to true if this triple is present in the webref model as either a link or property value. This implies that the information is in the Knowledge Graph. Note that it can happen that a triple is in KG but not present in the webref model.",
          "type": "boolean"
        },
        "mentions": {
          "description": "Occurrences of the triple on the document",
          "items": {
            "$ref": "RepositoryWebrefTripleMention"
          },
          "type": "array"
        },
        "predMid": {
          "description": "The mid of the predicate kg-property(-ies). In order, in the case of multihop links.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "stuff": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Generic container to hold additional data such as signals, debug data etc. Data that can be stored in this field and their TypeIds: repository_webref::evaluation::ECMDebug (TypeId 192627933), defined in repository/webref/evaluation/triple_annotations/triple-diff.proto Debugging data to be used in WebIt's ECM report."
        },
        "triple": {
          "$ref": "KnowledgeGraphTriple"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefTripleAnnotations": {
      "description": "Represents a collection of triples annotated by Webref/Webit. Included in WebrefEntities",
      "id": "RepositoryWebrefTripleAnnotations",
      "properties": {
        "annotations": {
          "items": {
            "$ref": "RepositoryWebrefTripleAnnotation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefTripleMention": {
      "id": "RepositoryWebrefTripleMention",
      "properties": {
        "predMention": {
          "$ref": "RepositoryWebrefSegmentMention",
          "description": "Document mention of the predicate"
        },
        "scopeBegin": {
          "description": "The [begin, end) byte offset of the document scope where this triple was annotated. This corresponds to a table row or a text sentence where the triple was identified. The sub_mention can be outside the scope when the subject is inferred from the table title.",
          "format": "int32",
          "type": "integer"
        },
        "scopeEnd": {
          "format": "int32",
          "type": "integer"
        },
        "scopeFprint": {
          "description": "Fingerprint2011 of space-joined SAFT tokens in the scope.",
          "format": "uint64",
          "type": "string"
        },
        "stuff": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Generic container to hold additional data such as triple scoped signals. Data that can be stored in this field and their TypeIds: repository_webref::universal::webit::ScopeSignals (TypeId 192754198), defined in repository/webref/universal/processors/understanding/webit.proto"
        },
        "subMention": {
          "$ref": "RepositoryWebrefSegmentMention",
          "description": "Document mention of the subject"
        },
        "valueMention": {
          "$ref": "RepositoryWebrefSegmentMention",
          "description": "Document mention of the value"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefUniversalNgramData": {
      "description": "This proto is filled with n-gram data during model building.",
      "id": "RepositoryWebrefUniversalNgramData",
      "properties": {
        "idf": {
          "description": "IDF of the n-gram.",
          "format": "float",
          "type": "number"
        },
        "pluralProb": {
          "description": "Probability that the n-gram is a plural form of a word. This information is extracted from SAFT annotations of queries. See HasPluralProperty().",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefAnnotationStats": {
      "description": "Detailed statistics about the annotations in the document. Contains, for example, the number of ranges with name matches, the number of entities matched, and the number of entities with mentions. This information can be used to tune some WebRef-internal scoring functions based on existing annotations (e.g., document-length normalization in global link support). Next available tag: 10.",
      "id": "RepositoryWebrefWebrefAnnotationStats",
      "properties": {
        "docWeight": {
          "description": "The relative weight of the document, used when aggregating information from multiple documents.",
          "format": "float",
          "type": "number"
        },
        "ngramContext": {
          "description": "Extracted n-grams context scores (in cdoc language, weighted by doc_weight) output if webref_populate_annotation_ngrams is enabled.",
          "items": {
            "$ref": "RepositoryWebrefNgramContext"
          },
          "type": "array"
        },
        "numCandidates": {
          "description": "The total number of candidates.",
          "format": "int64",
          "type": "string"
        },
        "numConceptsWithCandidates": {
          "description": "The total number of concepts with at least 1 candidate.",
          "format": "int64",
          "type": "string"
        },
        "numConceptsWithMentions": {
          "description": "The total number of concepts with at least 1 mention.",
          "format": "int64",
          "type": "string"
        },
        "numRangesWithCandidates": {
          "description": "The total number of RangeData objects with at least one candidate.",
          "format": "int64",
          "type": "string"
        },
        "statsPerType": {
          "description": "Statistics for each token type.",
          "items": {
            "$ref": "RepositoryWebrefAnnotationStatsPerType"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefAttachmentMetadata": {
      "description": "Annotation metadata for an individual entity.",
      "id": "RepositoryWebrefWebrefAttachmentMetadata",
      "properties": {
        "featureType": {
          "description": "Oyster Feature Type.",
          "enum": [
            "TYPE_ANY",
            "TYPE_TRANSPORTATION",
            "TYPE_ROUTE",
            "TYPE_DEPRECATED_HIGHWAY_DO_NOT_USE",
            "TYPE_HIGHWAY",
            "TYPE_HIGHWAY_1",
            "TYPE_HIGHWAY_2",
            "TYPE_HIGHWAY_3",
            "TYPE_HIGHWAY_4",
            "TYPE_HIGHWAY_5",
            "TYPE_HIGHWAY_6",
            "TYPE_HIGHWAY_7",
            "TYPE_HIGHWAY_8",
            "TYPE_HIGHWAY_9",
            "TYPE_BICYCLE_ROUTE",
            "TYPE_TRAIL",
            "TYPE_SEGMENT",
            "TYPE_ROAD",
            "TYPE_RAILWAY",
            "TYPE_STANDARD_TRACK",
            "TYPE_JR_TRACK",
            "TYPE_NARROW_TRACK",
            "TYPE_MONORAIL_TRACK",
            "TYPE_SUBWAY_TRACK",
            "TYPE_LIGHT_RAIL_TRACK",
            "TYPE_BROAD_TRACK",
            "TYPE_HIGH_SPEED_RAIL",
            "TYPE_TROLLEY_TRACK",
            "TYPE_FERRY",
            "TYPE_FERRY_BOAT",
            "TYPE_FERRY_TRAIN",
            "TYPE_VIRTUAL_SEGMENT",
            "TYPE_INTERSECTION",
            "TYPE_TRANSIT",
            "TYPE_TRANSIT_STATION",
            "TYPE_BUS_STATION",
            "TYPE_TRAMWAY_STATION",
            "TYPE_TRAIN_STATION",
            "TYPE_SUBWAY_STATION",
            "TYPE_FERRY_TERMINAL",
            "TYPE_AIRPORT",
            "TYPE_AIRPORT_CIVIL",
            "TYPE_AIRPORT_MILITARY",
            "TYPE_AIRPORT_MIXED",
            "TYPE_HELIPORT",
            "TYPE_SEAPLANE_BASE",
            "TYPE_AIRSTRIP",
            "TYPE_CABLE_CAR_STATION",
            "TYPE_GONDOLA_LIFT_STATION",
            "TYPE_FUNICULAR_STATION",
            "TYPE_SPECIAL_STATION",
            "TYPE_HORSE_CARRIAGE_STATION",
            "TYPE_MONORAIL_STATION",
            "TYPE_SEAPORT",
            "TYPE_TRANSIT_STOP",
            "TYPE_TRANSIT_TRIP",
            "TYPE_TRANSIT_DEPARTURE",
            "TYPE_TRANSIT_LEG",
            "TYPE_TRANSIT_LINE",
            "TYPE_TRANSIT_AGENCY_DEPRECATED_VALUE",
            "TYPE_TRANSIT_TRANSFER",
            "TYPE_SEGMENT_PATH",
            "TYPE_ROAD_SIGN",
            "TYPE_INTERSECTION_GROUP",
            "TYPE_PATHWAY",
            "TYPE_RESTRICTION_GROUP",
            "TYPE_TOLL_CLUSTER",
            "TYPE_POLITICAL",
            "TYPE_COUNTRY",
            "TYPE_ADMINISTRATIVE_AREA",
            "TYPE_ADMINISTRATIVE_AREA1",
            "TYPE_US_STATE",
            "TYPE_GB_COUNTRY",
            "TYPE_JP_TODOUFUKEN",
            "TYPE_ADMINISTRATIVE_AREA2",
            "TYPE_GB_FORMER_POSTAL_COUNTY",
            "TYPE_GB_TRADITIONAL_COUNTY",
            "TYPE_ADMINISTRATIVE_AREA3",
            "TYPE_ADMINISTRATIVE_AREA4",
            "TYPE_ADMINISTRATIVE_AREA5",
            "TYPE_ADMINISTRATIVE_AREA6",
            "TYPE_ADMINISTRATIVE_AREA7",
            "TYPE_ADMINISTRATIVE_AREA8",
            "TYPE_ADMINISTRATIVE_AREA9",
            "TYPE_COLLOQUIAL_AREA",
            "TYPE_RESERVATION",
            "TYPE_LOCALITY",
            "TYPE_GB_POST_TOWN",
            "TYPE_JP_GUN",
            "TYPE_JP_SHIKUCHOUSON",
            "TYPE_JP_SUB_SHIKUCHOUSON",
            "TYPE_COLLOQUIAL_CITY",
            "TYPE_SUBLOCALITY",
            "TYPE_US_BOROUGH",
            "TYPE_GB_DEPENDENT_LOCALITY",
            "TYPE_JP_OOAZA",
            "TYPE_JP_KOAZA",
            "TYPE_JP_GAIKU",
            "TYPE_GB_DOUBLE_DEPENDENT_LOCALITY",
            "TYPE_JP_CHIBAN",
            "TYPE_JP_EDABAN",
            "TYPE_SUBLOCALITY1",
            "TYPE_SUBLOCALITY2",
            "TYPE_SUBLOCALITY3",
            "TYPE_SUBLOCALITY4",
            "TYPE_SUBLOCALITY5",
            "TYPE_NEIGHBORHOOD",
            "TYPE_CONSTITUENCY",
            "TYPE_DESIGNATED_MARKET_AREA",
            "TYPE_SCHOOL_DISTRICT",
            "TYPE_LAND_PARCEL",
            "TYPE_DISPUTED_AREA",
            "TYPE_POLICE_JURISDICTION",
            "TYPE_STATISTICAL_AREA",
            "TYPE_CONSTITUENCY_FUTURE",
            "TYPE_PARK",
            "TYPE_GOLF_COURSE",
            "TYPE_LOCAL_PARK",
            "TYPE_NATIONAL_PARK",
            "TYPE_US_NATIONAL_PARK",
            "TYPE_US_NATIONAL_MONUMENT",
            "TYPE_NATIONAL_FOREST",
            "TYPE_PROVINCIAL_PARK",
            "TYPE_PROVINCIAL_FOREST",
            "TYPE_CAMPGROUNDS",
            "TYPE_HIKING_AREA",
            "TYPE_BUSINESS",
            "TYPE_GOVERNMENT",
            "TYPE_BORDER_CROSSING",
            "TYPE_CITY_HALL",
            "TYPE_COURTHOUSE",
            "TYPE_EMBASSY",
            "TYPE_LIBRARY",
            "TYPE_SCHOOL",
            "TYPE_UNIVERSITY",
            "TYPE_EMERGENCY",
            "TYPE_HOSPITAL",
            "TYPE_PHARMACY",
            "TYPE_POLICE",
            "TYPE_FIRE",
            "TYPE_DOCTOR",
            "TYPE_DENTIST",
            "TYPE_VETERINARIAN",
            "TYPE_TRAVEL_SERVICE",
            "TYPE_LODGING",
            "TYPE_RESTAURANT",
            "TYPE_GAS_STATION",
            "TYPE_PARKING",
            "TYPE_POST_OFFICE",
            "TYPE_REST_AREA",
            "TYPE_CASH_MACHINE",
            "TYPE_CAR_RENTAL",
            "TYPE_CAR_REPAIR",
            "TYPE_SHOPPING",
            "TYPE_GROCERY",
            "TYPE_TOURIST_DESTINATION",
            "TYPE_ECO_TOURIST_DESTINATION",
            "TYPE_BIRD_WATCHING",
            "TYPE_FISHING",
            "TYPE_HUNTING",
            "TYPE_NATURE_RESERVE",
            "TYPE_TEMPLE",
            "TYPE_CHURCH",
            "TYPE_GURUDWARA",
            "TYPE_HINDU_TEMPLE",
            "TYPE_MOSQUE",
            "TYPE_SYNAGOGUE",
            "TYPE_STADIUM",
            "TYPE_BAR",
            "TYPE_MOVIE_RENTAL",
            "TYPE_COFFEE",
            "TYPE_GOLF",
            "TYPE_BANK",
            "TYPE_DOODLE",
            "TYPE_GROUNDS",
            "TYPE_AIRPORT_GROUNDS",
            "TYPE_BUILDING_GROUNDS",
            "TYPE_CEMETERY",
            "TYPE_HOSPITAL_GROUNDS",
            "TYPE_INDUSTRIAL",
            "TYPE_MILITARY",
            "TYPE_SHOPPING_CENTER",
            "TYPE_SPORTS_COMPLEX",
            "TYPE_UNIVERSITY_GROUNDS",
            "TYPE_DEPRECATED_TARMAC",
            "TYPE_ENCLOSED_TRAFFIC_AREA",
            "TYPE_PARKING_LOT",
            "TYPE_PARKING_GARAGE",
            "TYPE_OFF_ROAD_AREA",
            "TYPE_BORDER",
            "TYPE_BUILDING",
            "TYPE_GEOCODED_ADDRESS",
            "TYPE_NATURAL_FEATURE",
            "TYPE_TERRAIN",
            "TYPE_SAND",
            "TYPE_BEACH",
            "TYPE_DUNE",
            "TYPE_ROCKY",
            "TYPE_ICE",
            "TYPE_GLACIER",
            "TYPE_BUILT_UP_AREA",
            "TYPE_VEGETATION",
            "TYPE_SHRUBBERY",
            "TYPE_WOODS",
            "TYPE_AGRICULTURAL",
            "TYPE_GRASSLAND",
            "TYPE_TUNDRA",
            "TYPE_DESERT",
            "TYPE_SALT_FLAT",
            "TYPE_WATER",
            "TYPE_OCEAN",
            "TYPE_BAY",
            "TYPE_BIGHT",
            "TYPE_LAGOON",
            "TYPE_SEA",
            "TYPE_STRAIT",
            "TYPE_INLET",
            "TYPE_FJORD",
            "TYPE_LAKE",
            "TYPE_SEASONAL_LAKE",
            "TYPE_RESERVOIR",
            "TYPE_POND",
            "TYPE_RIVER",
            "TYPE_RAPIDS",
            "TYPE_DISTRIBUTARY",
            "TYPE_CONFLUENCE",
            "TYPE_WATERFALL",
            "TYPE_SPRING",
            "TYPE_GEYSER",
            "TYPE_HOT_SPRING",
            "TYPE_SEASONAL_RIVER",
            "TYPE_WADI",
            "TYPE_ESTUARY",
            "TYPE_WETLAND",
            "TYPE_WATER_NAVIGATION",
            "TYPE_FORD",
            "TYPE_CANAL",
            "TYPE_HARBOR",
            "TYPE_CHANNEL",
            "TYPE_REEF",
            "TYPE_REEF_FLAT",
            "TYPE_REEF_GROWTH",
            "TYPE_REEF_EXTENT",
            "TYPE_REEF_ROCK_SUBMERGED",
            "TYPE_IRRIGATION",
            "TYPE_DAM",
            "TYPE_DRINKING_WATER",
            "TYPE_CURRENT",
            "TYPE_WATERING_HOLE",
            "TYPE_TECTONIC",
            "TYPE_WATERING_HOLE_DEPRECATED",
            "TYPE_VOLCANO",
            "TYPE_LAVA_FIELD",
            "TYPE_FISSURE",
            "TYPE_FAULT",
            "TYPE_LAND_MASS",
            "TYPE_CONTINENT",
            "TYPE_ISLAND",
            "TYPE_ATOLL",
            "TYPE_OCEAN_ROCK_EXPOSED",
            "TYPE_CAY",
            "TYPE_PENINSULA",
            "TYPE_ISTHMUS",
            "TYPE_ELEVATED",
            "TYPE_PEAK",
            "TYPE_NUNATAK",
            "TYPE_SPUR",
            "TYPE_PASS",
            "TYPE_PLATEAU",
            "TYPE_RIDGE",
            "TYPE_RAVINE",
            "TYPE_CRATER",
            "TYPE_KARST",
            "TYPE_CLIFF",
            "TYPE_VISTA",
            "TYPE_DIGITAL_ELEVATION_MODEL",
            "TYPE_UPLAND",
            "TYPE_TERRACE",
            "TYPE_SLOPE",
            "TYPE_CONTOUR_LINE",
            "TYPE_PAN",
            "TYPE_UNSTABLE_HILLSIDE",
            "TYPE_MOUNTAIN_RANGE",
            "TYPE_UNDERSEA",
            "TYPE_SUBMARINE_SEAMOUNT",
            "TYPE_SUBMARINE_RIDGE",
            "TYPE_SUBMARINE_GAP",
            "TYPE_SUBMARINE_PLATEAU",
            "TYPE_SUBMARINE_DEEP",
            "TYPE_SUBMARINE_VALLEY",
            "TYPE_SUBMARINE_BASIN",
            "TYPE_SUBMARINE_SLOPE",
            "TYPE_SUBMARINE_CLIFF",
            "TYPE_SUBMARINE_PLAIN",
            "TYPE_SUBMARINE_FRACTURE_ZONE",
            "TYPE_CAVE",
            "TYPE_ROCK",
            "TYPE_ARCHIPELAGO",
            "TYPE_POSTAL",
            "TYPE_POSTAL_CODE",
            "TYPE_POSTAL_CODE_PREFIX",
            "TYPE_PREMISE",
            "TYPE_SUB_PREMISE",
            "TYPE_SUITE",
            "TYPE_POST_TOWN",
            "TYPE_POSTAL_ROUND",
            "TYPE_META_FEATURE",
            "TYPE_DATA_SOURCE",
            "TYPE_LOCALE",
            "TYPE_TIMEZONE",
            "TYPE_BUSINESS_CHAIN",
            "TYPE_PHONE_NUMBER_PREFIX",
            "TYPE_PHONE_NUMBER_AREA_CODE",
            "TYPE_BUSINESS_CORRIDOR",
            "TYPE_ADDRESS_TEMPLATE",
            "TYPE_TRANSIT_AGENCY",
            "TYPE_FUTURE_GEOMETRY",
            "TYPE_EVENT",
            "TYPE_EARTHQUAKE",
            "TYPE_HURRICANE",
            "TYPE_WEATHER_CONDITION",
            "TYPE_TRANSIENT",
            "TYPE_ENTRANCE",
            "TYPE_CARTOGRAPHIC",
            "TYPE_HIGH_TENSION",
            "TYPE_SKI_TRAIL",
            "TYPE_SKI_LIFT",
            "TYPE_SKI_BOUNDARY",
            "TYPE_WATERSHED_BOUNDARY",
            "TYPE_TARMAC",
            "TYPE_WALL",
            "TYPE_PICNIC_AREA",
            "TYPE_PLAY_GROUND",
            "TYPE_TRAIL_HEAD",
            "TYPE_GOLF_TEEING_GROUND",
            "TYPE_GOLF_PUTTING_GREEN",
            "TYPE_GOLF_ROUGH",
            "TYPE_GOLF_SAND_BUNKER",
            "TYPE_GOLF_FAIRWAY",
            "TYPE_GOLF_HOLE",
            "TYPE_DEPRECATED_GOLF_SHOP",
            "TYPE_CAMPING_SITE",
            "TYPE_DESIGNATED_BARBECUE_PIT",
            "TYPE_DESIGNATED_COOKING_AREA",
            "TYPE_CAMPFIRE_PIT",
            "TYPE_WATER_FOUNTAIN",
            "TYPE_LITTER_RECEPTACLE",
            "TYPE_LOCKER_AREA",
            "TYPE_ANIMAL_ENCLOSURE",
            "TYPE_CARTOGRAPHIC_LINE",
            "TYPE_ESTABLISHMENT",
            "TYPE_ESTABLISHMENT_GROUNDS",
            "TYPE_ESTABLISHMENT_BUILDING",
            "TYPE_ESTABLISHMENT_POI",
            "TYPE_ESTABLISHMENT_SERVICE",
            "TYPE_CELESTIAL",
            "TYPE_ROAD_MONITOR",
            "TYPE_PUBLIC_SPACES_AND_MONUMENTS",
            "TYPE_STATUE",
            "TYPE_TOWN_SQUARE",
            "TYPE_LEVEL",
            "TYPE_COMPOUND",
            "TYPE_COMPOUND_GROUNDS",
            "TYPE_COMPOUND_BUILDING",
            "TYPE_COMPOUND_SECTION",
            "TYPE_TERMINAL_POINT",
            "TYPE_REGULATED_AREA",
            "TYPE_LOGICAL_BORDER",
            "TYPE_DO_NOT_USE_RESERVED_TO_CATCH_GENERATED_FILES",
            "TYPE_UNKNOWN"
          ],
          "enumDescriptions": [
            "ABSTRACT",
            "ABSTRACT",
            "A route is any section of road (or rails, etc.) that has a name. This includes city streets as well as highways. Road segments can belong to multiple routes (e.g. El Camino, CA-82).",
            "DEPRECATED",
            "ABSTRACT",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "A designated bicycle route, whose segments may consist of any combination of bicycle paths, bicycle lanes, or city streets.",
            "A designated trail, which may consist of paved walkways, dirt paths, fire road, streets or highways, etc.",
            "ABSTRACT",
            "",
            "Railroads use several different incompatible track types.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Tracks for streetcars, cable-cars, etc. Ferries are services that are part of the road network but are not roads. They typically involve fares and scheduled departure times.",
            "ABSTRACT",
            "The vast majority of ferries are ferry boats.",
            "Also called a \"car transport\", a ferry train is a rail service that carries passengers and their vehicles across undrivable terrain. The Channel Tunnel (\"Chunnel\") is the most famous example, but they are also common in the Alps where they connect neighboring valleys otherwise separated by impassable mountains.",
            "Any plausible 1-dimensional path through a 2+ dimensional space, for the purposes of making graph-search-based routing possible. Such segments can be used to model paths through parking lots, squares, floors of buildings and other areas.",
            "An intersection consists of a collection of segments that terminate at the same location. This is topological definition: it may not match what a typical user would think of as an \"intersection\". See TYPE_INTERSECTION_GROUP, below, for more information. Each segment terminating at an intersection has an \"endpoint type\" that specifies how that segment is terminated: stop sign, yield sign, three-way light, etc.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A transit line is a collection of transit legs, associated with some invariant properties of the trips that run over the legs. See also transitline.proto",
            "TYPE_TRANSIT_AGENCY was moved to 0xC91. This deprecated enum value still exists for debugging purposes only.",
            "DEPRECATED",
            "ABSTRACT",
            "Road sign features have names, point geometry, etc. They also have segment_path data (see below) which lists the segments that refer to the sign. See segment.proto for the reference from the segment to the road sign.",
            "Our TYPE_INTERSECTION feature, above, models the point where one or more segments terminate. This is topological definition: it may not match what a typical user would think of as an \"intersection\". Consider the intersections where Hayes, Market, Larkin, and 9th Street meet near (37.77765, -122.41638) in San Francisco. Most people would probably consider this a single feature, even though we model it as four separate TYPE_INTERSECTION features. This TYPE_INTERSECTION_GROUP is used to model the user's concept of a complex intersection.",
            "RESERVED",
            "A restriction group describes a set of segment restrictions that belong together and have a name or an associated event. See also restriction_group.proto",
            "A toll cluster is either a single point on a segment (represented as a point at the end of the segment that has ENDPOINT_TOLL_BOOTH set) or a group of points on various road segments in MapFacts that represents one or more lanes passing through a toll fixture that all go to the same routing destination. Each toll cluster should have at most a single price per payment method. E.g. {CASH = $5, PASS = $1}. Note: If a toll fixture has different prices for multiple routing destinations, drivers need to be in the correct lane before passing through the toll fixture and hence such a fixture is represented by multiple toll clusters. A toll cluster does not necessarily represent a real-world entity, e.g. a particular plaza/structure as perceived by humans. This is because a plaza can be represented by more than one toll cluster. We require toll clusters to have names, but they might be non-unique. For example, a plaza might be represented by multiple toll clusters that may have the same plaza name. For further details, please see go/toll-cluster-schema.",
            "ABSTRACT",
            "",
            "ABSTRACT",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "e.g. Silicon Valley",
            "A reservation is a region collectively held or governed by indigenous people and officially recognized by the country\u2019s government at the federal or state level. A reservation may be fully contained within an administrative feature or partially contained within two or more. These regions are referred to by different categorical names depending on country and even by state, including but not limited to: \u201cIndian Reservations\u201d, \u201cIndian Reserves\u201d, \u201cLand Claim Settlement Lands\u201d, \u201cIndian Lands\u201d, \u201cTreaty Lands\u201d, \u201cIndigenous Territories\u201d, etc. A reservation is not a historic indigenous territory boundary or a region which has applied for land rights but has not yet received official recognition.",
            "",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "An entity widely considered to be a city, that may itself be made up of smaller political entities, some of which are cities/towns/villages themselves. For example, the colloquial view of Sydney, Australia actually comprises many smaller cities, but is regarded as a city itself. This type is not suitable for modeling official metro-/micropolitan or other statistical areas.",
            "ABSTRACT",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Designated Market Areas (or DMAs) are used by marketing and ratings companies (such as the Nielsen Media Research company) to describe geographical regions (such as the greater New York metropolitan area) that are covered by a set of television stations. (See http://www.schooldata.com/pdfs/DMA.pdf) In the United States, DMAs should have a DMA numeric ID name, tagged with the FLAG_DESIGNATED_MARKET_AREA_ID flag.",
            "",
            "",
            "Eventually we'll have more data for disputed areas (e.g., who makes claims on the area, who has de facto control, etc.). For the moment, we just define a type so we can simply mark areas as disputed.",
            "Boundaries representing the jurisdiction of a particular police station.",
            "An area used for aggregating statistical data, eg, a census region. Note that TYPE_STATISTICAL_AREA has a third nibble so we can add an abstract parent above it later if need be at 0x2E1 (and rename TYPE_STATISTICAL_AREA as TYPE_STATISTICAL_AREA1).",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "A line representing the boundary between two features. See border.proto for details.",
            "DEPRECATED",
            "An association of a point with an address, with no other information.",
            "ABSTRACT",
            "Expanses of land that share common surface attributes. These areas would look more or less uniform from a high altitude.",
            "",
            "",
            "",
            "",
            "",
            "",
            "Terrain that looks populated.",
            "Terrain that is covered in vegetation.",
            "",
            "",
            "",
            "",
            "",
            "",
            "A flat expanse of salt left by the evaporation of a body of salt water.",
            "Features can be TYPE_WATER if we don't have enough information to properly type the body of water. TYPE_WATER is also used as the type for child features that compose a TYPE_RIVER feature.",
            "One of the large salt-water bodies that covers most of the globe.",
            "An ocean subdivision formed by a coastal indentation. Includes coves and gulfs.",
            "An open body of water formed by a slight coastal indentation.",
            "",
            "An ocean subdivision more or less confined by land and islands.",
            "A long narrow ocean subdivision. Includes sounds.",
            "",
            "",
            "An inland body of standing water.",
            "A lake that dries up part of the year.",
            "An artificial body of water, possibly created by a dam, often used for irrigation or house use.",
            "",
            "An inland body of moving water, or parts associated with it in which there is little or no current (backwater).",
            "",
            "A branch which flows away from the main river. Includes deltas.",
            "A place where two or more rivers join.",
            "",
            "A place where ground water flows naturally out of the ground.",
            "",
            "",
            "A river that dries up part of the year.",
            "A dry riverbed that occasionally receives flashfloods.",
            "A place at the end of a river where fresh and salt water mix. Includes tidal creeks and limans.",
            "Land that is usually flooded. Includes bogs, marshes, flats, moors, and swamps.",
            "",
            "A shallow place where water may be waded through.",
            "A narrow passage used by boats. Normally artificial.",
            "A deep place near a shore where ships commonly drop anchor.",
            "A deep part in a body of water that is suitable for navigation. Includes narrows.",
            "Rocks, coral, sandbars, or other features beneath the surface of the water that pose a hazard to passing ships. Includes shoals.",
            "A relatively shallow zone of the back reef located closest to the shore, that may be exposed at low tide.",
            "A small section of rocks, coral, sandbars, or other features beneath the surface of the water that forms part of a reef.",
            "The full extent of the reef complex.",
            "A submerged rock in the water.",
            "Man-made (and sometimes natural) channels used to move water. This type was used for both dam structures and water that is hold back by dams. We should use TYPE_COMPOUND_BUILDING for dam structures and TYPE_RESERVOIR for water.",
            "DEPRECATED",
            "",
            "Includes overfalls.",
            "A natural depression filled with water where animals come to drink.",
            "ABSTRACT This type is incorrectly under TYPE_TECTONIC instead of TYPE_WATER. This was a mistake and is now fixed. See TYPE_WATERING_HOLE for the replacement.",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "An exposed rock in the water.",
            "A small, low-elevation, sandy island formed on the surface of coral reefs",
            "A stretch of land projecting into water. Includes capes and spits.",
            "A strip of land connecting two larger land masses, such as continents.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "Elevations that have a distinctive peak.",
            "A peak or ridge of a mountain that extends through a glacier.",
            "A subsidiary peak of a mountain.",
            "A route over an otherwise difficult to traverse feature. Includes saddle.",
            "Elevations that are flat on top. Includes mesas and buttes.",
            "A ridge is a geographical feature consisting of a chain of mountains or hills that form a continuous elevated crest with a single ridgeline for some distance.",
            "Steep declines usually carved by erosion. Includes valleys, canyons, ditches, and gorges.",
            "Depressions causes by impact, explosion, and sometimes sink-holes.",
            "Topography formed on limestone and gypsum by dissolution with sinkholes, caves, etc.",
            "A vertical or nearly vertical slope. Includes escarpments.",
            "An elevated place that is notable for having a good view. Raster digital elevation data. This is not a type to be used by providers or consumed by clients.",
            "RESERVED",
            "Land along streams higher than the alluvial plain or stream terrace.",
            "",
            "Land not so steep as a cliff, but changing elevation. Includes slides.",
            "All the points on the polygon are at the same elevation.",
            "A near-level shallow, natural depression or basin, usually containing an intermittent lake, pond, or pool.",
            "",
            "A series of mountains or hills ranged in a line and connected by high ground. Mountain ranges usually consist of many smaller ridges. For example, the Himalayas, the Andes. the Alps, etc.",
            "Features that are notable for being high (or low), or for having sudden changes in elevation. These features might have an \"elevation\" extension to specify the actual elevation. See ElevationProto for more information.",
            "includes peaks, ranges, and spurs",
            "",
            "includes saddles",
            "",
            "",
            "includes trenches and troughs",
            "",
            "",
            "",
            "",
            "",
            "Don't use 0xA7. Use 8 bits for additional types under TYPE_NATURAL_FEATURE, so we don't run out of space. The following are miscellaneous natural features that don't fit any of the categories above.",
            "",
            "A feature representing a group or chain of islands. ",
            "ABSTRACT",
            "This is the type for postal codes which are complete and independent enough that there should be a feature for them (e.g. US 5-digit ZIP codes). For even more detailed suffixes that further subdivide a postal code (such as the +4 component in US ZIP codes), store the information in a TYPE_POSTAL_CODE_SUFFIX address component. When a range or set of postal codes share the same geographical area, e.g. because a precise subdivision does not exist or this subdivision is unknown, this type is used for each individual postal code.",
            "A prefix portion of a postal code which does not meet the requirements for TYPE_POSTAL_CODE, but which is useful to search for, for example UK outcodes.",
            "DEPRECATED",
            "DEPRECATED This is deprecated and we want to use TYPE_COMPOUND_SECTION instead.",
            "DEPRECATED",
            "The term \"post town\" is used for a locality-like-entity that is only used for postal addresses.",
            "DEPRECATED",
            "ABSTRACT",
            "Every data source used in constructing a data repository has a corresponding feature that provides more information about that data source. The extra information is stored in the optional data_source field below.",
            "A locale feature provides region specific conventions such as preferred language and formatting details for time, date, and currency values. Locales aren't necessary defined by physical geographic features, so they are classified as meta-features.",
            "A timezone feature is used to specify the region covering an international timezone. When a point is covered by multiple timezone features, the most specific one can be used to compute the local time at this point. Most specific implies a much smaller region or the one that is closer to the center. A feature's timezone can be specified in the repeated related_timezone field.",
            "A business chain feature is used to represent a chain, e.g. Starbucks, McDonald's, etc. Other features representing specific stores/franchises of this chain may refer to one such feature via RELATION_MEMBER_OF_CHAIN. This is not strictly reserved to commercial chains but can also be used to model organizations such as the Red Cross or the United Nations.",
            "A phone number prefix feature is used to specify the region where phone numbers (typically fixed-line numbers) must begin with a certain prefix. Any phone number prefix down to any level of granularity could be represented by this type.",
            "A phone number area code is a prefix which also coincides with the area code, or national destination code, of a particular region.",
            "A Business Corridor is a dense cluster of semantically similar establishments. TYPE_BUSINESS_CORRIDOR features are distinguished from TYPE_COLLOQUIAL_AREA features because the corridors are not under the political hierarchy, are allowed to be nameless, and may not correspond to well-known real world locations. For more details, see go/geo-corridors-schema.",
            "An address template feature provides region-specific conventions for structuring addresses. These features aren't necessarily defined by physical geographic features, so they are classified as meta-features.",
            "A transit agency operates a number of lines, typically all in the same city, region or country. See also transitagency.proto",
            "A feature whose geometry is planned to replace the geometry on another feature.",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "DEPRECATED",
            "RESERVED",
            "A portal of entry or exit to another feature. Examples: - Subway station entrance. - Parking lot entrance.",
            "Cartographic features are used to capture real-world objects for which there is no current desire to model any specific attributes. These are only useful to make the map tiles look pretty.",
            "DEPRECATED",
            "Also see skitrail.proto",
            "Also see skilift.proto",
            "Also see skiboundary.proto",
            "",
            "Starting with TYPE_TARMAC, we use longer IDs, so that we can expand the number of feature types under TYPE_CARTOGRAPHIC.",
            "Use TYPE_COMPOUND_GROUND and appropriate gcids for the next two.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "Sub-types within a golf course.",
            "",
            "",
            "",
            "",
            "Use TYPE_ESTABLISHMENT_POI and gcid:golf_shop for golf shops instead.",
            "DEPRECATED",
            "DEPRECATED",
            "",
            "",
            "",
            "",
            "",
            "",
            "Subtype within a zoo - a cage or fenced-off or otherwise delineated area containing animals.",
            "A line for a cartographic detail. For example the international date line. Such features should have polyline geometry.",
            "ABSTRACT This type is being replaced by TYPE_COMPOUND_GROUNDS. For further details, see go/compounds-v2",
            "DEPRECATED This type has been replaced by TYPE_COMPOUND_BUILDING. For further details, see go/oyster-compounds",
            "DEPRECATED",
            "An establishment which has a address (a.k.a. location or storefront). Note that it *may* also have a service area (e.g. a restaurant that offers both dine-in and delivery). This type of business is also known as a \"hybrid\" Service Area Business. Establishment POIs can be referenced by TYPE_COMPOUND features using the RELATION_PRIMARILY_OCCUPIED_BY. This is the reciprocal relation of the RELATION_OCCUPIES.",
            "A business without a storefront, e.g. a plumber. It would normally not have a place that a customer could visit to receive service, but it would have an area served by the business. Also known as a \"pure\" Service Area Business. NOTE(tcain): Using value 0xD441, since we could find ourselves with a need to differentiate service areas from online-only at this level in the future, but still benefit from being able to group those under a common parent, disjoint from TYPE_ESTABLISHMENT_POI.",
            "The root of types of features that are in the sky, rather than on the earth. There will eventually be a hierarchy of types here.",
            "Features responsible for monitoring traffic on roads (usually for speed). Includes cameras at particular points as well as monitors that cover larger spans. Features of this type should have a corresponding gcid that specifies the correct subtype (e.g. gcid:road_camera or gcid:speed_camera_zone). This type was originally named as TYPE_ROAD_CAMERA.",
            "ABSTRACT",
            "Note that this type does not distinguish the nature of the statue (religious, historical, memorial, tourist, ...).",
            "Open space used for events, gathering, or as market-place.",
            "A feature used to represent a logical level, e.g. floor.",
            "ABSTRACT",
            "e.g. campus, compound, parcel.",
            "e.g. single family dwelling, office building.",
            "e.g. suite, room, hallway, cubicle.",
            "A terminal point represents a good location for a user to meet a taxi, ridesharing vehicle, or general driver.",
            "An area controlled in some way by an authoritative source, such as a government-designated COVID containment zone or an area under government sanctions. Features of this type should have one or more gcids corresponding to their specific regulation, and client handling of these features may vary based on the type of regulation.",
            "A grouping of TYPE_BORDER features (\"border segments\"), which together represent a border between two features of the same type.",
            "DEPRECATED",
            "A feature of completely unknown type. This should only be used when absolutely necessary. One example in which this type is useful is in the Chinese importer, which must heuristically segment addresses into components - it often does not know what types to make those components. Please note that the Oyster address formatter does not currently support address components of TYPE_UNKNOWN well."
          ],
          "type": "string"
        },
        "index": {
          "description": "Indicates which entity this message belongs to: encoded_mid[index].",
          "format": "int32",
          "type": "integer"
        },
        "latE7": {
          "description": "Latitude and longitude of the location. Same format as geostore.PointProto.",
          "format": "uint32",
          "type": "integer"
        },
        "lngE7": {
          "format": "uint32",
          "type": "integer"
        },
        "oysterId": {
          "$ref": "GeostoreFeatureIdProto",
          "description": "Oyster Feature ID of the location."
        },
        "singleTopicnessE2": {
          "description": "This field is populated for at most one entity. If it is populated, it indicates how confident we are to claim that the page is only about this entity (either it's an official web presence of the entity, or something like a wikipedia page about the entity). For space reasons this is represented as a fixed-point integer with two decimal points precision. Convert it to the interval [0,1] using the following formula: float single_topicness = single_topicness_e2 / 100.f",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefDocumentInfo": {
      "description": "All information that applies globally to the document. Next available tag: 11",
      "id": "RepositoryWebrefWebrefDocumentInfo",
      "properties": {
        "documentMetadata": {
          "$ref": "RepositoryWebrefDocumentMetadata",
          "description": "Information about the document copied from the docjoin. This will never be populated when WebrefEntities appears inside a CompositeDoc, but may we used when it stands alone."
        },
        "extensions": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Optional extensions (e.g. taxonomic classifications)."
        },
        "outlinkInfos": {
          "$ref": "RepositoryWebrefWebrefOutlinkInfos",
          "description": "Information about the outlinks of this document. "
        },
        "webrefParsedContentSentence": {
          "description": "The content (CONTENT section 0) as parsed by WebrefParser. Only used by //r/w/postprocessing/idf/idf-pipeline for document ngram idf computation. Populated when the annotator is run with webref_populate_parsed_content Each webref_parsed_content_sentence represents one sentence of the context where saft annotations were used to determine the sentence boundaries. See r/w/universal/processors/saft/saft-sentence-helper.h for details.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefEntities": {
      "description": "Represents a collection of entities returned by the WebRef service. Next available tag: 14.",
      "id": "RepositoryWebrefWebrefEntities",
      "properties": {
        "annotationStats": {
          "$ref": "RepositoryWebrefWebrefAnnotationStats",
          "description": "Detailed annotation statistics that can, e.g., be used to tune the WebRef scoring logic based on existing (Model-0) annotations."
        },
        "annotatorCheckpointFingerprints": {
          "description": "Fingerprints checkpointing annotator stages, can be used to track the source of diffs.",
          "items": {
            "$ref": "RepositoryWebrefAnnotatorCheckpointFprint"
          },
          "type": "array"
        },
        "category": {
          "description": "Categories of the document or query. This replaces the category_score found under EntityAnnotations.",
          "items": {
            "$ref": "RepositoryWebrefCategoryAnnotation"
          },
          "type": "array"
        },
        "dateRange": {
          "description": "Dates ranges that are most relevant to the document. E.g. on a document about Dune the 2021 movie, this might hold the release date of that movie.",
          "items": {
            "$ref": "RepositoryWebrefSemanticDateRange"
          },
          "type": "array"
        },
        "documentInfo": {
          "$ref": "RepositoryWebrefWebrefDocumentInfo",
          "description": "Information that applies globally to the document. The exclude_field option is for Goldmine AnnotationsFinder to exclude document_info from retrieving annotation entities"
        },
        "entity": {
          "description": "The annotated entities, with associated confidence scores and metadata. This is the primary output of WebRef/QRef. In case of Webref output, entities are sorted by decreasing topicality score.",
          "items": {
            "$ref": "RepositoryWebrefWebrefEntity"
          },
          "type": "array"
        },
        "rangeAnnotations": {
          "description": "These messages contain non-entity annotations of ranges in the document. This might be used to hold part-of-speech annotations, stopword annotations, and other range based information. The exclude_field option is for Goldmine AnnotationsFinder to exclude ranged_annotations from retrieving annotation entities",
          "items": {
            "$ref": "RepositoryWebrefRangeAnnotations"
          },
          "type": "array"
        },
        "status": {
          "$ref": "RepositoryWebrefWebrefStatus",
          "description": "The status message returned by the annotator. Might not be populated on success."
        },
        "stuff": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A generic container to hold extra result data."
        },
        "tripleAnnotations": {
          "$ref": "RepositoryWebrefTripleAnnotations",
          "description": "Triples inferred from the document When the annotator recognizes phrases, lists or tables associated with a property or relationship for an entity it generates triples that encode that information. This generated data is only substantiated by the document vs KG data which has been verified from multiple sources and/or human curators."
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefEntity": {
      "description": "All information about a single entity available to WebRef. Next available tag: 7",
      "id": "RepositoryWebrefWebrefEntity",
      "properties": {
        "annotatedRelationship": {
          "description": "Information about links (e.g. implications) between the annotated entities.",
          "items": {
            "$ref": "RepositoryWebrefWebrefEntityRelationship"
          },
          "type": "array"
        },
        "annotations": {
          "$ref": "RepositoryWebrefEntityAnnotations",
          "description": "All annotations of this entity on the given document."
        },
        "collections": {
          "$ref": "RepositoryWebrefWebrefEntityCollections",
          "description": "Information about the collections of this entity."
        },
        "entityJoin": {
          "$ref": "RepositoryWebrefEntityJoin",
          "description": "Metadata and raw signals used by the annotator."
        },
        "id": {
          "$ref": "RepositoryWebrefWebrefEntityId",
          "description": "An identifier (usually a MID) for the entity. Consider using GetWebrefEntityMid() in the adjacent webref-entities-util.h to read this."
        },
        "mrf": {
          "description": "MRF equivalent representations of this entity as a compound, one for each unique MRF representation. Populated for compounds. Each MRF expression contains a minimum FunctionCall structure wrapped in a nameless Argument without signals and range data. This is not meant to be directly usable as MRF, use QueryJoinToMeaningStructConverter to expand it into a usable form. References to entities are made as component_reference ArgumentValue. Each compound Mention of this entity (not all of its mentions need be compounds, some may be plain entity mentions) have one or more compound_value fields claiming these MRF expressions via their mrf_index. The compound_value has nested components, one for each unique component_reference.index in the MRF expression. The processing expectation is that each ArgumentValue which has a component_reference has its contents discarded and replaced with the MRF for the target entity and mention named by the compound_value.component. If the target is not a compound, the ArgumentValue becomes a simple mid value and the signals are taken from the entity and the mention. If the target is a compound itself, the expansion continues recursively. If the target is a compound with multiple MRFs, a cartesian product of recursive expansions may need to be produced. Along with the component_reference we also emit an example value, but this is purely for human consumption so it's easier to understand what the full compound is like. The processing expectation remains that the ArgumentValue containing a component_reference is completely discarded and rebuilt with the reference target value. If the target has more than one MRF expression, it's not specified which one will be used as an example, except that the choice is guaranteed to be deterministic from run to run.",
          "items": {
            "$ref": "KnowledgeAnswersIntentQueryArgument"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefEntityCollections": {
      "id": "RepositoryWebrefWebrefEntityCollections",
      "properties": {
        "collection": {
          "items": {
            "$ref": "RepositoryWebrefKGCollection"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefEntityId": {
      "description": "The identifier of a WebrefEntity (see webref-entities.proto). IMPORTANT: Please consider reading this proto through GetWebrefEntityMid() in webref-entities-util.h, because this proto may: a) contain both freebase_mid and concept_id (this is frequently the case to avoid breaking downstream clients), b) only contain freebase_mid or only contain concept_id (as the other one is technically redundant), c) contain neither of them or be missing entirely (potentially in future).",
      "id": "RepositoryWebrefWebrefEntityId",
      "properties": {
        "conceptId": {
          "description": "The MID in integer format. Nowadays, this field contains the equivalent representation of `freebase_mid`, i.e. what metaweb::ParseId() returns.",
          "format": "uint64",
          "type": "string"
        },
        "freebaseMid": {
          "description": "The MID in the same format that is returned by metaweb::MidToString(), e.g. \"/m/02mjmr\" or \"/g/11b6vyscgb\" or \"/t/24bjj59_jbj9f\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefEntityRelationship": {
      "description": "Information regarding links between annotated entities. Next available tag: 5",
      "id": "RepositoryWebrefWebrefEntityRelationship",
      "properties": {
        "entityIndex": {
          "description": "The index of the entry in WebrefEntities.entity that the entity carrying this field is linked to. This field must be set.",
          "format": "int32",
          "type": "integer"
        },
        "linkMetadata": {
          "$ref": "RepositoryWebrefEntityLinkMetadata",
          "description": "Information about the link."
        },
        "linkWeight": {
          "description": "The weight of the link.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefMustangAttachment": {
      "description": "*** THIS ATTACHMENT IS DEPRECATED, SEE go/udr/migrate-wma. ***. We still allow legacy use case to exist (no forced migration), but we will not accept any new usage of WMA, incl. from existing clients. UDR has the same features and can be used similarly: - To consume the topical entities (+properties, incl. hitcat, browsy, ...) go/udr/migrate-wma provides a migration with minimal changes. - To consume IQL, please consult go/udr/superroot#access and go/pianno team. The top-level proto used to store WebRef entities and IQL expressions in Mustang/TG. The proto uses packed repeated fields and variable-length integers in order to be as compact as possible. See http://b/5802389 and b/7473898 for details on other approaches that were considered and space/readability/extensibility trade-offs made. Note: It is not recommeded to read this proto directly. Clients of the attachment should use the decoder instead: repository/webref/tools/kc/indexing/webref-attachment-decoder.h Next available tag: 25",
      "id": "RepositoryWebrefWebrefMustangAttachment",
      "properties": {
        "categoryConfidenceE2": {
          "description": "The confidence of the category. In the range [0, 100].",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "categoryEncodedMid": {
          "description": "See go/category-annotations-api about the story behind various types of category annotations that are provided using the catmid token and category_encoded_mid fields below. Some of these annotation types are experimental, so please contact related-entities@ if you consider using this data. For production uses, please: 1. Add your use-case to go/hits-clients. 2. Subscribe to hits-users@ to receive general updates and info about deprecations. To convert it to the string form use metaweb::MidToString(encoded_mid) defined in metaweb/util/mid/mid.h The uint64-encoded MIDs of HitCat categories. See google3/repository/webref/hits/hitcat/category.textproto for the complete list of HitCat categories. Should have the same number of elements as the category_confidence_e2 field.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "confidenceE2": {
          "description": "The confidence scores of all entities in the encoded_mid array. For space reasons this is also represented as a fixed-point integer with two decimal precision. Convert it to confidence_score using the following formula: float confidence_score = confidence_e2 / 100.0f Should have the same number of elements as the encoded_mid field.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "encodedMid": {
          "description": "The int64-encoded MIDs of the entities in the document sorted by topicality score. To convert it to the string form use metaweb::MidToString(encoded_mid) defined in metaweb/util/mid/mid.h Should have the same number of elements as the topicality_e2 field.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "entityMetadata": {
          "description": "Per-entity metadata. Not packed (not every entity has metadata). If you'd like to add per-document metadata, see document_metadata instead.",
          "items": {
            "$ref": "RepositoryWebrefWebrefAttachmentMetadata"
          },
          "type": "array"
        },
        "iqlAttachment": {
          "$ref": "KnowledgeAnswersIntentQueryIndexingIQLAttachment",
          "description": "A sub-proto to encode IQL expressions. To be used by Pianno page-level intents and Webref Compounds."
        },
        "isAuthorIndex": {
          "description": "The indices of all the reference entities in encoded_mid that are authors of the page. Not packed as in most cases when populated, it contains 1 element.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "isPublisherIndex": {
          "description": "The indices of all the reference entities in encoded_mid that are publishers of the page (e.g. /m/cnn on \"http://www.cnn.com/foo/bar\"). Not packed as in most cases when populated, it contains 1 element.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "referencePageIndex": {
          "description": "Only populated when the document is a reference page for an entity. Contains the indices of all reference entities in the encoded_mid and topicality_e2 arrays. Not packed as in most cases when populated, it contains 1 element.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "topicalityE2": {
          "description": "The topicality scores of all entities in the encoded_mid array. For space reasons this is represented as a fixed-point integer with two decimal points precision. Convert it to topicality_score using the following formula: float topicality_score = topicality_e2 / 100.f Should have the same number of elements as the encoded_mid field.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "unboundIntentMid": {
          "description": "The uint64-encoded MID of the unbound intents generated by Pianno. An unbound intent is the annotation of an intent without slots arguments (e.g. Age) declared in Intent Catalog. See go/pianno-asteroid-belt-migration for details. We only keep the top unbound intents with the highest orbit scores. Should have the same number of elements as unbound_intent_score_e2.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "unboundIntentScoreE2": {
          "description": "The confidence of the unbound intent. represented as a fixed-point integer with two decimal precision. In the range [0, 100]. Should have the same number of elements as unbound_intent_mid.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "undermergedMembers": {
          "description": "[Experimental code. Do not use ] Entities that webref identified as being the same concept (undermerged).",
          "items": {
            "$ref": "RepositoryWebrefWebrefMustangAttachmentUndermergedMembers"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefMustangAttachmentUndermergedMembers": {
      "id": "RepositoryWebrefWebrefMustangAttachmentUndermergedMembers",
      "properties": {
        "encodedMid": {
          "description": "Experimental code, do not use.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefOutlinkInfo": {
      "description": "Information about the outlinks for one specific target URL, from a given annotated document. Next available tag: 7",
      "id": "RepositoryWebrefWebrefOutlinkInfo",
      "properties": {
        "byteLength": {
          "description": "The length in bytes of such a link (including internal spaces); e.g. if the link text is \"click here\" then the length is 10.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "byteOffset": {
          "description": "The byte offset of the start of a link with this target URL, in the content of the annotated document.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "isNofollow": {
          "description": "Whether this is a nofollow link (https://en.wikipedia.org/wiki/Nofollow). If the page has multiple links to the same url, all of them must be nofollow to set this field.",
          "type": "boolean"
        },
        "topicalityWeight": {
          "description": "The topicality_weight for each link with this target URL.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "url": {
          "description": "The target URL of the link.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefOutlinkInfos": {
      "description": "Information about the outlinks of an annotated document. Next available tag: 3",
      "id": "RepositoryWebrefWebrefOutlinkInfos",
      "properties": {
        "outlinkInfo": {
          "description": "Information about each target URL referred to in the document's outlinks. If a given URL has multiple links, they are grouped in a single WebrefLinkInfo.",
          "items": {
            "$ref": "RepositoryWebrefWebrefOutlinkInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWebrefStatus": {
      "id": "RepositoryWebrefWebrefStatus",
      "properties": {
        "dataEpoch": {
          "description": "The epoch of the Webref static data (the name-filter.data file). As of Dec 2020 in prod Goldmine (in webref_daily_full_model_static_data) this value is over from the alpha model static data, since this is where most of the parts come from. I.e. the value does not correspond to the actual model being used.",
          "type": "string"
        },
        "utilStatus": {
          "$ref": "UtilStatusProto",
          "description": "Error that occurred during the annotation. This field is only populated by QRef (i.e. under QueryJoin.status) and never by WebRef (i.e. under WebrefEntities.status) anymore, which instead reports errors (and soon also taints) through standard Goldmine mechanisms."
        },
        "version": {
          "description": "The version number of the annotator (the cl the binary was built from). Must be enabled via a command line flag. See also the Goldmine's indexing::annotations::AnnotationMeta proto.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWikipediaCategory": {
      "description": "Information about a Wikipedia category (typically at the bottom of the page).",
      "id": "RepositoryWebrefWikipediaCategory",
      "properties": {
        "categoryName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "RepositoryWebrefWikipediaGeocode": {
      "description": "Geocodes extracted from the wikijoins.",
      "id": "RepositoryWebrefWikipediaGeocode",
      "properties": {
        "location": {
          "$ref": "GeostorePointProto",
          "description": "The location as extracted from the wikijoins."
        },
        "sourceUrl": {
          "description": "The source contains the url field from the wikijoins.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamConjunction": {
      "description": "////////////////////////////////////////////////////////////////////////////// Conjunction: a single AND clause that contains multiple disjunctions.",
      "id": "ResearchScamCoscamConjunction",
      "properties": {
        "disjunctionId": {
          "description": "disjunction_id / is_positive *MUST* have the same length. They specify a set of disjunctions that make up this conjunction. The conjunction will be active iff *all* of the positive disjunctions are active and *all* of the negative disjunctions are inactive.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "isPositive": {
          "items": {
            "type": "boolean"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamDisjunction": {
      "description": "////////////////////////////////////////////////////////////////////////////// Disjunction: a single OR clause that contains multiple group:token tuples.",
      "id": "ResearchScamCoscamDisjunction",
      "properties": {
        "key": {
          "description": "key - a uint64 key that uniquely identifies this disjunction.",
          "format": "uint64",
          "type": "string"
        },
        "tokenGroups": {
          "description": "groups - the group:token tuples that make up this disjunction. The disjunction will be active if *any* off the group:token tuples are present in a request.",
          "items": {
            "$ref": "ResearchScamCoscamTokenGroup"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamEasyConjunction": {
      "description": "Each EasyConjunction represents an AND-of-ORs block.",
      "id": "ResearchScamCoscamEasyConjunction",
      "properties": {
        "disjunctions": {
          "description": "disjunctions is the set of OR clauses that",
          "items": {
            "$ref": "ResearchScamCoscamEasyDisjunction"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamEasyDisjunction": {
      "description": "Each EasyDisjunction represents one OR clause.",
      "id": "ResearchScamCoscamEasyDisjunction",
      "properties": {
        "isPositive": {
          "description": "If is_positive is set to false, then the entire disjunction is negated, and will be true only if none of its members is true.",
          "type": "boolean"
        },
        "tokenGroups": {
          "description": "token_groups - the group:token tuples that make up this disjunction. The disjunction will be active if *any* off the group:token tuples are present in a request.",
          "items": {
            "$ref": "ResearchScamCoscamTokenGroup"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamEasyRestrictDefinition": {
      "description": "Each EasyRestrictDefinition represents an OR-of-ANDs-of-ORs block.",
      "id": "ResearchScamCoscamEasyRestrictDefinition",
      "properties": {
        "conjunctions": {
          "description": "conjunctions is the set of AND-of-ORs blocks.",
          "items": {
            "$ref": "ResearchScamCoscamEasyConjunction"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamRestrictDefinition": {
      "description": "////////////////////////////////////////////////////////////////////////////// RestrictDefinition: the set of conjunctions and disjunctions that define a single OR-of-ANDs-of-ORs restrict definition.",
      "id": "ResearchScamCoscamRestrictDefinition",
      "properties": {
        "conjunctions": {
          "description": "conjunctions - each conjunction is an AND-of-ORs; if any of these conjunctions match, then the entire restrict matches.",
          "items": {
            "$ref": "ResearchScamCoscamConjunction"
          },
          "type": "array"
        },
        "disjunctions": {
          "description": "disjunctions - each disjunction is an OR clause.",
          "items": {
            "$ref": "ResearchScamCoscamDisjunction"
          },
          "type": "array"
        },
        "subsKey": {
          "description": "subs_key - ignore. Only used for testing.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamRestrictTokensV2": {
      "description": "////////////////////////////////////////////////////////////////////////////// RestrictTokensV2: a set of group:token tuples, collated by group.",
      "id": "ResearchScamCoscamRestrictTokensV2",
      "properties": {
        "tokenGroups": {
          "description": "token_groups - group:token tuples, collated by group.",
          "items": {
            "$ref": "ResearchScamCoscamTokenGroup"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamCoscamTokenGroup": {
      "id": "ResearchScamCoscamTokenGroup",
      "properties": {
        "debugTokenStrings": {
          "description": "debug_token_strings - (optional) strings that should be used for human-friendly printing. NOT used by the matching engine!",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "description": "name - the name of the token group.",
          "type": "string"
        },
        "tokens": {
          "description": "tokens - a list of tokens, stored by their Fingerprint2011 hash.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamGenericFeatureVector": {
      "description": "===================================================================== # GenericFeatureVector Last tag used: 23",
      "id": "ResearchScamGenericFeatureVector",
      "properties": {
        "classLabel": {
          "description": "The class label of this datapoint. This should be populated if ScaM is being used for nearest-neighbor-based classification.",
          "type": "string"
        },
        "crowding": {
          "$ref": "ResearchScamGenericFeatureVectorCrowding"
        },
        "dataIdStr": {
          "description": "Optional point id that can contain an arbitrary (unrestricted in content) value except when the data is provided via SSTable (sharded or not). In the case of SSTable the data_id_str must be set for _all_ points in all shards or the SSTable keys will be used as the values for the data_id_str of the respective points. In either SSTable case--data_id_str provided explicitly or via the key--the values must be unique across all shards.",
          "format": "byte",
          "type": "string"
        },
        "expirationTimestamp": {
          "description": "A timestamp after which this datapoint is considered no longer valid and is eligible for deletion. The exact meaning varies with application/configuration.",
          "format": "google-datetime",
          "type": "string"
        },
        "featureDim": {
          "description": "DEPRECATED: - this field can safely be left unspecified. For dense vectors, dimensionality is inferred from the number of values specified, and must be identical to this, or unspecified. For sparse vectors, the default value is correct for most users, and allows use of 64-bit hash values for feature indices.",
          "format": "uint64",
          "type": "string"
        },
        "featureIndex": {
          "description": " - for SPARSE vectors, specifies indices of the nonzero dimensions whose values are specified by the , , or field. This field is not used when specifying dense vectors.",
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "featureType": {
          "description": "Describes the type of feature values.",
          "enum": [
            "UNKNOWN",
            "INT64",
            "FLOAT",
            "DOUBLE",
            "STRING",
            "BINARY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "featureValueDouble": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "featureValueFloat": {
          "description": "Actual feature vector. Only one of the following should be populated. This list has to be kept in sync with FeatureType enum. NOTES: Binary features are stored as ones or zeroes in feature_value_int64. Floating point values (feature_value_float, feature_value_double) may not be NaN.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "featureValueInt64": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "featureValueString": {
          "format": "byte",
          "type": "string"
        },
        "fixedPointMetadata": {
          "$ref": "ResearchScamGenericFeatureVectorFixedPointMetadata"
        },
        "internalOnlyIsSecondaryPartition": {
          "description": "copybara:strip_begin INTERNAL USE ONLY! The ScaM Team reserves the right to remove this field and reuse its proto tag without notice. DO NOT USE outside of build_shards_pipeline! This field is used inside build_shards_pipeline to indicate whether this GFV is residing in its secondary (vs. primary) partition. copybara:strip_end",
          "type": "boolean"
        },
        "normType": {
          "description": "Describes if data has been normalized and the type.",
          "enum": [
            "NONE",
            "UNITL2NORM",
            "STDGAUSSNORM",
            "UNITL1NORM"
          ],
          "enumDescriptions": [
            "",
            "",
            "mean=0, population std. dev. = 1",
            ""
          ],
          "type": "string"
        },
        "queryMetadata": {
          "$ref": "ResearchScamQueryMetadata",
          "description": "copybara:strip_begin A field that contains metadata information when the datapoint is acting as a query."
        },
        "restrictTokens": {
          "$ref": "ResearchScamGenericFeatureVectorRestrictTokens"
        },
        "tokens": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "userinfo": {
          "description": "This field allows application-specific metadata to be stored in a GFV. This information may be used by custom binaries or in pre- or postprocessing outside of ScaM. Use cases include but are not limited to: * Dataset IDs, if multiple datasets are multiplexed into one physical file or network location. * An alternative, possibly more human-readable representation of the data represented by this GFV, for e.g. debugging purposes. * Outputting the contents of this field verbatim to the metadata field of the NearestNeighbors.Neighbor proto.",
          "format": "byte",
          "type": "string"
        },
        "weight": {
          "description": "DEPRECATED fields. Ignored by ScaM binaries. Do not use.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ResearchScamGenericFeatureVectorCrowding": {
      "description": "This subproto contains configuration for crowding. Crowding is a constraint on a neighbor list produced by nearest neighbor search requiring that no more than some value k' of the k neighbors returned have the same value of crowding_attribute.",
      "id": "ResearchScamGenericFeatureVectorCrowding",
      "properties": {
        "crowdingAttribute": {
          "description": "The value of the crowding attribute for this document. The maximum number of neighbors to return per crowding attribute value (per_crowding_attribute_num_neighbors) is configured per-query. This field is ignored if per_crowding_attribute_num_neighbors is larger than the total number of neighbors to return for a given query.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScamGenericFeatureVectorFixedPointMetadata": {
      "description": "Metadata that may be populated if this GFV was transformed into fixed-point from a floating-point GFV.",
      "id": "ResearchScamGenericFeatureVectorFixedPointMetadata",
      "properties": {
        "squaredL2Norm": {
          "description": "The squared L2 norm of the original (pre-fixed-point transformation) GFV. Used for computing squared L2 distance.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ResearchScamGenericFeatureVectorRestrictTokens": {
      "description": "RestrictTokens - used to perform \"restricted searches\" where boolean rules are used to filter the subset of the database eligible for matching. We currently support V1 and V3 restrict systems. V3 restrict is a superset of V1 restrict. New users are encouraged to use V3 directly for its rich features and cleaner semantics. See the document go/scam-v3-restricts, or read the comments in //research/scam/proto/restricts.proto for details. Nevertheless, V1 restrict is still supported by ScaM team. There's some minor tradeoff of performance between V1 and V3. User may prefer V1 over V3 if performance is the first priority. However, the CPU cost between V1 and V3 should be very minor. --------------------------------------------------------------------------- The semantics of V1 restrict is described below: V1 \"forward\" restricts: The dataset defines a many:many mapping between the database points and a token space. Each token names a set of tokens and each database point is a member of zero-to-many tokens. Queries specify zero-to-many whitelist and blacklist tokens that activate database points according to the following rules: * If whitelist_token is populated, the search will be restricted to points named by at least one whitelist token. If whitelist_token is empty, all points are whitelisted by default. * If blacklist_token is populated, it overrides the whitelist. Points named by a blacklisted token are *not* searched. * Note that, if neither whitelist_token nor blacklist_token is populated, the search remains unrestricted. --------------------------------------------------------------------------- V1 \"reverse\" restricts: Each database point is whitelisted and/or blacklisted for zero or more tokens, specified by whitelist_token and blacklist_token fields. Each query specifies zero or more tokens, and the same rules apply: * If a point's whitelist_token is populated, the point will only be searched if the query has at least one matching whitelist token. If whitelist_token is empty, the point is always whitelisted by default. * If a point's blacklist_token is populated, it overrides the whitelist. The point will be ignored for any query with a matching blacklist token. * Note that, if neither whitelist_token nor blacklist_token is populated, the point will always be searched. NEXT ID TO USE: 9",
      "id": "ResearchScamGenericFeatureVectorRestrictTokens",
      "properties": {
        "blacklistToken": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "definition": {
          "$ref": "ResearchScamCoscamRestrictDefinition",
          "description": "DEPRECATED"
        },
        "easyDefinition": {
          "$ref": "ResearchScamCoscamEasyRestrictDefinition",
          "description": "DEPRECATED"
        },
        "tokenMembership": {
          "description": "B) Token Definitions (V1 Restricts) In \"forward\" mode: defined on database points In \"reverse\" mode: defined on queries",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "tokens": {
          "$ref": "ResearchScamCoscamRestrictTokensV2",
          "description": "DEPRECATED"
        },
        "v3": {
          "$ref": "ResearchScamV3Restrict",
          "description": "Only ONE of the following sections should be used: A) V3 restricts. Defined in //research/scam/proto/restricts.proto"
        },
        "v3CompatibleNamespace": {
          "description": "If this field is not empty, when query is in V1 restricts while database is in V3 restricts, SCaM will update V1 query to V3 automatically instead of sending error messages. When updating query from V1 to V3, SCaM server will use this field to fillin the 'namespace' field.",
          "type": "string"
        },
        "whitelistToken": {
          "description": "C) Whitelist / Blacklist Definitions (V1 Restricts) In \"forward\" mode: defined on queries In \"reverse\" mode: defined on database points",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamNearestNeighbors": {
      "description": "All nearest neighbors for one data point. Last tag used: 5",
      "id": "ResearchScamNearestNeighbors",
      "properties": {
        "docid": {
          "description": "Data point for which we computed nearest neighbors. This field is set based on the data_id_str field in the QueryRequest GFV (or SSTable key if data_id_str is not present), and thus can be arbitrary data, e.g. docid, URL, query string.",
          "format": "byte",
          "type": "string"
        },
        "metadata": {
          "description": "Metadata about the query. This field is populated if and only if: 1) ScaM is running in offline query-database or online mode and; 2) The metadata is directly fetched from the userinfo field inside GFV and; 3) MetadataConfig.userinfo.set_user_info_for_query is set to true. The field name is kept as \"metadata\" for consistency with neighbors.",
          "format": "byte",
          "type": "string"
        },
        "neighbor": {
          "description": "All its neighbors.",
          "items": {
            "$ref": "ResearchScamNearestNeighborsNeighbor"
          },
          "type": "array"
        },
        "neighborSelectionOverride": {
          "$ref": "ResearchScamNeighborSelectionOverride",
          "description": "Propagate neighbor selection override information during offline search."
        },
        "query": {
          "$ref": "ResearchScamGenericFeatureVector",
          "description": "The query vector for which we computed nearest neighbors."
        },
        "retrievedVersion": {
          "description": "The version ID of the server that responded to this query, if one was specified. This field is not populated for offline (i.e. Flume rather than RPC) search.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScamNearestNeighborsNeighbor": {
      "id": "ResearchScamNearestNeighborsNeighbor",
      "properties": {
        "crowdingAttribute": {
          "description": "If crowding is enabled, the crowding attribute of this neighbor will be stored here.",
          "format": "int64",
          "type": "string"
        },
        "distance": {
          "description": "This could be exact or approximate distance.",
          "format": "double",
          "type": "number"
        },
        "docid": {
          "description": "Neighbor data point. This field is set based on the data_id_str field in the GFV of the data point in the database (or SSTable key if data_id_str is not present), and thus can be arbitrary data, e.g. docid, URL, query string.",
          "format": "byte",
          "type": "string"
        },
        "metadata": {
          "description": "Metadata about the neighbor. This is returned under some configurations as a serialized proto. The specific proto depends on which metadata is configured to be returned.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScamNeighborSelectionOverride": {
      "description": "Last used tag = 8",
      "id": "ResearchScamNeighborSelectionOverride",
      "properties": {
        "approxEpsilonDistance": {
          "description": "The distance threshold to use for approximate search before exact reordering is performed, if exact reordering is performed. If this is not set and exact reordering is enabled, a reasonable default value will be chosen using a heuristic specified in ScamConfig.ExactReordering.NeighborSelectionOverrideHeuristics. This field is ignored if exact reordering is not enabled. This value must be non-NaN if set.",
          "format": "float",
          "type": "number"
        },
        "approxNumNeighbors": {
          "description": "The number of neighbors to find via approximate search before exact reordering is performed. If this is not set and exact reordering is enabled, a reasonable default value will be chosen using the heuristic specified in ScamConfig.ExactReordering.NeighborSelectionOverrideHeuristics. This field is ignored if exact reordering is not enabled. This value must be > 0 if set.",
          "format": "int32",
          "type": "integer"
        },
        "epsilonDistance": {
          "description": "The maximum distance at which to return a neighbor. If this proto is used, at least one of this and num_neighbors must be set. The default is infinity, effectively returning num_neighbors neighbors regardless of distance. This value must be non-NaN if set.",
          "format": "float",
          "type": "number"
        },
        "numNeighbors": {
          "description": "The maximum number of neighbors to return. If this proto is used, at least one of this and epsilon_distance must be set. The default is the largest value representable as an int32, effectively returning all neighbors within epsilon_distance. This value must be > 0 if set.",
          "format": "int32",
          "type": "integer"
        },
        "numSingleShardNeighbors": {
          "description": "If populated, this is the maximum number of neighbors that may be returned from a single shard. If not populated, up to num_neighbors neighbors are returned from each shard. Setting this to a smaller value than num_neighbors will increase speed at the expense of accuray by requiring cross-shard merging of fewer neighbors. If this value is set, num_neighbors must also be set and this value must be <= num_neighbors and >= num_neighbors / number of shards. If set, this value must always be > 0. ",
          "format": "int32",
          "type": "integer"
        },
        "perCrowdingAttributeNumNeighbors": {
          "description": "The maximum number of neighbors to return for a single value of the crowding attribute. The crowding attribute is specified per-datapoint in the GenericFeatureVector proto, or the Document proto for sparse logistic models. Crowding is described more thoroughly in research/scam/utils/crowding_top_n.h. NOTES: Crowding is effectivley enabled if this value is less than num_neighbors.",
          "format": "int32",
          "type": "integer"
        },
        "perCrowdingAttributePreReorderingNumNeighbors": {
          "description": "The maximum number of neighbors to return from the approximate portion of the nearest-neighbor search algorithm, within each shard, for a single value of the crowding attribute, before performing exact reordering. Ignored if exact reordering is disabled for this dataset.",
          "format": "int32",
          "type": "integer"
        },
        "treeXHybridLeavesSearchedOverride": {
          "description": "Note: currently not implemented for all database shard subclasses! Contact ScaM before using. Overrides max_spill_centers for tree-X hybrid searchers configured with FIXED_NUMBER_OF_CENTERS spilling. The max_spill_centers in the ScaM config is used if this field isn't set. Only valid if: * Used on a tree-X hybrid ScaM config with FIXED_NUMBER_OF_CENTERS. * Value is greater than zero and at most equal to num_children.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ResearchScamOnlineSearchLatencyStats": {
      "description": "Structure to hold the response time for a node. Last used: 3",
      "id": "ResearchScamOnlineSearchLatencyStats",
      "properties": {
        "cpuTime": {
          "description": "An estimate of the CPU time used for this query on the machine associated with task_id, from when the query was received to when the response was ready to send, in seconds. Caveats: 1. Does not account for CPU time spent serializing, deserializing, compressing or decompressing protos within Stubby. 2. Does not account for cleanup time after response has been sent.",
          "format": "double",
          "type": "number"
        },
        "taskId": {
          "description": "Task number associated with response time measurements.",
          "format": "int32",
          "type": "integer"
        },
        "wallTime": {
          "description": "Wall time taken on the machine associated with task_id from when the query was received to when the response was ready to send, in seconds. This time excludes the time spent sending the response and the time to perform cleanup operations after the response is sent.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ResearchScamQueryMetadata": {
      "description": "Metadata to encode query-specific information. This may include NeighborSelectionOverride, pre-computed query tokenization, etc..",
      "id": "ResearchScamQueryMetadata",
      "properties": {
        "neighborSelectionOverride": {
          "$ref": "ResearchScamNeighborSelectionOverride"
        }
      },
      "type": "object"
    },
    "ResearchScamQueryResponse": {
      "description": "Response to a query. The main result is the nearest neighbor list, but we also optionally include debugging information if the appropriate field is set in the request. Last used: 8",
      "id": "ResearchScamQueryResponse",
      "properties": {
        "latency": {
          "description": "Debugging fields: The wall and CPU time used by each query on each machine. For successful queries, there will be one entry here for each machine that the query used if QueryRequest.enable_latency_stats was enabled. For unsuccessful queries, the contents of this field will be undefined. NOTE: The following accounting rules apply in batched mode, assuming there are ",
          "items": {
            "$ref": "ResearchScamOnlineSearchLatencyStats"
          },
          "type": "array"
        },
        "numDeadlineExceededMachines": {
          "description": "The number of non-root machines for which a DEADLINE_EXCEEDED error occurred when they were contacted. This value does NOT include machines for which no reply was received because their parent machine timed out. Therefore, num_total_machines may be larger than num_ok_machines + num_unreachable_machines + num_deadline_exceeded_machines.",
          "format": "uint32",
          "type": "integer"
        },
        "numOkMachines": {
          "description": "Number of machines that contributed to the results; this might be less than the total number of machines if a machine has failed. The impact of a single machine failure could be larger than just one machine, if it happens to be one of the machines involved in distributing the query and collecting results.",
          "format": "uint32",
          "type": "integer"
        },
        "numTotalMachines": {
          "description": "The number of machines used in this service for the dataset that was queried. If everything went right, this should be equal to num_ok_machines. If num_ok_machines < num_total_machines, some neighbors may be missing from results.",
          "format": "uint32",
          "type": "integer"
        },
        "numUnreachableMachines": {
          "description": "The number of non-root machines for which an UNREACHABLE error occurred when they were contacted. This value does NOT include machines that were implicitly unreachable because their parent machine was not reachable. Therefore, num_total_machines may be larger than num_ok_machines + num_unreachable_machines + num_deadline_exceeded_machines.",
          "format": "uint32",
          "type": "integer"
        },
        "restrictStats": {
          "description": "The number of \"active\" datapoints for each dataset, i.e. points that are whitelisted by restricts and could be returned if they were close enough to the query. For successful queries, there will be one entry here for each dataset queried, if QueryRequest.enable_restrict_stats was true. For partially-successful successful queries, this field will contain results",
          "items": {
            "$ref": "ResearchScamRestrictStats"
          },
          "type": "array"
        },
        "results": {
          "description": "The results for each dataset searched. If per_dataset_parameters was empty in QueryRequest then this will have one entry, the results for dataset 0. If per_dataset_parameters was not empty in QueryRequest, this will contain the results for each dataset queried, in order corresponding to the order of QueryRequest.per_dataset_parameters.",
          "items": {
            "$ref": "ResearchScamNearestNeighbors"
          },
          "type": "array"
        },
        "status": {
          "$ref": "UtilStatusProto",
          "description": "USEFUL ONLY IN CUSTOM BINARIES. In the stock ScaM server binary, all errors are relayed via the RPC's status. Thus, if RPC's status is ok, this field is guaranteed to be ok and if RPC's status is an error, no QueryResponse will be returned. The status of this query. This is useful when using a batched postprocessing lambda, which may ignore erroneous subqueries, continue postprocessing the valid ones and return OkStatus. In this case, this field will inform the client of any invalid subqueries."
        }
      },
      "type": "object"
    },
    "ResearchScamRestrictStats": {
      "description": "Structure to hold the number of active and total datapoints for a given dataset, as defined below. Last used: 2",
      "id": "ResearchScamRestrictStats",
      "properties": {
        "numActiveDatapoints": {
          "description": "The number of datapoints that are whitelisted by restricts specified for this query, across all shards for which the query executed successfully. In other words, this represents the number of datapoints that could potentially be returned if they were close enough to the query according to the selected distance measure. If restricts are disabled, this will be equal to num_total_datapoints.",
          "format": "uint64",
          "type": "string"
        },
        "numTotalDatapoints": {
          "description": "The number of total datapoints in all shards of this dataset for which the query executed successfully. This is returned for convenience so that a ratio can be easily computed, and so that num_active_datapoints can be put in perspective for partially successful queries, i.e. queries where only some shards were successful.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScamTokenNamespace": {
      "id": "ResearchScamTokenNamespace",
      "properties": {
        "namespace": {
          "description": "//////////////////////////////////////////////////////////////////////////// NAMESPACE - the string name of the namespace that this proto is specifying, such as \"color\", \"shape\", \"geo\", or \"tags\". Recall that your overall query is an AND across namespaces.",
          "type": "string"
        },
        "stringBlacklistTokens": {
          "description": "//////////////////////////////////////////////////////////////////////////// BLACKLIST - Blacklisting can be used to implement more complex scenarios. The blacklist fields have exactly the same format as the token fields, but represents a negation. When a token is blacklisted, then matches will be excluded whenever the other datapoint has that token. For example, if a query specifies {color: red, blue, !purple}, then that query will match datapoints that are red or blue, but if those points are also purple, then they will be excluded even if they are red/blue. Note that, due to symmetry, if one of the database points is {red, !blue}, that point will be excluded from queries that specify blue. Lastly, note that namespaces with *only* blacklist tokens behave similar to empty namespaces, in that {color: !purple} would match blue or red datapoints, as long as those datapoints don't also have the purple token.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "stringTokens": {
          "description": "//////////////////////////////////////////////////////////////////////////// TOKENS - Conceptually, each token names a set datapoints. The field(s) below are for declaring the tokens that name the datapoint that this TokenNamespace proto is attached to. For convenience, we support either string or uint64 tokens. Internally, the restricts system is based on uint64s, but for many applications, strings are the more natural format, and they should be preferred whenever this is the case. * When only uint64s are specified, they will be used as-is. * When only strings are specified, they will be converted to uint64s via Fingerprint2011. (See \"Note on the safety of Fingerprint2011\"). * ADVANCED: When both fields are specified, the uint64s are used as-is. Note that, when both fields are used, they *must* have the same number of entries, and the system will assume that your strings correspond 1:1 with the list of uint64 tokens. * EDGE CASE: All matching is done in the uint64 space, so, I'm not sure why you'd do this, but if, eg, your database uses strings, and your queries specify the Fingerprint2011 hashes of those strings, matching will work, and this is a specified behavior. Note on the safety of Fingerprint2011: Unless you have well over 1M+ unique string tokens, you can safely assume that every string will map to a unique 64-bit token. Internally, both Mustang and PSI use Fingerprint2011 to hash arbitrary strings into uint64 tokens, and assume, without validation, that each 64-bit token is unique. And the math backs up this assumption: If we are using a \"perfect\" hashing function (and Fingerprint2011 is close-enough for our purposes), and we then hash 1M unique tokens into a 64-bit space, there's still better than 99.9999% odds that all tokens are collision-free, nearly as good as the odds for the datacenter's continued existence. Scenarios for having both the string and uint64 token forms: * Probably none that matter to you. Just use the strings directly. * You could have uint64 enum values, yet want to include the string values for debugging purposes. Note that it *is* supported to use a proprietary string => uint64 mapping, assuming that it is consistent, and that you always specify the uint64 values. * The mixer-tier in a multi-shard deployment might convert the strings into uint64s to avoid redundant hashing overhead on the leaves, yet keep the string tokens to preserve proto-level debugging. * When strings are present, I reserve the right to use them for making logging \"better\", but, thusfar, there are 0 examples of this.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "uint64BlacklistTokens": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        },
        "uint64Tokens": {
          "items": {
            "format": "uint64",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScamV3Restrict": {
      "id": "ResearchScamV3Restrict",
      "properties": {
        "namespaces": {
          "description": "//////////////////////////////////////////////////////////////////////////// NAMESPACES - a repeating field, where each entry specifies the set of tokens, within a single namespace, that apply to the query, or database point, on which this V3Restrict proto is defined. Note that: * Your overall query is an AND across namespaces. * Explicitly specifying a namespace with 0 tokens is identical to omitting that namespace. ie, \"{ns:}\" == \"\". * It is an error to specify the same namespace more than once per instance of the V3Restrict proto.",
          "items": {
            "$ref": "ResearchScamTokenNamespace"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchCatalog": {
      "description": "Information on the catalog that this dataset comes from. Next ID: 5",
      "id": "ResearchScienceSearchCatalog",
      "properties": {
        "description": {
          "description": "catalog description",
          "type": "string"
        },
        "mid": {
          "description": "catalog mid",
          "type": "string"
        },
        "name": {
          "description": "catalog name",
          "type": "string"
        },
        "url": {
          "description": "catalog url",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchCitation": {
      "description": "Reference to the citation in Google scholar.",
      "id": "ResearchScienceSearchCitation",
      "properties": {
        "citation": {
          "type": "string"
        },
        "safeHtmlCitation": {
          "$ref": "WebutilHtmlTypesSafeHtmlProto",
          "description": "The citation after HTML sanitation. Used only by the front-end."
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchDataDownload": {
      "description": "The dataset in downloadable form. There can be multiple data download entries for different file types. Next ID: 6",
      "id": "ResearchScienceSearchDataDownload",
      "properties": {
        "contentSize": {
          "description": "Size of the download, as a string from the provider. May include units.",
          "type": "string"
        },
        "downloadUrl": {
          "description": "URL for downloading the data",
          "type": "string"
        },
        "fileFormat": {
          "description": "File format at the link (ASCII, CSV, etc.)",
          "type": "string"
        },
        "fileFormatClass": {
          "description": "Pragmatic classification of file formats - for filtering purposes",
          "enum": [
            "CLASS_UNDEFINED",
            "CLASS_TABULAR",
            "CLASS_DOCUMENT",
            "CLASS_STRUCTURED",
            "CLASS_IMAGE",
            "CLASS_TEXT",
            "CLASS_ARCHIVE",
            "CLASS_PRESENTATION",
            "CLASS_VIDEO",
            "CLASS_AUDIO",
            "CLASS_GEOSPATIAL",
            "CLASS_MEDICAL_IMAGING",
            "CLASS_COMPBIO",
            "CLASS_OTHER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Special class for file formats not fitting into any other class"
          ],
          "type": "string"
        },
        "parsedContentSize": {
          "$ref": "ResearchScienceSearchDataSize",
          "description": "Parsed content size"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchDataSize": {
      "description": "Data size information, consists of a numeric value and a unit. Next ID: 3",
      "id": "ResearchScienceSearchDataSize",
      "properties": {
        "size": {
          "description": "Data size value, in the provided size unit",
          "format": "double",
          "type": "number"
        },
        "unit": {
          "description": "The data size unit",
          "enum": [
            "UNIT_UNSPECIFIED",
            "BYTE",
            "KB",
            "MB",
            "GB",
            "TB",
            "PB",
            "EB",
            "KIB",
            "MIB",
            "GIB",
            "TIB",
            "PIB",
            "EIB"
          ],
          "enumDescriptions": [
            "",
            "",
            "Decimal: Enum value is 10 followed by its power",
            "",
            "",
            "",
            "",
            "",
            "Binary: Enum value is 2 followed by its power",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchDate": {
      "description": "Representation of fields that contain dates. The formattes version, if present, contains ISO 8601 formatted date or range. Otherwise, it is an unformatted string. Next ID: 3",
      "id": "ResearchScienceSearchDate",
      "properties": {
        "formatted": {
          "type": "string"
        },
        "unformatted": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchFieldOfStudyInfo": {
      "description": "Stores the classification info of each field of study label.",
      "id": "ResearchScienceSearchFieldOfStudyInfo",
      "properties": {
        "classificationSource": {
          "description": "The classification source that determines the field of study label.",
          "enum": [
            "UNKNOWN",
            "INFERENCE",
            "KNOWLEDGE_GRAPH"
          ],
          "enumDescriptions": [
            "",
            "The classification result is determined by model inference.",
            "The classification result is determined by knowledge graph mids."
          ],
          "type": "string"
        },
        "isAboveThreshold": {
          "description": "If set to true, it means that the probability is at least the threshold value specified from the corresponding saved model config. Thresholds for different fields may be different.",
          "enum": [
            "BOOLEAN_WITH_UNDEFINED_UNDEFINED",
            "BOOLEAN_WITH_UNDEFINED_TRUE",
            "BOOLEAN_WITH_UNDEFINED_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "label": {
          "description": "A label that represents the field of study.",
          "enum": [
            "UNKNOWN_FIELD_OF_STUDY_LABEL",
            "HUMANITIES",
            "SOCIAL_AND_BEHAVIOURAL_SCIENCE",
            "BIOLOGY",
            "MEDICINE",
            "AGRICULTURE_FORESTRY_HORTICULTURE_AND_VETERINARY_MEDICINE",
            "CHEMISTRY",
            "PHYSICS",
            "MATHEMATICS",
            "GEOSCIENCES_AND_GEOGRAPHY",
            "MECHANICAL_AND_INDUSTRIAL_ENGINEERING",
            "THERMAL_ENGINEERING_AND_PROCESS_ENGINEERING",
            "MATERIALS_SCIENCE_AND_ENGINEERING",
            "COMPUTER_SCIENCE_ELECTRICAL_AND_SYSTEM_ENGINEERING",
            "CONSTRUCTION_ENGINEERING_AND_ARCHITECTURE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "probability": {
          "description": "A score between [0, 1] outputted from the classifier indicating the probability for being a YES instance.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchLicense": {
      "description": "Distribution license information. Next ID: 6",
      "id": "ResearchScienceSearchLicense",
      "properties": {
        "id": {
          "description": "A fingerprint id generated based on the license_class, URL or text. Since the knowledge graph requires a unique string id for the license but any filed of license can be empty, a fingerprint id can serve as a compact identifier representing the non-empty sub-fields.",
          "type": "string"
        },
        "licenseClass": {
          "description": "A value from a controlled vocabulary that uniquely identifies a license. Unless this is set to LICENSE_CLASS_UNDEFINED_NO_MATCH or LICENSE_CLASS_UNDEFINED_CONTRADICTING_MATCHES other fields in this message should be empty.",
          "enum": [
            "LICENSE_CLASS_UNDEFINED_NO_MATCH",
            "LICENSE_CLASS_UNDEFINED_CONTRADICTING_MATCHES",
            "LICENSE_CLASS_CC0_V_1_0",
            "LICENSE_CLASS_PDDL_V_1_0",
            "LICENSE_CLASS_CC_BY_V_1_0",
            "LICENSE_CLASS_CC_BY_V_2_0",
            "LICENSE_CLASS_CC_BY_V_2_5",
            "LICENSE_CLASS_CC_BY_V_3_0",
            "LICENSE_CLASS_CC_BY_V_4_0",
            "LICENSE_CLASS_CC_BY_SA_V_1_0",
            "LICENSE_CLASS_CC_BY_SA_V_2_0",
            "LICENSE_CLASS_CC_BY_SA_V_2_5",
            "LICENSE_CLASS_CC_BY_SA_V_3_0",
            "LICENSE_CLASS_CC_BY_SA_V_4_0",
            "LICENSE_CLASS_CC_BY_NC_V_1_0",
            "LICENSE_CLASS_CC_BY_NC_V_2_0",
            "LICENSE_CLASS_CC_BY_NC_V_2_5",
            "LICENSE_CLASS_CC_BY_NC_V_3_0",
            "LICENSE_CLASS_CC_BY_NC_V_4_0",
            "LICENSE_CLASS_CC_BY_NC_SA_V_1_0",
            "LICENSE_CLASS_CC_BY_NC_SA_V_2_0",
            "LICENSE_CLASS_CC_BY_NC_SA_V_2_5",
            "LICENSE_CLASS_CC_BY_NC_SA_V_3_0",
            "LICENSE_CLASS_CC_BY_NC_SA_V_4_0",
            "LICENSE_CLASS_CC_BY_ND_V_1_0",
            "LICENSE_CLASS_CC_BY_ND_V_2_0",
            "LICENSE_CLASS_CC_BY_ND_V_2_5",
            "LICENSE_CLASS_CC_BY_ND_V_3_0",
            "LICENSE_CLASS_CC_BY_ND_V_4_0",
            "LICENSE_CLASS_CC_BY_ND_NC_V_1_0",
            "LICENSE_CLASS_CC_BY_NC_ND_V_2_0",
            "LICENSE_CLASS_CC_BY_NC_ND_V_2_5",
            "LICENSE_CLASS_CC_BY_NC_ND_V_3_0",
            "LICENSE_CLASS_CC_BY_NC_ND_V_4_0",
            "LICENSE_CLASS_CC_PDM_V_1_0",
            "LICENSE_CLASS_OPEN_GOVERNMENT_LICENSE_V_1_0",
            "LICENSE_CLASS_OPEN_GOVERNMENT_LICENSE_V_2_0",
            "LICENSE_CLASS_OPEN_GOVERNMENT_LICENSE_V_3_0",
            "LICENSE_CLASS_OPEN_GOVERNMENT_LICENSE_CANADA_V_2_0",
            "LICENSE_CLASS_DL_DE_BY_V_1_0",
            "LICENSE_CLASS_DL_DE_BY_V_2_0",
            "LICENSE_CLASS_DL_DE_ZERO_V_2_0",
            "LICENSE_CLASS_LO_OL_V_1_0",
            "LICENSE_CLASS_LO_OL_V_2_0",
            "LICENSE_CLASS_US_PD_V_1_0",
            "LICENSE_CLASS_OCL_V_1_0",
            "LICENSE_CLASS_ODC_PDDL_V_1_0",
            "LICENSE_CLASS_ODC_BY_V_1_0",
            "LICENSE_CLASS_ODC_ODBL_V_1_0",
            "LICENSE_CLASS_MIT_V_1_0",
            "LICENSE_CLASS_APACHE_V_2_0"
          ],
          "enumDescriptions": [
            "Special value for when the metadata provided does not match any license class",
            "Special value for when the metadata provided matches more than one license class",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Version 1.0 has \"nd\" before \"nc\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "V1.0 doesn't exist",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "licenseMid": {
          "description": "mid for the license.",
          "type": "string"
        },
        "text": {
          "description": "The text (usually, the name) of the distribution license.",
          "type": "string"
        },
        "url": {
          "description": "The url for the distribution license.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchLocation": {
      "description": "Describes the spatial information about a value in spatial-coverage definition of a dataset. Next ID: 9",
      "id": "ResearchScienceSearchLocation",
      "properties": {
        "boxCoordinates": {
          "description": "Coordinates of the corners of the polygon in the form \"lat1 long1 lat2 long2\"",
          "type": "string"
        },
        "circleCoordinates": {
          "description": "Coordinates for the circle area defined by its center and radius: \"lat long, radius\"",
          "type": "string"
        },
        "containedInMid": {
          "description": "mids for locations that contain loctions in .",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "locationMid": {
          "description": "mids for locations covering the dataset, contained in the . A region may contain multiple locations that are identified by mids.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "locationMidLabel": {
          "description": "Labels (in the preferred language of the dataset) for the mids in .",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "locationName": {
          "description": "The original name for the area covered by the dataset.",
          "type": "string"
        },
        "locationSource": {
          "enum": [
            "UNKNOWN",
            "METADATA",
            "WEBREF"
          ],
          "enumDescriptions": [
            "",
            "When the locationthe is specified in the raw metadata",
            "When the locationthe is not specified in the raw metadata"
          ],
          "type": "string"
        },
        "pointCoordinates": {
          "description": "Latitude and longitude for a single point in the form of \"lat,long\".",
          "type": "string"
        },
        "unformattedCoordinates": {
          "description": "Unformatted coordinates describing the region.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchNavboostQueryInfo": {
      "description": "The information representing one navboost query for the dataset source_url.",
      "id": "ResearchScienceSearchNavboostQueryInfo",
      "properties": {
        "impCount": {
          "description": "imp_count stores an estimate of the number of impressions for this tuple.",
          "format": "float",
          "type": "number"
        },
        "lccCount": {
          "description": "lcc_count stores an estimate of the number of long clicks for this tuple. NOTE: It is similar to query_doc_count, but calculated in different manner.",
          "format": "float",
          "type": "number"
        },
        "query": {
          "description": "The query string.",
          "type": "string"
        },
        "queryCount": {
          "description": "The query_count stores the counts on this query.",
          "format": "float",
          "type": "number"
        },
        "queryDocCount": {
          "description": "The query_doc_count stores the number of long-clicks on this pair.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchOrganization": {
      "description": "Organization, such as the source of a dataset or a funder NOTE: source_organization_mid and source_organization_mid_label should always have the same length: the mid and label correspond to each other. We don't use a map for consistency with Location and if we switch to map, we should switch to it in both. Next ID: 6",
      "id": "ResearchScienceSearchOrganization",
      "properties": {
        "organizationMid": {
          "description": "KG mid for the organization or person.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "organizationMidLabel": {
          "description": "Label (in the preferred language of the dataset) for the mid.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "organizationName": {
          "description": "Unreconciled organization name. We store it here only if there are no organization_mid values present.",
          "type": "string"
        },
        "organizationUrl": {
          "description": "Original organization url",
          "type": "string"
        },
        "originalOrganizationName": {
          "description": "Original name before reconciliation; empty if not reconciled.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchReconciledMetadata": {
      "description": "A proto for storing inferred and reconciled metadata for Science Search. Next available tag: 70",
      "id": "ResearchScienceSearchReconciledMetadata",
      "properties": {
        "alternateName": {
          "description": "Alternate names and acronyms for the dataset.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "authorList": {
          "description": "A string representation of the authors of the dataset, collected from author and creator in raw metadata. The exact format (e.g., comma-separated, etc.) is up to the extender that populates this field. The assumption is that this string may appear in the UI \"as is\".",
          "type": "string"
        },
        "catalog": {
          "$ref": "ResearchScienceSearchCatalog",
          "description": "Catalog that this dataset is a part of."
        },
        "compactIdentifier": {
          "description": "Compact Identifiers (for example \"RRID:SCR_002088\") that can be resolved by Identifiers.org or N2T.net meta-resolvers.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "compactIdentifierFromCitation": {
          "description": "Compact Identifier(s) extracted from the citation field. Like in the case of DOI(s) those identify the articles related to the dataset rather than the dataset itself.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "coverageEndDate": {
          "$ref": "ResearchScienceSearchDate"
        },
        "coverageStartDate": {
          "$ref": "ResearchScienceSearchDate",
          "description": "The start and end date that the dataset covers. If the dataset covers a single timepoint, then start and end dates are the same. Use the ISO 8601 format for dates (e.g., 2006-05-23)."
        },
        "dataDownload": {
          "description": "The dataset in downloadable form. There can be multiple data download entries for different file types.",
          "items": {
            "$ref": "ResearchScienceSearchDataDownload"
          },
          "type": "array"
        },
        "datasetClassificationFieldsHash": {
          "description": "A hash of the raw metadata fields used by the QualityExtender.",
          "format": "uint64",
          "type": "string"
        },
        "datasetClassificationScore": {
          "description": "Probability that the entity is in fact a dataset (in contrast to spam or website labelled as dataset that does not describe a dataset).",
          "format": "double",
          "type": "number"
        },
        "dateCreated": {
          "$ref": "ResearchScienceSearchDate",
          "description": "The date when the dataset was created."
        },
        "dateModified": {
          "$ref": "ResearchScienceSearchDate",
          "description": "The date when the dataset was modified."
        },
        "datePublished": {
          "$ref": "ResearchScienceSearchDate",
          "description": "The date when the dataset was published."
        },
        "dateUpdated": {
          "$ref": "ResearchScienceSearchDate",
          "description": "Most recent of the three dates (published, created, modified)"
        },
        "denylistStatus": {
          "items": {
            "enum": [
              "UNKNOWN_STATUS",
              "FILE_NAME",
              "NO_DESCRIPTION",
              "DENYLIST_REGEX_MATCH",
              "DENYLIST_NAME_MATCH",
              "NAME_SIZE_OUT_OF_BOUNDS",
              "DESCRIPTION_TOO_SHORT",
              "NOT_IN_CATALOG_FOR_DOMAIN",
              "MIRRORS_POPULAR_DATASET"
            ],
            "enumDescriptions": [
              "",
              "Dataset name is a file name and there are no other names.",
              "Dataset has no description.",
              "Dataset id matches a regex on the denylist.",
              "Dataset name matches a regex on the denylist.",
              "Dataset name is too short or too long.",
              "Dataset description is too short.",
              "The dataset comes from a known domain but is not included in the catalog for that domain.",
              "The dataset is a mirror of an excessively mirrored popular dataset"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "description": {
          "description": "Description of the dataset.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "descriptionInHtml": {
          "description": "Description of the dataset converted to HTML.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "doi": {
          "description": "The DOI for the dataset. We assume that there is only one.",
          "type": "string"
        },
        "doiFromCitation": {
          "description": "DOI(s) extracted from the citation field. In contrast to the \"doi\" field these DOIs identify the articles related to the dataset rather than the dataset itself.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "fieldOfStudy": {
          "description": "Field of study: a general, high-level classification of the dataset. This is only populated during indexing time and it is only populated if the classification_source is KNOWLEDGE_GRAPH or it's above inference threshold.",
          "items": {
            "$ref": "ResearchScienceSearchFieldOfStudyInfo"
          },
          "type": "array"
        },
        "fingerprint": {
          "description": "The fingerprint of basic fields from DatasetMetadata, including: - name - description DEPRECATED",
          "format": "uint64",
          "type": "string"
        },
        "funder": {
          "description": "Funder of the dataset.",
          "items": {
            "$ref": "ResearchScienceSearchOrganization"
          },
          "type": "array"
        },
        "hasTableSummaries": {
          "description": "Indicates if the dataset has table summaries. This field is only populated during indexing time.",
          "type": "boolean"
        },
        "id": {
          "description": "A unique id for the dataset. For the data from Spore, this is the spore id, such as, for example \"http://accession.nodc.noaa.gov/8500223#__sid=js0\" REQUIRED",
          "type": "string"
        },
        "identifierFromSource": {
          "description": "An identifier as provided by the dataset itself.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "imageUrl": {
          "description": "The image urls provided by the dataset (e.g., for thumbnail images).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "indexInCluster": {
          "description": "Index of this dataset in its cluster of replicas.",
          "format": "int32",
          "type": "integer"
        },
        "isAccessibleForFree": {
          "description": "Indicates if the dataset is available for free or behind a paywal http://schema.org/isAccessibleForFree",
          "enum": [
            "BOOLEAN_WITH_UNDEFINED_UNDEFINED",
            "BOOLEAN_WITH_UNDEFINED_TRUE",
            "BOOLEAN_WITH_UNDEFINED_FALSE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "isBasedOn": {
          "description": "A resource (most likely another dataset) from which this dataset is derived or from which it is a modification or adaption. http://schema.org/isBasedOn",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isInferred": {
          "description": "Indicates whether the metadata was inferred using an ML model rather than from the schema.org fields. Use optional so that explicitly setting to false will ensure the value is passed along to the KG instead of being indistinguisable from being unset and thus not set in the KG. This field was originally non-optional; changing to optional is backwards compatible, but protos created prior to being optional won't have has_is_inferred() (go/proto-proposals/proto3-presence#wire-format-semantic-changes).",
          "type": "boolean"
        },
        "keyword": {
          "description": "Keywords describing the dataset.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "languageCode": {
          "description": "The 2-letter language code for the source page for the dataset. Same as the language code in source_url_docjoin_info. Populated only when generating output for indexing.",
          "type": "string"
        },
        "license": {
          "description": "License for the dataset.",
          "items": {
            "$ref": "ResearchScienceSearchLicense"
          },
          "type": "array"
        },
        "licenseDeprecated": {
          "description": "License for the dataset. DEPRECATED",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "measurementTechnique": {
          "description": "A technique or technology used in a Dataset corresponding to the method used for measuring the corresponding variable(s) (described using variableMeasured). http://schema.org/measurementTechnique",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "mentionedUrls": {
          "description": "Mentioned URLs in the description.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "metadataType": {
          "enum": [
            "UNKNOWN_DATASET_TYPE",
            "DATASET_TYPE",
            "TABLE_TYPE",
            "FIGURE_TYPE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "name": {
          "description": "The names of the dataset.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "numberOfDatasetsAtSourceUrl": {
          "description": "The number of datasets at the same source url as this dataset.",
          "format": "int32",
          "type": "integer"
        },
        "numberOfScholarCitations": {
          "description": "The number of articles that reference this dataset.",
          "format": "int32",
          "type": "integer"
        },
        "publication": {
          "items": {
            "$ref": "ResearchScienceSearchCitation"
          },
          "type": "array"
        },
        "relatedArticleUrl": {
          "description": "The url for the article that (likely) describes this dataset.",
          "type": "string"
        },
        "replica": {
          "description": "The info of replicas of this dataset.",
          "items": {
            "$ref": "ResearchScienceSearchReplica"
          },
          "type": "array"
        },
        "sameAs": {
          "description": "Ids for other instances (not different versions) of this dataset.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "scholarQuery": {
          "description": "Query string to send to Scholar to obtain the best approximation of citations to the dataset.",
          "type": "string"
        },
        "scholarlyArticle": {
          "$ref": "ResearchScienceSearchScholarlyArticle",
          "description": "For tables and figures, contains all of the metadata for a scholarly article that was the source of this table or figure. This field is populated only if metadata_type is 'TABLE' or 'FIGURE'."
        },
        "sourceOrganization": {
          "description": "Source of the dataset: unifies provider, creator, author, publisher etc.",
          "items": {
            "$ref": "ResearchScienceSearchOrganization"
          },
          "type": "array"
        },
        "sourceUrl": {
          "description": "Source url from which we gathered the metadata",
          "type": "string"
        },
        "sourceUrlDocjoinInfo": {
          "$ref": "ResearchScienceSearchSourceUrlDocjoinInfo",
          "description": "All the information extracted from docjoin, for the source_url of this dataset, aka DatasetMetadata.source_url."
        },
        "spatialCoverage": {
          "description": "Locations that describe spatial coverage of the data. If the data covers multiple locations then each value corresponds to one such location, describing its coordinates, mid, etc.",
          "items": {
            "$ref": "ResearchScienceSearchLocation"
          },
          "type": "array"
        },
        "topSalientTermLabel": {
          "description": "Top salient term labels that describe the dataset document body.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "url": {
          "description": "urls for the dataset, including doi.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "variable": {
          "description": "Variables that the data in the dataset captures (e.g., pressure, salinity, temperature). For now, these are just strings.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "versionClusterInfo": {
          "$ref": "ResearchScienceSearchVersionClusterInfo",
          "description": "Information on the version cluster that the dataset is a part of. This field is populated during the indexing time; the field is populated only if the dataset is part of a version cluster."
        },
        "versionEmbeddingFieldsHash": {
          "description": "A hash of the raw metadata fields used by the VersionEmbeddingExtender.",
          "format": "uint64",
          "type": "string"
        },
        "versionEmbeddingVector": {
          "description": "An embedding for the dataset to be used by the VersionAggregator.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchReplica": {
      "description": "Stores the information about a dataset replica. Next ID: 5",
      "id": "ResearchScienceSearchReplica",
      "properties": {
        "catalogName": {
          "description": "The name of the catalog that the replica comes from.",
          "type": "string"
        },
        "catalogUrl": {
          "description": "The url of the catalog that the replica comes from.",
          "type": "string"
        },
        "indexInCluster": {
          "description": "The index of this replica in a cluster of replicas.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "description": "Url for the replica.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchScholarlyArticle": {
      "description": "Data and associated metadata for a scholarly pdf article.",
      "id": "ResearchScienceSearchScholarlyArticle",
      "properties": {
        "citation": {
          "$ref": "ScienceCitation",
          "description": "Proto containing all of the Scholar Metadata for this article."
        },
        "figureOrTableImage": {
          "description": "contains the image of the figure or table cropped out of the pdf page encoded as a PNG.",
          "format": "byte",
          "type": "string"
        },
        "figureOrTableOcrText": {
          "description": "Contains the text (as detected by OCR) contained inside the image of the figure or table.",
          "type": "string"
        },
        "landingPageUrl": {
          "description": "The url of the landing page for the scholarly article.",
          "type": "string"
        },
        "pageNumber": {
          "description": "The page number where the table and figure is located in the original pdf document.",
          "format": "int32",
          "type": "integer"
        },
        "pdfDownloadUrl": {
          "description": "The url where the pdf file is located for the scholarly article.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchSourceUrlDocjoinInfo": {
      "description": "The proto containing all the information we extracted from docjoin, for the source_url of the dataset. NEXT TAG: 17",
      "id": "ResearchScienceSearchSourceUrlDocjoinInfo",
      "properties": {
        "dataSource": {
          "enum": [
            "UNKNOWN",
            "RAFFIA_PROXY_SERVICE",
            "SPORE_DUMP",
            "INFERRED"
          ],
          "enumDescriptions": [
            "",
            "Fetched through Raffia proxy service (go/raffia-proxy).",
            "Fetched through the data dump by Spore team, aka '/namespace/custom_corpus/prod/clients/tpkit/science_search/export-spore/ttl=3d/...'",
            "Inferred using ML"
          ],
          "type": "string"
        },
        "displayUrl": {
          "description": "The url used to display in the google search results. ",
          "type": "string"
        },
        "docid": {
          "description": "The docid of the document. ",
          "format": "uint64",
          "type": "string"
        },
        "indexTier": {
          "description": "Index tiers (BASE, UNIFIED_ZEPPELIN, etc) that the document belongs to. NOTE: Each document may belong to multiple tiers. NOTE: The original data type is an enum CompositeDoc::SubIndexType. However we don't want to depend on segindexer/compositedoc.proto because the proto is too large. Instead, we use CompositeDoc::SubIndexType_Name( subindexid) to convert into a string representation. To convert string back to CompositeDoc::SubIndexType, use CompositeDoc::SubIndexType_Parse.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "languageCode": {
          "description": "The language of the document in the string representation of LanguageCode. Converts from Language Enum to LanguageCode through i18n/identifiers/langenclanguagecodeconverter.h Please use i18n/identifiers/languagecodeconverter.h for converting between LanguageCode and string representation.",
          "type": "string"
        },
        "latestPageUpdateDate": {
          "description": "The syntactic date of a dataset document that reflects the publication date of the content.",
          "type": "string"
        },
        "navboostQuery": {
          "description": "A sequence of Navboost queries for the dataset source_url.",
          "items": {
            "$ref": "ResearchScienceSearchNavboostQueryInfo"
          },
          "type": "array"
        },
        "pagerank": {
          "description": "The page rank of the document. ",
          "format": "int32",
          "type": "integer"
        },
        "petacatInfo": {
          "$ref": "FatcatCompactDocClassification",
          "description": "Petacat classifications for the web document. Normally the results from calling Petacat come in a PetacatResponse, which is very flexible and extensible. This proto takes most of the flexibility away - only rephil clusters, taxonomic classifications, and binary classifications, with discretized weights."
        },
        "salientTerms": {
          "$ref": "QualitySalientTermsSalientTermSet",
          "description": "A set of salient terms extracted fromthe document. DEPRECATEAD. Moved to DatasetMetadata for performance reasons."
        },
        "scholarInfo": {
          "$ref": "ScienceIndexSignal",
          "description": "Science per-doc data for inclusion in websearch. "
        },
        "sporeGraphMid": {
          "description": "A set of entities from WebRef annotations that are in SPORE_GRAPH.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "title": {
          "description": "The title of the document. ",
          "type": "string"
        },
        "topEntity": {
          "description": "A set of top entities from WebrefAnnotation, top is defined by topicality score, see go/topicality-score for detail. DEPRECATED. See label_to_mids_map instead.",
          "items": {
            "$ref": "RepositoryWebrefWebrefEntity"
          },
          "type": "array"
        },
        "url": {
          "description": "The url of the document. ",
          "type": "string"
        },
        "webrefEntity": {
          "description": "A set of entities copied from WebRefEntities on cDoc.",
          "items": {
            "$ref": "ResearchScienceSearchSourceUrlDocjoinInfoWebrefEntityInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchSourceUrlDocjoinInfoWebrefEntityInfo": {
      "description": "The mid and description of a WebRefEntity.",
      "id": "ResearchScienceSearchSourceUrlDocjoinInfoWebrefEntityInfo",
      "properties": {
        "deprecatedEntityType": {
          "description": "DEPRECATED. See entity_type instead.",
          "enum": [
            "UNKNOWN",
            "FIELD_OF_STUDY",
            "GEO",
            "ORGANIZATION"
          ],
          "enumDescriptions": [
            "",
            "/collection/field_of_studies in KG.",
            "/collection/geo/* in KG.",
            "/collection/organization/* in KG"
          ],
          "type": "string"
        },
        "description": {
          "description": "The English description of the mid from the KG.",
          "type": "string"
        },
        "entityCollectionType": {
          "items": {
            "enum": [
              "UNKNOWN",
              "FIELD_OF_STUDY",
              "GEO",
              "ORGANIZATION"
            ],
            "enumDescriptions": [
              "",
              "/collection/field_of_studies in KG.",
              "/collection/geo/* in KG.",
              "/collection/organization/* in KG"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "kgCollection": {
          "description": "HRID of the KG collections",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "mid": {
          "description": "The KG identifier of the WebrefEntity.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ResearchScienceSearchVersionClusterInfo": {
      "description": "Stores the information about each cluster of versions. Versions are defined in go/s2-versioning. Next available tag: 4",
      "id": "ResearchScienceSearchVersionClusterInfo",
      "properties": {
        "indexInVersionCluster": {
          "description": "Index of this dataset in its cluster of versions.",
          "format": "int32",
          "type": "integer"
        },
        "numVersions": {
          "description": "The number of versions in a Version Cluster. This is equivalent to cluster size.",
          "format": "int32",
          "type": "integer"
        },
        "versionClusterId": {
          "description": "A fingerprint id of the cluster of versions this dataset belongs to. This is a hash of a dataset_id in the cluster.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RichsnippetsDataObject": {
      "description": "Next ID: 11",
      "id": "RichsnippetsDataObject",
      "properties": {
        "AccessKey": {
          "type": "string"
        },
        "attribute": {
          "items": {
            "$ref": "RichsnippetsDataObjectAttribute"
          },
          "type": "array"
        },
        "source": {
          "enum": [
            "PAGEMAP",
            "MICROFORMAT",
            "RDFA",
            "METATAGS",
            "SCRAPED",
            "MICRODATA",
            "AUTO_THUMBNAIL",
            "JSON_LD"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "This is gerenated by auto selecting a thumbnail. We put the src of the image in cse_image DataObject type.",
            ""
          ],
          "type": "string"
        },
        "type": {
          "description": "The object type.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RichsnippetsDataObjectAttribute": {
      "description": "Other attributes of the object.",
      "id": "RichsnippetsDataObjectAttribute",
      "properties": {
        "cdata": {
          "format": "byte",
          "type": "string"
        },
        "idata": {
          "description": "idata holds integer data under the attribute name, and could be interpreted differently according to the attribute name. Example: stores the ImadeData.docid used to generate thumbnails. idata will not be automatically converted into xml (the default behavior), but the behavior can be overwritten if necessary.",
          "format": "uint64",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "subobject": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "A data object can have other data objects nested inside it. This is needed to represent Microformats and RDFa which have nestings e.g., a review with a business with an address, or a review with a rating object. See the Webmaster Central 2009/05 blog on \"Introducing Rich Snippets\"."
        },
        "tokenize": {
          "description": "Whether we should tokenize the value and cdata when generating restricts from this attribute.",
          "type": "boolean"
        },
        "value": {
          "description": "Either of cdata or value should be present.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "RichsnippetsPageMap": {
      "id": "RichsnippetsPageMap",
      "properties": {
        "DataObject": {
          "items": {
            "$ref": "RichsnippetsDataObject"
          },
          "type": "array"
        },
        "ignoreDataObject": {
          "description": "If ignore_data_object is set to true, pagemap attachment is processed regardless of whether data object is present or not.",
          "type": "boolean"
        },
        "src": {
          "enum": [
            "REGULAR",
            "KOREA_RICH"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "templatetype": {
          "items": {
            "$ref": "RichsnippetsPageMapTemplateType"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RichsnippetsPageMapTemplateType": {
      "description": "Unused fields",
      "id": "RichsnippetsPageMapTemplateType",
      "properties": {
        "src": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "S3AudioLanguageS3AudioLanguage": {
      "description": "S3 based Audio language information about a Watch Page.",
      "id": "S3AudioLanguageS3AudioLanguage",
      "properties": {
        "language": {
          "description": "Audio language of video classified by Automatic Language Identification. It corresponds to the langid_result in S3LangIdSignals.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        },
        "languageConfidence": {
          "description": "Confidence interval of the recognized language.",
          "enum": [
            "UNKNOWN_CONFIDENCE",
            "NOT_CONFIDENT",
            "CONFIDENT",
            "HIGHLY_CONFIDENT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "speechClass": {
          "description": "Type of detected speech.",
          "enum": [
            "UNKNOWN",
            "NO_SPEECH",
            "HAS_SPEECH_FOR_ASR"
          ],
          "enumDescriptions": [
            "Unspecified, or string label not recognized.",
            "",
            "Currently corresponds to simple speech"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SafesearchInternalImageSignals": {
      "description": "A proto that stores SafeSearch internal signals that are not exported to clients.",
      "id": "SafesearchInternalImageSignals",
      "properties": {
        "imageEntitiesViolenceScore": {
          "format": "float",
          "type": "number"
        },
        "starburstPornScore": {
          "description": "Additional SafeSearch signals that are used to compute final scores.",
          "format": "float",
          "type": "number"
        },
        "starburstViolenceScore": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SafesearchVideoClassifierOutput": {
      "description": "Flexible multi-vertical classification output. The output for each vertical should be defined as a proto extension to this proto. When defining an extension for a new vertical please follow the format: message NewVertical { extend safesearch.VideoClassifierOutput { optional NewVertical classifier_output_extension = ; } optional safesearch.VideoVerticalOutput vertical_output = 1; } SafeSearch verticals only: Please also update this message with a new extension declaration. For more details on extension declaration please refer to http://go/proto-proposals/extension-declarations. Please refer to http://go/proto2-extensions for details on message extensions. LINT.IfChange next extension id: 5",
      "id": "SafesearchVideoClassifierOutput",
      "properties": {},
      "type": "object"
    },
    "SafesearchVideoContentSignals": {
      "description": "SafeSearch video content classification scores are computed based on go/golden7 video features. To access these scores see the library at: google3/quality/safesearch/video/api/video_score_info.h",
      "id": "SafesearchVideoContentSignals",
      "properties": {
        "isAbuseWithHighConfidence": {
          "description": "This is used by Amarna to determine whether it should notify Raffia for immediate reprocessing. This field will be generated in Amarna's image_metadata corpus and exported to references_video_search corpus and written to ExportState.module_state.critical_metadata_checksum for determining whether Amarna should immediately notify Raffia whenever is_abuse_with_high_confidence's value changes.",
          "type": "boolean"
        },
        "scores": {
          "additionalProperties": {
            "format": "float",
            "type": "number"
          },
          "type": "object"
        },
        "versionTag": {
          "enum": [
            "UNKNOWN",
            "V20220330",
            "V20220620"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "videoClassifierOutput": {
          "$ref": "SafesearchVideoClassifierOutput",
          "description": "Output of all SafeSearch video classifiers in Amarna."
        }
      },
      "type": "object"
    },
    "ScienceCitation": {
      "id": "ScienceCitation",
      "properties": {
        "AbstractCitationSource": {
          "description": "The source of abstract text that is chosen by science docid assigner.",
          "format": "int32",
          "type": "integer"
        },
        "AbstractDisplay": {
          "enum": [
            "UNKNOWN_ABSTRACT_DISPLAY",
            "MAIN_ABSTRACT_DISPLAY",
            "GRAPHICAL_ABSTRACT_DISPLAY",
            "SUMMARY_ABSTRACT_DISPLAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "AbstractHtml": {
          "description": "Version of abstract field for display. Contains unsanitized XML/HTML.",
          "type": "string"
        },
        "AbstractHtmlLeftOver": {
          "description": "Leftovers from AbstractHtml. These are usually unrecognized xml/html entities or xml/html tags",
          "type": "string"
        },
        "AbstractLanguage": {
          "type": "string"
        },
        "AbstractSource": {
          "enum": [
            "NO_ABSTRACT",
            "METADATA_ABSTRACT",
            "LABELED_HTML_ABSTRACT",
            "LABELED_PDF_ABSTRACT",
            "UNLABELED_HTML_ABSTRACT",
            "UNLABELED_PDF_ABSTRACT",
            "HTML_TEXT_BLOCK",
            "PDF_TEXT_BLOCK"
          ],
          "enumDescriptions": [
            "",
            "xml or html metatags",
            "",
            "",
            "based on introduction/keywords/other mark",
            "",
            "first long block of text",
            ""
          ],
          "type": "string"
        },
        "AbstractText": {
          "type": "string"
        },
        "AlternateVersionID": {
          "description": "Fingerprint of the URL after applying crawl and aggregate rewrites. Different citations with the same AlternateVersionID must have the same VersionID, but not necessarily vice versa. Omitted when identical to the VersionID.",
          "format": "uint64",
          "type": "string"
        },
        "Anchors": {
          "description": "All the anchor text (before, after, formal, etc) for this citation in the referring page.",
          "items": {
            "$ref": "ScienceCitationAnchor"
          },
          "type": "array"
        },
        "ArxivSection": {
          "description": "e.g. hep-ph",
          "type": "string"
        },
        "AuthorListHasEtAl": {
          "description": "whether this citation had an \"et al\" in the author list",
          "type": "boolean"
        },
        "AuthorMetatagLeftOver": {
          "type": "string"
        },
        "BaseGlobalID": {
          "description": "Global document identifier - only available when building increments over a known base index. This id is from the base index.",
          "format": "uint64",
          "type": "string"
        },
        "BaseLocalID": {
          "description": "Set when building an incremental index. Whereas BaseGlobalID is the ID of the corresponding base cluster, the local ID is the ID of an individual citation within that base cluster that corresponds to this reparse.",
          "format": "uint64",
          "type": "string"
        },
        "BorrowedAuthors": {
          "description": "one bit per author",
          "format": "int32",
          "type": "integer"
        },
        "BorrowedFields": {
          "description": "OR of FieldType",
          "format": "int32",
          "type": "integer"
        },
        "Chapter": {
          "type": "string"
        },
        "CitationSource": {
          "description": "citation src: dblp/crossref/paper etc",
          "format": "int32",
          "type": "integer"
        },
        "CitationSourceUrl": {
          "description": "url where record came from",
          "type": "string"
        },
        "CitationSrc": {
          "description": "DEPRECATED: use CitationSource",
          "type": "string"
        },
        "ClearedReason": {
          "enum": [
            "CLEARED_REASON_NONE",
            "CLEARED_REASON_TOC"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "ClusterDiscoveryDate": {
          "description": "Used for logging, recommendations, and sort-by-date. Contains the earliest discovery date of the cluster, adjusted for earlier publication dates. Stored in Universal time scale (100 ns ticks since 0001 AD) because Unix timestamp would lead to negative dates for pre-1970 docs.",
          "format": "int64",
          "type": "string"
        },
        "ConferenceId": {
          "description": "Identifier for conference series - issn-lite",
          "type": "string"
        },
        "ConferenceNumber": {
          "description": "27 in the \"27th conference on magical realism\"",
          "format": "int32",
          "type": "integer"
        },
        "CrawledDocid": {
          "description": "If a citation is merged from a crawled version and a metadata version, keep the normal docid fp of the crawled version for clustering FP of normal docid of crawl version",
          "format": "uint64",
          "type": "string"
        },
        "DEPRECATEDMetadataSourceFile": {
          "type": "string"
        },
        "DEPRECATEDPublisherDisplayName": {
          "description": "these fields moved to DownloadURL where they belong",
          "type": "string"
        },
        "DOI": {
          "description": "Digital Object Identifier",
          "type": "string"
        },
        "DblpId": {
          "type": "string"
        },
        "DocumentID": {
          "description": "Local document identifier - url fingerprint if we know the url, or fingerprint of all fields if we don't. Different urls have different local docids.",
          "format": "uint64",
          "type": "string"
        },
        "DspaceID": {
          "description": "Dspace uses handle.net handles",
          "type": "string"
        },
        "Edition": {
          "type": "string"
        },
        "Editor": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "FileCreationDay": {
          "format": "int32",
          "type": "integer"
        },
        "FileCreationMonth": {
          "description": "zero-indexed field",
          "format": "int32",
          "type": "integer"
        },
        "FileCreationYear": {
          "description": "date of creation of the pdf/doc",
          "format": "int32",
          "type": "integer"
        },
        "ISBN": {
          "type": "string"
        },
        "ISBNVariant": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ISSN": {
          "type": "string"
        },
        "ISSNVariant": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "IncrementalExpected": {
          "description": "Is this article expected to have been indexed in the incremental?",
          "type": "boolean"
        },
        "JOI": {
          "type": "string"
        },
        "Keywords": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "LCCN": {
          "description": "library of congress call number",
          "type": "string"
        },
        "Language": {
          "type": "string"
        },
        "LegalCitation": {
          "$ref": "LegalCitation",
          "description": "The ScienceCitation is how metadata passes through the scholar system. For legal, we use the normal ScienceCitation for the metadata/citation of legal journals. For court/government documents (like opinions or statues), we wrap it in the following embedded message"
        },
        "LevelOfDiscussion": {
          "description": "If this is a target reference, the level of discussion of this reference.",
          "format": "int32",
          "type": "integer"
        },
        "Note": {
          "description": "random string data - unparsed",
          "type": "string"
        },
        "NumBackwardLinks": {
          "description": "for display in gws",
          "format": "int32",
          "type": "integer"
        },
        "NumBackwardLinksFromLegal": {
          "description": "hack for legal rollout",
          "format": "int32",
          "type": "integer"
        },
        "NumBackwardLinksInWoS": {
          "description": "numcited in WoS",
          "format": "int32",
          "type": "integer"
        },
        "NumForwardLinks": {
          "description": "for display in gws",
          "format": "int32",
          "type": "integer"
        },
        "NumGoodEmbeddedRefs": {
          "description": "good embedded refs",
          "format": "int32",
          "type": "integer"
        },
        "NumHostedPages": {
          "description": "If set, then we host this many pages of this citation's content. Note that this field may be set to 0, in which case we should be hosting this content but have failed. DEPRECATED, moved to DownloadURL",
          "format": "int32",
          "type": "integer"
        },
        "NumKeyQuotes": {
          "description": "for display in gws",
          "format": "int32",
          "type": "integer"
        },
        "NumRelated": {
          "description": "for display in gws",
          "format": "int32",
          "type": "integer"
        },
        "NumRelated2": {
          "description": "for experiments",
          "format": "int32",
          "type": "integer"
        },
        "NumRelated3": {
          "description": "for experiments",
          "format": "int32",
          "type": "integer"
        },
        "NumSectionRefs": {
          "description": "refs in marked section",
          "format": "int32",
          "type": "integer"
        },
        "NumVersions": {
          "description": "for display in gws",
          "format": "int32",
          "type": "integer"
        },
        "Number": {
          "description": "can be 1-3",
          "type": "string"
        },
        "OnlineDay": {
          "format": "int32",
          "type": "integer"
        },
        "OnlineMonth": {
          "description": "OnlineMonth is a zero-indexed field (0 is January).",
          "format": "int32",
          "type": "integer"
        },
        "OnlineYear": {
          "format": "int32",
          "type": "integer"
        },
        "OtherID": {
          "description": "eg ERIC doc number or TR number",
          "type": "string"
        },
        "PMCID": {
          "type": "string"
        },
        "PMID": {
          "description": "Pubmed ID",
          "type": "string"
        },
        "Pages": {
          "description": "Using string to handle all kinds of page specifications. Internal structure is not really needed.",
          "type": "string"
        },
        "ParseSource": {
          "format": "int32",
          "type": "integer"
        },
        "PatentApplicationNumber": {
          "description": "Note that an issued patent has a PatentNumber and can also have a PatentApplicationNumber, whereas a patent application has a PatentApplicationNumber and can also have a PatentPublicationNumber.",
          "type": "string"
        },
        "PatentClassification": {
          "description": "patent classification e.g., \"B24B 3100\"",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "PatentCountry": {
          "description": "2-letter country code where patent was issued, see ocean/metadata/patent_record.proto::Patent_Record::country_code for EPO one patent pertains to a list of countries.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "PatentNumber": {
          "description": "number according to USPTO/EPO/JPO scheme.",
          "type": "string"
        },
        "PatentOffice": {
          "description": "one of the above",
          "format": "int32",
          "type": "integer"
        },
        "PatentPublicationNumber": {
          "type": "string"
        },
        "PublicationDay": {
          "description": "for patents, publicationD/M/Y is the date of issue, not application",
          "format": "int32",
          "type": "integer"
        },
        "PublicationMonth": {
          "description": "month from bibtex PublicationMonth is a zero-indexed field (0 is January).",
          "format": "int32",
          "type": "integer"
        },
        "PublicationVenue": {
          "description": "where published - subsumes booktitle, howpublished and journal from bibtex",
          "type": "string"
        },
        "PublicationVenueVariant": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "PublicationYear": {
          "description": "year from bibtext full year",
          "format": "int32",
          "type": "integer"
        },
        "PublisherAddress": {
          "description": "address from bibtex",
          "type": "string"
        },
        "PublisherId": {
          "type": "string"
        },
        "PublisherOrg": {
          "description": "subsumes organization, school and institution from bibtex",
          "type": "string"
        },
        "PubvenueID": {
          "description": "local journal number",
          "type": "string"
        },
        "ReviewTypeReason": {
          "description": "bitmap of ReviewArticleTypeReasons",
          "format": "uint32",
          "type": "integer"
        },
        "SICI": {
          "type": "string"
        },
        "Series": {
          "type": "string"
        },
        "Title": {
          "type": "string"
        },
        "TitleHtml": {
          "description": "Version of title for display. Contains unsanitized HTML/XML.",
          "type": "string"
        },
        "TitleHtmlLeftOver": {
          "description": "Leftovers from TitleHtml. These are usually unrecognized xml/html entities or xml/html tags",
          "type": "string"
        },
        "TranslatedAuthorListHasEtAl": {
          "description": "etal marker for the translated author list - just in case",
          "type": "boolean"
        },
        "Type": {
          "description": "ArticleType",
          "format": "int32",
          "type": "integer"
        },
        "UnmatchedEmailAddr": {
          "description": "Email addresses found in the document that we weren't able to match",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "UnmatchedInstitution": {
          "description": "Author affiliations found in the document that we weren't able to match up to specific authors.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "VersionID": {
          "description": "Document version identifier - fingerprint of an id computed from the url, or of bibliographic data from a publisher. Different urls for the same article from the same source have the same version id (e.g., abstract, pdf version, and html version).",
          "format": "uint64",
          "type": "string"
        },
        "Volume": {
          "format": "int32",
          "type": "integer"
        },
        "WOSID": {
          "description": "Web of Science ID",
          "type": "string"
        },
        "WorldViewable": {
          "description": "Is this version of the article world viewable?",
          "type": "boolean"
        },
        "accessurl": {
          "items": {
            "$ref": "ScienceCitationAccessURL"
          },
          "type": "array"
        },
        "alternateabstract": {
          "items": {
            "$ref": "ScienceCitationAlternateAbstract"
          },
          "type": "array"
        },
        "alternatetitle": {
          "items": {
            "$ref": "ScienceCitationAlternateTitle"
          },
          "type": "array"
        },
        "author": {
          "items": {
            "$ref": "ScienceCitationAuthor"
          },
          "type": "array"
        },
        "category": {
          "items": {
            "$ref": "ScienceCitationCategory"
          },
          "type": "array"
        },
        "downloadurl": {
          "items": {
            "$ref": "ScienceCitationDownloadURL"
          },
          "type": "array"
        },
        "funding": {
          "items": {
            "$ref": "ScienceCitationFunding"
          },
          "type": "array"
        },
        "referencediscussion": {
          "items": {
            "$ref": "ScienceCitationReferenceDiscussion"
          },
          "type": "array"
        },
        "subject": {
          "items": {
            "$ref": "ScienceCitationSubject"
          },
          "type": "array"
        },
        "translatedauthor": {
          "items": {
            "$ref": "ScienceCitationTranslatedAuthor"
          },
          "type": "array"
        },
        "unioncatalog": {
          "items": {
            "$ref": "ScienceCitationUnionCatalog"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ScienceCitationAccessURL": {
      "description": "User-defined URL and its last access data for citation manager.",
      "id": "ScienceCitationAccessURL",
      "properties": {
        "AccessDay": {
          "format": "int32",
          "type": "integer"
        },
        "AccessMonth": {
          "description": "AccessMonth is a zero-indexed field (0 is January).",
          "format": "int32",
          "type": "integer"
        },
        "AccessYear": {
          "format": "int32",
          "type": "integer"
        },
        "UrlStr": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceCitationAlternateAbstract": {
      "description": "There are templated functions that fill the abstract fields designed to take either ScienceCitation or ScienceCitation::AlternateAbstract, so these field names must match those used for the primary abstract.",
      "id": "ScienceCitationAlternateAbstract",
      "properties": {
        "AbstractDisplay": {
          "enum": [
            "UNKNOWN_ABSTRACT_DISPLAY",
            "MAIN_ABSTRACT_DISPLAY",
            "GRAPHICAL_ABSTRACT_DISPLAY",
            "SUMMARY_ABSTRACT_DISPLAY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "AbstractHtml": {
          "description": "Version of abstract field for display. This may contain XML/HTML tags.",
          "type": "string"
        },
        "AbstractHtmlLeftOver": {
          "description": "Leftovers from AbstractHtml. These are usually unrecognized xml/html entities or xml/html tags",
          "type": "string"
        },
        "AbstractLanguage": {
          "type": "string"
        },
        "AbstractText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceCitationAlternateTitle": {
      "description": "alternate titles (including language where available)",
      "id": "ScienceCitationAlternateTitle",
      "properties": {
        "Language": {
          "type": "string"
        },
        "Title": {
          "type": "string"
        },
        "TitleHtml": {
          "description": "Version of title for display. Contains unsanitized HTML/XML.",
          "type": "string"
        },
        "TitleHtmlLeftOver": {
          "description": "Leftovers from TitleHtml. These are usually unrecognized xml/html entities or xml/html tags",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceCitationAnchor": {
      "description": "The anchor class holds content relevant to a citation, for example, the text before or after the citation that explains what the citation is about.",
      "id": "ScienceCitationAnchor",
      "properties": {
        "DEPRECATEDSrcFP": {
          "description": "Fingerprint of the referral document. The fingerprint should resist to small variance in the document content. DO NOT USE IT!",
          "format": "uint64",
          "type": "string"
        },
        "count": {
          "description": "Number of times this anchor text appears, only consider the text itself",
          "format": "int32",
          "type": "integer"
        },
        "face": {
          "description": "font face bitmask: kBold, kItalic, etc.",
          "format": "int32",
          "type": "integer"
        },
        "size": {
          "description": "font size, in px",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "Space-delimited anchor words. Text that needs segmentation (like CJK or Thai) is unsegmented. Generated by ScienceParseUtils::AppendTokenSeqToString()",
          "type": "string"
        },
        "type": {
          "description": "one of the \"Type\" value defined below.",
          "format": "int32",
          "type": "integer"
        },
        "weight": {
          "description": "weight of the anchor by looking where we get this anchor text. It can be PR, court level, year, or the combination of differerent aspects. weights are 1 - 128 defined as \"Weights\"",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ScienceCitationAuthor": {
      "description": "author names should be in the order specified in the paper",
      "id": "ScienceCitationAuthor",
      "properties": {
        "Comment": {
          "type": "string"
        },
        "Department": {
          "description": "not in bibtex - from paper",
          "type": "string"
        },
        "Email": {
          "type": "string"
        },
        "GuessOrderType": {
          "description": "Tracks the GuessNameOrder case used to parse this author name, defaults to 0 simply means that GuessNameOrder wasn't used.",
          "format": "int32",
          "type": "integer"
        },
        "ID": {
          "description": "Author ID. Formatted as idtype:id",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "Institution": {
          "description": "not in bibtex - from paper",
          "type": "string"
        },
        "IsCJKForeignName": {
          "type": "boolean"
        },
        "IsCorrespondingAuthor": {
          "type": "boolean"
        },
        "LastName": {
          "type": "string"
        },
        "OtherNames": {
          "type": "string"
        },
        "SourceText": {
          "type": "string"
        },
        "Type": {
          "description": "Type is one of the contributors types. Writers are the default.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ScienceCitationCategory": {
      "id": "ScienceCitationCategory",
      "properties": {
        "Name": {
          "type": "string"
        },
        "Type": {
          "description": "ontology/set of categories for the category",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceCitationDownloadURL": {
      "description": "Download URL mentioned in citation; we keep up to K of them LINT.IfChange",
      "id": "ScienceCitationDownloadURL",
      "properties": {
        "BrokenLandingPage": {
          "description": "set if we know the landing page is broken",
          "type": "boolean"
        },
        "CanonicalUrlfp": {
          "format": "uint64",
          "type": "string"
        },
        "ContentChecksum": {
          "description": "checksum of the page",
          "format": "uint64",
          "type": "string"
        },
        "ContentType": {
          "description": "makes gws display nicer :)",
          "format": "int32",
          "type": "integer"
        },
        "CrawlTimestamp": {
          "description": "seconds since the epoch",
          "format": "int64",
          "type": "string"
        },
        "DMCANotice": {
          "description": "metatag: URL; result was taken down",
          "type": "string"
        },
        "DisplayOrg": {
          "description": "publisher display name",
          "type": "string"
        },
        "DisplayPriority": {
          "description": "display preference score",
          "format": "int32",
          "type": "integer"
        },
        "DownloadDay": {
          "format": "int32",
          "type": "integer"
        },
        "DownloadMonth": {
          "description": "DownloadMonth is a zero-indexed field (0 is January).",
          "format": "int32",
          "type": "integer"
        },
        "DownloadYear": {
          "description": "no abbrv",
          "format": "int32",
          "type": "integer"
        },
        "ExcerptContent": {
          "description": "first few lines of abstract'ish excerpt",
          "type": "string"
        },
        "ExcerptDebugLabel": {
          "description": "label for excerpt (abstract, summary, ..)",
          "type": "string"
        },
        "FirstDiscovered": {
          "description": "seconds since the epoch",
          "format": "int64",
          "type": "string"
        },
        "HostedNumPages": {
          "description": "explicit zero means hosting failed",
          "format": "int32",
          "type": "integer"
        },
        "HostedStartPage": {
          "format": "int32",
          "type": "integer"
        },
        "HtmlTitle": {
          "description": "html title of the page",
          "type": "string"
        },
        "InPrevIndex": {
          "description": "is url included in a previous index",
          "type": "boolean"
        },
        "IndexPriority": {
          "description": "indexing preference score",
          "format": "int32",
          "type": "integer"
        },
        "LegalMustInclude": {
          "description": "e.g., in law_articles.pat",
          "type": "boolean"
        },
        "LikelyAheadPrint": {
          "description": "Whether this is likely the URL for an ahead print, at indexing time.",
          "type": "boolean"
        },
        "LikelyDifferentMetricsVenue": {
          "description": "In the context of a given venue in Scholar Metrics, whether this URL likely does not link to the current venue.",
          "type": "boolean"
        },
        "LikelyLegalJournal": {
          "description": "e.g., in legal_journals.pat",
          "type": "boolean"
        },
        "LikelyNoCache": {
          "description": "badurls_nocache at indexing time",
          "type": "boolean"
        },
        "LikelyNoIndex": {
          "description": "badurls_noreturngws at indexing time",
          "type": "boolean"
        },
        "LikelyWorldViewable": {
          "description": "Likely to be free-to-read for everyone, after accounting for library links etc.",
          "type": "boolean"
        },
        "LongChunkCount": {
          "description": "number of long paragraphs",
          "format": "int32",
          "type": "integer"
        },
        "MaybeNoIndexReparse": {
          "description": "Incremental only: mark as NoIndexed if this is a reparse and the base version is NoIndexed.",
          "type": "boolean"
        },
        "MetadataUrl": {
          "description": "url of publisher metadata file",
          "type": "string"
        },
        "MustInclude": {
          "description": "e.g., in science_articles.pat",
          "type": "boolean"
        },
        "NoArchive": {
          "description": "metatag: don't show cached version",
          "type": "boolean"
        },
        "NoIndex": {
          "description": "metatag: don't display this url",
          "type": "boolean"
        },
        "NoSnippet": {
          "description": "metatag: don't show snippet",
          "type": "boolean"
        },
        "OceanView": {
          "$ref": "ScienceOceanView",
          "description": "describes whether url is viewable in ocean"
        },
        "OutLinkCount": {
          "description": "number of external URLs (in PDF).",
          "format": "int32",
          "type": "integer"
        },
        "PageCount": {
          "description": "Number of pages in the pdf2html conversion output. Only set for PDFs. For a partitioned PDF, this is the page count of the entire volume.",
          "format": "int32",
          "type": "integer"
        },
        "ReferencesInPrevIndex": {
          "description": "were references parsed in a previous index",
          "type": "boolean"
        },
        "Type": {
          "description": "ArticleType for this particular url",
          "format": "int32",
          "type": "integer"
        },
        "UrlAfterRedirects": {
          "type": "string"
        },
        "UrlStr": {
          "type": "string"
        },
        "WordCount": {
          "description": "number of words in content/body",
          "format": "int32",
          "type": "integer"
        },
        "WorldViewable": {
          "description": "metatag: is viewable by world",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ScienceCitationFunding": {
      "id": "ScienceCitationFunding",
      "properties": {
        "Agency": {
          "description": "values are from FundingAgency enum",
          "format": "int32",
          "type": "integer"
        },
        "AgencyName": {
          "description": "Text name of the agency. For analysis. Plus for agencies that don't have an enum.",
          "type": "string"
        },
        "DebugExtractionInfo": {
          "description": "Funding entries for the same agency and grant number can be merged during our extraction process so we maintain a record of all the deduped ExtractionInfo messages within the remaining entry.",
          "items": {
            "$ref": "ScienceCitationFundingExtractionInfo"
          },
          "type": "array"
        },
        "DebugFundingTextBlock": {
          "description": "Text block from which the funding entry was extracted. Intended to be used for offline analysis. DEPRECATED",
          "type": "string"
        },
        "GrantNumber": {
          "type": "string"
        },
        "Recipient": {
          "description": "funding recipient",
          "type": "string"
        },
        "SourceText": {
          "description": "Original text for the funding acknowledgement",
          "type": "string"
        },
        "UrlBasedFundingSource": {
          "description": "Whether this funding info was added because this article was at the exclusive repository for this agency.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ScienceCitationFundingExtractionInfo": {
      "description": "Holds information about the source of the funding entry.",
      "id": "ScienceCitationFundingExtractionInfo",
      "properties": {
        "DebugFundingTextBlock": {
          "description": "Text block context from which the funding entry was extracted. Optionally filled and intended to be used for offline analysis.",
          "type": "string"
        },
        "DocPart": {
          "enum": [
            "UNSPECIFIED_DOC_PART",
            "DOC_PREFIX",
            "BEFORE_REFS",
            "AFTER_REFS",
            "DOC_SUFFIX",
            "ACK_SECTION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ParseSection": {
          "enum": [
            "UNKNOWN",
            "ACKNOWLEDGEMENT",
            "FOOTNOTE",
            "NEAR_REFS",
            "BODY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "Source": {
          "enum": [
            "UNSPECIFIED",
            "HTML",
            "HTML_METADATA",
            "PDF",
            "XML_METADATA",
            "XML_TEXT",
            "URL_BASED_FUNDING"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceCitationReferenceDiscussion": {
      "description": "If this is a source document, the levels of discussion of the references this document cites.",
      "id": "ScienceCitationReferenceDiscussion",
      "properties": {
        "Level": {
          "format": "int32",
          "type": "integer"
        },
        "TargetID": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceCitationSubject": {
      "description": "subject classification",
      "id": "ScienceCitationSubject",
      "properties": {
        "Name": {
          "description": "e.g., \"eng\"",
          "type": "string"
        },
        "Probability": {
          "description": "[0,1]",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScienceCitationTranslatedAuthor": {
      "description": "translated author names. we usually get these for non-english papers which provide english title/author/abstract info",
      "id": "ScienceCitationTranslatedAuthor",
      "properties": {
        "Department": {
          "type": "string"
        },
        "Email": {
          "type": "string"
        },
        "GuessOrderType": {
          "format": "int32",
          "type": "integer"
        },
        "Institution": {
          "type": "string"
        },
        "Language": {
          "type": "string"
        },
        "LastName": {
          "type": "string"
        },
        "OtherNames": {
          "type": "string"
        },
        "SourceText": {
          "type": "string"
        },
        "Type": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ScienceCitationUnionCatalog": {
      "description": "Create UnionCatalog as a group if we want to later add book level informations.",
      "id": "ScienceCitationUnionCatalog",
      "properties": {
        "CanonicalUrlfp": {
          "format": "uint64",
          "type": "string"
        },
        "MetadataUrl": {
          "description": "url of catalog metadata file",
          "type": "string"
        },
        "NumLibraries": {
          "description": "Information about the number of libraries the citation appears. It should be useful for ranking.",
          "format": "int32",
          "type": "integer"
        },
        "Subject": {
          "description": "Categories classification of the citation",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "Url": {
          "description": "UnionCatalog url to display to users",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceIndexSignal": {
      "id": "ScienceIndexSignal",
      "properties": {
        "HtmlTitleFp": {
          "description": "Fingerprint of the html title of the page. This is useful for checking if we have the same version of the page as websearch.",
          "format": "int64",
          "type": "string"
        },
        "IndexSelectionScore": {
          "description": "Index selection score for websearch, bigger is better: (0.5,1.0] - prefer selection into the base index, (0.0,0.5] - prefer selection into the supplemental index.",
          "format": "float",
          "type": "number"
        },
        "NumBackwardLinks": {
          "description": "Summary statistics.",
          "format": "int32",
          "type": "integer"
        },
        "NumRelated": {
          "format": "int32",
          "type": "integer"
        },
        "NumVersions": {
          "format": "int32",
          "type": "integer"
        },
        "PublicationDay": {
          "format": "int32",
          "type": "integer"
        },
        "PublicationMonth": {
          "format": "int32",
          "type": "integer"
        },
        "PublicationYear": {
          "description": "Publication date.",
          "format": "int32",
          "type": "integer"
        },
        "RemoveLink": {
          "description": "Remove this URL from the index - error page, broken landing page, etc. DEPRECATED, was never used or even filled correctly.",
          "type": "boolean"
        },
        "ScholarId": {
          "description": "For links from websearch to scholar.",
          "format": "uint64",
          "type": "string"
        },
        "Title": {
          "description": "Title of the article. Its only filled in when the html title of the page isn't good.",
          "type": "string"
        },
        "VisiblePrefixTerms": {
          "description": "Length of document prefix that most users are likely to see. Only filled in when we index subscription fulltext but most users see abstracts. This is a conservative guesstimate - e.g., ACM shows fulltext to university/company subscribers (including Google employees) based on user's IP address, but we don't know subscriber IPs, so ACM's PDF pages would have ~500 in this field (estimated length of abstract).",
          "format": "int32",
          "type": "integer"
        },
        "author": {
          "items": {
            "$ref": "ScienceIndexSignalAuthor"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ScienceIndexSignalAuthor": {
      "id": "ScienceIndexSignalAuthor",
      "properties": {
        "LastName": {
          "type": "string"
        },
        "OtherNames": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScienceOceanView": {
      "description": "Describes the viewability of ocean content.",
      "id": "ScienceOceanView",
      "properties": {
        "countryview": {
          "items": {
            "$ref": "ScienceOceanViewCountryView"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ScienceOceanViewCountryView": {
      "id": "ScienceOceanViewCountryView",
      "properties": {
        "CountryCode": {
          "description": "No CountryCode means default viewability. two letter code",
          "type": "string"
        },
        "ViewType": {
          "description": "enum in ocean::LocaleViewability::ViewType",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SdrEmbedding": {
      "id": "SdrEmbedding",
      "properties": {
        "compressedEmbeddings": {
          "$ref": "QualityRankembedMustangMustangRankEmbedInfo"
        },
        "values": {
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "version": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SdrPageAnchorsDocInfo": {
      "id": "SdrPageAnchorsDocInfo",
      "properties": {
        "articleness": {
          "format": "float",
          "type": "number"
        },
        "pageAnchors": {
          "items": {
            "$ref": "SdrPageAnchorsSitelink"
          },
          "type": "array"
        },
        "qscore": {
          "format": "float",
          "type": "number"
        },
        "sitelinkWrapper": {
          "items": {
            "$ref": "SdrPageAnchorsSitelinkWrapper"
          },
          "type": "array"
        },
        "textRichness": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SdrPageAnchorsSitelink": {
      "id": "SdrPageAnchorsSitelink",
      "properties": {
        "embedding": {
          "$ref": "SdrEmbedding",
          "description": "Needed for relevance scoring."
        },
        "geometryScore": {
          "description": "aggregate score from Section Geometry.",
          "format": "float",
          "type": "number"
        },
        "headingAbbrvScore": {
          "description": "Heading Abbreviation score.",
          "format": "float",
          "type": "number"
        },
        "hpScore": {
          "description": "Needed for heading/passage filtering.",
          "format": "float",
          "type": "number"
        },
        "level": {
          "format": "int32",
          "type": "integer"
        },
        "scrollTo": {
          "$ref": "SdrScrollTo"
        },
        "sectionHeight": {
          "description": "Needed for Geometry Scoring and backoffs. from Section Geometry.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "Heading/Reformulated text is needed to display.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SdrPageAnchorsSitelinkWrapper": {
      "description": "This wrapper is used for passing in additional information to generate embeddings in Goldmine.",
      "id": "SdrPageAnchorsSitelinkWrapper",
      "properties": {
        "abbreviatedHeadingText": {
          "type": "string"
        },
        "abbrvEmbedding": {
          "$ref": "SdrEmbedding"
        },
        "headingEmbedding": {
          "$ref": "SdrEmbedding"
        },
        "normalizedHeadingText": {
          "type": "string"
        },
        "passageEmbedding": {
          "$ref": "SdrEmbedding"
        },
        "passageText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SdrScrollTo": {
      "description": "Data needed to construct a go/scroll-to text fragment. The url fragment is: #:~:text=[prefix-,]text_start,text_end",
      "id": "SdrScrollTo",
      "properties": {
        "onpageMatches": {
          "$ref": "SdrScrollToOnPageMatches"
        },
        "prefix": {
          "description": "Prefix to help with disambiguating between multiple text matches on page. Optional.",
          "type": "string"
        },
        "suffix": {
          "description": "Suffix to help with disambiguating between multiple text matches on page. Optional.",
          "type": "string"
        },
        "textEnd": {
          "description": "End of the text span to be highlighted. Optional.",
          "type": "string"
        },
        "textStart": {
          "description": "Start of the text span to be highlighted.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SdrScrollToOnPageMatches": {
      "description": "Number of matches in the page when using text alone, prefix + text, text + suffix, and prefix + text + suffix. The match is case-insensitive to align with go/scroll-to behavior.",
      "id": "SdrScrollToOnPageMatches",
      "properties": {
        "text": {
          "format": "int32",
          "type": "integer"
        },
        "textWithPrefix": {
          "format": "int32",
          "type": "integer"
        },
        "textWithPrefixSuffix": {
          "format": "int32",
          "type": "integer"
        },
        "textWithSuffix": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SearchPolicyRankableSensitivity": {
      "description": "Encapsulates sensitivity mode, source, and other metadata, used for ranking when there are multiple sensitivies set by default sources (eg, followon, query understanding, attentional entity).",
      "id": "SearchPolicyRankableSensitivity",
      "properties": {
        "accountProvenance": {
          "description": "Propagated from knowledge.answers.sensitivity.Sensitivity account_provenance. Any ambiguity between the data here and dasher_user should be resolved by the conversion to pToken in http://source/search?q=symbol:CreatePTokenFromSensitivity",
          "items": {
            "$ref": "QualityQrewriteAccountProvenance"
          },
          "type": "array"
        },
        "attentionalEntity": {
          "$ref": "SearchPolicyRankableSensitivityAttentionalEntity"
        },
        "dasherUser": {
          "description": "True iff the query is from a Dasher user.",
          "type": "boolean"
        },
        "followon": {
          "$ref": "SearchPolicyRankableSensitivityFollowOn"
        },
        "groundingProvider": {
          "$ref": "SearchPolicyRankableSensitivityGroundingProvider"
        },
        "prefilter": {
          "$ref": "SearchPolicyRankableSensitivityPrefilter"
        },
        "qu": {
          "$ref": "SearchPolicyRankableSensitivityQueryUnderstanding"
        },
        "sensitivityMode": {
          "description": "Key of a sensitivity.",
          "enum": [
            "UNKNOWN",
            "INIT",
            "NONE",
            "SEND_EMAIL",
            "SEARCH_EMAIL",
            "SENSITIVE_AOG_CONVERSATION",
            "SMART_HOME_PROVIDE_PIN",
            "SEARCH_DRIVE",
            "READ_MESSAGE",
            "SEND_MESSAGE",
            "BROADCAST",
            "CALL",
            "NOTES_AND_LISTS",
            "DEVICE_ACTIONS_AUTH",
            "INTERPRETER_MODE",
            "VOICE_MATCH_ENROLLMENT",
            "REMINDERS",
            "DESIGNED_FOR_FAMILY",
            "CALENDAR",
            "HEALTH_AND_FITNESS",
            "MEDIA_PROVIDER_SPOTIFY",
            "APP_ACTION_HEALTH",
            "DG_HOME_FEED",
            "SEARCH_GSUITE",
            "ASSISTANT_SURVEY",
            "ASSISTANT_MEMORY",
            "DEPRECATED_SENSITIVE_HEALTH_CONVERSATION",
            "DEPRECATED_READ_CALENDAR",
            "DEPRECATED_WRITE_CALENDAR"
          ],
          "enumDescriptions": [
            "Should only happen when the variable is uninitialized.",
            "Indicates that there is no sensitivity mode yet.",
            "Indicates that no sensitivity mode is active.",
            "Indicates that we are in send email sensitivity mode.",
            "Indicates that we are in search email sensitivity mode.",
            "Indicates that we are in AoG conversation with sensitivity mode active. go/ael-limited-logging",
            "Home Automation pin/paraphrase anwsering query.",
            "The sensitivity mode for searching Google Drive documents.",
            "Indicates that we are in read message sensitivity mode.",
            "Indicates that we are in send message sensitivity mode.",
            "Indicates that we are in broadcast sensitivity mode.",
            "Indicates that we are in call sensitivity mode.",
            "Indicates that we are in Notes and Lists sensitivity mode.",
            "Indicates that we are in device actions auth sensitivity mode.",
            "Indicates that we are in Interpreter Mode sensitivity mode.",
            "Indicates the we are in voice match enrollment sensitivity mode.",
            "Indicates that we are in Reminders sensitivity mode.",
            "Indicates that we are in designed for family sensistivity mode (i.e. the query relates to kids content).",
            "Indicates that we are in calendar sensitivity mode (covers read & write).",
            "Indicates that we are in health and fitness sensitivity mode.",
            "Indicates that we are in 3P media provider Spotify sensitivity mode. This mode is set when a play-media query is intended to be fulfilled by Spotify app when one of the following conditions is met: 1) The query explicitly asks to play on Spotify app. 2) Spotify is the preferred provider for the user. 3) The query requests a Spotify exclusive content. Please see Policy requirements (go/sp-policy-spotify) and design doc (go/spotify-podcast-limited-logging) for reference.",
            "Indicates that we are in app action health sensitivity mode.",
            "Indicates that we are in Dragonglass home feed sensitivity mode.",
            "Indicates that we are in searching G Suite entities mode. This mode covers Drive documents search, email search, and calendar search.",
            "Indicates that we are in Assistant CSAT survey sensitivity mode.",
            "Indicates that we are in Assistant Memory sensitivity mode. Contact: assistant-memory@google.com",
            "The following enum values have been deprecated and removed. Replaced by HEALTH_AND_FITNESS (b/147649824)",
            "Replaced by CALENDAR (b/144898723)",
            ""
          ],
          "type": "string"
        },
        "syntheticIntent": {
          "$ref": "SearchPolicyRankableSensitivitySyntheticIntent"
        },
        "winningFulfillment": {
          "$ref": "SearchPolicyRankableSensitivityFulfillment"
        }
      },
      "type": "object"
    },
    "SearchPolicyRankableSensitivityAttentionalEntity": {
      "description": "Attentional entities (AE) can be pulled from arguments of interpretations, entities annotated by Aqua or QRef annotators, and entities mentioned in Assistant's response and annotated by the fulfillment logic (see https://g3doc.corp.google.com/quality/dialog_manager/attentional_entities/g3doc/overview.md#overview). Sensitivity of AEs can be marked by (1) feature developers in a Monastery frame, (2) code to infer the sensitivity from Argument provenance, and (3) entity annotators, such as Aqua annotator and QRef annotator. See go/sensitive-ae.",
      "id": "SearchPolicyRankableSensitivityAttentionalEntity",
      "properties": {
        "aeOrigin": {
          "enum": [
            "UNKNOWN_ORIGIN",
            "MONASTERY_VERTICAL_DEVELOPER",
            "ARGUMENT_PROVENANCE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SearchPolicyRankableSensitivityFollowOn": {
      "description": "Sensitivity is marked at end of the last turn. See go/followon-sensitivity for more details.",
      "id": "SearchPolicyRankableSensitivityFollowOn",
      "properties": {
        "blockNonV2SearchBackends": {
          "description": "Should e2e search candidates running in parallel with QU (eg. GBot) be blocked.",
          "type": "boolean"
        },
        "ignoreQueryUnderstanding": {
          "description": "Iff true this follow-on sensitivity will rank above the ones determined by query understanding (QU).",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SearchPolicyRankableSensitivityFulfillment": {
      "description": "Marks that this sensitivity is from fulfillment.",
      "id": "SearchPolicyRankableSensitivityFulfillment",
      "properties": {},
      "type": "object"
    },
    "SearchPolicyRankableSensitivityGroundingProvider": {
      "description": "Marks that sensitivity is from a Grounding Provider.",
      "id": "SearchPolicyRankableSensitivityGroundingProvider",
      "properties": {},
      "type": "object"
    },
    "SearchPolicyRankableSensitivityPrefilter": {
      "description": "Deprecated, do not use.",
      "id": "SearchPolicyRankableSensitivityPrefilter",
      "properties": {
        "propagateOnly": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SearchPolicyRankableSensitivityQueryUnderstanding": {
      "description": "Sensitivity is produced by QU.",
      "id": "SearchPolicyRankableSensitivityQueryUnderstanding",
      "properties": {
        "intentOnlyNoPii": {
          "description": "QU dectects a sensitive intent with no sensitive content (eg., [Send email]). This flag is only used to trigger a sensitive feature because as a precaution all sensitive features should check current sensitivity mode before triggering; but will NOT block any backends, which means all other features can compete fairly.",
          "type": "boolean"
        },
        "rewrittenQuery": {
          "description": "The rewritten query this sensitivity is for. Note different query rewrites could produce different sensitivities.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SearchPolicyRankableSensitivitySyntheticIntent": {
      "description": "Marks that this sensitivity is from a synthetic intent.",
      "id": "SearchPolicyRankableSensitivitySyntheticIntent",
      "properties": {},
      "type": "object"
    },
    "SecurityCredentialsAllAuthenticatedUsersProto": {
      "description": "Represents a principal who has authenticated as any kind of user which the application understands. This is typically used for \"wiki-like\" security, where anyone is allowed access so long as they can be held accountable for that access. Since the purpose is knowing whom to blame, it is up to the application to decide what kinds of users it knows how to blame. For example, an application might choose to include GAIA users in \"all authenticated users\", but not include MDB users. Nothing here.",
      "id": "SecurityCredentialsAllAuthenticatedUsersProto",
      "properties": {},
      "type": "object"
    },
    "SecurityCredentialsCapTokenHolderProto": {
      "description": "Represents a principal which possesses a particular secret string whose cryptographic hash is specified here. CapTokens (\"Capability Tokens\") are used in ACLProto. It's expected that ACLs with CapTokenHolders will strongly enforce them by Keystore-wrapping crypto keys for the corresponding CapTokens.",
      "id": "SecurityCredentialsCapTokenHolderProto",
      "properties": {
        "tokenHmacSha1Prefix": {
          "description": "The hash of the corresponding capability token. The value is defined to be identical to the one in acl.proto's CapTokenMetadata: 10-byte prefix of HMAC-SHA1 of the token. The HMAC key is the following fixed (non-secret) 512-bit value: 79b1c8f4 82baf523 b8a9ab4a e960f438 c45be041 11f1f222 e8a3f64d aeb05e3d c3576acc ec649194 aede422c 4e48e0d1 ff21234a a6ed6b49 a7fa592e efd7bba3",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsChatProto": {
      "description": "Represents the invitees or other users associated with a Babel Chat (see http://goto/babel). Corresponds to GroupType CHAT in //social/graph/storage/proto/data.proto.",
      "id": "SecurityCredentialsChatProto",
      "properties": {
        "chatId": {
          "description": "Chat IDs consist of alphanumeric characters and colons. Currently required.",
          "type": "string"
        },
        "memberType": {
          "description": "The type of Chat members to consider, e.g. \"all members\" vs. \"invitee\" These are defined by legacy_relation_id values in social.graph.storage.EdgeTypeEnum.EdgeType enum options in social/graph/storage/proto/id.proto. See chat.pb (defined in production/config/cdd/socialgraph/mixer_config/prod/node_type_config) for all valid edge types associated with chat. Currently required.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsCircleProto": {
      "description": "Represents a Google+ Circle. Currently (12/2011), a Circle is identical to the ContactGroup with matching parameters, but Circle must only be used for true Circles and not other Focus groups, and should be preferred over ContactGroup where applicable. Soon it may become more efficient to check membership in a Circle than in a ContactGroup (see http://go/superglue). Support for this principal type is currently (12/2011) incomplete -- e.g., Keystore does not support it yet (see b/5703421).",
      "id": "SecurityCredentialsCircleProto",
      "properties": {
        "circleId": {
          "description": "Circle ID is unique only relative to the owner's Gaia ID. Currently required.",
          "format": "int64",
          "type": "string"
        },
        "ownerGaiaId": {
          "description": "The owner of the circle. Currently required.",
          "format": "int64",
          "type": "string"
        },
        "requiredConsistencyTimestampUsec": {
          "description": "If present, then tests for membership in this circle must use data known to be at least as fresh as the given (FBS-assigned) timestamp. See http://go/fbs-consistent-read-after-important-write Before using this, be sure that any service checking authorization against this circle supports checking consistency timestamps. For example, as of 12/2011, Keystore only supports this for the Moonshine configuration, and in others authorization checks will fail if the timestamp is present.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsCloudPrincipalProto": {
      "description": "Principal associated with a Cloud Principal representing third party user.",
      "id": "SecurityCredentialsCloudPrincipalProto",
      "properties": {
        "id": {
          "description": "Format: \"{identity-pool}:{subject}#\" Details: go/cloud-principal-identifiers",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsContactGroupProto": {
      "description": "A group of contacts for a given user, as described in http://cs/p#google3/focus/backend/proto/backend.proto Historically (and in still-existing ACLs), this was used to represent Google+ circles as well as contact groups, but this use is now deprecated. New code should use the CIRCLE principal type to represent Google+ circles.",
      "id": "SecurityCredentialsContactGroupProto",
      "properties": {
        "groupId": {
          "description": "Group ID is unique only relative to the owner's Gaia ID.",
          "format": "int64",
          "type": "string"
        },
        "ownerGaiaId": {
          "format": "int64",
          "type": "string"
        },
        "requiredConsistencyTimestampUsec": {
          "description": "If present, then tests for membership in this ContactGroup must use data known to be at least as fresh as the given (FBS-assigned) timestamp. See http://go/fbs-consistent-read-after-important-write Before using this, be sure that any service checking authorization against this group supports checking consistency timestamps. For example, as of 12/2011, Keystore only supports this for the Moonshine configuration, and in others authorization checks will fail if the timestamp is present.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsEmailOwnerProto": {
      "description": "Represents a verified owner of the given email address. Note that a single address may have many owners, and a single user may own many addresses. (All lower-case, in display form -- see com.google.gaia.client.GaiaEmail)",
      "id": "SecurityCredentialsEmailOwnerProto",
      "properties": {
        "email": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsEventProto": {
      "description": "Represents the invitees or other users associated with a Google+ Event (see http://goto/events-backend-design).",
      "id": "SecurityCredentialsEventProto",
      "properties": {
        "eventId": {
          "description": "Event IDs consist of alphanumeric characters and colons. Currently required.",
          "type": "string"
        },
        "memberType": {
          "description": "The type of Event members to consider, e.g. \"all members\" vs. \"owners\" vs. \"admins\". These are defined by legacy_relation_id values in social.graph.storage.EdgeTypeEnum.EdgeType enum options in social/graph/storage/proto/id.proto. See event.pb (defined in production/config/cdd/socialgraph/mixer_config/prod/node_type_config) for all valid edge types associated with event. Currently required.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsGaiaGroupProto": {
      "id": "SecurityCredentialsGaiaGroupProto",
      "properties": {
        "groupId": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsGaiaUserProto": {
      "description": "A Gaia account, which may represent a user, device, service account, etc. For prod (@prod.google.com) accounts, use MdbUserProto instead.",
      "id": "SecurityCredentialsGaiaUserProto",
      "properties": {
        "userId": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsHostProto": {
      "description": "Represents a single host. Optionally, the MDB owner of the host can be specified.",
      "id": "SecurityCredentialsHostProto",
      "properties": {
        "hostName": {
          "description": "Lower-case, fully qualified hostname.",
          "type": "string"
        },
        "hostOwner": {
          "description": "If present, then any checks that compare this Principal to LOAS peer info must confirm the peer's machine owner is equal to 'host_owner'. If absent, then any peer machine owner is acceptable.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsLdapGroupProto": {
      "id": "SecurityCredentialsLdapGroupProto",
      "properties": {
        "groupName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsLdapUserProto": {
      "id": "SecurityCredentialsLdapUserProto",
      "properties": {
        "userName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsMdbGroupProto": {
      "description": "An entity from the MDB namespace that is to be interpreted as a group. If using this for authorization, you should do an exact match of the peer role against group_name or any of the names in the Chubby expansion of the MDB group named group_name.",
      "id": "SecurityCredentialsMdbGroupProto",
      "properties": {
        "groupName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsMdbUserProto": {
      "description": "An entity from the MDB namespace that is to be interpreted as a user. If using this for authorization, you should only do an exact match on the peer role against user_name.",
      "id": "SecurityCredentialsMdbUserProto",
      "properties": {
        "gaiaId": {
          "description": "Do not set this field. Contact credentials-eng@ if you believe you absolutely need to use it. This is the @prod.google.com Gaia ID that corresponds to the MDB user, see go/authn-merge for details. This field may always be safely ignored when performing an authorization check.",
          "format": "int64",
          "type": "string"
        },
        "userName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsOAuthConsumerProto": {
      "description": "Represents an OAuth consumer, a/k/a AuthSub target. These principals are identified by domain name (e.g., example.com). Historically, Dasher domain GAIA group IDs have been used instead, but that doesn't work: http://go/tricky-gaia-ids",
      "id": "SecurityCredentialsOAuthConsumerProto",
      "properties": {
        "domain": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsPostiniUserProto": {
      "description": "See http://s/?fileprint=//depot/google3/security/authentication/postini/auth_token.proto",
      "id": "SecurityCredentialsPostiniUserProto",
      "properties": {
        "postiniUserId": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsPrincipalProto": {
      "description": "A Principal represents something to which permissions are assigned, often but not always a user or group of some kind. It is most appropriate for use in ACLs and authorization checks. Callers should prefer to use the wrapper classes in google3/security/credentials/public/principal.h google3/java/com/google/security/credentials/Principal.java google3/security/credentials/go/principal.go unless direct proto access is essential. If you update this protocol buffer, please update the wrapper classes as well. LINT.IfChange",
      "id": "SecurityCredentialsPrincipalProto",
      "properties": {
        "allAuthenticatedUsers": {
          "$ref": "SecurityCredentialsAllAuthenticatedUsersProto",
          "description": "scope = ALL_AUTHENTICATED_USERS"
        },
        "capTokenHolder": {
          "$ref": "SecurityCredentialsCapTokenHolderProto",
          "description": "scope = CAP_TOKEN_HOLDER"
        },
        "chat": {
          "$ref": "SecurityCredentialsChatProto",
          "description": "scope = CHAT"
        },
        "circle": {
          "$ref": "SecurityCredentialsCircleProto",
          "description": "scope = CIRCLE"
        },
        "cloudPrincipal": {
          "$ref": "SecurityCredentialsCloudPrincipalProto",
          "description": "scope = CLOUD_PRINCIPAL"
        },
        "contactGroup": {
          "$ref": "SecurityCredentialsContactGroupProto",
          "description": "scope = CONTACT_GROUP"
        },
        "emailOwner": {
          "$ref": "SecurityCredentialsEmailOwnerProto",
          "description": "scope = EMAIL_OWNER"
        },
        "event": {
          "$ref": "SecurityCredentialsEventProto",
          "description": "scope = EVENT"
        },
        "gaiaGroup": {
          "$ref": "SecurityCredentialsGaiaGroupProto",
          "description": "scope = GAIA_GROUP"
        },
        "gaiaUser": {
          "$ref": "SecurityCredentialsGaiaUserProto",
          "description": "scope = GAIA_USER"
        },
        "host": {
          "$ref": "SecurityCredentialsHostProto",
          "description": "scope = HOST"
        },
        "ldapGroup": {
          "$ref": "SecurityCredentialsLdapGroupProto",
          "description": "scope = LDAP_GROUP"
        },
        "ldapUser": {
          "$ref": "SecurityCredentialsLdapUserProto",
          "description": "scope = LDAP_USER"
        },
        "mdbGroup": {
          "$ref": "SecurityCredentialsMdbGroupProto",
          "description": "scope = MDB_GROUP"
        },
        "mdbUser": {
          "$ref": "SecurityCredentialsMdbUserProto",
          "description": "scope = MDB_USER"
        },
        "oauthConsumer": {
          "$ref": "SecurityCredentialsOAuthConsumerProto",
          "description": "scope = OAUTH_CONSUMER;"
        },
        "postiniUser": {
          "$ref": "SecurityCredentialsPostiniUserProto",
          "description": "scope = POSTINI_USER"
        },
        "rbacRole": {
          "$ref": "SecurityCredentialsRbacRoleProto",
          "description": "scope = RBAC_ROLE"
        },
        "rbacSubject": {
          "$ref": "SecurityCredentialsRbacSubjectProto",
          "description": "scope = RBAC_SUBJECT"
        },
        "resourceRole": {
          "$ref": "SecurityCredentialsResourceRoleProto",
          "description": "scope = RESOURCE_ROLE"
        },
        "scope": {
          "description": "This is only optional because required enums cannot be extended. Currently required.",
          "enum": [
            "INVALID",
            "GAIA_USER",
            "GAIA_GROUP",
            "LDAP_USER",
            "LDAP_GROUP",
            "MDB_USER",
            "MDB_GROUP",
            "POSTINI_USER",
            "CONTACT_GROUP",
            "SIMPLE_SECRET_HOLDER",
            "SIGNING_KEY_POSSESSOR",
            "ALL_AUTHENTICATED_USERS",
            "OAUTH_CONSUMER",
            "HOST",
            "SOCIAL_GRAPH_NODE",
            "EMAIL_OWNER",
            "CAP_TOKEN_HOLDER",
            "CIRCLE",
            "SQUARE",
            "EVENT",
            "RESOURCE_ROLE",
            "CHAT",
            "YOUTUBE_USER",
            "UNUSED_ZWIEBACK_SESSION",
            "ZWIEBACK_SESSION",
            "RBAC_ROLE",
            "RBAC_SUBJECT",
            "CLOUD_PRINCIPAL"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "next tag: 29"
          ],
          "type": "string"
        },
        "signingKeyPossessor": {
          "$ref": "SecurityCredentialsSigningKeyPossessorProto",
          "description": "scope = SIGNING_KEY_POSSESSOR"
        },
        "simpleSecretHolder": {
          "$ref": "SecurityCredentialsSimpleSecretHolderProto",
          "description": "scope = SIMPLE_SECRET_HOLDER"
        },
        "socialGraphNode": {
          "$ref": "SecurityCredentialsSocialGraphNodeProto",
          "description": "scope = SOCIAL_GRAPH_NODE"
        },
        "square": {
          "$ref": "SecurityCredentialsSquareProto",
          "description": "scope = SQUARE"
        },
        "youtubeUser": {
          "$ref": "SecurityCredentialsYoutubeUserProto",
          "description": "scope = YOUTUBE_USER"
        },
        "zwiebackSession": {
          "$ref": "SecurityCredentialsZwiebackSessionProto",
          "description": "scope = ZWIEBACK_SESSION"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsRbacRoleProto": {
      "description": "Principal associated with a given RBAC role. This principal is used by Sphinx Provisioning Service for RBAC provisionable (go/sphinx-rbacz).",
      "id": "SecurityCredentialsRbacRoleProto",
      "properties": {
        "name": {
          "type": "string"
        },
        "objectId": {
          "type": "string"
        },
        "rbacNamespace": {
          "description": "DEPRECATED as of 01.11.2019",
          "type": "string"
        },
        "rbacRoleName": {
          "description": "Format: \"role/z?\" - \"role\" is the Sphinx globally unique name of the Sphinx role that provisions the RBAC role. - \"/z?\" suffix indicates which Zanzibar environment stores the role membership data (\"/zd\": dev, \"/zs\": staging, \"/zp\": prod, \"/zt\": local test instance). Example: \"mysystem_myrole/zp\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsRbacSubjectProto": {
      "description": "Principal associated with a given RBAC subject. This principal is used by Sphinx Provisioning Service for RBAC provisionable (go/sphinx-rbacz).",
      "id": "SecurityCredentialsRbacSubjectProto",
      "properties": {
        "username": {
          "description": "Format \"username\" without \"@domain\", e.g., \"bogdand\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsResourceRoleProto": {
      "description": "A type of sharing target that points to some resource's ACL. Used to refer to the set of Principals that have the given privilege ('role_id') for the given resource ('application_id', 'object_id', 'object_part'). The meaning of 'role_id' is interpreted only by implementations of AclRpcService and is usually dependent on 'application_id' All fields except object_part are required. If present, object_part must be non-empty.",
      "id": "SecurityCredentialsResourceRoleProto",
      "properties": {
        "applicationId": {
          "type": "string"
        },
        "objectId": {
          "type": "string"
        },
        "objectPart": {
          "type": "string"
        },
        "roleId": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsSigningKeyPossessorProto": {
      "description": "Represents a principal who possesses a signing key corresponding to the verification key or keyset described here.",
      "id": "SecurityCredentialsSigningKeyPossessorProto",
      "properties": {
        "keymasterKeyType": {
          "description": "This value must be from the KeyMetadata.Type enum in keymaster.proto.",
          "format": "int32",
          "type": "integer"
        },
        "serializedVerificationKey": {
          "description": "The actual verification key bytes corresponding to the above type.",
          "format": "byte",
          "type": "string"
        },
        "serializedVerificationKeyset": {
          "description": "The binary serialized Keymaster SerializedReader of a public keyset. The keyset must contain exactly one key. N.B.: If this field is populated, serialized_verification_key should be set to the empty string and keymaster_key_type should be set to zero.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsSimpleSecretHolderProto": {
      "description": "Represents a principal which possesses a particular, presumably secret, string. Useful for things like \"auth keys,\" used for anonymous sharing. Since representing this principal with the actual secret included reveals the secret, it's best if the requisite condition is enforced in some other way, for example via Keystore wrapping attributes (Keystore will unwrap only if the specified secret, aka \"attribute\", is presented). All that's stored here is an identifying label.",
      "id": "SecurityCredentialsSimpleSecretHolderProto",
      "properties": {
        "label": {
          "$ref": "SecurityCredentialsSimpleSecretLabelProto",
          "description": "A descriptive label to help identify a relevant ACL entry or otherwise disambiguate this instance."
        }
      },
      "type": "object"
    },
    "SecurityCredentialsSimpleSecretLabelProto": {
      "description": "SimpleSecretProto (in authenticator.proto) and SimpleSecretHolderProto (below) share the notion of a \"label\", which identifies a particular secret without (hopefully) revealing the secret. Note that a SimpleSecretLabel only disambiguates between secrets used to get access to some particular object. Two different secrets that apply to two different objects could have the same label. For example, in the common sharing model, each object has no more than one \"auth key\". Therefore, the label for an auth key simply has type = AUTH_KEY with no additional information. In theory, we could add some sort of resource ID to SimpleSecretLabel to make it more explicit. However, in practice, this is never really needed. A SimpleSecret for one object is never used to authorize a request on some other object, so there is no ambiguity. Also, since SimpleSecrets must obviously be unguessable, there is no risk that a SimpleSecret intended for one object will accidentally grant access to another.",
      "id": "SecurityCredentialsSimpleSecretLabelProto",
      "properties": {
        "capabilityId": {
          "description": "***DEPRECATED (3-Oct-2011) *** This field should be deleted when code stops using CAP_TOKEN labels. Used when type = CAP_TOKEN. When a CAP_TOKEN label appears in a SimpleSecretHolder Principal, |capability_id| must be filled in to identify one of the capabilities on the ACL. When a CAP_TOKEN label appears in a SimpleSecret Authenticator, it is NOT necessary to fill in |capability_id| -- ACL Service will find the ID by searching all capabilities on the ACL for one associated with the token given by the SimpleSecret's secret data. If |capability_id| is specified, though, then the Authenticator will only be accepted if it actually matches that particular token ID.",
          "format": "int32",
          "type": "integer"
        },
        "genericLabel": {
          "description": "Used when type = GENERIC_SECRET",
          "format": "byte",
          "type": "string"
        },
        "inviteId": {
          "description": "Used when type == INVITE.",
          "format": "int64",
          "type": "string"
        },
        "type": {
          "description": "This is optional because required enums cannot be extended.",
          "enum": [
            "INVALID",
            "AUTH_KEY",
            "INVITE",
            "GENERIC_SECRET",
            "CAP_TOKEN",
            "REKE"
          ],
          "enumDescriptions": [
            "Used as a default value.",
            "The singleton auth key for a common-sharing ACL. No other fields of SimpleSecretLabelProto need to be filled in, since there is only one of these per ACL. The corresponding secret is the auth key encoded in 64-bit big-endian.",
            "A common-sharing invite token. |invite_id| (below) must be set to identify the invite. The corresponding secret is the SecretMaterial, as defined by InviteToken.SecretMaterial in acl.proto, encoded in 64-bit big-endian. If there is no SecretMaterial, the secret should be omitted; in this case the invite ID itself is the secret, which is less secure.",
            "A generic secret value. Do not use this if any more specific type is appropriate.",
            "***DEPRECATED (3-Oct-2011)*** Use the new CapTokenProto and CapTokenHolderProto instead. A capability token. The corresponding secret is an arbitrary-length random byte string (recommended: 128 bits). |capability_id| may be filled in (see below). See CapTokenMetadata in acl.proto.",
            "Identifies a principal that can perform a successful REKE handshake. The holder is not authenticated by presenting a SimpleSecretProto, but rather by knowing either the REKE resumption ticket secret or the private key corresponding to a public key specified outside the PrincipalProto. For more information, see: http://goto.google.com/loas2cert"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsSocialGraphNodeProto": {
      "description": "Represents a user pseudonym. Pseudonyms are linked accounts on Google and third-party services (e.g. YouTube or Twitter) and are described by a Social Graph Node.",
      "id": "SecurityCredentialsSocialGraphNodeProto",
      "properties": {
        "sgnDomain": {
          "description": "The fields from ccc/socialgraph/socialgraphnode.proto:SgnNode that uniquely identify a social graph node. The 'ident' field is not included here because its value can be changed.",
          "type": "string"
        },
        "sgnPk": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsSquareProto": {
      "description": "Represents the set of members (of a given type) in a Google+ Square (see http://go/squares). A Square with default member_type is currently (1/2012) identical to the GaiaGroup with the same ID, but that is expected to change soon (see http://go/superglue). Support for this principal type is currently (1/2012) incomplete -- e.g., Keystore does not support it yet (see b/5703421).",
      "id": "SecurityCredentialsSquareProto",
      "properties": {
        "memberType": {
          "description": "The type of Square members to consider, e.g. \"all members\" vs. \"owners\" vs. \"admins\". These are defined by legacy_relation_id values in social.graph.storage.EdgeTypeEnum.EdgeType enum options in social/graph/storage/proto/id.proto. See square.pb (defined in production/config/cdd/socialgraph/mixer_config/prod/node_type_config) for all valid edge types associated with square. Currently required.",
          "format": "int32",
          "type": "integer"
        },
        "squareId": {
          "description": "Currently required.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsYoutubeUserProto": {
      "id": "SecurityCredentialsYoutubeUserProto",
      "properties": {
        "youtubeUserId": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SecurityCredentialsZwiebackSessionProto": {
      "description": "See go/zwieback. New uses of Zwieback sessions must be approved via go/zwieback-request.",
      "id": "SecurityCredentialsZwiebackSessionProto",
      "properties": {
        "zwiebackSessionId": {
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SentenceBoundaryAnnotations": {
      "description": "Sentence boundaries.",
      "id": "SentenceBoundaryAnnotations",
      "properties": {
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Used for application-specific information about the whole set of SentenceBoundaryAnnotations. Example: SAFT Team uses this to store an nlp_saft.Document proto giving any processing errors encountered."
        },
        "instance": {
          "items": {
            "$ref": "SentenceBoundaryAnnotationsInstance"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SentenceBoundaryAnnotationsInstance": {
      "id": "SentenceBoundaryAnnotationsInstance",
      "properties": {
        "begin": {
          "format": "int32",
          "type": "integer"
        },
        "cleanText": {
          "description": "A clean version of .text() generated by using CleanText() and stripping unnecessary whitespace.",
          "type": "string"
        },
        "context": {
          "description": "Plain text context from the page within which the annotation occurred.",
          "type": "string"
        },
        "contextBegin": {
          "description": "Byte offsets for the clean text context above.",
          "format": "int32",
          "type": "integer"
        },
        "contextEnd": {
          "format": "int32",
          "type": "integer"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Used for application-specific information about this annotation."
        },
        "text": {
          "description": "Original UTF-8 document text occurring in the range [begin, end).",
          "type": "string"
        },
        "toIndex": {
          "description": "Used to mark the annotations selected to be indexed.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SentimentSentiment": {
      "description": "This proto contains the sentiment and emotions that the user is exhibiting at the time of the query. NEXT ID: 4",
      "id": "SentimentSentiment",
      "properties": {
        "polarity": {
          "description": "Polarity represents the sentiment towards the subject.",
          "enum": [
            "UNKNOWN",
            "VERY_POSITIVE",
            "POSITIVE",
            "NEUTRAL",
            "NEGATIVE",
            "VERY_NEGATIVE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "userBehaviors": {
          "$ref": "SentimentSentimentBehaviors"
        },
        "userEmotions": {
          "$ref": "SentimentSentimentEmotions",
          "description": "The emotions that the user is feeling."
        }
      },
      "type": "object"
    },
    "SentimentSentimentBehaviors": {
      "description": "The set of behavior signals that the user is expressing/demonstrating that is detected by the sentiment analysis. These signals are used to help assistant determine the proper response behavior. NEXT ID = 2",
      "id": "SentimentSentimentBehaviors",
      "properties": {
        "politeness": {
          "description": "The degree to which the user is showing politeness.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SentimentSentimentEmotions": {
      "description": "Basic emotions. NEXT ID: 7",
      "id": "SentimentSentimentEmotions",
      "properties": {
        "anger": {
          "format": "uint32",
          "type": "integer"
        },
        "disgust": {
          "format": "uint32",
          "type": "integer"
        },
        "fear": {
          "format": "uint32",
          "type": "integer"
        },
        "happiness": {
          "format": "uint32",
          "type": "integer"
        },
        "sadness": {
          "format": "uint32",
          "type": "integer"
        },
        "surprise": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ShingleInfoPerDocData": {
      "description": "This message represents shingle-related information obtained from a document.",
      "id": "ShingleInfoPerDocData",
      "properties": {
        "numShingles": {
          "description": "Total number of shingles in the document.",
          "format": "int32",
          "type": "integer"
        },
        "source": {
          "description": "A list of all sources.",
          "items": {
            "$ref": "ShingleSource"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ShingleSource": {
      "description": "This message represents a source of shingles. Used by ShingleInfoPerDocData.",
      "id": "ShingleSource",
      "properties": {
        "id": {
          "description": "Hash-value of the URL.",
          "format": "int32",
          "type": "integer"
        },
        "numShingles": {
          "description": "Number of shingles originating from this source.",
          "format": "int32",
          "type": "integer"
        },
        "timestamp": {
          "description": "First-seen timestamp of the source.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ShoppingWebentityShoppingAnnotationInferredImage": {
      "description": "Images inferred from context instead of propagated from Shopping backends. The same image might be inferred via different means; then it may appear multiple times in Offer.inferred_images list with different values of inferred_image_type field.",
      "id": "ShoppingWebentityShoppingAnnotationInferredImage",
      "properties": {
        "inferredImageId": {
          "format": "uint64",
          "type": "string"
        },
        "inferredImageSource": {
          "enum": [
            "INFERRED_IMAGE_SOURCE_UNKNOWN",
            "INFERRED_IMAGE_SOURCE_WEB_INDEX",
            "INFERRED_IMAGE_SOURCE_OVERLAY",
            "INFERRED_IMAGE_SOURCE_SCARAB"
          ],
          "enumDescriptions": [
            "",
            "Web Index images are extracted from WebIndex docjoins. It has a tendency to be less precise due to docjoin canonicalization combining data from different crawled webpages.",
            "Each offer should have a dedicated docjoin which reduces the chances of mistakes, either when matching an offer with a web document or due to docjoin canonicalization. But image selection for overlay could be slightly different to the WEB_INDEX source, and overlay coverage could affect the source as well.",
            "Scarab crawls HTML landing pages of the offers and extract images using three types of extractors: Crawzall, schema_dot_org, and open_graph. It extracts only image URLs (without image docid). Images crawled by scarab might not be WEB_INDEX or OVERLAY because scarab retrieves the data directly from the landing page and is not connected with index or overlays."
          ],
          "type": "string"
        },
        "inferredImageType": {
          "enum": [
            "INFERRED_IMAGE_TYPE_UNKNOWN",
            "INFERRED_IMAGE_TYPE_NEARDUP_STARBURST_V3",
            "INFERRED_IMAGE_TYPE_STRIDE_EXTRACTION",
            "INFERRED_IMAGE_TYPE_CRAWLED_OFFER_DUPLICATE",
            "INFERRED_IMAGE_TYPE_NEARDUP_FOR_INFERRED_IMAGES",
            "INFERRED_IMAGE_TYPE_OTHER_ML_MATCHED_IMAGES",
            "INFERRED_IMAGE_TYPE_PRODUCT_BLOCKS",
            "INFERRED_IMAGE_TYPE_SCHEMA_DOT_ORG",
            "INFERRED_IMAGE_TYPE_CRAWZALL",
            "INFERRED_IMAGE_TYPE_OPEN_GRAPH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "neardupInfo": {
          "description": "This field will only be populated if the inferred image is a neardup of an inferred image. It stores the type and source of the images it is a neardup of.",
          "items": {
            "$ref": "ShoppingWebentityShoppingAnnotationInferredImageNeardupInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ShoppingWebentityShoppingAnnotationInferredImageNeardupInfo": {
      "id": "ShoppingWebentityShoppingAnnotationInferredImageNeardupInfo",
      "properties": {
        "inferredImageSource": {
          "enum": [
            "INFERRED_IMAGE_SOURCE_UNKNOWN",
            "INFERRED_IMAGE_SOURCE_WEB_INDEX",
            "INFERRED_IMAGE_SOURCE_OVERLAY",
            "INFERRED_IMAGE_SOURCE_SCARAB"
          ],
          "enumDescriptions": [
            "",
            "Web Index images are extracted from WebIndex docjoins. It has a tendency to be less precise due to docjoin canonicalization combining data from different crawled webpages.",
            "Each offer should have a dedicated docjoin which reduces the chances of mistakes, either when matching an offer with a web document or due to docjoin canonicalization. But image selection for overlay could be slightly different to the WEB_INDEX source, and overlay coverage could affect the source as well.",
            "Scarab crawls HTML landing pages of the offers and extract images using three types of extractors: Crawzall, schema_dot_org, and open_graph. It extracts only image URLs (without image docid). Images crawled by scarab might not be WEB_INDEX or OVERLAY because scarab retrieves the data directly from the landing page and is not connected with index or overlays."
          ],
          "type": "string"
        },
        "inferredImageType": {
          "enum": [
            "INFERRED_IMAGE_TYPE_UNKNOWN",
            "INFERRED_IMAGE_TYPE_NEARDUP_STARBURST_V3",
            "INFERRED_IMAGE_TYPE_STRIDE_EXTRACTION",
            "INFERRED_IMAGE_TYPE_CRAWLED_OFFER_DUPLICATE",
            "INFERRED_IMAGE_TYPE_NEARDUP_FOR_INFERRED_IMAGES",
            "INFERRED_IMAGE_TYPE_OTHER_ML_MATCHED_IMAGES",
            "INFERRED_IMAGE_TYPE_PRODUCT_BLOCKS",
            "INFERRED_IMAGE_TYPE_SCHEMA_DOT_ORG",
            "INFERRED_IMAGE_TYPE_CRAWZALL",
            "INFERRED_IMAGE_TYPE_OPEN_GRAPH"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ShoppingWebentityShoppingAnnotationProductRating": {
      "description": "Information about a rating provided for a product. This can represent an aggregated rating if count is set. Next Id: 7",
      "id": "ShoppingWebentityShoppingAnnotationProductRating",
      "properties": {
        "count": {
          "description": "Number of ratings/reviews aggregated to create this product rating. If there are no ratings yet, this field will be explicitly set to zero, so whether this field is set should be checked using has_count.",
          "format": "int64",
          "type": "string"
        },
        "maxValueMillis": {
          "format": "int64",
          "type": "string"
        },
        "minValueMillis": {
          "description": "The lower and upper bounds of the rating values that could be submitted for the product. (Note that it is not the min/max ratings submitted for the product, it is the min/max that can hypothetically be submitted.)",
          "format": "int64",
          "type": "string"
        },
        "source": {
          "enum": [
            "PRODUCT_RATING_SOURCE_UNKNOWN",
            "PRODUCT_RATING_SOURCE_CRAWLED_DATA"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "value": {
          "description": "The value of this rating normalized between 0 and 5. This will not be set if count is set to 0.",
          "format": "double",
          "type": "number"
        },
        "valueMillis": {
          "description": "The non-normalized aggregated value of the ratings for this product.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ShoppingWebentityShoppingAnnotationSoriVersionId": {
      "description": "Versioning Information used for Logging Purposes. See go/sori-logjoining.",
      "id": "ShoppingWebentityShoppingAnnotationSoriVersionId",
      "properties": {
        "f1CommitTimestampMicros": {
          "format": "int64",
          "type": "string"
        },
        "opaqueSoriId": {
          "$ref": "AdsShoppingReportingOffersSerializedSoriId"
        }
      },
      "type": "object"
    },
    "Sitemap": {
      "description": "Note: If you are going to populate any new field in this proto, you probably need to go through the go/dj-new-field and go/index-changes process.",
      "id": "Sitemap",
      "properties": {
        "DEPRECATEDSourceTitle": {
          "description": "DEPRECATED DEPRECATED DEPRECATED In case you didn't realize, these fields are (and have been for some time) deprecated. We'll stop pushing their data to production soon (probably Feb/09) and after a few weeks we'll probably remove them.",
          "type": "string"
        },
        "TargetGroups": {
          "description": "One Sitemap can contain multiple TargetGroups, but only one of them will be displayed to the user - this decision will be made at displaying time and can take into account various factors, such as the users' language and country, currently running experiments, etc.",
          "items": {
            "$ref": "QualitySitemapTargetGroup"
          },
          "type": "array"
        },
        "deprecatedTarget": {
          "items": {
            "$ref": "SitemapDEPRECATED_Target"
          },
          "type": "array"
        },
        "pageAnchorsDocInfo": {
          "$ref": "SdrPageAnchorsDocInfo",
          "description": "This field is populated in the Sitemap MDU subpopulator from cdoc data. This is used to store page anchors information for TopicTagsScrolltoFlow."
        },
        "searchInSite": {
          "description": "Enable site search.",
          "type": "boolean"
        },
        "sitemapType": {
          "enum": [
            "ORIGINAL",
            "EXPANDED",
            "TABLE_OF_CONTENTS",
            "WEBANSWER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "sourceOrgfp": {
          "description": "prevents cross-domain forwarding",
          "format": "uint64",
          "type": "string"
        },
        "sourceUrl": {
          "type": "string"
        },
        "subresultList": {
          "$ref": "QualitySitemapSubresultList",
          "description": "This field is populated in the Sitemap MDU subpopulator from cdoc data. It's not set in the cdoc Sitemap."
        }
      },
      "type": "object"
    },
    "SitemapDEPRECATED_Target": {
      "id": "SitemapDEPRECATED_Target",
      "properties": {
        "DEPRECATEDAnchor": {
          "type": "string"
        },
        "DEPRECATEDRunningAnchor": {
          "type": "boolean"
        },
        "DEPRECATEDTitle": {
          "type": "string"
        },
        "displaytitle": {
          "type": "string"
        },
        "score": {
          "description": "optional, exclude to save space",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SmartphonePerDocData": {
      "description": "This message is used for storing smartphone related information. Note: MobilePerDocData is a similar message, but it's for lowend mobile.",
      "id": "SmartphonePerDocData",
      "properties": {
        "DEPRECATEDDesktopCanonicalDocid": {
          "description": "If set, this page is a smartphone dup, a page serving equivalent contents as another URL (desktop canonical), but in smartphone-optimized style. This field holds the docid of the desktop canonical.",
          "format": "uint64",
          "type": "string"
        },
        "DEPRECATEDMobileHomepageDocid": {
          "description": "Mobile URL for homepages, predicted by the URL rewrite rules. See go/mobile-homepage-prediction.",
          "format": "uint64",
          "type": "string"
        },
        "adsDensityInterstitialViolationStrength": {
          "description": "Indicates if the page is violating mobile ads density interstitial policy and the violation strength. See go/interstitials-for-ads and http://ariane/268642 for details. To save indexing space, we convert the double values in [0.0, 1.0] to intergers in range [0, 1000] by using floor(value * 1000).",
          "format": "int32",
          "type": "integer"
        },
        "isErrorPage": {
          "description": "Indicates if the page serves error to smartphone crawler. go/ramsey-sp404demotion",
          "type": "boolean"
        },
        "isN1Redirect": {
          "description": "Indicates if the page has mobile N-1 redirection. go/ramsey-n1demotion",
          "type": "boolean"
        },
        "isSmartphoneOptimized": {
          "description": "Indicates if the page is rendered in a friendly manner on smartphones. We use this field as tri-state: \"unset\" means the rendering result classification is not available, and \"set as false\" means that the page is rendered in unfriendly manner on smartphones. See also go/modena-ranking.",
          "type": "boolean"
        },
        "isWebErrorMobileContent": {
          "description": "Indicates if the current URL serves error page to desktop crawler and non error page to smartphone crawler.",
          "type": "boolean"
        },
        "maximumFlashRatio": {
          "description": "The ratio of the area of the largest Flash to the render area.",
          "format": "double",
          "type": "number"
        },
        "mobileFriendlyScore": {
          "description": "Mobile friendliness score in the range of [0, 100]. See go/modena-ranking.",
          "format": "int32",
          "type": "integer"
        },
        "violatesMobileInterstitialPolicy": {
          "description": "Indicates if the page is violating mobile interstitial policy and should be demoted. See go/interstitials-ranking-dd for details.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SmearedWebLandingPageEntry": {
      "description": "For legacy purposes, cdocs contain a repeated list of *Entry, whereas it's more convenient elsewhere to contain this information within its own protocol buffer.",
      "id": "SmearedWebLandingPageEntry",
      "properties": {
        "imagesearchDocid": {
          "description": "Source imagesearch docid",
          "format": "uint64",
          "type": "string"
        },
        "webDocid": {
          "description": "Docid of web landing page",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnapshotBox": {
      "description": "A simple 2D box represented by an (x, y) co-ordinate, width and height. Copied from htmlrender_webkit_headless_proto.Document to avoid additional dependency.",
      "id": "SnapshotBox",
      "properties": {
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        },
        "x": {
          "format": "int32",
          "type": "integer"
        },
        "y": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SnapshotImageNode": {
      "id": "SnapshotImageNode",
      "properties": {
        "boundingBox": {
          "$ref": "SnapshotBox"
        },
        "isExternal": {
          "description": "An image is considered external iff both: 1. The image appears in a link that is not in the same org as the document, or the target URL is in a different org. 2. The image src is not in the same org as the document.",
          "type": "boolean"
        },
        "url": {
          "description": "The absolute url of the image as present in the page.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnapshotSnapshotDocument": {
      "id": "SnapshotSnapshotDocument",
      "properties": {
        "imageNode": {
          "items": {
            "$ref": "SnapshotImageNode"
          },
          "type": "array"
        },
        "metaNoPreview": {
          "type": "boolean"
        },
        "metaNoSnippet": {
          "description": "These are set from tags in the web page:",
          "type": "boolean"
        },
        "teradoc": {
          "$ref": "TeragoogleDocumentInfo",
          "description": "If this is present it supercedes all the above data."
        },
        "textNode": {
          "items": {
            "$ref": "SnapshotTextNode"
          },
          "type": "array"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnapshotSnapshotMetadata": {
      "id": "SnapshotSnapshotMetadata",
      "properties": {
        "countDistinctResources": {
          "description": "The number of distinct resources fetched to render the content. This may aid the calculation of total page load time for user experience. For example, if total_content_length is only a few dozen kilobytes, but that is from fetching 100 distinct resources, total page load time might be much higher than the total_content_length would otherwise infer.",
          "format": "uint32",
          "type": "integer"
        },
        "crawlTimestamp": {
          "description": "The time at which the main resource of the Snapshot was fetched, in seconds since epoch. Note that the various page dependencies may have been fetched at much earlier points in time (hours, maybe days) and that this could be off from the actual rendering time.",
          "format": "uint64",
          "type": "string"
        },
        "snapshotDocument": {
          "$ref": "SnapshotSnapshotDocument"
        },
        "snapshotQualityScore": {
          "description": "The score here corresponds to the score in Snapshot, a number between 0.0 and 1.0 (higher the better).",
          "format": "float",
          "type": "number"
        },
        "totalContentSize": {
          "description": "Number of bytes fetched to render the content. For example, to render a web page, this value would include the HTML, stylesheets, images, and all other dependencies. This can be used to calculate a coarse estimate of the total page load time a user might experience.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnapshotTextNode": {
      "description": "The SnapshotDocument contains a list of TextNode's. Each node contains a string of text of the webpage, its bounding box in the agove snapshot image, and its font size (in number of pixels in the snapshot, which could be a fraction number since the snapshot image is typically shrinked). This list of text nodes are extracted from the output from the rendering service: htmlrender_webkit_headless_proto.Document The extraction is done by TrimDocument defined in ./shared/doctrimmer.cc",
      "id": "SnapshotTextNode",
      "properties": {
        "boundingBox": {
          "$ref": "SnapshotBox"
        },
        "fontSize": {
          "format": "float",
          "type": "number"
        },
        "inLink": {
          "description": "One if the current text node is within a link; otherwise zero/not present.",
          "format": "int32",
          "type": "integer"
        },
        "maxSplit": {
          "description": "A value in the range [0,7] (zero if not present) indicating the most \"powerful\" splitting tag since the last text node. See \"enum Category\" in mustang/snippets/taginfo.h.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnippetExtraInfo": {
      "id": "SnippetExtraInfo",
      "properties": {
        "candidateInfo": {
          "description": "Candidates are ordered by their id.",
          "items": {
            "$ref": "SnippetExtraInfoSnippetCandidateInfo"
          },
          "type": "array"
        },
        "containUserQuotes": {
          "description": "Indicates that the snippet candidates all contain uesr quotes.",
          "type": "boolean"
        },
        "containVulgarCandidates": {
          "description": "Indicates if there are any vulgar snippet candidates.",
          "type": "boolean"
        },
        "disableQueryFeatures": {
          "description": "Indicates whether the query relevance features is disabled or not in Muppet scoring.",
          "type": "boolean"
        },
        "snippetBrainSelectedCandidateIndex": {
          "description": "Snippet candidate index selected by snippet brain model. This field will get populated in SnippetFlow in superroot. go/snippets-brain",
          "format": "int32",
          "type": "integer"
        },
        "snippetsbrainModelInfo": {
          "$ref": "SnippetExtraInfoSnippetsBrainModelInfo",
          "description": "SnippetsBrain model information for snippets popup debug."
        }
      },
      "type": "object"
    },
    "SnippetExtraInfoSnippetCandidateInfo": {
      "description": "Next ID: 15",
      "id": "SnippetExtraInfoSnippetCandidateInfo",
      "properties": {
        "boldedRanges": {
          "description": "Bolded ranges in the printed snippet lines.",
          "items": {
            "$ref": "QualitySnippetsTruncationSnippetBoldedRange"
          },
          "type": "array"
        },
        "extendedSnippet": {
          "$ref": "SnippetExtraInfoSnippetCandidateInfoExtendedSnippet"
        },
        "id": {
          "description": "Candidate identifier number, unique among all snippet candidates under each document in each request. What does this number mean: - Muppet candidates: This equals to the candidate's rank by Muppet snippets scorer. - Superroot candidates: No specific meaning, this number should be larger than that of Muppet candidates. This field is used to: - Verify whether snippet brain chooses a different snippet from Muppet (the one chosen by Muppet is always in id 0). - Print debugging information and sort candidates in debug output.",
          "format": "int32",
          "type": "integer"
        },
        "isMuppetSelectedSnippet": {
          "description": "If this snippet is chosen by Muppet.",
          "type": "boolean"
        },
        "isSnippetBrainBoldingTriggered": {
          "description": "If SnippetsBrain bolding model triggered and a bolding span is generated.",
          "type": "boolean"
        },
        "listInfo": {
          "$ref": "MustangReposWwwSnippetsOrganicListSnippetResponse",
          "description": "List information for this candidate, only populated for RADISH_LIST snippets."
        },
        "scoringInfo": {
          "$ref": "SnippetExtraInfoSnippetScoringInfo"
        },
        "sentenceStarts": {
          "description": "Sentence starting positions in the printed snippet lines.",
          "items": {
            "$ref": "QualitySnippetsTruncationSnippetBoldedRangePosition"
          },
          "type": "array"
        },
        "snippet": {
          "description": "Muppet fills snippet lines in `snippet` field.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "snippetText": {
          "description": "`snippet_text` will be filled by snippet brain flow in SR for model scoring and debugging purpose.",
          "type": "string"
        },
        "snippetType": {
          "enum": [
            "SNIPPET_TYPE_UNSPECIFIED",
            "SEQUENCE",
            "SEQUENCE_V2",
            "FULL",
            "FULL_V2",
            "META",
            "LEADING_TEXT",
            "SAFT_SENTENCE",
            "RADISH_SENTENCE",
            "RADISH_LIST",
            "RADISH_TABLE",
            "ANNOTATED_FULL",
            "PEREGRINE"
          ],
          "enumDescriptions": [
            "For historical reason, this `SNIPPET_TYPE_UNSPECIFIED` type is defined as value 15 instead of 0.",
            "A sequence snippet is generated from query term matches (from meta and body sections) and typically consists of multiple tidbits. Currently we only keep one single best combination of the retrieved tidbits.",
            "",
            "A full snippet is also generated from query term matches. Unlike the sequence snippet, this only consists of one expanded tidbit that are scored as the best single tidbit among the retrieved tidbits.",
            "",
            "This is a leading text of meta description.",
            "This is a leading text of main body text (skipping headers), and its starting position is typically identified in the indexing phase.",
            "saft sentences.",
            "Candidates created from radish attachment.",
            "",
            "",
            "Candidates from quality_snippets.SnippetSpansInfo.",
            "Candidates generated by SnippetFlow in SR."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnippetExtraInfoSnippetCandidateInfoExtendedSnippet": {
      "description": "The extended version of this snippet.",
      "id": "SnippetExtraInfoSnippetCandidateInfoExtendedSnippet",
      "properties": {
        "numChars": {
          "format": "int32",
          "type": "integer"
        },
        "snippetText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnippetExtraInfoSnippetScoringInfo": {
      "description": "Next ID: 9",
      "id": "SnippetExtraInfoSnippetScoringInfo",
      "properties": {
        "brainNg3Score": {
          "format": "float",
          "type": "number"
        },
        "brainScore": {
          "description": "The below fields are populated by SnippetFlow in superroot. Score generated from snippet brain model. go/snippets-brain",
          "format": "float",
          "type": "number"
        },
        "features": {
          "$ref": "QualityPreviewRanklabSnippet",
          "description": "Snippets ranklab features generated by scorer V2."
        },
        "finalScore": {
          "description": "Final snippet score by chooser.",
          "format": "float",
          "type": "number"
        },
        "rankBySnippetFlow": {
          "description": "Final rank given by SnippetFlow.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SnippetExtraInfoSnippetsBrainModelInfo": {
      "description": "Log model name, partition and input processor used to generate SnippetsBrain scores, if SnippetsBrain debugging is enabled.",
      "id": "SnippetExtraInfoSnippetsBrainModelInfo",
      "properties": {
        "ng3ModelName": {
          "type": "string"
        },
        "snippetsbrainModelName": {
          "description": "The below fields are populated by SnippetFlow in superroot.",
          "type": "string"
        },
        "snippetsbrainModelPartition": {
          "type": "string"
        },
        "snippetsbrainTokenizerType": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnippetsLeadingtextLeadingTextAnnotation": {
      "description": "Leading text which may consist of multiple pieces.",
      "id": "SnippetsLeadingtextLeadingTextAnnotation",
      "properties": {
        "piece": {
          "items": {
            "$ref": "SnippetsLeadingtextLeadingTextAnnotationPiece"
          },
          "type": "array"
        },
        "pieceType": {
          "enum": [
            "SEPARATED",
            "JOINED"
          ],
          "enumDescriptions": [
            "Two pieces are separated.",
            "Two pieces should be joined together."
          ],
          "type": "string"
        },
        "type": {
          "description": "Type of this leading text. Should be an enum of LeadingTextInfo.LeadingTextType",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SnippetsLeadingtextLeadingTextAnnotationPiece": {
      "id": "SnippetsLeadingtextLeadingTextAnnotationPiece",
      "properties": {
        "begin": {
          "description": "A piece of leading text is text within [begin, end). For example, a document is \"ABCDEF\". If we want to set leading text as 'CD', the value of begin is byte offset of 'C', the value of end is byte offset of 'E'. end == -1 means to the end of document.",
          "format": "int32",
          "type": "integer"
        },
        "beginText": {
          "description": "UTF8 text, for alignment when using reusableinfo. Those text are not available in docjoins.",
          "type": "string"
        },
        "end": {
          "format": "int32",
          "type": "integer"
        },
        "endText": {
          "type": "string"
        },
        "matchedPattern": {
          "description": "Matched dom path string for debugging.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SnippetsLeadingtextLeadingTextInfo": {
      "id": "SnippetsLeadingtextLeadingTextInfo",
      "properties": {
        "beginPos": {
          "description": "Leading text start position, byte offset of page content. The offset is got in ParseMaster. So it is the offset after the content is converted to UTF8.",
          "format": "int32",
          "type": "integer"
        },
        "leadingtext": {
          "description": "Note: You can also use it to save multiple leading text candidates.",
          "items": {
            "$ref": "SnippetsLeadingtextLeadingTextAnnotation"
          },
          "type": "array"
        },
        "text": {
          "description": "UTF8 text, for alignment when using reusableinfo. The text is not available in docjoins.",
          "type": "string"
        },
        "type": {
          "description": "Type of leading text which is optimized for this type of document.",
          "enum": [
            "INVALID",
            "NORMAL",
            "HOMEPAGE",
            "DICTIONARY",
            "WIKI",
            "SECTION_BOOST",
            "IN_LIST",
            "LOW",
            "SALIENT_NUGGET",
            "SCHEMA_ORG_DESC",
            "SCHEMA_ORG_ANSWER",
            "PDF"
          ],
          "enumDescriptions": [
            "",
            "Default leading text type.",
            "Leading text for home page.",
            "Leading text for dictionary page.",
            "Leading text for wiki page.",
            "Leading text which gets section boost bonus.",
            "Leading text inside a list.",
            "Leading text has very low geometric altitude.",
            "Salient leading text that matches a salient nugget pattern. Leading text offsets will be stored in LeadingTextAnnotation::Piece, with PieceType SEPARATED.",
            "Leading text from schema.org description.",
            "Leading text from schema.org answer.",
            "Leading text for PDF document."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialCommonAttachmentAttachment": {
      "description": "An Attachment represents a linked entity associated with a piece of social content. This may be a 1st-party or 3rd-party entity. In the Papyrus context, an Attachment is part of a Cent, and sits alongside the main content of the cent, which is represented as a sequence of Segments. Right now an Attachment is just a wrapper around an Embed, but we provide the extra layer of abstraction since, as Embeds move to separate storage in Briefcase, we may want to add additional fields that are not part of the Embed proper, but that (for example) relate to the usage of the linked content within the particular post/cent.",
      "id": "SocialCommonAttachmentAttachment",
      "properties": {
        "embedItem": {
          "$ref": "EmbedsEmbedClientItem",
          "description": "An embed represents an external entity. See go/es-embeds."
        },
        "id": {
          "description": "An id to uniquely identify an attachment when several attachments are in a collection.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialCommonFormatting": {
      "description": "Formatting information for a segment.",
      "id": "SocialCommonFormatting",
      "properties": {
        "bold": {
          "type": "boolean"
        },
        "highlight": {
          "description": "This indicates that the segment should be rendered as highlighted or visually emphasized.",
          "type": "boolean"
        },
        "italics": {
          "type": "boolean"
        },
        "strikethrough": {
          "type": "boolean"
        },
        "style": {
          "description": "If set, this indicates that the segment should be rendered with the specified style. The absence of an explicit style represents \"no style\", i.e. the segment can be rendered with the default style chosen by the application.",
          "enum": [
            "UNKNOWN_STYLE",
            "HEADING_1",
            "HEADING_2",
            "HEADING_3",
            "HEADING_4"
          ],
          "enumDescriptions": [
            "This represents a style that is unknown (e.g. a new style was introduced but not supported by older mobile app versions) and should generally not be used as a value in a proto. If the segment does not need to be rendered with a special style, the 'style' field should simply be left unset. A reasonable fallback for an unknown style is to render the segment in the default style.",
            "The most important heading to the least important heading.",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "underline": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SocialCommonHashtagData": {
      "description": "Hashtag metadata, for HASHTAG segments. For a hashtag, the \"text\" field should contain the display text, and the search_text field should represent the topic being referenced, without the hash symbol; for example, we might have: text = \"#Google\" hashtag_data.search_text = \"Google\" Another example: text = \"#pikachu\" hashtag_data.search_text = \"Pokemon\" Both strings should be considered part of the searchable text. In go/sbe, both are indexed and searchable.",
      "id": "SocialCommonHashtagData",
      "properties": {
        "searchText": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialCommonLinkData": {
      "description": "Link metadata, for LINK segments. Anchor text should be stored in the \"text\" field of the Segment, which can also serve as a fallback.",
      "id": "SocialCommonLinkData",
      "properties": {
        "attachment": {
          "$ref": "SocialCommonAttachmentAttachment",
          "description": "An Attachment represents the structured entity to which we are linking. It contains an Embed (apps/tacotown/proto/embeds/embed_client.proto) with fields specific to the appropriate type of linked entity. For example, if we are linking to a photo album, the Embed may include the album ID and gaia ID of the creator. Clients that understand the Embed type within the Attachment may construct and/or decorate their link appropriately e.g. to make use of type-specific functionality or first-party integrations. The link_target and (if appropriate) display_url fields must still be set even when an Attachment is present, so that clients who do not know how to interpret the Attachment can fall back to those fields, and render the Segment as an ordinary web link. N.B. Even when an Attachment is present, the intention of a \"LINK\" Segment is for the Segment to be presented inline with the rest of the text of a post or comment, with a clickable link or other UI suitable for inlining (though the client may modify the UI based on Attachment data, e.g. to add appropriate hovers, icons, etc.). When an entity is intended to be rendered separately from the main body of the post/comment, a separate Attachment proto can be added outside the set of Segments. N.B. Within the Attachment, fields of EmbedClientItem have their own visibility annotations, which should be enforced separately from Segment visibility annotations. See: apps/tacotown/proto/embeds/embed_annotations.proto"
        },
        "attachmentRenderHint": {
          "description": "The hint to use when rendering the associated attachment. Ignored if there is no associated attachment.",
          "enum": [
            "ATTACHMENT_RENDER_HINT_UNKNOWN",
            "ATTACHMENT_RENDER_HINT_AFTER",
            "ATTACHMENT_RENDER_HINT_INTERLEAVED"
          ],
          "enumDescriptions": [
            "No rendering hint; should not be used (equivalent to having no hint)",
            "Render any associated attachment at the end of the block, after all sibling Segments. Leave the link in place in the text and render it normally as well.",
            "Render any associated attachment inline in the text in place of the link text, forcing a line break before and after the attachment so the text and the attachment are \"interleaved\". If this is not possible, render as if AFTER."
          ],
          "type": "string"
        },
        "displayUrl": {
          "description": "If we wish to show the user a different (e.g. shortened) version of the URL for display purposes, then that version should be set here. If this field isn't set, link_target will be used for both purposes.",
          "type": "string"
        },
        "linkTarget": {
          "description": "link_target is the URL to navigate to when clicked. This could be the original URL, or a URL signed by the GWS URL signing service.",
          "type": "string"
        },
        "linkType": {
          "description": "LinkType is an optional field that provides additional information regarding link target. For example, link type can be identified as the SELF_LINK when the request was executed from the same link as the link target.",
          "enum": [
            "UNKNOWN_LINK_TYPE",
            "SELF_LINK"
          ],
          "enumDescriptions": [
            "No link type specified.",
            "This indicates that the link target points to the same object related to this segment. Example: A YouTube link with text=\"0.07\" and link_target: \"https://www.youtube.com/watch?v=leHVmSqd4_w&t=0m07s\" points to the same YouTube video where this segment appears. See http://go/ignore-badwords-filtering-for-selflink for adding link_type design document."
          ],
          "type": "string"
        },
        "title": {
          "description": "Title is an optional field that provides a short string that describes the link or its destination. User interfaces often use title as a tooltip or for accessibility purposes. However, they are of course free to present this data in any form. This field is plain text.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialCommonSegment": {
      "id": "SocialCommonSegment",
      "properties": {
        "formatting": {
          "$ref": "SocialCommonFormatting",
          "description": "Formatting to be applied when rendering the Segment. For all segment types, this is the standard way of representing that the Segment should be rendered in bold, italics, etc."
        },
        "hashtagData": {
          "$ref": "SocialCommonHashtagData",
          "description": "For HASHTAG type:"
        },
        "linkData": {
          "$ref": "SocialCommonLinkData",
          "description": "Type-specific metadata. At most one of these should be populated, and the one that is populated should correspond to the type of the Segment. For LINK type:"
        },
        "text": {
          "description": "Text content of the Segment. As a general rule, this field should contain the actual text that should be rendered in the UI. Thus, for a hashtag, it should be \"#Foo\", and for a link, it should be the display text. Clients that do not understand a particular segment type may use this text, along with the Formatting info below, as a fallback for display. The field is not required -- if all relevant information is carried in other metadata fields and there is no need for a fallback, or it is not practical for a fallback to be provided for any other reason, the field may be left blank. A standard example would be a user reference being transmitted between server layers, where a gaia-ID representation may be sufficient and there is no need for a textual fallback. In such a case, it would be valid and useful - though not required - for servers to compute and populate a fallback on the serving path.",
          "type": "string"
        },
        "type": {
          "description": "Type of Segment.",
          "enum": [
            "TEXT",
            "LINE_BREAK",
            "LINK",
            "USER_MENTION",
            "ALL_USER_MENTION",
            "HASHTAG"
          ],
          "enumDescriptions": [
            "A TEXT segment represents plain-text subject to particular formatting constraints (as represented in the \"formatting\" field of the Segment).",
            "A LINE_BREAK segment is simply a placeholder to represent a line break between other segments. The \"text\" variable may be set to a newline as a fallback, but clients that understand this segment type should simply insert a line break without needing to reference any fields.",
            "A LINK segment represents a link to a web entity. The \"text\" field should be used for anchor text. Additional link data should be put in the link_data protobuf.",
            "A USER_MENTION segment represents a reference to a (possibly non-Gaia, possibly off-network) user. The \"text\" field may be populated as a fallback, but information identifying the user should be contained in the user_mention_data protobuf. (The set of fields that are populated in user_mention_data may differ depending on the context in which the segment is viewed, but the interpretation of the fields is uniform. See comments over UserMentionData).",
            "An ALL_USER_MENTION segment represents a reference to all users in the context, that is, the conversation, discussion, or other context containing the segment. For example, an ALL_USER_MENTION segment (\"@all\") can be useful to ping all participants in a conversation if the notification setting of the conversation is not set to ping on normal messages. An ALL_USER_MENTION should be treated as a USER_MENTION for all users who receives the segment.",
            "A HASHTAG segment represents a structured reference to a topic. The \"text\" field should represent display text (e.g. \"#Google\"), and additional metadata should be put in the Segment's hashtag_data field."
          ],
          "type": "string"
        },
        "userMentionData": {
          "$ref": "SocialCommonUserMentionData",
          "description": "For USER_MENTION type:"
        }
      },
      "type": "object"
    },
    "SocialCommonSegments": {
      "description": "Segments (go/social-segments) represent structured social content, e.g. the contents of a G+ stream post or chat message. A single post or message may consist of a sequence of segments, each representing a type of content, e.g. plain text, hash tag, mention, etc. Segments correspond approximately to units of content delimited by HTML tags, so that a piece of bolded text would be a distinct Segment, a link would be a distinct Segment, and so forth. A single Segment may have multiple such qualifiers; e.g. it may be a bold link; in this case, information about all such qualifiers will be encoded in the Segment proto.",
      "id": "SocialCommonSegments",
      "properties": {
        "segments": {
          "items": {
            "$ref": "SocialCommonSegment"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialCommonUserMentionData": {
      "description": "Person metadata, for USER_MENTION segments. Should always contain at least one of user_gaia_id, user_id, email or user. The exact set of populated fields may differ depending on the context and the level in the serving stack; for example, emails will be elided on the viewing path. But as a general rule, a proto having any one of the four is valid, subject to the standard constraints of the applied annotations -- that is, communication between servers and clients will ignore jspb.ignore fields, and communication between servers and other servers (or between servers and storage) will ignore client_only fields. For more on the annotations, see the comments in social/common/segment_annotations.proto",
      "id": "SocialCommonUserMentionData",
      "properties": {
        "email": {
          "type": "string"
        },
        "user": {
          "$ref": "SecurityCredentialsPrincipalProto",
          "description": "If the principal is backed by a gaia id, DO NOT use this field. Use user_gaia_id/user_id fields instead."
        },
        "userGaiaId": {
          "description": "An unobfuscated gaia ID:",
          "format": "int64",
          "type": "string"
        },
        "userId": {
          "description": "An obfuscated gaia ID:",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialDiscoveryExternalEntityKey": {
      "description": "An entity key with an obfuscated gaia id that can be used externally.",
      "id": "SocialDiscoveryExternalEntityKey",
      "properties": {
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "profileId": {
          "description": "Obfuscated GAIA id.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiAppContactData": {
      "description": "Contains a mimetype supported by a third-party app together with additional ids and other data that the apps use to complete the action for the given mimetype. For example, an app_specific_endpoint_id that corresponds to a WhatsApp Profile. Full Design: go/3p-contact-upload LINT.IfChange",
      "id": "SocialGraphApiAppContactData",
      "properties": {
        "data": {
          "description": "Set of column-name and value for the given mimetype. The semantic meaning of the column values is mime-type specific. For example they may contain app_specific_endpoint_ids for WhatsApp. This is uploaded from CP2 http://go/cp2-data1 through http://go/cp2-data14.",
          "items": {
            "$ref": "SocialGraphApiDataColumn"
          },
          "type": "array"
        },
        "mimetype": {
          "description": "The mimetype of the action defined by the third-party app.",
          "enum": [
            "UNKNOWN_MIMETYPE",
            "WHATSAPP_PROFILE",
            "WHATSAPP_VOIP_CALL",
            "WHATSAPP_VIDEO_CALL",
            "LINE_PROFILE",
            "LINE_VOICE",
            "LINE_VIDEO",
            "HIKE_MESSAGE",
            "HIKE_MESSAGE_ASSISTANT",
            "HIKE_VOICE_CALL",
            "HIKE_VIDEO_CALL",
            "TELEGRAM_ANDROID_PROFILE",
            "THREEMA_PROFILE",
            "VIBER_OUT_CALL_NONE",
            "VIBER_NUMBER_CALL",
            "VIBER_NUMBER_MESSAGE",
            "VIBER_OUT_CALL",
            "VIBER_GOOGLE_VOICE_MESSAGE",
            "WECHAT_VOICEACTION",
            "LINKEDIN_ANDROID_MESSAGING",
            "VK_SENDMSG",
            "TACHYON_PHONE_AUDIO",
            "TACHYON_PHONE"
          ],
          "enumDescriptions": [
            "",
            "vnd.android.cursor.item/vnd.com.whatsapp.profile",
            "vnd.android.cursor.item/vnd.com.whatsapp.voip.call",
            "vnd.android.cursor.item/vnd.com.whatsapp.video.call",
            "vnd.android.cursor.item/vnd.jp.naver.line.android.profile",
            "vnd.android.cursor.item/vnd.jp.naver.line.android.call.voice",
            "vnd.android.cursor.item/vnd.jp.naver.line.android.call.video",
            "vnd.android.cursor.item/com.hike.chat.stickers.message",
            "vnd.android.cursor.item/com.hike.chat.stickers.message.gassistant",
            "vnd.android.cursor.item/com.hike.chat.stickers.voice_call",
            "vnd.android.cursor.item/com.hike.chat.stickers.video_call",
            "vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile",
            "vnd.android.cursor.item/vnd.ch.threema.app.profile",
            "vnd.android.cursor.item/vnd.com.viber.voip.viber_out_call_none_viber",
            "vnd.android.cursor.item/vnd.com.viber.voip.viber_number_call",
            "vnd.android.cursor.item/vnd.com.viber.voip.viber_number_message",
            "vnd.android.cursor.item/vnd.com.viber.voip.viber_out_call_viber",
            "vnd.android.cursor.item/vnd.com.viber.voip.google_voice_message",
            "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voiceaction",
            "vnd.android.cursor.item/vnd.com.linkedin.android.messaging",
            "vnd.android.cursor.item/vnd.com.vkontakte.android.assistant.sendmsg",
            "vnd.android.cursor.item/com.google.android.apps.tachyon.phone.audio",
            "vnd.android.cursor.item/com.google.android.apps.tachyon.phone"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiDataColumn": {
      "description": "LINT.IfChange",
      "id": "SocialGraphApiDataColumn",
      "properties": {
        "columnName": {
          "description": "The name of the column in CP2 for raw_contact_data.",
          "enum": [
            "UNKNOWN_COLUMN",
            "DATA1",
            "DATA2",
            "DATA3",
            "DATA4",
            "DATA5",
            "DATA6",
            "DATA7",
            "DATA8",
            "DATA9",
            "DATA10",
            "DATA11",
            "DATA12",
            "DATA13",
            "DATA14"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "DATA15 is not included since it is a BLOB."
          ],
          "type": "string"
        },
        "value": {
          "description": "The value of the data inside column.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoAndroidDeviceInfo": {
      "id": "SocialGraphApiProtoAndroidDeviceInfo",
      "properties": {
        "id": {
          "description": "This string will represent either the device make and model in the case of FSA2, or the device model in the case of FSA1.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoBirthdayDecoration": {
      "id": "SocialGraphApiProtoBirthdayDecoration",
      "properties": {
        "birthdayDecorationVisibility": {
          "enum": [
            "BIRTHDAY_DECORATION_VISIBILITY_UNSPECIFIED",
            "BIRTHDAY_DECORATION_VISIBILITY_NONE",
            "BIRTHDAY_DECORATION_VISIBILITY_SAME_AS_BIRTHDAY_VISIBILITY"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoContactCreateContext": {
      "description": "The ContactEditContext message is a wrapper around the generic ContactMutationContext data to represent when and where a contact create was performed.",
      "id": "SocialGraphApiProtoContactCreateContext",
      "properties": {
        "mutationContext": {
          "$ref": "SocialGraphApiProtoContactMutationContext"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoContactDeletionContext": {
      "description": "The ContactDeletionContext message is a wrapper around the generic ContactMutationContext data, and will include any needed delete specific data. NOTE: Before using this message please review go/people-api-contact-deletion-context",
      "id": "SocialGraphApiProtoContactDeletionContext",
      "properties": {
        "mutationContext": {
          "$ref": "SocialGraphApiProtoContactMutationContext",
          "description": "The general mutation context data"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoContactEditContext": {
      "description": "The ContactEditContext message is a wrapper around the generic ContactMutationContext data to represent when and where a contact edit was performed.",
      "id": "SocialGraphApiProtoContactEditContext",
      "properties": {
        "mutationContext": {
          "$ref": "SocialGraphApiProtoContactMutationContext"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoContactMutationContext": {
      "description": "This message is the generic mutation message which will encapsulate the fields which are shared between the create, update, and delete actions, including source of change, timestamp, and metadata messages passed in from the source for any source specific data (such as phone name/model from FSA).",
      "id": "SocialGraphApiProtoContactMutationContext",
      "properties": {
        "androidDeviceInfo": {
          "$ref": "SocialGraphApiProtoAndroidDeviceInfo",
          "description": "Android device info should always be set when using either ANDROID_FSA1 or ANDROID_FSA2 as the source of the delete."
        },
        "hostAppInfo": {
          "$ref": "SocialGraphApiProtoHostAppInfo",
          "description": "Host app info should always be set when using CONTACTS_COMPANION as the source."
        },
        "source": {
          "description": "The source of a mutate should provide all needed information a user should know, and should be enough information for the front end to generate a proper human readable string to describe the mutate to the user.",
          "enum": [
            "UNKNOWN_SOURCE",
            "CONTACT_MERGE",
            "WEB_CONTACTS",
            "CONTACTS_COMPANION",
            "HEALER_DUPLICATES",
            "HEALER_OTHER_CONTACT",
            "HEALER_CONTACT_LIMIT",
            "THIRD_PARTY",
            "ANDROID_FSA1",
            "ANDROID_FSA2",
            "GMAIL_WEB_CONTACTS",
            "CARBON_IMPORT_CONTACTS",
            "IOS",
            "MAC_OS_X",
            "WINDOWS_PC",
            "WINDOWS_PHONE",
            "JUNK_EMAIL_CLEANUP",
            "INTERNAL_TESTING",
            "ONE_PICK",
            "ASSISTANT_SMART_DEVICE_MANAGEMENT_API"
          ],
          "enumDescriptions": [
            "Writes should never set UNKNOWN explicitly. This field shall be used implicitly for writes while clients are still being converted over, but once all clients have been updated to properly write source values this will be enforced by a validator. This value may be set on reads for any contacts which do not have a proper source set.",
            "Contact merge is for deletes and mutates which are caused by the contact merge action, either through an accepted suggestion or a manual merge by the user. more info: go/contact-merge owner: contacts-plus-be-eng@google.com",
            "Web contacts refers to contacts.google.com ui contact manager. owner: people-web@google.com",
            "Refers to the Contacts Companion sidebar found on many Google applications (Gmail, docs, etc) more info: go/companiondelete owner: contactsplus-eng@google.com",
            "Automated healer which deletes exact duplicates of contacts. owner: focus-backend-eng@google.com",
            "Generic enum for all healers which only delete other contacts (Automatically created contacts, which have no group labels). As they should never be seen by users, they do not need unique strings. owner: focus-backend-eng@google.com",
            "HEALER_CONTACT_LIMIT source is used for deleting contacts that cause a domain to exceed safe domain shared contact limits. owner: people-directory-dev-team@google.com",
            "The THIRD_PARTY source provides a general bucket for third party application contact mutates, which are generally handled by contact APIs exposed to third-party apps, like People API 3P, GData or CardDAV. If this source is chosen you may also set a client name in the third_party_info message to have the front end display the name of the client. As this will be seen by the user the client name should not be provided unless it is safe and human readable. If a client name is not sent, a default place holder \"Deleted/modified by a third party application\" or equivalent will be used instead. owner: people-api@google",
            "Android FSA1 mutates are a two way sync action with older android devices. These mutates pass back a phone model string (e.g. SG1014) for denoting what type of phone the mutate came from. When this value is chosen, the phone model should be set in the PhoneInfo message whenever possible. owner: people-api@google",
            "FSA2 based mutates are handled by internal people API calls. When this value is set, the PhoneInfo message should also be set, and the string value for phone identification should be set to the device name, which will be passed back from FSA2. owner: people-api@google",
            "HTML Gmail ui (moose) has a contact manager built in which users can use to manage their contacts. url: https://mail.google.com/mail/u/2/h/ owner: gmail-fe-eng@google.com",
            "This action handles importing IOS device backups from drive into an Android device. more info: http://sites/prod/google.com/carbon/home and go/drive-ios-migration owner: apps-backup-eng@google.com",
            "9 through 12 are only to be used for carddav default client project lookups and will be removed following the completion of go/carddav-default-project-number. b/145776595 owner: people-api@google.com",
            "",
            "",
            "",
            "Junk email contact clean up actions is for contacts which are deleted via contacts assistant suggested junk email contact clean up assistant. This action is served through google web contacts and the android contacts app. more info: go/assistants-junk-contacts owner: contacts-plus-be-eng@google.com",
            "This option is a generic value to be used for internal Google tests.",
            "\"OnePick is a consistent, centralized Google solution connecting applications (e.g., G Suite) to data sources (e.g., Drive, Contacts, Photos, Calendar) on the web.\" This supports an iframe on gmail to edit contactgroups (including deleting the contained contacts) inside of the compose email dialog. more info: go/onepick owner: onepick-eng@google.com",
            "Assistant Settings will delete contacts and relationships + guests for Assistant Hospitality devices. Initially, this will be used to manage the contacts for go/merrill-prd, go/merrill-console-ux-prd. Screenshot: http://screen/ufej8N9aOMw owner: assistant-hospitality@, assistant-communication@"
          ],
          "type": "string"
        },
        "thirdPartyInfo": {
          "$ref": "SocialGraphApiProtoThirdPartyInfo",
          "description": "Third party info should always be set when using THIRD_PARTY as the source."
        },
        "timestamp": {
          "description": "Timestamp representing when the contact was mutated. This should not be set on write, as it is the job of focus backend to determine this timestamp. This field will be populated on read with the data written by FBS.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoContactPromptSettings": {
      "id": "SocialGraphApiProtoContactPromptSettings",
      "properties": {
        "contactActiveState": {
          "description": "Indicates if any reminders are active for entire contact. This will affect both connection reminders and date reminders such as birthday reminders. This is required.",
          "enum": [
            "UNKNOWN_ACTIVE_STATE",
            "ACTIVE",
            "DISABLED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoContactState": {
      "description": "Contact state and related metadata. See go/fbs-contacts-trash.",
      "id": "SocialGraphApiProtoContactState",
      "properties": {
        "deletionContext": {
          "$ref": "SocialGraphApiProtoContactDeletionContext",
          "description": "A trashed contact may have deletion context set, which indicates where and when the contact was trashed. Deletion context is cleared when the contact is untrashed."
        },
        "deletionState": {
          "enum": [
            "DEFAULT",
            "TRASHED"
          ],
          "enumDescriptions": [
            "Contacts which don't fall into any other state.",
            "Contacts are trashed. Trashed contacts are retained for 30 days to allow users to review and recover them, after which they are automatically wiped out. Trashed contacts are not returned on reads unless explicitly requested."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoDailyRecurrence": {
      "description": "Pattern for a DAILY (or every N day) recurrence. Time of the day that the notification will occur is taken from the Prompt that owns this recurrence. Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoDailyRecurrence",
      "properties": {},
      "type": "object"
    },
    "SocialGraphApiProtoDecorationOverlay": {
      "description": "Settings that control how a SIBS decoration overlay is displayed.",
      "id": "SocialGraphApiProtoDecorationOverlay",
      "properties": {
        "overlay": {
          "$ref": "SocialGraphApiProtoPhotoOverlay",
          "description": "Settings that describe how the decoration should be overlaid on the photo."
        },
        "sibsId": {
          "description": "SIBS ID of the decoration that is overlaid on the photo.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoDelegatedGroupId": {
      "description": "Represents a delegated group id, delegated groups refer to groups that are owned by another gaiaId, but this user has access to.",
      "id": "SocialGraphApiProtoDelegatedGroupId",
      "properties": {
        "id": {
          "description": "Required. The id for a delegated group.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoDisplayNameSource": {
      "id": "SocialGraphApiProtoDisplayNameSource",
      "properties": {
        "source": {
          "enum": [
            "DISPLAY_NAME_SOURCE_UNSPECIFIED",
            "LIMITED_PROFILE",
            "LIMITED_PROFILE_FULL_NAME",
            "LIMITED_PROFILE_SHORTENED_NAME"
          ],
          "enumDescriptions": [
            "",
            "DEPRECATED(b/248135053): in favor of `LIMITED_PROFILE_FULL_NAME`, and `LIMITED_PROFILE_SHORTENED_NAME`",
            "The source is the limited profile, and the full name is visible.",
            "The source is the limited profile, and it's a shortened name."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoHostAppInfo": {
      "id": "SocialGraphApiProtoHostAppInfo",
      "properties": {
        "hostAppName": {
          "description": "This string will represent the info for the host app to the Companion sidebar",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoImageReference": {
      "description": "A reference to a photo in either Photos Backend or SGI storage. This message should be treated as an opaque blob to avoid a dependency on a specific storage backend. This version of ImageReference is visible outside of SGBE. Do not add fields that should not be exposed outside of Profile Service and Image Service.",
      "id": "SocialGraphApiProtoImageReference",
      "properties": {
        "contentVersion": {
          "description": "Identifies the most recent version of this photo. Use this as a FIFE param (ie -iv12) to prevent reads of a stale version.",
          "format": "int64",
          "type": "string"
        },
        "mediaId": {
          "description": "Unique identifier for the photo. For now, this will always be a Photos Backend media key.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoLimitedProfileNameSettings": {
      "id": "SocialGraphApiProtoLimitedProfileNameSettings",
      "properties": {
        "partialNameOptions": {
          "$ref": "SocialGraphApiProtoPartialNameOptions",
          "description": "Required. Describes which shortening option the user implicitly chose for their limited profile. E.g., if 'John Doe' chose 'John D.', they implicitly chose: partial_name_options { given_name_spec { show_all: true } family_name_spec: { show_initial: true truncation_indicator: PERIOD } } While we'll in all cases serve the actual name chosen by the user for limited profiles (stored below), we'll use this information to recompute the default limited profile to be rendered to users when they change their core name."
        },
        "verbatimFullName": {
          "description": "The actual textual name that was chosen by the user in the UI. E.g., if 'John Doe' chose 'John D.', this holds 'John D.'. While `partial_name_options` allows the limited profile name to be computed from the core name, the resulting shortened name might change across different versions of the name shortening logic, and we want to preserve the user's choice verbatim whenever possible. This field will be cleared when the two conditions below are met: (1) A successful core name change is not accompanied by a limited profile settings update and (2) The shortened name computed from `partial_name_options` yields a different result than what is originally stored in `verbatim_full_name`. When this happens, the limited profile is effectively *disabled*. E.g., if 'John Doe' from the example above changes their name to 'Jane Doe' and no LimitedProfileSettings are provided, `Jane D.` is the resulting shortened name. Therefore `verbatim_full_name` will be cleared and the limited profile settings will be disabled. On the other hand, if they change their name to `John D\u00f5e`, the resulting shortened name remains `John D.`, and `verbatim_full_name` is kept as is.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoLimitedProfilePictureSettings": {
      "id": "SocialGraphApiProtoLimitedProfilePictureSettings",
      "properties": {
        "profilePictureOption": {
          "enum": [
            "PROFILE_PICTURE_OPTION_UNSPECIFIED",
            "STANDARD_PROFILE_PICTURE",
            "MONOGRAM"
          ],
          "enumDescriptions": [
            "",
            "Display the same picture used in the core profile. If there is no picture in the core profile, it will fallback to the `MONOGRAM` option below, so as to avoid revealing more initials than the limited profile does.",
            "Display a monogram photo. The monogram will be computed from the short name, as to not leak information from the core name. E.g., if the core name is `John Doe` and the limited profile name is `Doe`, the monogram will show `D` (versus `J` that would be shown for `John Doe`)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoLimitedProfileSettings": {
      "description": "Next ID: 9",
      "id": "SocialGraphApiProtoLimitedProfileSettings",
      "properties": {
        "disableReason": {
          "description": "Indicates why the limited profile has been disabled. Will be set iff the limited profile is disabled. Note: When mutating limited profiles, in order to disable them, MutateDataRequest.DisableLimitedProfile must be true. Currently, disables are only performed server-side, so this is read-only for clients.",
          "enum": [
            "DISABLE_REASON_UNSPECIFIED",
            "INCOMPATIBLE_NAME_ONLY_MUTATION",
            "NAME_ABUSE_VIOLATION"
          ],
          "enumDescriptions": [
            "",
            "This means that a core name mutation was performed with no mutation to LimitedProfileSettings and the limited profile name recomputed from the existing `name_settings` was different from the one previously chosen by the user (stored in `verbatim_name`).",
            "The Limited Profile name violates some Google policy. Note: regular checks for name violation are performed in FBS when the LimitedProfileSettings are created and prevent the mutation from succeeding (i.e., we DO NOT store LP settings with `NAME_ABUSE_VIOLATION` as disable reason in this case). This disable reason exists instead so that we can respond manually to any abuse escalation involving LP names."
          ],
          "type": "string"
        },
        "gpayOobe": {
          "description": "Created with user input in GPay OOBE.",
          "type": "boolean"
        },
        "lastUpdateTime": {
          "description": "Timestamp indicating when the settings were last stored. Read-only field.",
          "format": "google-datetime",
          "type": "string"
        },
        "legacyDiscoverability": {
          "description": "A user who had legacy discoverability had a Limited Profile autogenerated for them, either through a healer or in the live path in FBS.",
          "enum": [
            "AUTOGEN_STATUS_UNSPECIFIED",
            "AUTOGEN_UNCONFIRMED",
            "AUTOGEN_CONFIRMED"
          ],
          "enumDescriptions": [
            "",
            "The LP was autogenerated and not yet surfaced and acted on by the user. LPs in this state are subject to disabling in certain conditions.",
            "The autogenerated LP ws surfaced to the user and they performed some action on it. E.g. it was displayed in Whitepages UI and the user disabled discoverability."
          ],
          "type": "string"
        },
        "myAccount": {
          "description": "Created with user input in MyAccount UI.",
          "type": "boolean"
        },
        "nameSettings": {
          "$ref": "SocialGraphApiProtoLimitedProfileNameSettings",
          "description": "Required. Defines how the name should be formatted in the limited profile."
        },
        "profilePictureSettings": {
          "$ref": "SocialGraphApiProtoLimitedProfilePictureSettings",
          "description": "DEPRECATED. Profile picture choices are controlled through the ACL of the Photo field."
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoMonthlyDayRecurrence": {
      "description": "Pattern for a MONTHLY recurrence. This Monthly reccurence supports: 1. Absolute days of the month (i.e. the 1st and 15th) 2. Relative day from the end of the month (i.e. -1 for last day, -2 for second-to-last day). Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoMonthlyDayRecurrence",
      "properties": {
        "monthDay": {
          "description": "Absolute day of the month (if positive) or relative day from the end of the month (if negative). Example: 2nd and 20th of the month [2, 20]. Example: Last day of the month [-1]. Positive values should correspond to actual calendar day number (indexing starts at 1).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "useLastDayIfMonthDayPastEnd": {
          "description": "If true, month_day beyond the end of month (i.e. month_day=31 in February) will default to the last day of the month.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoMonthlyRecurrence": {
      "description": "A MONTHLY recurrence can be one of a MonthlyDayRecurrence or MonthlyWeekdayRecurrence but not both. Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoMonthlyRecurrence",
      "properties": {
        "monthlyDayRecurrence": {
          "$ref": "SocialGraphApiProtoMonthlyDayRecurrence"
        },
        "monthlyWeekdayRecurrence": {
          "$ref": "SocialGraphApiProtoMonthlyWeekdayRecurrence"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoMonthlyWeekdayRecurrence": {
      "description": "Pattern for a MONTHLY recurrence. This Monthly reccurence supports: 1. The nth specific weekday of the month. For example, the 3rd Wednesday of the month. This represents the 3rd instance of a Wednesday of the month, regardless of what weekday the month started on. It does not necessarily mean the Wednesday on the 3rd week of the month. Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoMonthlyWeekdayRecurrence",
      "properties": {
        "weekDay": {
          "description": "The nth occurrence of week_day to match. I.e. For 3rd Wednesday of the month, week_day = WEDNESDAY and week_day_number = 3. Values beyond the end of the month are skipped.",
          "enum": [
            "DAY_OF_WEEK_UNSPECIFIED",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ],
          "enumDescriptions": [
            "The day of the week is unspecified.",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday"
          ],
          "type": "string"
        },
        "weekDayNumber": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoNamePronunciationAudioMetadata": {
      "description": "Metadata for a user's name pronunciation audio. Proto message is shared between merged_person and FBS.",
      "id": "SocialGraphApiProtoNamePronunciationAudioMetadata",
      "properties": {
        "audioSource": {
          "description": "Stored. Updated on pronunciation creates and updates.",
          "enum": [
            "SOURCE_UNSPECIFIED",
            "USER_GENERATED"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "audioState": {
          "description": "Stored.",
          "enum": [
            "STATE_UNSPECIFIED",
            "ENABLED",
            "DISABLED_FOR_NAME_CHANGE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoNotificationTrigger": {
      "description": "Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoNotificationTrigger",
      "properties": {
        "daysBeforeActiveDate": {
          "description": "Positive number of days before active date. The value 0 will denote a notification on the same day.",
          "format": "int32",
          "type": "integer"
        },
        "notificationTimeOfDay": {
          "$ref": "GoogleTypeTimeOfDay",
          "description": "Time of day that notification is sent to user. This is local to the user's device."
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPartialNameOptions": {
      "id": "SocialGraphApiProtoPartialNameOptions",
      "properties": {
        "language": {
          "description": "IETF BCP-47 language code that should be used for localizing the name computation (go/bcp-47). If not provided, we'll use the name origin detector to infer it. If unable to detect, \"en\" will be assumed.",
          "type": "string"
        },
        "parsedDisplayNameSpec": {
          "$ref": "SocialGraphApiProtoPartialNameOptionsParsedDisplayNameSpec"
        },
        "twoPartNameSpec": {
          "$ref": "SocialGraphApiProtoPartialNameOptionsTwoPartNameSpec"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPartialNameOptionsNamePartSpec": {
      "description": "Specifies how each piece of the name should be handled. Names are structured into given name and family name and this allows an independent specification for each of these pieces. Very limited preprocessing is done for this option (leading whitespace trimming mostly). Composed names are treated as a single unit and are not broken down.",
      "id": "SocialGraphApiProtoPartialNameOptionsNamePartSpec",
      "properties": {
        "hideAll": {
          "description": "Completely omit that part of the name.",
          "type": "boolean"
        },
        "showAll": {
          "description": "Show the complete name. Note that this does not express the same semantics as show_first_n_chars=length_of_name, because when regenerating a shortened name the new name could have more characters, thus yielding a different result.",
          "type": "boolean"
        },
        "showFirstNChars": {
          "description": "Show first `n` characters. Same note about characters referring to \"grapheme_clusters\" applies.",
          "format": "int32",
          "type": "integer"
        },
        "showInitial": {
          "description": "Show only the initial, i.e., a single character. Note that \"character\" refers to \"user-perceived\" characters, aka a \"grapheme cluster\". See go/morphology for more details.",
          "type": "boolean"
        },
        "truncationIndicator": {
          "description": "Which truncation indicator to use after the shortened piece of the name. Will be ignored for the `hide_all` or `show_all` options.",
          "enum": [
            "TRUNCATION_INDICATOR_UNSPECIFIED",
            "ELLIPSIS",
            "PERIOD"
          ],
          "enumDescriptions": [
            "",
            "Add an ellipsis after a partial name, e.g., `Joh\u2026 Do\u2026`. The actual character(s) that will be used for the ellipsis are locale-aware and will vary according to the provided/inferred language.",
            "Add a period after a partial name, e.g. `J. D.`"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPartialNameOptionsParsedDisplayNameSpec": {
      "description": "These options use more sophisticated logic from a location-aware name detector to parse the full name of a user into structured parts and operate on those parts. For more information on how names are parsed, see the NameOccurrence proto definition: http://google3/quality/peoplesearch/namedetector/detector/proto/name_occurrence.proto?l=50&rcl=334484707 In general, when parsing display names the following rules will apply to *all* specs: - Hyphenated names are broken down: \"Angelina Jollie-Pit\" is pre-processed as \"Angelina Jollie Pitt\"; - Prefixes are ignored: \"Prof. Albus Dumbledore\" is pre-processed as \"Albus Dumbledore\"; - Auxiliaries are ignored: \"Lu\u00eds de Cam\u00f5es\" is pre-processed as \"Lu\u00eds Cam\u00f5es\". Next ID: 8",
      "id": "SocialGraphApiProtoPartialNameOptionsParsedDisplayNameSpec",
      "properties": {
        "allInitialsFromParsedName": {
          "description": "Extract an initial from each parsed name. For example, \"Niels Henrik David Bohr\" yields \"N. H. D. B.\". Other special cases are treated as follows:",
          "type": "boolean"
        },
        "firstInitialAndFirstLastName": {
          "description": "Show the initial of the very first name and the first last name, e.g. \"Hugo Daniel Hernandez Garcia\" yields \"H. Hernandez\".",
          "type": "boolean"
        },
        "firstInitialAndVeryLastName": {
          "description": "Show the initial of the very first name and the very last name, e.g. \"Ana Maria Silva\" yields \"A. Silva\".",
          "type": "boolean"
        },
        "knowledgeGraphNameShortening": {
          "description": "Shorten the display name using the Knowledge Graph name shortener (go/short-names).",
          "type": "boolean"
        },
        "truncationIndicator": {
          "description": "Which truncation indicator to use after each shortened part of the name. Will be ignored for the `knowledge_graph_name_shortening` option.",
          "enum": [
            "TRUNCATION_INDICATOR_UNSPECIFIED",
            "ELLIPSIS",
            "PERIOD"
          ],
          "enumDescriptions": [
            "",
            "Add an ellipsis after a partial name, e.g., `Joh\u2026 Do\u2026`. The actual character(s) that will be used for the ellipsis are locale-aware and will vary according to the provided/inferred language.",
            "Add a period after a partial name, e.g. `J. D.`"
          ],
          "type": "string"
        },
        "veryFirstNameAndAllInitials": {
          "description": "Show the full very first name and all the other initials, e.g. \"Ana Maria Silva\" yields \"Ana M. S.\".",
          "type": "boolean"
        },
        "veryFirstNameOnly": {
          "description": "Show the very first name only, e.g. \"Ana Maria Silva\" yields \"Ana\".",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPartialNameOptionsTwoPartNameSpec": {
      "description": "Holds the name specs for the two parts of a name, as they are structured in storage (given and family).",
      "id": "SocialGraphApiProtoPartialNameOptionsTwoPartNameSpec",
      "properties": {
        "familyNameSpec": {
          "$ref": "SocialGraphApiProtoPartialNameOptionsNamePartSpec"
        },
        "givenNameSpec": {
          "$ref": "SocialGraphApiProtoPartialNameOptionsNamePartSpec"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPhotoOverlay": {
      "description": "Settings that control how a photo overlay is displayed.",
      "id": "SocialGraphApiProtoPhotoOverlay",
      "properties": {
        "relativePosition": {
          "$ref": "SocialGraphApiProtoRelativePosition",
          "description": "Top left position of the overlay relative to the user's avatar."
        },
        "relativeScale": {
          "$ref": "SocialGraphApiProtoRelativeScale",
          "description": "Scale of the overlay relative to the user's avatar."
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPrompt": {
      "description": "Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoPrompt",
      "properties": {
        "activeState": {
          "description": "Indicates if this prompt is active regardless of its reccurrence date, dismiss date or notification triggers. This is required.",
          "enum": [
            "UNKNOWN_ACTIVE_STATE",
            "ACTIVE",
            "DISABLED"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "content": {
          "$ref": "SocialGraphApiProtoPromptContent"
        },
        "lastDismissDate": {
          "$ref": "GoogleTypeDate",
          "description": "The most recent day the user dismissed this prompt. Empty means the user has never dismissed the prompt."
        },
        "notificationTriggers": {
          "description": "If this is empty, only the \"Prompt Spark\" will be displayed (in the time-range read from per type config), no push notifications will be shown. If push notification are configured with this field, the \"Prompt Spark\" time-range will be determined by earliest notification value here.",
          "items": {
            "$ref": "SocialGraphApiProtoNotificationTrigger"
          },
          "type": "array"
        },
        "purpose": {
          "description": "Read-only. This is derived from the containing field value.",
          "enum": [
            "UNKNOWN_PURPOSE",
            "BIRTHDAY",
            "ANNIVERSARY",
            "SIGNIFICANT_DATE",
            "CONNECTION_FREQUENCY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "recurrence": {
          "$ref": "SocialGraphApiProtoRecurrence",
          "description": "How frequently will this prompt occur and how many times."
        },
        "uniquePromptId": {
          "description": "Prompt ID is generated by server on initial mutate.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPromptContent": {
      "description": "Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService) and in Custard response to client apps that read Prompts.",
      "id": "SocialGraphApiProtoPromptContent",
      "properties": {
        "title": {
          "description": "Title of prompt/spark being sent.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPronounData": {
      "description": "Design doc: go/pronouns-backend Represents a user's preferred pronouns.",
      "id": "SocialGraphApiProtoPronounData",
      "properties": {
        "pronounEntry": {
          "items": {
            "$ref": "SocialGraphApiProtoPronounEntry"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPronounEntry": {
      "id": "SocialGraphApiProtoPronounEntry",
      "properties": {
        "languageCode": {
          "description": "Locale option in which the pronouns were set, in the BCP-47 format. Set by the client at write time.",
          "type": "string"
        },
        "pronounType": {
          "description": "The pronoun entry type that the user has selected. This indicates which locale-independent classification of pronoun was selected (or optionally, if it is a custom field).",
          "enum": [
            "UNKNOWN",
            "CUSTOM",
            "FEMININE",
            "MASCULINE",
            "NEUTRAL"
          ],
          "enumDescriptions": [
            "Unknown pronoun type",
            "User has defined their own pronouns using custom field entry, available in the \"value\" field.",
            "go/keep-sorted start User has selected a feminine pronoun (she/her in English)",
            "User has selected a masculine pronoun (he/him in English)",
            "User has selected a neutral pronoun (they/them in English) go/keep-sorted end"
          ],
          "type": "string"
        },
        "value": {
          "description": "The user's preferred pronouns. Eg. \"they / them\". This is a human-readable string to be displayed as the user's pronoun. Set at write-time, regardless of pronoun-type. Value is returned as it was set (no localization).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPronunciation": {
      "description": "Stores the pronunciation as phoneme for the given word/text. Next ID: 8",
      "id": "SocialGraphApiProtoPronunciation",
      "properties": {
        "learningSessionId": {
          "description": "All pronunciations with the same learning_session_id were learnt in the same learning flow, e.g. multiple name segments learnt simultaneously from a recording in the Your People UI.",
          "type": "string"
        },
        "learningSource": {
          "enum": [
            "LEARNING_SOURCE_UNKNOWN",
            "EXPLICIT_YOUR_PEOPLE_UI",
            "INFERRED_COMMS_DIALOG"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "locale": {
          "description": "The locale used when learning the pronunciation. BCP-47 language code, e.g. \"en-US\".",
          "type": "string"
        },
        "phonemes": {
          "description": "Phoneme sequence representing how the user pronounces |token|. Format is specified by the phonology_type type field, e.g. go/psampa is the preferred phonology type used by the TTS team.",
          "type": "string"
        },
        "phonologyType": {
          "enum": [
            "PHONOLOGY_TYPE_UNKNOWN",
            "PSAMPA"
          ],
          "enumDescriptions": [
            "",
            "Used in PronBuffet. Preferred phonology type to pass to TTS."
          ],
          "type": "string"
        },
        "spellingHint": {
          "description": "An optional user-specified spelling of this token, to improve pronunciation learning success rate. E.g. the token may be \"Jana\" and the spelling hint \"jah-nah\".",
          "type": "string"
        },
        "token": {
          "description": "Corresponds to a word segment of the contact name. E.g. for a contact with given name \"John Doe\", last name \"Smith\" and nickname \"Best Dad\", |token| can be any of {John, Doe, Smith, Best, Dad}.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoPronunciations": {
      "description": "Container proto for repeated pronunciation objects. For example, a set of pronunciations that can be added to a single name field.",
      "id": "SocialGraphApiProtoPronunciations",
      "properties": {
        "pronunciation": {
          "items": {
            "$ref": "SocialGraphApiProtoPronunciation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoRecurrence": {
      "description": "Flexible Recurrence proto to be used with People Prompts. Examples: Single recurrence that occurs on a specific date: single_recurrence { date { year: 2022 month: 11 day: 17 } } Yearly recurrence such as a birthday or anniversary: yearly_recurrence { monthly_pattern { monthly_day_recurrence { month_day: 17 } } months: JULY } Weekly reccurrence such as: every two weeks on Monday: every: 2 weekly_recurrence { week_day: MONDAY } Monthly recurrence such as: third Thursday of every month: monthly_recurrence { monthly_weekday_recurrence { week_day: THURSDAY week_day_number: 3 } } Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService) The canonical recurrence validation function is located here: http://google3/java/com/google/social/people/prompts/util/PromptValidators.java?q=func:%5CbvalidateRecurrence%5Cb",
      "id": "SocialGraphApiProtoRecurrence",
      "properties": {
        "dailyRecurrence": {
          "$ref": "SocialGraphApiProtoDailyRecurrence"
        },
        "every": {
          "description": "Multiplier on the frequency of the recurrence. Use this to specify patterns that recur every X days, months, years, etc. Must be a positive int. Example: [remind me to call mom every 2nd week]. If this field isn't set, it will default to 1 (every day,every week, etc). This field is ignored when recurrence_data is a SingleRecurrence. Optional.",
          "format": "int32",
          "type": "integer"
        },
        "monthlyRecurrence": {
          "$ref": "SocialGraphApiProtoMonthlyRecurrence"
        },
        "recurrenceEndDate": {
          "$ref": "GoogleTypeDateTime",
          "description": "Ends at abstract DateTime. (inclusive)"
        },
        "recurrenceStart": {
          "$ref": "GoogleTypeDateTime",
          "description": "The start of the recurrence can be represented as a DateTime. This field is ignored when recurrence_data is a SingleRecurrence."
        },
        "repeatCount": {
          "description": "Will repeat only a finite number of times. This is the original number of times the recurrence will repeat and not how many times are left for it to repeat. This end type is not currently supported.",
          "format": "int32",
          "type": "integer"
        },
        "repeatForever": {
          "$ref": "SocialGraphApiProtoRecurrenceRepeatForever",
          "description": "Will continue to repeat until prompt is deleted."
        },
        "singleRecurrence": {
          "$ref": "SocialGraphApiProtoSingleRecurrence"
        },
        "weeklyRecurrence": {
          "$ref": "SocialGraphApiProtoWeeklyRecurrence"
        },
        "yearlyRecurrence": {
          "$ref": "SocialGraphApiProtoYearlyRecurrence"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoRecurrenceRepeatForever": {
      "description": "An internal message to signal that this recurrence has no end date.",
      "id": "SocialGraphApiProtoRecurrenceRepeatForever",
      "properties": {},
      "type": "object"
    },
    "SocialGraphApiProtoRelativePosition": {
      "description": "Position relative to the user's avatar. 0 = top/left, 1 = bottom/right.",
      "id": "SocialGraphApiProtoRelativePosition",
      "properties": {
        "x": {
          "format": "float",
          "type": "number"
        },
        "y": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoRelativeScale": {
      "description": "Scale relative to the user's avatar. x and y range from 0 (exclusive) to 1 (inclusive).",
      "id": "SocialGraphApiProtoRelativeScale",
      "properties": {
        "x": {
          "format": "float",
          "type": "number"
        },
        "y": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileData": {
      "description": "Data contained in every search profile. go/janata-profile-in-sgbe.",
      "id": "SocialGraphApiProtoSearchProfileData",
      "properties": {
        "description": {
          "description": "A free-text summary that the user inputs. E.g. \"Coder by day, jazz guitarist by night.\"",
          "type": "string"
        },
        "education": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileEducation"
          },
          "type": "array"
        },
        "interest": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileEntity"
          },
          "type": "array"
        },
        "language": {
          "description": "Indicates the language of this search profile. Use ISO-639 2-letter language code to specifying the language that this profile is created in.",
          "type": "string"
        },
        "location": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileLocation"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "SocialGraphApiProtoSearchProfileMetadata"
        },
        "occupation": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileEntity"
          },
          "type": "array"
        },
        "publicEmail": {
          "description": "This is the email that the user has chosen to display on their \"SearchCard\" publicly.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "publicPhoneNumber": {
          "description": "This is the phone number that the user has chosen to display on their \"SearchCard\" publicly.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "socialLink": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileSocialLink"
          },
          "type": "array"
        },
        "website": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "workplace": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileWorkplace"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileEducation": {
      "description": "Wraps information about a user's eductational background.",
      "id": "SocialGraphApiProtoSearchProfileEducation",
      "properties": {
        "endTime": {
          "$ref": "GoogleTypeDate"
        },
        "fieldOfStudy": {
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileEntity"
          },
          "type": "array"
        },
        "institution": {
          "$ref": "SocialGraphApiProtoSearchProfileEntity"
        },
        "startTime": {
          "$ref": "GoogleTypeDate"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileEntity": {
      "description": "This proto represents either a KG-entity, as represented by it's MID, or free-string text.",
      "id": "SocialGraphApiProtoSearchProfileEntity",
      "properties": {
        "countryCode": {
          "description": "Corresponding country code. Refer to go/people-search-dashboard for code list.",
          "type": "string"
        },
        "entity": {
          "description": "Corresponding mid in KG.",
          "type": "string"
        },
        "name": {
          "description": "Custom name of entity if there is no corresponding place/entity in KG (mid)",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileLocation": {
      "description": "Wraps information about a user's location, if they have chosen to share it on their SearchCard.",
      "id": "SocialGraphApiProtoSearchProfileLocation",
      "properties": {
        "endTime": {
          "$ref": "GoogleTypeDate"
        },
        "lengthOfStay": {
          "format": "google-duration",
          "type": "string"
        },
        "place": {
          "$ref": "SocialGraphApiProtoSearchProfileEntity"
        },
        "point": {
          "$ref": "SocialGraphApiProtoSearchProfileLocationInfo"
        },
        "startTime": {
          "$ref": "GoogleTypeDate"
        },
        "type": {
          "enum": [
            "LOCATION_TYPE_UNKNOWN",
            "HOMETOWN",
            "CURRENT",
            "PAST"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileLocationInfo": {
      "id": "SocialGraphApiProtoSearchProfileLocationInfo",
      "properties": {
        "lat": {
          "description": "Degrees [-90 .. 90]",
          "format": "double",
          "type": "number"
        },
        "lon": {
          "description": "Degrees [-180 .. 180]",
          "format": "double",
          "type": "number"
        },
        "radius": {
          "description": "Meters",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileMetadata": {
      "description": "This proto represents metadata of the users SearchProfile like profile state, GOG account id etc.,",
      "id": "SocialGraphApiProtoSearchProfileMetadata",
      "properties": {
        "accountId": {
          "description": "Unique contributor account id allocated by presence/janata infrastructure. This will be used in the frontend for various actions like reporting errors, photo uploads etc., go/boba-janata, go/cleanup-contributor-creation",
          "type": "string"
        },
        "accountMid": {
          "description": "Account KG entity mid assigned to this user required by old janata serving stack. This is not required anymore for serving. But might need it for historical purposes. See https://hume.google.com/edit/g/11gg6cyvch for more details.",
          "type": "string"
        },
        "aresId": {
          "description": "Ares id used for tracking the auto moderation.",
          "type": "string"
        },
        "state": {
          "description": "Current state of the Search Profile.",
          "items": {
            "$ref": "SocialGraphApiProtoSearchProfileState"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileSocialLink": {
      "description": "Wraps social profile information about the user.",
      "id": "SocialGraphApiProtoSearchProfileSocialLink",
      "properties": {
        "link": {
          "type": "string"
        },
        "type": {
          "enum": [
            "SOCIAL_LINK_TYPE_UNKNOWN",
            "FACEBOOK",
            "INSTAGRAM",
            "LINKEDIN",
            "PINTERIST",
            "SOUNDCLOUD",
            "TWITTER",
            "YOUTUBE",
            "PINTEREST",
            "JUMPROPE",
            "TIKTOK",
            "WORDPRESS",
            "FIREWORK",
            "SNAPCHAT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "DEPRECATED(b/158738685): Misspelling, use PINTEREST below instead.",
            "",
            "",
            "",
            "",
            "go/3rd-profile-sgbe-cc-sync",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileState": {
      "id": "SocialGraphApiProtoSearchProfileState",
      "properties": {
        "changeTimestamp": {
          "description": "Timestamp of when the state was changed.",
          "format": "google-datetime",
          "type": "string"
        },
        "displayTimestamp": {
          "description": "This will be used to display status to the user at a set time. If set to a value after `change_timestamp`, the change will not be 'reflected' until this time.",
          "format": "google-datetime",
          "type": "string"
        },
        "type": {
          "description": "State that the UserProfile was changed to.",
          "enum": [
            "UNKNOWN_PROFILE_STATE",
            "STATE_DRAFT",
            "STATE_FAILED_PHONE_VERIFICATION",
            "STATE_FAILED_ID_VERIFICATION",
            "STATE_FAILED_CONTENT_VERIFICATION",
            "STATE_NEEDS_MANUAL_REVIEW",
            "STATE_PUBLIC",
            "STATE_DELETED",
            "STATE_CONTENT_VERIFICATION_REQUIRED",
            "STATE_REJECTED_FOR_IMPERSONATION",
            "STATE_REQUIRES_ID_VERIFICATION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSearchProfileWorkplace": {
      "description": "Wraps information about a user working at a specific place.",
      "id": "SocialGraphApiProtoSearchProfileWorkplace",
      "properties": {
        "company": {
          "$ref": "SocialGraphApiProtoSearchProfileEntity"
        },
        "endTime": {
          "$ref": "GoogleTypeDate"
        },
        "startTime": {
          "$ref": "GoogleTypeDate"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSingleRecurrence": {
      "description": "This prompt will occur one time only. Could be a single event such as a graduation or a single connection reminder e.g. remind me to call X on 2022/03/19. Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoSingleRecurrence",
      "properties": {
        "date": {
          "$ref": "GoogleTypeDate"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoSyncInfo": {
      "description": "LINT.IfChange",
      "id": "SocialGraphApiProtoSyncInfo",
      "properties": {
        "sourceId": {
          "description": "CP2 sourceid column.",
          "type": "string"
        },
        "sync1": {
          "description": "CP2 sync1 column.",
          "type": "string"
        },
        "sync2": {
          "description": "CP2 sync2 column.",
          "type": "string"
        },
        "sync3": {
          "description": "CP2 sync3 column.",
          "type": "string"
        },
        "sync4": {
          "description": "CP2 sync4 column.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoThirdPartyInfo": {
      "id": "SocialGraphApiProtoThirdPartyInfo",
      "properties": {
        "clientName": {
          "description": "Not to be used. We have since moved to a lookup string at read time approach as opposed to storing data at write time. b/146072927",
          "type": "string"
        },
        "projectNumber": {
          "description": "Project number of the third party application performing the delete to be looked up via ClientAuthConfig during display time for users to know the current name of an application which has deleted contact data.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoUsageInfo": {
      "description": "Usage information. This is currently used for device contacts. Next ID: 3",
      "id": "SocialGraphApiProtoUsageInfo",
      "properties": {
        "lastTimeContacted": {
          "description": "Last time a contact was contacted.",
          "format": "google-datetime",
          "type": "string"
        },
        "timesContacted": {
          "description": "Number of times a contact was contacted.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoWeeklyRecurrence": {
      "description": "Pattern for a WEEKLY recurrence. You must specify at least one week_day. Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoWeeklyRecurrence",
      "properties": {
        "weekDay": {
          "description": "Set of weekdays the recurrence applies to.",
          "items": {
            "enum": [
              "DAY_OF_WEEK_UNSPECIFIED",
              "MONDAY",
              "TUESDAY",
              "WEDNESDAY",
              "THURSDAY",
              "FRIDAY",
              "SATURDAY",
              "SUNDAY"
            ],
            "enumDescriptions": [
              "The day of the week is unspecified.",
              "Monday",
              "Tuesday",
              "Wednesday",
              "Thursday",
              "Friday",
              "Saturday",
              "Sunday"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphApiProtoYearlyRecurrence": {
      "description": "Pattern for a YEARLY recurrence. A YEARLY recurrence is specified using a monthly pattern and a set of months the pattern applies to. Some examples: \"Every January 16\" : monthly_pattern { monthly_day_recurrence { month_day: 16 } } months: JANUARY \"Fourth Thursday of November and December\" : monthly_pattern { monthly_weekday_recurrence { week_day: THURSDAY week_day_number: 4 } } months: NOVEMBER months: DECEMBER Used in PeopleAPI layers + FBS/ContactsService (not in ProfileService)",
      "id": "SocialGraphApiProtoYearlyRecurrence",
      "properties": {
        "monthlyPattern": {
          "$ref": "SocialGraphApiProtoMonthlyRecurrence",
          "description": "The monthly pattern to recur."
        },
        "months": {
          "description": "The months of the year to apply the pattern.",
          "items": {
            "enum": [
              "MONTH_UNSPECIFIED",
              "JANUARY",
              "FEBRUARY",
              "MARCH",
              "APRIL",
              "MAY",
              "JUNE",
              "JULY",
              "AUGUST",
              "SEPTEMBER",
              "OCTOBER",
              "NOVEMBER",
              "DECEMBER"
            ],
            "enumDescriptions": [
              "The unspecified month.",
              "The month of January.",
              "The month of February.",
              "The month of March.",
              "The month of April.",
              "The month of May.",
              "The month of June.",
              "The month of July.",
              "The month of August.",
              "The month of September.",
              "The month of October.",
              "The month of November.",
              "The month of December."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiAffinityMetadata": {
      "description": "Extra ranking info returned with affinity data. This info is returned by DAS and passed to PAPI clients (Yenta), where it is used for ranking and filtering device and server suggestions together.",
      "id": "SocialGraphWireProtoPeopleapiAffinityMetadata",
      "properties": {
        "clientInteractionInfo": {
          "$ref": "SocialGraphWireProtoPeopleapiAffinityMetadataClientInteractionInfo",
          "description": "Information regarding client interactions."
        },
        "cloudDeviceDataInfo": {
          "$ref": "SocialGraphWireProtoPeopleapiAffinityMetadataCloudDeviceDataInfo",
          "description": "Device information about the candidate available in the cloud."
        },
        "cloudScore": {
          "description": "Affinity score for the cloud contact.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiAffinityMetadataClientInteractionInfo": {
      "id": "SocialGraphWireProtoPeopleapiAffinityMetadataClientInteractionInfo",
      "properties": {
        "isDirectClientInteraction": {
          "description": "Whether this suggestion is an edge directly from the client. E.g., a suggestion with which the user shared a photo on photos app.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiAffinityMetadataCloudDeviceDataInfo": {
      "id": "SocialGraphWireProtoPeopleapiAffinityMetadataCloudDeviceDataInfo",
      "properties": {
        "deviceScore": {
          "description": "The partial affinity score only counting device features.",
          "format": "double",
          "type": "number"
        },
        "isDeviceDataKnown": {
          "description": "Whether device data about this candidate were available in the cloud.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiExtensionAppsWaldoExtendedData": {
      "description": "Waldo-related extension data.",
      "id": "SocialGraphWireProtoPeopleapiExtensionAppsWaldoExtendedData",
      "properties": {
        "availabilities": {
          "$ref": "GoogleInternalAppsWaldoV1alphaUserAvailabilities"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiExtensionDynamiteExtendedData": {
      "description": "Dynamite-related extension data.",
      "id": "SocialGraphWireProtoPeopleapiExtensionDynamiteExtendedData",
      "properties": {
        "avatarUrl": {
          "description": "Avatar image URL for a Google Group, based on the member count.",
          "type": "string"
        },
        "description": {
          "description": "Short description of this bot. Only set if EntityType == BOT.",
          "type": "string"
        },
        "developerName": {
          "description": "Display name of bot developer. Only set if EntityType == BOT.",
          "type": "string"
        },
        "dndState": {
          "enum": [
            "UNKNOWN_DND_STATE",
            "AVAILABLE",
            "DND"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "entityType": {
          "enum": [
            "UNKNOWN_ENTITY_TYPE",
            "PERSON",
            "GOOGLE_GROUP",
            "BOT"
          ],
          "enumDescriptions": [
            "",
            "Regular user.",
            "Google Group.",
            "Dynamite bot."
          ],
          "type": "string"
        },
        "memberCount": {
          "description": "Number of members (direct or indirect) in a Google Group. Only an estimate for large groups (currently > 1K direct / indirect members).",
          "format": "int64",
          "type": "string"
        },
        "organizationInfo": {
          "$ref": "AppsDynamiteSharedOrganizationInfo",
          "description": "NEXT TAG: 9"
        },
        "presence": {
          "enum": [
            "UNDEFINED_PRESENCE",
            "ACTIVE",
            "INACTIVE",
            "UNKNOWN",
            "SHARING_DISABLED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Not a Dynamite user, or if the user has been invited but never logged into Dynamite ever before.",
            "The user has disabled presence sharing. This is currently only possible via the Classic setting to disable sharing your last active time (see external docs here: https://support.google.com/hangouts/answer/6083257?hl=en)."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiExtensionPaisaExtendedData": {
      "description": "Next tag number: 3",
      "id": "SocialGraphWireProtoPeopleapiExtensionPaisaExtendedData",
      "properties": {
        "actorId": {
          "description": "Actor ID of the person, if available (if the person has used the Paisa app).",
          "type": "string"
        },
        "subtitle": {
          "description": "Display subtitle, which may be used in suggestion/autocompletion results. Generally, this will be the Actor's registered Paisa phone number, in unmasked or masked form (e.g. +1 ***-***-1234) depending on visibility rules.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiExtensionPeopleStackExtendedData": {
      "id": "SocialGraphWireProtoPeopleapiExtensionPeopleStackExtendedData",
      "properties": {
        "familyStatus": {
          "description": "Whether the person is in the same family as the requesting user. Family here refers to https://families.google.com/families. This information is read from SuperGlue, and can be consumed by clients, e.g. Assistant and Photos. If this field is not set, the person is not in the user's family.",
          "enum": [
            "FAMILY_STATUS_UNSPECIFIED",
            "FAMILY_MEMBER"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "hiddenKeys": {
          "description": "The full list of hidden keys associated with this person. These are the external equivalent to the keys stored by the ConnectionLabelService, and they can be passed to the MutateConnectionLabel endpoint to unhide this person. This field will only be set if hide_type is HIDDEN.",
          "items": {
            "$ref": "SocialDiscoveryExternalEntityKey"
          },
          "type": "array"
        },
        "hideType": {
          "description": "If this field is not set, the person is visible (implicit).",
          "enum": [
            "HIDE_TYPE_UNSPECIFIED",
            "HIDDEN"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialGraphWireProtoPeopleapiExtensionPeopleStackPersonExtendedData": {
      "description": "NEXT_ID: 5",
      "id": "SocialGraphWireProtoPeopleapiExtensionPeopleStackPersonExtendedData",
      "properties": {
        "birthdayStatus": {
          "description": "Whether the person has birthday field populated.",
          "enum": [
            "BIRTHDAY_STATUS_UNSPECIFIED",
            "HAS_BIRTHDAY"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "familyStatus": {
          "description": "Whether the person is in the same family as the requesting user. Family here refers to https://families.google.com/families. This information is read from SuperGlue, and can be consumed by clients, e.g. Assistant and Photos. If this field is not set, the person is not in the user's family.",
          "enum": [
            "FAMILY_STATUS_UNSPECIFIED",
            "FAMILY_MEMBER"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "hiddenKeys": {
          "description": "The full list of hidden keys associated with this person. These are the external equivalent to the keys stored by the ConnectionLabelService, and they can be passed to the MutateConnectionLabel endpoint to unhide this person. This field will only be set if hide_type is HIDDEN.",
          "items": {
            "$ref": "SocialDiscoveryExternalEntityKey"
          },
          "type": "array"
        },
        "hideType": {
          "description": "If this field is not set, the person is visible (implicit).",
          "enum": [
            "HIDE_TYPE_UNSPECIFIED",
            "HIDDEN"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialPersonalizationKnexAnnotation": {
      "id": "SocialPersonalizationKnexAnnotation",
      "properties": {
        "item": {
          "items": {
            "$ref": "SocialPersonalizationKnexAnnotationItem"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SocialPersonalizationKnexAnnotationItem": {
      "description": "Next Tag: 8",
      "id": "SocialPersonalizationKnexAnnotationItem",
      "properties": {
        "confidence": {
          "format": "float",
          "type": "number"
        },
        "description": {
          "description": "Description of the item for debugging. Note that this field is populated only in a few select places.",
          "type": "string"
        },
        "equivalentMid": {
          "description": "If this field exists, then there exists a commonly used MID (typically a public MID, i.e., one in /m/) that approximates the meaning for this particular k'nex topic. For example, the value of this field for k'nex topic Tennis (/t/236) is /m/07bs0. The difference between k'nex /m/07bs0 and webref /m/07bs0 is as follows. If a content is annotated with webref /m/07bs0, then the content has to explicitly mention \"Tennis\" in some way, whereas if a content is annotated with k'nex /m/07bs0, then the content simply needs to talk about stuff related to tennis. Note that this field is not populated for all queries. For example, the compound concept \"Tennis in California\" does not have an associated mid. This field is intended to help external clients transit to k'nex.",
          "format": "uint64",
          "type": "string"
        },
        "generality": {
          "description": "A score that measures how broad / narrow a topic is, independent of the document and/or user profile. This is an experimental score and is not populated by default. Currently, it is in the range of [0, 1], where the higher the score is, the more general a topic is. Please talk to sherlock-dev@ before using this score. Populated when debug_level > 0.",
          "format": "float",
          "type": "number"
        },
        "mid": {
          "description": "This is an MID in the /t/ namespace. We will migrate them to /g/ in Q3'15.",
          "format": "uint64",
          "type": "string"
        },
        "relatedEntity": {
          "items": {
            "$ref": "SocialPersonalizationKnexAnnotationItemTopic"
          },
          "type": "array"
        },
        "topicality": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SocialPersonalizationKnexAnnotationItemTopic": {
      "id": "SocialPersonalizationKnexAnnotationItemTopic",
      "properties": {
        "mid": {
          "format": "uint64",
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SocialStanzaDeliveryRestriction": {
      "description": "Restrictions that affect the delivery of the stanza. By default, Stanzas are publishable, which means that they are eligible for indexing, aggregation, and other delivery options (Goops, Moonshine, notifications). A stanza can be created in a \"do not publish\" state; the stanza will not be published anywhere. The restriction can subsequently be removed with an UpdateStanza call, at which point the post will be treated as if it were newly created. A few notes/limitations about this option: 1. Client should keep a stanza unpublishable for a small period of time (if possible to) so that our ranking system does not consider this as a stale post (thus downranking the post). 2. Client should keep the number of unpublishable stanzas to a minimum, to reduce under-serving. 3. Updating a stanza from publishable to unpublishable after creation is not supported 4. At this time, publishing options are only supported on root stanzas; let us know if you require this for child stanzas. 5. Similarly, this is only supported as a global restriction. It may not be set as a per-destination-stream restriction.",
      "id": "SocialStanzaDeliveryRestriction",
      "properties": {
        "doNotPublish": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SocialStanzaModerationInfo": {
      "description": "ModerationInfo stores the information of moderation for a stanza in a specific destination stream. Including who moderated and why.",
      "id": "SocialStanzaModerationInfo",
      "properties": {
        "moderationReason": {
          "description": "The reason why this stanza was moderated provided by client.",
          "type": "string"
        },
        "moderator": {
          "$ref": "SecurityCredentialsPrincipalProto"
        },
        "moderatorType": {
          "description": "Type of moderation. Semantically REQUIRED, http://go/required At write time, only ModeratorType.AUTO_MODERATOR is allowed. For all other cases, this information is inferred from the request at write time.",
          "enum": [
            "MODERATOR_TYPE_UNKNOWN",
            "SYSTEM",
            "MODERATOR",
            "SYSTEM_BADWORD_BLACKLIST",
            "AUTO_MODERATOR"
          ],
          "enumDescriptions": [
            "",
            "Moderated by system - premod channel, preapproved/banned users etc.",
            "Moderated by the Channel moderator.",
            "Moderated by system - didn't pass bad words filtering.",
            "Automatic moderation triggered on behalf of the moderator"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SocialStanzaStanzaRestriction": {
      "description": "Contains various restriction information about a stanza, derived from properties of the stanza, the viewer and the creator. Restrictions stored in this message are not related to direct/indirect relationship between the viewer and the creator of stanza. Some examples are: - Abusive - Legal - Racy - Content not suitable for age - Porn - Blocked by country/geo of viewer. - Restricted by stanza creator (not the user specific block). - etc... Please see go/stanza-abuse-flow for more details.",
      "id": "SocialStanzaStanzaRestriction",
      "properties": {
        "abuseTypes": {
          "description": "The abuses.",
          "items": {
            "$ref": "AbuseiamAbuseType"
          },
          "type": "array"
        },
        "appealState": {
          "description": "The appeal state.",
          "enum": [
            "UNKNOWN_APPEAL_STATE",
            "APPEALED",
            "APPEAL_REJECTED",
            "APPEAL_APPROVED"
          ],
          "enumDescriptions": [
            "Unknown appeal state.",
            "The user has appealed and is waiting for review.",
            "The user appeal has been rejected by G+ admin.",
            "The user appeal has been approved by G+ admin."
          ],
          "type": "string"
        },
        "contentRestriction": {
          "$ref": "AbuseiamContentRestriction",
          "description": "Field to explain various restrictions of the Stanza. Some examples of restrictions are: - Not permitted because of legal restrictions of geography/country of viewer or creator. - Content not suitable for current viewer i.e. porn, abusive, racy. - Creator restricted the content to an age group. - etc..."
        },
        "deleteReason": {
          "description": "Delete reasons. This is a repeated field because an stanza can be deleted multiple times due to different reasons such as user_delete, admin_delete.",
          "items": {
            "enum": [
              "UNKNOWN_DELETE_REASON",
              "USER_ACCOUNT_DELETE",
              "OWNER_DELETE",
              "SPAM_ADMIN_DELETE",
              "SPAM_ADMIN_DELETE_CHILD_PORN",
              "SYSTEM_DELETE",
              "USER_ACCOUNT_DISABLE",
              "DESTINATION_STREAM_OWNER_DELETE",
              "SBE_ADMIN_TAKEDOWN",
              "CLIENT_ADMIN_TAKEDOWN",
              "SPAM_ADMIN_SUSPEND",
              "ANCESTOR_DELETE",
              "USER_PRODUCT_DOWNGRADE",
              "USER_PRODUCT_SUSPENDED",
              "ENTITY_STATE_CHANGE",
              "ENTITY_ADMIN_DELETED",
              "ENTITY_DELETED_DUE_TO_CLASSIFICATION",
              "ENTITY_PURGED",
              "USER_UNDERAGE",
              "YOUTUBE_CHANNEL_HIDDEN",
              "YOUTUBE_SERVICE_REMOVED",
              "YOUTUBE_LIGHTWEIGHT_DELETED",
              "YOUTUBE_LIGHTWEIGHT_HIDDEN"
            ],
            "enumDescriptions": [
              "",
              "Deletion due to users deleting or downgrading their account. May not be a permanent delete. Maps to Reason.USER_ACCOUNT_DELETE. This is not supported when DeleteOperation type is UNDO_DELETE.",
              "Deletion due to stanza owners deleting their stanzas. Maps to Reason.ACTIVITY_OWNER_DELETE, Reason.USER_DELETE",
              "Deletion due to AIA DELETE verdicts on abusive stanzas. Maps to Reason.ACTIVITY_OWNER_MARKED_COMMENT_SPAM, Reason.ACTIVITY_SPAM_ADMIN_DELETE, Reason.COMMENT_SPAM_ADMIN_DELETE, Reason.SQUARE_ADMIN_MARKED_COMMENT_SPAM This is not supported when DeleteOperation type is UNDO_DELETE.",
              "Deletion due to AIA DELETE verdicts on items categorized as child porn. A separate delete reason is needed for this due to the extra sensitive content, for which extra care must be taken when requested. Maps to Reason.CHILD_PORN This is not supported when DeleteOperation type is UNDO_DELETE.",
              "Deletion from an offline job. The precise reason is not reflected here Maps to Reason.SYSTEM_DELETE. May only be sent in deletion (or undeletion) requests that include a SuperDAT with the \"stanza.delete\" permission. (See go/sbe-policies#authority-selector-policies for more information.)",
              "Deletion due to users account being disabled, likely by system for abuse. User can still access their own content. Maps to Reason.GAIA_DISABLE_USER",
              "Deletion due to destination stream owner of the stanza destination stream deleting the stanza (go/delete_stream).",
              "Deleting due to emergency take down to mitigate production breakage. This can only be used as big red button under emergency, please read and follow the procedure in go/sbe-brb before using.",
              "Used by clients to allow non-owner admins to take down stanzas. Not purgeable and stanza remains visible to owner. Maps to Reason.CLIENT_ADMIN_TAKEDOWN.",
              "Deletion due to SUSPEND verdicts on abusive stanzas. Stanza will be purged after 120 days. Maps to Reason.SPAM_ADMIN_SUSPEND This is not supported when DeleteOperation type is UNDO_DELETE.",
              "Deletion due to ancestor owner deleting a child. This operation can be undone within 30 days. Maps to Reason.ACTIVITY_OWNER_MARKED_COMMENT_SPAM.",
              "Deleted because the user is no longer registered for the product/service. Maps to Reason.USER_SERVICE_DOWNGRADE",
              "Deleted because the user is suspended for the product/service. Maps to Reason.USER_SERVICE_SUSPENDED. See go/gaia/serviceid#service-flag",
              "Deletions due to the state of the entity. For example, private YT video is not allowed to have stanzas. Maps to Reason.ENTITY_STATE_CHANGE",
              "Deletions due to the entity that the stanza is attached is soft deleted by actions carried out internally. For example, YT video is not allowed to have stanzas if it has flag marked comments_disabled_internally.",
              "Deletion due to automatic classification of the associated client entity. For example, YT video is not allowed to have stanzas if it is marked as crosswalk (i.e video is classified as kids friendly and thus comments are disabled).",
              "Deleted because some upstream process has purged the entity that this stanza is attached to. For example, if YT purges a video or channel from their system, and thus the stanza should be marked for deletion. Semantically this delete reason should have a short retention period if it is used, because presumably the upstream process expects the entity is gone.",
              "Deleted because the user was underage. This is typically used to delete stanzas for underage users that were converted to Griffin (supervised).",
              "Deleted because the YouTube user has hidden their channel. This reason may only be used by channel hide flow.",
              "Deleted because the YouTube user has gone through service removal. This reason may only be used by service removal flow.",
              "Deleted because the YouTube user's account was converted to Lightweight and should be considered deleted. This currently includes lightweight conversion through Escape Hatch or during channel transfer. This operation is not reversible and data is purged after 30 days.",
              "Deleted because the YouTube user's account was converted to Lightweight and should be considered hidden. This currently includes Griffin U13 conversions. This operation is reversible and data is retained for 7 years since the user can restore their account after graduation from Griffin."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "deliveryRestriction": {
          "$ref": "SocialStanzaDeliveryRestriction",
          "description": "Delivery restrictions, if present."
        },
        "destinationStream": {
          "$ref": "AppsPeopleActivityBackendDestinationStream"
        },
        "moderationInfo": {
          "$ref": "SocialStanzaModerationInfo",
          "description": "The moderation info. At write time, this field is only allowed to be set when moderator_type is AUTO_MODERATOR. For other moderator types, moderation_reason is the only field that can be set by clients."
        },
        "moderationState": {
          "description": "The moderation state.",
          "enum": [
            "UNKNOWN_MODERATION_STATE",
            "NEW",
            "APPROVED",
            "REJECTED",
            "HOLD"
          ],
          "enumDescriptions": [
            "Unknown moderation state.",
            "Default state for a new message which has not been otherwise tagged. Such content will be displayed (in the associated destination stream) unless marked as abusive.",
            "Explicitly approved for display by the owner/moderator. Such content will be displayed (in the associated destination stream) even if marked as abusive, and should therefore only be used when such abuse states should be overridden.",
            "Explicitly rejected for display by the owner/moderator. Such content will be displayed to no one in the associated destination stream except the content's author.",
            "Held for the owner/moderator for review. Such content will be displayed (in the default stream view) only to its author."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "SpamBrainData": {
      "description": "This holds SpamBrain values which will be populated to docjoins & muppet. Proto is copied from spam_brain::SpamBrainData and populated at sitechunked site level (as opposed to the spambrain page classifier score).",
      "id": "SpamBrainData",
      "properties": {
        "site": {
          "description": "Sitechunker site granularity for this result",
          "type": "string"
        },
        "versionedData": {
          "description": "Versioned scores of SB classifiers",
          "items": {
            "$ref": "SpamBrainScore"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "SpamBrainScore": {
      "description": "Message representing versioned scores",
      "id": "SpamBrainScore",
      "properties": {
        "sbScore": {
          "description": "The value corresponding to this version.",
          "format": "float",
          "type": "number"
        },
        "versionId": {
          "description": "The version id.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "SpamCookbookAction": {
      "description": "This protocol buffer indicates actions that we take based on Cookbook recipes (see http://cookbook/) matching a particular document.",
      "id": "SpamCookbookAction",
      "properties": {
        "dropInServing": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SpamMuppetjoinsMuppetSignals": {
      "id": "SpamMuppetjoinsMuppetSignals",
      "properties": {
        "hackedDateNautilus": {
          "format": "int32",
          "type": "integer"
        },
        "hackedDateRaiden": {
          "format": "int32",
          "type": "integer"
        },
        "raidenScore": {
          "format": "double",
          "type": "number"
        },
        "site": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "SpeechS3LanguageIdentificationResult": {
      "description": "Response proto for the LangId service running on a Greco server in prod. Next Tag: 6",
      "id": "SpeechS3LanguageIdentificationResult",
      "properties": {
        "endTimeUsec": {
          "description": "The end time of the input audio that this result refers to. This value should increase across LanguageIdentificationResult emitted by the Greco server running LangId, and reflects the server having processed more of the input audio.",
          "format": "int64",
          "type": "string"
        },
        "rankedTopSupportedLanguages": {
          "description": "Ranked list of top-N language codes. Ranking is based on ConfidenceIntervals of supported languages, and N is defined in the LanguageIdentificationConfig.",
          "items": {
            "$ref": "SpeechS3Locale"
          },
          "type": "array"
        },
        "startTimeUsec": {
          "description": "Global start time. This value should be fixed across all LanguageIdentificationResults for a given utterance.",
          "format": "int64",
          "type": "string"
        },
        "topLanguageConfidence": {
          "description": "Confidence interval of the top recognized language.",
          "enum": [
            "UNKNOWN_CONFIDENCE",
            "NOT_CONFIDENT",
            "CONFIDENT",
            "HIGHLY_CONFIDENT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "voicedUtterance": {
          "description": "Identifies when the provided audio sample does or doesn't contain voiced samples. E.g. an unvoice utterance happens when the EOS signal is received before any frame because all frames were filtered by the endpointer. For events where voiced_utterance is false, ranked_top_supported_languages is defined but scores are not to be trusted. All LanguageIdentificationResults contains a valid value of voiced_utterance.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SpeechS3Locale": {
      "id": "SpeechS3Locale",
      "properties": {
        "format": {
          "description": "The format of the string in \"locale\". Should be one of LocaleFormat.",
          "format": "int32",
          "type": "integer"
        },
        "locale": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgAuthorityFeedbackMetadata": {
      "description": "go/entity-authority NB: currently all facts associated with Authority Feedback are externally traceable to the requests from which they originate.",
      "id": "StorageGraphBfgAuthorityFeedbackMetadata",
      "properties": {},
      "type": "object"
    },
    "StorageGraphBfgLegalRequestMetadata": {
      "id": "StorageGraphBfgLegalRequestMetadata",
      "properties": {
        "bugId": {
          "description": "The buganizer ID associated with this legal request. This is required.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgLivegraphProvenanceMetadata": {
      "description": "Metadata on source assertions that isn't part of the user-visible Triple payload, and that doesn't really represent data provenance, but that's used to affect the way Livegraph and possibly other horizontal KG infra systems *process* the triple. Read: fields below really shouldn't be part of the cross-system Triple proto at all. But because Triple is used both as an internal and an external KG API, we at least want to \"hide\" those fields that ought to be purely part of the internal source <-> LG contract. Next id: 6",
      "id": "StorageGraphBfgLivegraphProvenanceMetadata",
      "properties": {
        "directWriteRecordIds": {
          "description": "If one triple is directly-written after recon by LG without going through Composer, we add the record id it's from. Otherwise, it's empty. Note: 1) LG will dedup record ids before updating it. So this field shouldn't see duplicated record ids. 2) This is used internally by LG only. So if set by clients, they will be dropped by LG.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "lgInternalWriterId": {
          "description": "Identifies the LG internal writers that asserted the triple. This is the same as 'origin_id' in LG. This will only be populated by the LG writers to FactStore",
          "format": "uint64",
          "type": "string"
        },
        "provenanceOnlyAddition": {
          "description": "Whether this provenance is a provenance only addition or not. A provenance is considered an \"addition\" if it belongs to a triple that we expect FactStore to contain on its own (i.e through some inference), and thus we will *not* attempt to write it explicitly. This is a composer only populated field. Clients are not expected to populate this field.",
          "type": "boolean"
        },
        "triangulationKey": {
          "description": "Triples typically have a single triangulation key. This field supports > 1 keys to allow staged transition to a different key scheme. To successfully triangulate in the Livegraph Composer, the triple must have >=3 instances and each triple instance having a pairwise disjoint set of triangulation keys. The triangulation keys supplied for a single input triple are treated part of the same set, so a single triple cannot self-triangulate, regardless of how many triangulation keys it has. Note2: If a triple has multiple provenances, each one is expected to set the same triangulation_keys. ",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "weakData": {
          "description": "WARNING! The feature is still under active development and the exact semantics may be subject to change pending KE Design Review. Data marked as weak will be less preferred to regular data which does not have the marker. This allows ingesting data with a lower chance of negatively affecting existing features and products, at the cost of potentially not showing the data when competing data is available. Specifically, weak data is less preferred by conflict resolution inside of Livegraph composition. Additionally, RefX triggering will prefer to trigger based on signals computed from regular data. Aside from data providers choosing to mark their data as weak, Livegraph and RefX are the only horizontal systems expected to use this information. Please contact livegraph-team@ if you see a need for this to change. See go/weak-data for more information.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgLmsPolicyMetadata": {
      "description": "Metadata fields for LMS. See go/lms-online-restrictions for details.",
      "id": "StorageGraphBfgLmsPolicyMetadata",
      "properties": {
        "clientIdsAllowed": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "isEditorial": {
          "type": "boolean"
        },
        "modificationsAllowed": {
          "description": "Int values corresponds to the values of image_repository.licensed.api.restrictions.Modification enum.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "regionsAllowed": {
          "$ref": "KeGovernanceTypedRegions"
        },
        "regionsDisallowed": {
          "$ref": "KeGovernanceTypedRegions"
        },
        "requiresAttribution": {
          "type": "boolean"
        },
        "requiresFirstPartyOnly": {
          "type": "boolean"
        },
        "requiresLinkback": {
          "type": "boolean"
        },
        "requiresShareAlike": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgPolicyMetadata": {
      "description": "Metadata about data governance policies. For more context, see go/ke-triple-dg-policy-and-metadata. If any attribute is not set, then there's no specific restrictions associated with the missing attribute. For example, if `availability_start_timestamp` is not set, the data won't be embargoed automatically; if `availability_end_timestamp` is not set, they won't expire automatically. LINT.IfChange",
      "id": "StorageGraphBfgPolicyMetadata",
      "properties": {
        "availabilityEndTimestamp": {
          "description": "Timestamp after which data with this policy cannot be used. This value must be strictly larger/later than availability_start_time, if both are set.",
          "format": "google-datetime",
          "type": "string"
        },
        "availabilityStartTimestamp": {
          "description": "Timestamp before which data with this policy cannot be used. This value must be strictly smaller/earlier than availability_end_time, if both are set.",
          "format": "google-datetime",
          "type": "string"
        },
        "legalAllowedRegions": {
          "description": "List of regions in which the data with this policy is allowed to be used, while the data need to be removed in all regions outside this list according to legal request. This field should be used when the data is only allowed in a few regions and it is inconvenient to enumerate all of the regions in `legal_removal_regions` field. `legal_allowed_regions` and `legal_removal_region` together should include all possible regions, setting one field implies the other. Please set only one of them so the other field's values are implied. See details: http://go/ke-allowed-countries-policy-1p WARNING: This field is for legal purposes only. Please do not populate it without consulting ke-data-governance@.",
          "items": {
            "$ref": "KeGovernanceTypedRegions"
          },
          "type": "array"
        },
        "legalRemovalRegions": {
          "description": "List of regions in which the data with this policy need to be removed according to legal request. WARNING: This field is for legal purposes only. Please do not populate it without consulting ke-data-governance@.",
          "items": {
            "$ref": "KeGovernanceTypedRegions"
          },
          "type": "array"
        },
        "lmsPolicyMetadata": {
          "$ref": "StorageGraphBfgLmsPolicyMetadata",
          "description": "Policy metadata fields for LMS data. Only expected to be used by LMS providers -- please consult ke-data-governance@ before populating this field."
        },
        "policyDataScopeKeys": {
          "description": "This triple is protected by the policies with PolicyDataScope identified by these global unique ids.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "policySourceType": {
          "description": "Policy metadata are VERTICAL by default. Vertical policy makers / providers does not need to set this field explicitly.",
          "enum": [
            "UNKNOWN",
            "VERTICAL",
            "HORIZONTAL"
          ],
          "enumDescriptions": [
            "",
            "A vertical policy metadata describes data usage requirements for data provided by a vertical. When there are multiple vertical policies, usually as a result of vertical sources providing the same data, the policies are evaluated disjunctively.",
            "A horizontal policy metadata describes requirements to be applied horizontally. Typical horizontal policies are legal-related, such that data usage restrictions must be respected at all times. When there are multiple horizontal policies, they are evaluated conjunctively. When both horizontal and vertical policy metadata are present, their evaluation results are connecteted conjunctively, e.g. Evaluate(..., horizontal_metadata_1..) AND Evaluate(..., horizontal_metadata_2..) AND Evaluate(..., horizontal_metadata_3..) \u2026 AND (Evaluate(..., vertical_metadata_1..) OR Evaluate(..., vertical_metadata_2..) OR Evaluate(..., vertical_metadata_3..) \u2026)"
          ],
          "type": "string"
        },
        "umpPolicyMetadata": {
          "$ref": "StorageGraphBfgUmpPolicyMetadata",
          "description": "Policy metadata fields for UMP data. Only expected to be used by UMP providers -- please consult ke-data-governance@ before populating this field."
        }
      },
      "type": "object"
    },
    "StorageGraphBfgPublicInformationMetadata": {
      "id": "StorageGraphBfgPublicInformationMetadata",
      "properties": {
        "attributionUrl": {
          "description": "Publicly-visible URLs claiming this fact. Can not be empty -- at least one URL must be provided.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "lastVerifiedDate": {
          "description": "Most recent date at which 'attribution_url's were verified, as UNIX epoch time in milliseconds. This is required.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgSpiiCertification": {
      "description": "A fact about potentially sensitive personal info (http://what/SPII) can be \"certified\" iff it meets specific requirements. See go/kg-spii-certification for details.",
      "id": "StorageGraphBfgSpiiCertification",
      "properties": {
        "authorityFeedback": {
          "$ref": "StorageGraphBfgAuthorityFeedbackMetadata",
          "description": "This fact was provided via KGO / Entity Authority."
        },
        "legalRequest": {
          "$ref": "StorageGraphBfgLegalRequestMetadata",
          "description": "This fact was provided via a legal request."
        },
        "publicInformation": {
          "$ref": "StorageGraphBfgPublicInformationMetadata",
          "description": "This fact is public information. (See go/kg-spii-certification for a description of what qualifies as public information -- simply finding a fact online is not sufficient to certify a fact as public.)"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgTripleProvenance": {
      "description": "a message containing information about the source of this triple. Note for freebase data: that this is an unpacking of the creator/attribution chain. The creator below is the actual creator of the attribution node, and the rest of the attribution data sits along side. Next id: 22",
      "id": "StorageGraphBfgTripleProvenance",
      "properties": {
        "accessRequired": {
          "description": "Data providers shall use this to specify access requirement.",
          "enum": [
            "ACCESS_REQUIREMENT_UNSPECIFIED",
            "LEGACY_RESTRICTION",
            "LEGAL_UNSERVABLE_UNTIL_FURTHER_REVIEW",
            "CONTRACTUAL_PRERELEASE_MUSIC_DATA",
            "CONTRACTUAL_PRERELEASE_MUSIC_DATA_GPM",
            "CONTRACTUAL_STATS_LLC_DATA",
            "LEGAL_PUBLIC_DOMAIN_US",
            "LEGAL_GEO_NOT_SERVABLE_IN_CHINA",
            "ACCESS_REQUIREMENT_OUT_OF_RANGE",
            "SPII_SEARCH_PUBLIC_INTEREST",
            "SPII_KGO",
            "SPII_WALDREF",
            "CONTRACTUAL_OPTA_DATA_MIGRATION",
            "CONTRACTUAL_STATS_DATA_MIGRATION",
            "TECHNICAL_DEBT_SIRIUS_MIGRATION",
            "TECHNICAL_IN_DEVELOPMENT_GEO_KG_UGC",
            "MOMA_RESTRICTED_TVC",
            "MOMA_UNRESTRICTED_TVC",
            "MOMA_FTE",
            "AOG_TEST_DATA",
            "CONTRACTUAL_NETFLIX_DATA",
            "CONTRACTUAL_NETFLIX_GRACENOTE",
            "CONTRACTUAL_SPOTIFY_PODCAST_DATA",
            "CONTRACTUAL_IPG_DATA",
            "CONTRACTUAL_YOUVIEW_DATA",
            "CONTRACTUAL_YOUTUBE_ALC_DATA",
            "CREATOR_PRESENCE_DATA",
            "TECHNICAL_UNRECONCILED_MEDIA_ACTION",
            "CONTRACTUAL_AUDIBLE_DATA",
            "CONTRACTUAL_SEARCH_NETFLIX_DATA",
            "CONTRACTUAL_ASSISTANT_MEDIA_ACTIONS",
            "CONTRACTUAL_ANDROID_TV_NETFLIX_DATA",
            "CONTRACTUAL_GOOGLE_PLAY_MOVIES_DATA",
            "CONTRACTUAL_RANKING_PROVIDER_POPULARITY_DATA",
            "CONTRACTUAL_CARBON_INDEX_DATA",
            "CONTRACTUAL_CARBON_INDEX_APP",
            "TRAVEL_ACTIVITY_DATA",
            "CONTRACTUAL_AOG_FOOD_ORDERING_DATA",
            "CONTRACTUAL_YETI_DATA",
            "CONTRACTUAL_BBC_PROVIDER_METADATA",
            "JANATA_USER_GENERATED_DATA",
            "TRIANGULATION_LOSERS_FOR_REFX",
            "CONTRACTUAL_PRERELEASE_YT_SHOWS",
            "SPII_LOSERS_FOR_REFX",
            "SHOPPING_PRODUCT_IMAGE",
            "SHOPPING_PRODUCT_DESCRIPTION",
            "SHOPPING_PRODUCT_ATTRIBUTE",
            "SHOPPING_ON_DOT_COM_ONLY",
            "SHOPPING_ORGANIC_ONLY",
            "SHOPPING_ORGANIC_ON_DOT_COM_ONLY",
            "SHOPPING_PRE_RELEASE_PRODUCT",
            "SHOPPING_DO_NOT_PUBLISH_TO_TOPIC_SERVER",
            "LMS_POLICY_ACKED_ONLY",
            "MINED_PEOPLE",
            "LIMITED_FOR_SEMANTIC_UNDERSTANDING",
            "ISOLATION_S3_MEDIA_ACTION",
            "ISOLATION_S3_REAL_ESTATE",
            "ISOLATION_S3_AUTOS",
            "ISOLATION_S3_NLWEB",
            "ISOLATION_S3_RECOMEDIA",
            "ISOLATION_S3_GEO_CARS",
            "ISOLATION_YOUTUBE_OTT",
            "ISOLATION_YOUTUBE_MUSIC_BASS_ENTITIES",
            "ISOLATION_FINANCIAL_DATA",
            "ISOLATION_MEDICAL",
            "ISOLATION_G4C",
            "ISOLATION_EXPERIMENT_ONLY",
            "ISOLATION_KE_INTERNAL",
            "ISOLATION_WEB_CHANNELS",
            "ISOLATION_ONRAMP_DICTIONARY_EXPERIMENT",
            "ISOLATION_S3_TRAVEL_HOTEL_ROOMS",
            "ISOLATION_PKG_ANDROID_AUTO_EMBEDDED_SIGNED_IN",
            "ISOLATION_PKG_ANDROID_AUTO_EMBEDDED_SIGNED_OUT",
            "ISOLATION_PKG_APP_NAMES",
            "ISOLATION_PKG_ASSISTANT_CONTACT_AFFINITY_WITH_METADATA",
            "ISOLATION_PKG_ASSISTANT_DEVICE_SETTINGS",
            "ISOLATION_PKG_ASSISTANT_LIST_NAMES_FOR_SPEECH_BIASING",
            "ISOLATION_PKG_ASSISTANT_SETTINGS_FOOTPRINTS",
            "ISOLATION_PKG_ASSISTANT_SETTINGS_NICKNAME",
            "ISOLATION_PKG_CALENDAR_EVENTS_FOR_QUERY_ANNOTATION",
            "ISOLATION_PKG_CALENDAR_EVENTS_FOR_SPEECH_BIASING",
            "ISOLATION_PKG_CALENDARS_FOR_QUERY_ANNOTATION",
            "ISOLATION_PKG_CALENDARS_FOR_SPEECH_BIASING",
            "PKG_ASSISTANT_CONTACT_AFFINITY_FOOTPRINTS",
            "ISOLATION_PKG_CONTACT_AGGREGATED_SIGNALS",
            "ISOLATION_PKG_CONTENT_INTERESTS",
            "ISOLATION_PKG_DEVICE_INSTALLED_APPS",
            "ISOLATION_PKG_DISCOVER_SMART_HOME_DEVICES",
            "ISOLATION_PKG_DYNAMIC_ENTITIES",
            "ISOLATION_PKG_FLIGHT_LEG_RESERVATIONS",
            "ISOLATION_PKG_FOCUS_OWNER_PROFILE",
            "ISOLATION_PKG_FORMATTED_ADDRESS",
            "ISOLATION_PKG_GAIA",
            "ISOLATION_PKG_GELLER_ANSWERS",
            "ISOLATION_PKG_GMAIL_BILLS",
            "ISOLATION_PKG_GMAIL_ORDERS",
            "ISOLATION_PKG_HABITS",
            "ISOLATION_PKG_HANDBAG_ENTITIES",
            "ISOLATION_PKG_HERON_INTENTS_AND_TYPES",
            "ISOLATION_PKG_HOTEL_RESERVATIONS",
            "ISOLATION_PKG_HOUSEHOLD",
            "ISOLATION_PKG_LAMS_PREFERENCES",
            "ISOLATION_PKG_LOCATION_SHARING_CONTACTS",
            "ISOLATION_PKG_MAPS_ALIAS_FOOTPRINTS",
            "ISOLATION_PKG_MAPS_SEARCH_LOCATIONS",
            "ISOLATION_PKG_LOCAL_LEAF_PAGE_VIEW_LOCATIONS",
            "ISOLATION_PKG_MEDIA_HABITUAL_CACHE",
            "ISOLATION_PKG_MEDIA_LIBRARY",
            "ISOLATION_PKG_MEDIA_USER_CONTEXT_INFO",
            "ISOLATION_PKG_MEDIA_USER_ENTITIES",
            "ISOLATION_PKG_PARKING_LOCATIONS",
            "ISOLATION_PKG_PEOPLE_API",
            "ISOLATION_PKG_PEOPLE_API_CONTACT_ANNOTATIONS",
            "ISOLATION_PKG_PEOPLE_API_GET_PEOPLE_BY_IDS",
            "ISOLATION_PKG_PERSONAL_CONTACT_ANNOTATIONS",
            "ISOLATION_PKG_PERSONAL_PLACES",
            "ISOLATION_PKG_PERSONAL_SHARED_CONTACT_ANNOTATIONS",
            "ISOLATION_PKG_PERSONALIZED_PRONUNCIATIONS",
            "ISOLATION_PKG_PLAY_AUDIO_BOOKS",
            "ISOLATION_PKG_PWS_ASSISTANT_CONTACTS_FOOTPRINTS",
            "ISOLATION_PKG_ASSISTANT_UPP_PERSONAL_TOP_ENTITIES",
            "PKG_RESERVATION_DATA",
            "ISOLATION_PKG_GI_HOTEL_RESERVATION_DATA",
            "ISOLATION_PKG_GI_FLIGHT_RESERVATION_DATA",
            "ISOLATION_PKG_GI_CAR_RENTAL_RESERVATION_DATA",
            "ISOLATION_PKG_GI_TRANSPORTATION_RESERVATION_DATA",
            "ISOLATION_PKG_GI_RESTAURANT_RESERVATION_DATA",
            "ISOLATION_PKG_RESTAURANT_RESERVATIONS",
            "ISOLATION_PKG_SELF_ENTITIES",
            "ISOLATION_PKG_SOCIAL_EVENT_RESERVATIONS",
            "ISOLATION_PKG_SOCIAL_GRAPH_PEOPLE_API",
            "ISOLATION_PKG_STADIA_CONTACTS",
            "ISOLATION_PKG_STARLIGHT_BULK_LOOKUP",
            "ISOLATION_PKG_STARLIGHT_BULK_LOOKUP_CONSISTENT",
            "ISOLATION_PKG_STARLIGHT_BULK_LOOKUP_CONSISTENT_CONTACTS",
            "ISOLATION_PKG_STARLIGHT_COMPOSITE",
            "ISOLATION_PKG_STARLIGHT_COMPOSITE_FACE_LABELS",
            "ISOLATION_PKG_STARLIGHT_FACE_LABELS",
            "ISOLATION_PKG_STARLIGHT_QUERY",
            "ISOLATION_PKG_STARLIGHT_TOP_CONTACTS",
            "ISOLATION_PKG_STARLIGHT_VISIBLE_TO_GUESTS",
            "ISOLATION_PKG_STRUCTURED_MEMORY_FOOTPRINTS",
            "ISOLATION_PKG_TEACH_AND_LEARN_ENTITIES",
            "ISOLATION_PKG_ASSISTANT_ROUTINES",
            "ISOLATION_PKG_VANITY_COLLECTIONS",
            "ISOLATION_PKG_WEBSEARCH",
            "ISOLATION_PKG_WHITEPAGES_PHONE_NUMBER",
            "ISOLATION_PKG_VOICE_PROFILE",
            "ISOLATION_PKG_YOUTUBE_ASSISTANT_CONTEXT",
            "ISOLATION_PKG_YOUTUBE_ASSISTANT_XWALKSAFE_CONTEXT",
            "ISOLATION_PKG_YOUTUBE_MUSIC_LOCKER",
            "ISOLATION_PKG_YOUTUBE_PLAYLISTS",
            "ISOLATION_PKG_YOUTUBE_PLAYLIST_SEARCH",
            "ISOLATION_PKG_YOUTUBE_PRIVATE_PLAYLISTS",
            "ISOLATION_PKG_YOUTUBE_PUBLIC_AND_PRIVATE_PLAYLISTS",
            "ISOLATION_S3_CREATOR_PRESENCE",
            "ISOLATION_S12Y_RECIPE_INGREDIENT_INSIGHTS",
            "UMP_TESTING_ONLY",
            "INTENTJOINS_NB_SIGNALS",
            "ADS_INTEGRITY_ANNOTATION",
            "COVID_MAPS_SENSITIVE",
            "KE_TRUST",
            "SENSITIVE_ENTITIES_CLASSIFICATION",
            "ISOLATION_S3_DATASEARCH",
            "VIRTUALCARE_US",
            "NETFLIX_AVAILABILITY_MEDIA_ACTION",
            "ACCC_RISKY_DATA",
            "AU_ACCC_RISKY_FOR_DISPLAY",
            "GEO_FEATURE_RESTRICTION",
            "RIGHTS_MANAGEMENT_100",
            "RIGHTS_MANAGEMENT_101",
            "RIGHTS_MANAGEMENT_102",
            "DICTIONARY_DATA_OXFORD",
            "DICTIONARY_DATA_LE_ROBERT",
            "ENTITY_TEXT_FEATURES",
            "AR_ONBOARDING_TEST",
            "AR_ONBOARDING_TEST_2",
            "MATERIALIZED_ENRICHER_INTERNAL",
            "MATERIALIZED_SCUBED_INTERNAL"
          ],
          "enumDescriptions": [
            "",
            "A legacy restriction that hasn't been migrated to AccessRequirement applies to the corresponding Triple. This value is invalid on data being ingested by KG, except in the cases where the data is provided by an allowed data provider. Subject to renaming as usage becomes clearer.",
            "WARNING! Legally or contractually sensitive data that has not been cleared for *any* product use cases. Data tagged here may be used for specific learning models (e.g., RefX systems), but can never be served. All data parked here are expected to either lose their AccessRequirement tags, or be given more appropriate (possibly new) ones. YOU MUST NEVER serve this data. If there is data parked here that you believe requires serving, YOU MUST CONTACT kg-legal@ to figure out the team responsible for that data and go through a new legal-onboarding review.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. Pre-release music album data from YouTube Music Label deals. YOU MUST CONTACT abobb@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. Pre-release music album data from Metajam Embargoed data. YOU MUST CONTACT abobb@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. Stats LLC's data is subject to simba/deal.do?cmd=view&id=189236. YOU MUST CONTACT kg-legal@ before reading or writing this data. Tags: Sports, Golf, Basketball, Baseball, Football, Hockey, Soccer",
            "WARNING! Data subject to nuanced legal rules. DO NOT use without permission and understanding of usage constraints. This data is subject to public-domain restrictions particular to the United States. YOU MUST CONTACT kg-legal@ before reading or writing this data.",
            "DEPRECATED! Not set anymore, see b/129694010 for some details. If you encounter code that looks at this access requirement, please consider cleaning it up. As of 2019-06-18, there is no triple in Livegraph with this restriction set anymore. WARNING! Legally sensitive Geo data. Data tagged with this value MUST not be served in China. Context: https://goto.google.com/geo-china-policy https://goto.google.com/kg-geo-china-policy YOU MUST CONTACT yegor@ or wafarris@ before reading or writing this data.",
            "Represents an out-of-range value. This may be returned by a server in situations where it's not feasible to round-trip an unknown enum value. It should generally not be specified as a requested access, since behavior is undefined in that case.",
            "WARNING! These properties are classified as Sensitive Personal Data under GDPR (go/gdpr-spii-kg-announce). Do not use this data without review from counsel. Search has vetted this SPII, but you need to check that you are in Search PA and your product's use of the data is consistent with PA-specific limitations. See go/gdpr-kg-diagram for an overview of what data may be covered by this restriction. No one should write data with this AccessRequirement; it is asserted programmatically in Livegraph at composition time using a policy-based classifier. YOU MUST CONTACT kg-legal@ before reading data with this acl.",
            "WARNING! These properties are classified as Sensitive Personal Data under GDPR (go/gdpr-spii-kg-announce). Do not use this data without review from counsel. This data is included in KG with Search-specific user consent. Product counsel must determine whether the scope of the consent is consistent with use in a product. See go/gdpr-kg-diagram for an overview of what data may be covered by this restriction. No one should write data with this AccessRequirement; it is asserted programmatically in Livegraph at composition time using a policy-based classifier. YOU MUST CONTACT kg-legal@ before reading data with this acl.",
            "WARNING! These properties may contain data classified as Sensitive Personal Data under GDPR (go/gdpr-spii-kg-announce). Do not use this data without review from counsel. YOU MUST CONTACT kg-legal@ before reading data with this acl.",
            "Access controls for the migration of OPTA->STATS data. These tags are transient, and all evidence of their existence will be destroyed after go/opta-data-rollout completes. YOU MUST CONTACT yonatans@ before reading or writing this data.",
            "",
            "DEPRECATED! Not set anymore. Used to be set on triples from the \"geo\" process feeding into Livegraph for the Sirius project (forward geocoding in TopicServer) prior to full launch.",
            "Access controls for data being injected by Geo's KG UGC pipe while it is being fleshed out (allow Geo to onboard his data to Livegraph but filtering which clients can fetch it from TopicServer). This is an access restriction we use while developing or QAing the Events UGC flow end-to-end. Only maps will fetch the data through TopicServer, and we will not allow this data to enter RefX, nor will it be shown to users. When prod experiments exist, we will migrate to that instead. YOU MUST CONTACT poucet@ before reading or writing this data.",
            "Access requirement for Moma. Moma triples is only internally available. More details about Moma data access is here: go/moma-tvc-access YOU MUST CONTACT moma-kg-eng@ before reading or writing this data. Available for restricted TVCs.",
            "Available for unrestricted TVCs.",
            "Available for FTE.",
            "Access Requirement for AoG Test data. AoG test data is only available to developers who sign up for AoG previews. More details at - go/feeds-tod. This is a short-term solution until Topic Server supports experiments in prod. YOU MUST CONTACT se-catalog-feeds@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. In order to handle such data, see: go/ma-access-controls-prd Netflix data is subject to SIMBA 400184 and 355494. YOU MUST CONTACT nebiat@ before reading or writing this data.",
            "This is an access restriction to avoid any usage of Netflix deeplinks from data aggregator Gracenote (TMS) accidentally without knowing the context. YOU MUST CONTACT ump-data-team@ before reading or using this data.",
            "This is an access restriction requirement for the licensed Spotify podcast data. The license requires that the Spotify feed data cannot be used to promote other providers. YOU MUST CONTACT ke-media-actions@ before reading or using this data.",
            "This is an access restriction to avoid any usage of media data from a special TV aggregator IPG without knowing the context. YOU MUST CONTACT go/ump before reading or writing this data.",
            "This is an access restriction to avoid any usage of media data from a special LiveTV data provider Youview without knowing the context. YOU MUST CONTACT go/ump before reading or writing this data.",
            "This is an access restriction to avoid any leakage of data for the testing and dogfooding of Youtube ALC data. YOU MUST CONTACT go/ump before reading or writing this data.",
            "DEPRECATED! Not set anymore. Deprecated in favor of ISOLATION_S3_CREATOR_PRESENCE.",
            "Access controls for data being injected by the Media Actions team without being reconciled against existing entities. This is an access restriction we use to insert triples into KG that improves Media Actions triggering on the Assistant, but that would otherwise cause quality issues on Search (due to the lack of proper reconciliation). While triples tagged with this access restriction will typically only be used on the Assistant, this access restriction should not be used for contractually sensitive data. In order to handle such data, see: go/ma-access-controls-prd See go/ma-launch-small-providers and go/ma-acl for context. YOU MUST CONTACT ke-media-actions@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. Audible's data is subject to simba/deal.do?cmd=view&id=417794. YOU MUST CONTACT kg-legal@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. Netflix for search data is subject to simba//#documents/list/dealId=500038. YOU MUST CONTACT knowledge-legal@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. YOU MUST CONTACT ke-media-actions@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. YOU MUST CONTACT kennethchiu@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. This is an access restriction we add Google Play Movies metadata into KG. For now it should be used ONLY for Android TV/Amati/Sabrina. In order to handle such data, see: b/34183296 Since it is google internal data, it doesn't have SIMBA DEAL ID. YOU MUST CONTACT ke-media-actions@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. This is an access restriction to access provider provided popularity score to rank entities within a provider's catalog. go/ps-to-kg , b/154547652 YOU MUST CONTACT ke-media-actions@ before reading or writing this data.",
            "Data ingested by Carbon Index for internal processing and aggregation, not fit for display on any surface irrespective of attribution. YOU MUST CONTACT area120-carbonindex-eng@ before reading this data.",
            "Data fit for display on the Carbon Index frontend to trusted testers, with proper attribution and controls. YOU MUST CONTACT area120-carbonindex-eng@ before reading this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. YOU MUST CONTACT travel-ttd-ecosystem-team@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. YOU MUST CONTACT fo-partner-eng@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. This is an access restriction for accessing Yeti publisher image data in KG. For now it should be used ONLY for Yeti. YOU MUST CONTACT stadia-knowledge-eng@ before reading or writing this data.",
            "In order to test BBC metadata before serving code populates them to the public",
            "WARNING! User generated data. DO NOT use without permission and understanding of usage constraints. This data is from the Janata feature and contains information that a user chose to disclose as pubilc about themselves. YOU MUST CONTACT npp-lr@ before reading or writing data with this acl.",
            "WARNING! DO NOT use without permission and understanding of usage constraints. This is data that needed to be triangulated but lacked support from three different data sources. The purpose of this ACL is to allow RefX to access even the data that lacks triangulation. More background on this can be found at go/baike-triangulation. YOU MUST CONTACT lg-composition@ before reading or writing data with this acl.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. YouTube Red Original prerealeased shows, seasons and episodes. YOU MUST CONTACT ajithm@ before reading or writing data with this acl.",
            "WARNING! DO NOT use without permission and understanding of usage constraints. This is for facts deemed Sensitive Personal Data (SPII) which have been removed from the graph. The purpose of this ACL is to allow RefX to access this data for proper query attribution & reconciliation decisions, even though it's not part of KG. YOU MUST CONTACT kg-legal@ before reading data with this acl.",
            "WARNING! Use of Shopping product images can carry unique legal risks. DO NOT use without permission and understanding of usage constraints. Before reading or writing this data, you MUST follow the Shopping Commerce data access request process by completing the questionnaire at go/shopping-commerce-data-access-request.",
            "WARNING! Use of Shopping product descriptions can carry unique legal risks. DO NOT use without permission and understanding of usage constraints. Before reading or writing this data, you MUST follow the Shopping Commerce data access request process by completing the questionnaire at go/shopping-commerce-data-access-request.",
            "WARNING! Some Shopping product attributes are provided under license from Gladson or Multi-Ad and cannot be modified without written notice to the licensor. DO NOT modify without permission and understanding of usage constraints. If you plan to modify this data, you MUST follow the Shopping Commerce data access request process by completing the questionnaire at go/shopping-commerce-data-access-request.",
            "",
            "WARNING! These Shopping entities may only appear in organic experiences on any surface. DO NOT use without permission and understanding of the unique legal risks and usage constraints. Before reading or writing this data, you MUST follow the Shopping Commerce data access request process by completing the questionnaire at go/shopping-commerce-data-access-request.",
            "WARNING! These Shopping entities may only appear in organic experiences on Google.com and the Google Search App. DO NOT use without permission and understanding of the unique legal risks and usage constraints. Before reading or writing this data, you MUST follow the Shopping Commerce data access request process by completing the questionnaire at go/shopping-commerce-data-access-request.",
            "WARNING! These data are extracted from extremely high-traffic product announcements and can only be used in specifically-designed features. DO NOT use with permission and understanding of the usage constraints. YOU MUST CONTACT product-data-everywhere-eng@ before reading or writing this data.",
            "This special access requirement is temporarily used to block shopping data from publishing to the topic server. This access requirement can be removed after the launch of the entity based filtering (in Polygraph). See this email thread for more context: http://g/livegraph-team/oaqrGm9Mabs/iMlGY7D_BgAJ YOU MUST CONTACT product-data-everywhere-eng@ before writing the data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints found at go/lms-access-policy and communicating your use case at go/lms-onboarding. YOU MUST CONTACT lms-legal@ and licensed-media-service-team@ before reading or writing this data.",
            "WARNING! Data about people which was algorithmically mined from web documents - do not use this data without review from counsel and without first consulting with entwild-eng@. No one besides Entwild (go/entwild) should be writing triples with this AccessRequirement. YOU MUST CONTACT kg-legal@, as well as entwild-eng@ before reading data with this acl.",
            "WARNING! Legally or contractually sensitive data that has not been cleared for *any* product use cases. Data tagged here may be used only for specific learning models (e.g., RefX systems), and may be served for such purposes in Topic Server, but should never be displayed to external users. YOU MUST NEVER surface this data in a user-visible product. YOU MUST CONTACT kg-legal@ before reading or writing this data.",
            "Access requirements for the verticals using S-Cubed. YOU MUST CONTACT scubed-team@ before reading or writing this data.",
            "",
            "",
            "",
            "",
            "",
            "The following group of access requirements are for Onramp data from YouTube systems that is only meant to be served back to YouTube via the YouTube Knowledge Service. YOU MUST NOT use these AR unless you are go/ytks. Please contact yt-knowledge-service@ and yt-aperture@ for questions. YouTube OTT (go/ott-platform)",
            "YouTube Music Bass Entities (go/bass-entities)",
            "Access control for the Financial data that uses custom schema which is used mainly by the Google Finance team for gradually ingesting data. Reach out to fgc-be@ if you have any questions.",
            "For Medical KG (go/med-kg) isolated data. Data stored under this AR is licensed and should be used only after pcounsel review. Contact: medical-nlp@.",
            "Deprecated: use ISOLATION_MEDICAL instead.",
            "Using gradual integration (go/gradual-integration) requires setting up an AccessRequirement. This value can be used for experimentation before the CL to add the new value has been submitted. See go/gradual-integration#accessrequirement for how to add a new value. WARNING: should NOT be used in production.",
            "**DO NOT USE** This is an access restriction to be used by KE internally to specially treat OnRamp client's access requirements. It is asserted programmatically in Livegraph at accept record time. Clients should NOT assert this on their input triples; nor should they use this to query TopicServer or in KG batch pathquery.",
            "Access controls for web channels entities. go/webchannels-infra-prd. See go/webchannels-kg-integration for details. Please contact web-channels-infra@ before reading or writing this data.",
            "WARNING! Sensitive data under strict contractual usage agreements. DO NOT use without permission and understanding of usage constraints. Access controls for dictionary entities. Design proposal:go/word-osrp-proposal, schema details:go/kg-dict-schema Please contact dictionary-lr@ before reading or writing this data.",
            "Access controls for Hotel Rooms entities. Please contact hotels-rooms-eng@ before reading or writing this data. DD: go/hotel-room-photos-gps",
            "Access controls for Personal KG data source isolation. The ISOLATION_PKG data sources *DO NOT* flow through LiveGraph and must be written or read by Personal KG only. Please keep the list sorted. PKG ARs should be in the range [15001, 20000]. Next id: 15042 YOU MUST CONTACT pkg-service-team@ before using these ARs.",
            "",
            "",
            "",
            "",
            "For data from user's lists e.g. list name.",
            "",
            "",
            "",
            "",
            "For data from user's calendars e.g. calendar name.",
            "",
            "PWG approval for client use cases for contact affinity footprints must include explicit call outs and approval for type of traffic. Currently this is NOT allowed for non-Assistant traffic.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "For PersonalContactAnnotations from FocusNameServlet. For personal contacts that are not visible to guest.",
            "",
            "For \"visible to guest\" contact vertical.",
            "",
            "",
            "",
            "For personal top entities generated by Assistant user profile platform.",
            "PWG approval for client use cases for reservation data must include explicit approval for this type of traffic. Note: Prefer to use the ISOLATION_PKG_GI_*_RESERVATION_DATA value below for the specific reservation type needed, rather than this value, since those trigger individual Gmail Intelligence fetchers rather than all of them.",
            "PWG approval for client use cases for reservation data must include explicit approval for this type of traffic.",
            "PWG approval for client use cases for reservation data must include explicit approval for this type of traffic.",
            "PWG approval for client use cases for reservation data must include explicit approval for this type of traffic.",
            "PWG approval for client use cases for reservation data must include explicit approval for this type of traffic.",
            "PWG approval for client use cases for reservation data must include explicit approval for this type of traffic.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "PWG-YouTube approval required for all use cases involving this data.",
            "For personal playlists from YouTube's PlaylistService that have public visibility, PWG-YouTube approval required for all usecases involving this data.",
            "For personal playlists from YouTube's PlaylistService \"Search\" endpoint. PWG-YouTube approval required for all usecases involving this data.",
            "For personal playlists from YouTube's PlaylistService that have private visibility. PWG-YouTube approval required for all usecases involving this data.",
            "For data from YouTube's PlaylistService that has either public or private visibility (i.e. the combination of ISOLATION_PKG_YOUTUBE_PLAYLISTS and ISOLATION_PKG_YOUTUBE_PRIVATE_PLAYLISTS). PWG-YouTube approval required for all usecases involving this data.",
            "Access controls for Creator Channel's S-Cubed corpus data. See more in go/uro-access-required. YOU MUST CONTACT milk-tea@ before reading or writing this data",
            "For Search sustainability's food choice feature, Recipe Ingredient Insights. Assign existing KG entities feature types to classify triggering behavior and insights. Owned by salehh@ and s12y-eng@ See go/rii-kg-triggering-migration for more information.",
            "This access control is used to guard data used by the Unified Media Platform team (ke-media-actions-serving@) for testing new features. It should never be used for purposes other than testing. More context at go/fake-media-provider.",
            "Access controls for the IntentJoins Navboost data. YOU MUST CONTACT intentjoins-eng@ before reading or writing this data.",
            "Access controls for Ads Integrity annotation data. Ads Integrity annotations are only available for Ads Integrity policy enforcement. See go/ai-political-km for more details. YOU MUST CONTACT ai-pacg@ before reading or writing this data.",
            "Access controls for statistical information related to COVID-19 that can only be displayed in certain products. YOU MUST CONTACT talcohen@ before reading or writing this data.",
            "Access control for KE Trust related scores. YOU MUST CONTACT ke-trust-team@ before reading this data. AND YOU SHOULD NOT write to it.",
            "Access control for Sensitive Entities Database predicates See go/sed-prd for details YOU MUST CONTACT sensitive-entities-team@ before reading this data. SHOULD NOT write to it.",
            "Access controls for the S-Cubed Data Search. See more in go/uro-access-required. YOU MUST CONTACT scubed-team@ before reading or writing this data",
            "Access controls for VirtualCare provider data bound by contractual agreements. The data can only be used in US and currently only VirtualCare product is authorized to use the data. YOU MUST CONTACT virtualcare-eng@ and kg-legal@ before reading this data. AND YOU SHOULD NOT WRITE TO IT",
            "This is an access restriction to avoid any usage of a special virtual media action provider NETFLIX_AVAILABILITY accidentally without knowing the context. see: go/nflx-availability-acl for context YOU MUST CONTACT ke-wedia@ before reading or writing this data.",
            "DEPRECATED in favor of AU_ACCC_RISKY_FOR_DISPLAY",
            "Triples labeled with this AccessRequirement may be risky to be displayed in Australia. YOU MUST CONTACT richardfang@, mattmaly@, shutongyu@ before reading this data. **AND YOU SHOULD NOT WRITE TO IT**",
            "Maps data that should not be displayed under specific circumstances. YOU MUST CONTACT geo-irt@ before reading this data.",
            "Access controls for rights management policies. See http://go/ke-rights-management-pilot for more context. YOU MUST CONTACT ke-data-governance@google.com before writing this data, and the RIGHTS_MANAGEMENT_* ARs should NOT be specified explicitly for reading. Corresponding to policy id = 100.",
            "Corresponding to policy id = 101.",
            "Corresponding to policy id = 102.",
            "",
            "",
            "Access controls for EntityTextFeatures computed by the Enricher. YOU MUST CONTACT deepkg-infra-dev@ before reading or writing data with this ACL.",
            "This AccessRequirement is used for testing purpose only. Please do not use it on data.",
            "",
            "Data materialized by PQM13n for Enricher. Design proposal: go/enricher-m13n-ar. YOU MUST CONTACT ke-data-platform-access@ before reading or writing data with this acl.",
            "Data materialized by PQM13n for Scubed. Design proposal: go/scubed-m13n-ar. YOU MUST CONTACT ke-data-platform-access@ before reading or writing data with this acl."
          ],
          "type": "string"
        },
        "accessRequiredInt": {
          "description": "For KE internal use only. Data providers shall *not* set this. At ingress, LG Record service will read access_required and properly translate it to access_required_int. KE horizontal systems shall use this field instead of access_required; so that binaries would not depend on the release of a newly introduced AccessRequirement enum. (go/easy-ar-onboarding)",
          "format": "int32",
          "type": "integer"
        },
        "authoringTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "creator": {
          "description": "Freebase: the freebase user id in the form '/user/userid' KG: the Google LDAP of the developer or MDB group that set up the triplification and import pipeline for this data source.",
          "type": "string"
        },
        "dataset": {
          "description": "Freebase & KG: the dataset the assertion was loaded from",
          "type": "string"
        },
        "extractionPattern": {
          "format": "byte",
          "type": "string"
        },
        "extractionTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "freebaseAttribution": {
          "description": "Below are deprecated Provenance fields. They are not indexed or served in KE infrastructure (they are stripped at ingress in Livegraph).",
          "type": "string"
        },
        "isSupportingData": {
          "description": "Indicates that the corresponding data is supporting evidence for reconciliation only, and is *not* an assertion that should be visible to other systems or to external users. Note that this also means that no provenances indicating supporting data will be visible in the composed graph. Please see go/supporting-kg-triples-design-doc for additional details and background. If a triple is sent to Livegraph with multiple provenances each of them must have is_supporting_data bit set for it to be considered valid supporting evidence triple.",
          "type": "boolean"
        },
        "lgMetadata": {
          "$ref": "StorageGraphBfgLivegraphProvenanceMetadata",
          "description": "Internal metadata used by Livegraph and possibly other horizontal KG infra systems. This is not part of the logical triple or its provenance, and contents may not be visible downstream of LG."
        },
        "policyMetadata": {
          "$ref": "StorageGraphBfgPolicyMetadata",
          "description": "Metadata specifying data governance policies. This information will be processed and enforced in KE systems. For more context, see go/ke-triple-dg-policy-and-metadata. WARNING: This field is WIP and please do not populate it without consulting ke-data-governance@."
        },
        "process": {
          "description": "Used to uniquely identify data sources. Freebase: the OAuth application KG: the name of the source directory the triple was loaded from (eg, \"amg\", \"tms \", \"collections\"). KV: identifier of an extraction system, e.g., SAFT or Tractzor.",
          "type": "string"
        },
        "provenanceExtension": {
          "$ref": "Proto2BridgeMessageSet"
        },
        "rankingToken": {
          "description": "'ranking_token' (which must be accompanied by the 'process' field above or will be ignored) is used to distinguish subsets of data within a single process, solely for the purposes of composition in Livegraph. This field is useful when partitioning of data is needed, but using a separate process is intractable due to organizational or infrastructure limitations. For example, if a process such as \"geo\" wishes to distinguish some of their /type/object/name triples as higher priority in Composer's conflict resolution rules, then they can add a config entry with a dedicated ranking_token and tag the relevant triples with that ranking_token. This field should only be used in conjunction with a Composer-side configuration to use it for value selection. It is not appropriate to use this field as free-form metadata. This value must match [[:alnum:]][[:alnum:]_-]{0,127} (i.e., [a-zA-Z0-9]+[a-zA-Z0-9_-]* and must be less than 128 characters in length) , or else its containing triple will be considered malformed and will be rejected by Livegraph at ingress. As of 2018-02-14, this field is used within Livegraph's Composer and is exposed in Livegraph's Lookup APIs to aid debugging, but it is not indexed or served by TopicServer. ",
          "type": "string"
        },
        "requiresTriangulation": {
          "description": "When specified as part of triples input to Livegraph (go/livegraph), this indicates that the triple needs to be triangulated by 3 different sources before it can be served in production. A triple's source is identified by its URL(provenance.source).host(). Please see go/baike-triangulation for more background on this. WARNING: If you're a new client trying to enable triangulation for your feed, please contact lg-composition@/kashk@ before using this feature. ",
          "type": "boolean"
        },
        "restrictions": {
          "items": {
            "enum": [
              "REQUIRES_CITATION",
              "REQUIRES_PCOUNSEL_REVIEW",
              "REQUIRES_ACCESS_CONTROL",
              "UNRESTRICTED_WITHIN_GOOGLE_NO_3P_USE"
            ],
            "enumDescriptions": [
              "",
              "",
              "not used in KE infra",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "source": {
          "description": "Freebase & KG: if the triples were extracted from the web, the source URL where the assertion was found. (generally empty in freebase-sourced triples) TopicServer will serve/populate/retain if REQUIRES_CITATION is also set, or if the process is explicitly allowed. http://g/topic-server/vn9PBWtVKqI/arQEDqKTAgAJ",
          "type": "string"
        },
        "sourceCategory": {
          "items": {
            "enum": [
              "THIRD_PARTY",
              "CURATION",
              "PARTNER_FEED",
              "EXTRACTION"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "sourceDocId": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "spiiCertification": {
          "$ref": "StorageGraphBfgSpiiCertification"
        }
      },
      "type": "object"
    },
    "StorageGraphBfgUmpPolicyMetadata": {
      "description": "Metadata fields for UMP. A piece of data satisfies UMP policy if: (data access region is in the `regions_allowed` list) AND (data access time >= availability_start_timestamp) AND (data access time < availability_end_timestamp)",
      "id": "StorageGraphBfgUmpPolicyMetadata",
      "properties": {
        "availabilityEnds": {
          "description": "Timestamp after which data with this policy cannot be used.",
          "format": "google-datetime",
          "type": "string"
        },
        "availabilityStarts": {
          "description": "Timestamp before which data with this policy cannot be used.",
          "format": "google-datetime",
          "type": "string"
        },
        "regionsAllowed": {
          "$ref": "KeGovernanceTypedRegions"
        }
      },
      "type": "object"
    },
    "SuperrootPodcastsRecommendationsPodcastRecsFeatures": {
      "description": "LINT.IfChange Next ID: 101",
      "id": "SuperrootPodcastsRecommendationsPodcastRecsFeatures",
      "properties": {
        "averageDurationSecondsEpisode": {
          "description": "Average duration listened per episode. Ignores duration < 10s. Computed offline",
          "format": "int64",
          "type": "string"
        },
        "averageDurationSecondsShow": {
          "description": "Average duration listened per show. Ignores duration < 10s. Computed offline",
          "format": "int64",
          "type": "string"
        },
        "averageFractionEpisode": {
          "description": "Average fraction of podcast listened per episode. Ignores duration < 10s. Computed offline",
          "format": "double",
          "type": "number"
        },
        "averageFractionShow": {
          "description": "Average fraction of podcast listened per show. Ignores duration < 10s. Computed offline",
          "format": "double",
          "type": "number"
        },
        "balancedLift": {
          "description": "Per cluster lift where the lift_squashing_factor is set to 0.4",
          "format": "double",
          "type": "number"
        },
        "categoryMatch": {
          "description": "category_match is a 0 to 1 score depicting how much of the user's listening history matches the categories of this podcast recommendation.",
          "format": "double",
          "type": "number"
        },
        "clusterFeedMinutes": {
          "description": "The total minutes listened to this podcast show by users in this cluster",
          "format": "int64",
          "type": "string"
        },
        "colistenedShowColistenAffinity": {
          "description": "This captures the probability that this show could have been listened by the user in lieu of what they have subscribed or listened to.",
          "format": "float",
          "type": "number"
        },
        "colistenedShowLevelRank": {
          "description": "This captures the rank of the podcast show in the colisten candidate generator.",
          "format": "int64",
          "type": "string"
        },
        "convAiToxicitySevereScore": {
          "format": "float",
          "type": "number"
        },
        "csaiScore": {
          "description": "Score of csai safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "dnnShowLevelRank": {
          "description": "Ordinal rank features like this have been found to be useful in Hermione Recipes, where the top ranked items from a candidate generator is always retained. Ranks are integral values starting with 1 for the highest affinity show.",
          "format": "int64",
          "type": "string"
        },
        "dnnV2aScore": {
          "description": "Dot product of user embedding and podcast show embedding from the two tower model v2a",
          "format": "float",
          "type": "number"
        },
        "dnnV2aScoreSigmoid": {
          "description": "Sigmoid of the score obtained by dot product of user embedding and show embedding. See https://b.corp.google.com/issues/158602034#comment2 for intuition.",
          "format": "float",
          "type": "number"
        },
        "durationTotalSecondsEpisode": {
          "description": "Total duration listened for this episode by all users. Ignores duration < 10s. Computed offline",
          "format": "int64",
          "type": "string"
        },
        "durationTotalSecondsShow": {
          "description": "Total duration listened for this show by all users. Ignores duration < 10s. Computed offline",
          "format": "int64",
          "type": "string"
        },
        "episodeDurationSec": {
          "description": "The duration of a single episode, in seconds. - For show documents, this is a duration of a typical recent episode, or an approximation thereof. - For episode documents, this is the duration of the episode itself.",
          "format": "int64",
          "type": "string"
        },
        "episodeImpressions": {
          "description": "Number of all episode impressions.",
          "format": "int64",
          "type": "string"
        },
        "episodeImpressionsPastWeek": {
          "description": "Number of episode impressions during the past week.",
          "format": "int64",
          "type": "string"
        },
        "episodesPublishedPerMonth": {
          "description": "How frequently are podcasts published by this show. To see publishing frequency calculation go here: http://shortn/_6zzfyEpBRq",
          "format": "int64",
          "type": "string"
        },
        "explicitShow": {
          "description": "Whether the show is marked as explicit by the authors",
          "enum": [
            "EXPLICIT_NO",
            "EXPLICIT_YES",
            "EXPLICIT_CLEAN"
          ],
          "enumDescriptions": [
            "Show/episode without explicit content. The default.",
            "Show/episode with explicit content.",
            "\"Clean\" version of an otherwise explicit show/episode."
          ],
          "type": "string"
        },
        "feedPagerank": {
          "description": "Scaled pagerank score for the feed url in [0..1]. Not to be confused with pagerank above, which measures the pagerank for the feed's homepage.",
          "format": "double",
          "type": "number"
        },
        "finalReactionBoostScore": {
          "description": "final reaction boost score computed from positive_reaction_boost_score and negative_reaction_boost_score. The score will be applied as a multiplier on the ranking score to adjust the ranking.",
          "format": "float",
          "type": "number"
        },
        "fractionTotalEpisode": {
          "description": "Some of all fraction of this listened by users. Ignores duration < 10s. Computed offline",
          "format": "double",
          "type": "number"
        },
        "fractionTotalShow": {
          "description": "Some of all fraction of this show listened by users. Ignores duration < 10s. Computed offline",
          "format": "double",
          "type": "number"
        },
        "fringeScore": {
          "description": "Score of fringe safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "globalProb": {
          "description": "Probability of a random user listening to this podcast randomly",
          "format": "double",
          "type": "number"
        },
        "inClusterProb": {
          "description": "Probability of a random user from this cluster listening to this podcast randomly (K-means specific feature)",
          "format": "double",
          "type": "number"
        },
        "isCanonical": {
          "description": "A binary value based on whether this is a canonical source for a cluster.",
          "type": "boolean"
        },
        "kmeansShowLevelRank": {
          "description": "Ranks are integral values starting with 1 for the highest affinity show.",
          "format": "int64",
          "type": "string"
        },
        "languageMatch": {
          "description": "How much of user listening history match the language of this episode",
          "format": "double",
          "type": "number"
        },
        "linkOwnershipVerified": {
          "description": "Ownership verification status for the episode page URL.",
          "type": "boolean"
        },
        "listenTimeMin": {
          "description": "Number of minutes of podcasts listened by the user",
          "format": "int32",
          "type": "integer"
        },
        "listenedShowLevelRank": {
          "description": "The rank of the show in the top listened shows candidate generator. Ranks are integral values starting with 1 for the highest affinity show.",
          "format": "int64",
          "type": "string"
        },
        "listenedShowListeningAffinity": {
          "description": "This captures the fraction of total listening time accounted for by this show.",
          "format": "float",
          "type": "number"
        },
        "locationFeatureId": {
          "description": "Feature ID of a location. For more info, see go/feature-id.",
          "type": "string"
        },
        "longUserListeningWebrefSimilarity": {
          "description": "Match score between user listening mids and episode webref entities, where the listening can have happened at any time in the past. Values are in a 0.0 to 1.0 range.",
          "format": "double",
          "type": "number"
        },
        "medicalScore": {
          "description": "Score of medical safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "mediumUserListeningWebrefSimilarity": {
          "description": "Match score between user listening mids and episode webref entities, where the listening is limited to last two mohths activity. Values are in a 0.0 to 1.0 range.",
          "format": "double",
          "type": "number"
        },
        "negativeReactionBoostScore": {
          "description": "boost score from the similarity between the candidate and the shows with user negative feedback, currently the score will be applied directly to the final ranking score: go/podcast-reaction-reranking-v1, but can be used as reranker model feature in the future.",
          "format": "float",
          "type": "number"
        },
        "nicheLift": {
          "description": "Per cluster lift where the lift_squashing_factor is set to +2",
          "format": "double",
          "type": "number"
        },
        "numListenersInKmeansCluster": {
          "description": "The number of users in this k-means cluster.",
          "format": "int64",
          "type": "string"
        },
        "numListenersToShowInKmeansCluster": {
          "description": "The number of users in the k-means cluster who have listened to this feed.",
          "format": "int64",
          "type": "string"
        },
        "numListens": {
          "description": "Number of podcasts listened by the user",
          "format": "int32",
          "type": "integer"
        },
        "numSubscribersShow": {
          "description": "From: indexing/speech/proto/colisten-matrix.proto The number of subscribers for this podcast series.",
          "format": "int64",
          "type": "string"
        },
        "numUniqueListenersShow": {
          "description": "From: indexing/speech/proto/colisten-matrix.proto Absolute number of unique listeners during the past month.",
          "format": "int64",
          "type": "string"
        },
        "offensiveScore": {
          "description": "Score of offensive safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "peDurationScoreEpisode": {
          "format": "float",
          "type": "number"
        },
        "peDurationScoreShow": {
          "format": "float",
          "type": "number"
        },
        "peDurationTotalScoreEpisode": {
          "format": "float",
          "type": "number"
        },
        "peDurationTotalScoreShow": {
          "format": "float",
          "type": "number"
        },
        "peFractionScoreEpisode": {
          "format": "float",
          "type": "number"
        },
        "peFractionScoreShow": {
          "format": "float",
          "type": "number"
        },
        "peFractionTotalScoreEpisode": {
          "format": "float",
          "type": "number"
        },
        "peFractionTotalScoreShow": {
          "format": "float",
          "type": "number"
        },
        "peListenScoreEpisode": {
          "format": "float",
          "type": "number"
        },
        "peListenScoreShow": {
          "description": "Anima User Embedding based features. Dot product of Anima User Embedding and podcast embeddings from UserEmbeddingBasedSignals (podcasts/quality/proto/ranking_signals.proto)",
          "format": "float",
          "type": "number"
        },
        "peListenTotalScoreEpisode": {
          "format": "float",
          "type": "number"
        },
        "peListenTotalScoreShow": {
          "format": "float",
          "type": "number"
        },
        "popularLift": {
          "description": "Per cluster lift where the lift_squashing_factor is set to -3",
          "format": "double",
          "type": "number"
        },
        "pornScore": {
          "description": "Score of porn safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "positiveReactionBoostScore": {
          "description": "boost score from the similarity between the candidate and the shows with user positive feedback, currently the score will be applied directly to the final ranking score: go/podcast-reaction-reranking-v1, but can be used as reranker model feature in the future.",
          "format": "float",
          "type": "number"
        },
        "queryLanguage": {
          "description": "This is the language extracted from the query_language.",
          "type": "string"
        },
        "rank": {
          "description": "The index in the list of most popular podcasts.",
          "format": "int64",
          "type": "string"
        },
        "rankPercentContrib": {
          "description": "rank_percent_contrib = 100 / ( 1 + rank_percent ) Here rank_percent was derived from show level data in Wernicke corpus So if rank_percent of a feed was 3, then the feature value would be: 100 / (1 + 3) = 25. This indicator falls off quickly from 100 to almost 1 as we go from rank_percent 0 to 100.",
          "format": "double",
          "type": "number"
        },
        "recentUserListeningWebrefSimilarity": {
          "description": "Match score between user listening mids and episode webref entities, where the listening is limited to recent activity. Values are in a 0.0 to 1.0 range.",
          "format": "double",
          "type": "number"
        },
        "secondsSincePublication": {
          "description": "A reranking feature showing the age of the episode that is being recommended. This is computed as (current time - publication_time) publication_time of the episode is defined: (http://shortn/_S46Ouk5ZWW) publication_time is specified as seconds since Unix Epoch.",
          "format": "int64",
          "type": "string"
        },
        "showBaseQuality": {
          "description": "Base quality of the document, used as a multiplier for the query-specific score. Should be in [0, 1] range. See: http://g3doc/indexing/moonshine/generic/g3doc/doc/scoring",
          "format": "double",
          "type": "number"
        },
        "showImpressions": {
          "description": "Number of show episode impressions.",
          "format": "int64",
          "type": "string"
        },
        "showImpressionsPastWeek": {
          "description": "Number of show impressions during the past week.",
          "format": "int64",
          "type": "string"
        },
        "showLanguage": {
          "description": "Language of the show from show data.",
          "type": "string"
        },
        "showOnlyImpressions": {
          "description": "Show only impressions. Doesn't include shows of episode impressions.",
          "format": "int64",
          "type": "string"
        },
        "showOnlyImpressionsPastWeek": {
          "format": "int64",
          "type": "string"
        },
        "showPopularRank": {
          "description": "Expresses the absolute popularity rank within all documents.",
          "format": "int64",
          "type": "string"
        },
        "spoofScore": {
          "description": "Score of spoof safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "subscribedShowListeningAffinity": {
          "description": "This captures the fraction of total listening time accounted for by this subscribed show.",
          "format": "float",
          "type": "number"
        },
        "subscriptionShowLevelRank": {
          "description": "The rank of the show in the subscription candidate generator. Ranks are integral values starting with 1 for the highest subscribed affinity show.",
          "format": "int64",
          "type": "string"
        },
        "surface": {
          "type": "string"
        },
        "trendingScorePercent": {
          "description": "Show level trending score percent from Wernicke corpus.",
          "format": "int64",
          "type": "string"
        },
        "ulpLanguage": {
          "description": "Inferred language preferences of the user with their probabilities.",
          "items": {
            "$ref": "SuperrootPodcastsRecommendationsPodcastRecsFeaturesUserLanguage"
          },
          "type": "array"
        },
        "ulpLanguageMatch": {
          "description": "How much of ulp match the language of this episode",
          "format": "float",
          "type": "number"
        },
        "userClusterDistance": {
          "description": "The distance between user's Anima embedding and the centroid of the cluster in k-means.",
          "format": "float",
          "type": "number"
        },
        "userInterestsSalientSimilarity": {
          "description": "Match score between user interest mids and episode salient entities. in a 0.0 to 1.0 range.",
          "format": "double",
          "type": "number"
        },
        "userInterestsWebrefSimilarity": {
          "description": "Match score between user interest mids and episode webref entities. in a 0.0 to 1.0 range.",
          "format": "double",
          "type": "number"
        },
        "userLanguage": {
          "description": "Language of shows in user history and how much they listened to each.",
          "items": {
            "$ref": "SuperrootPodcastsRecommendationsPodcastRecsFeaturesUserLanguage"
          },
          "type": "array"
        },
        "violenceScore": {
          "description": "Score of violence safe search score go/safesearch",
          "format": "double",
          "type": "number"
        },
        "vulgarScore": {
          "description": "Score of vulgar safe search score go/safesearch",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "SuperrootPodcastsRecommendationsPodcastRecsFeaturesUserLanguage": {
      "id": "SuperrootPodcastsRecommendationsPodcastRecsFeaturesUserLanguage",
      "properties": {
        "lang": {
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "TelephoneNumber": {
      "id": "TelephoneNumber",
      "properties": {
        "areaCode": {
          "description": "The local \"area code\", if there is such a concept.",
          "type": "string"
        },
        "countryCode": {
          "description": "The international direct dialing code for the country, as per ITU E.164: http://www.itu.int/itudoc/itu-t/ob-lists/icc/e164_763.html",
          "format": "int32",
          "type": "integer"
        },
        "extension": {
          "description": "Extension (to be dialed after connection).",
          "type": "string"
        },
        "nationalPrefix": {
          "description": "To call this number from within the same country, the national call prefix may be necessary. This is 1 in the US, 0 in the UK, etc. In the US, it's reasonable to omit the leading 1 when writing the number, but in other countries it is less optional.",
          "type": "string"
        },
        "number": {
          "description": "The actual number, broken down into sections as per local convention. Note that the actual formatting of these sections (hyphen vs space, usage of parentheses) will vary according to local custom.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "TeragoogleDocumentInfo": {
      "description": "The docshards are a FlatSSTable from (64-bit) urlfp to data containing the information found in this protocol buffer. (It's not actually one of these PBs for various performance reasons; instead, the DocumentFormat class handles serialization and deserialization in our own way) Next available ID: 37",
      "id": "TeragoogleDocumentInfo",
      "properties": {
        "attachment": {
          "items": {
            "$ref": "TeragoogleDocumentInfoAttachment"
          },
          "type": "array"
        },
        "averageTermWeight": {
          "description": "The average weight of terms in the document. If not available, there will be no term weight averaging: font sizes will be taken literally from the document HTML.",
          "format": "int32",
          "type": "integer"
        },
        "doc": {
          "$ref": "GDocumentBase",
          "description": "The document itself. If present, the docservers parse the contents to create a mustang repository."
        },
        "extendedDocid": {
          "description": "The serialized ExtendedDocId, needed to construct a proper docinfo response if the docinfo request is missing it and it's present.",
          "format": "byte",
          "type": "string"
        },
        "globalDocid": {
          "description": "the global docid, we need it in the docservers (Continuum mode) to construct proper docinfo response when the docinfo request does not contain a valid global docid",
          "format": "uint64",
          "type": "string"
        },
        "originalEncoding": {
          "description": "If the original encoding isn't UTF8",
          "format": "int32",
          "type": "integer"
        },
        "section": {
          "items": {
            "$ref": "TeragoogleDocumentInfoSection"
          },
          "type": "array"
        },
        "sectionType": {
          "description": "Indicates format of 'tokens' field in all Section entries.",
          "enum": [
            "MDU",
            "TOKENSPACE",
            "TERADOC"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TeragoogleDocumentInfoAttachment": {
      "description": "Misc. attachments to be added to the dynamic repository the docservers build. These override any attachments created by parsing the GDocumentBase.",
      "id": "TeragoogleDocumentInfoAttachment",
      "properties": {
        "name": {
          "type": "string"
        },
        "options": {
          "$ref": "TeragoogleRepositoryAttachmentOptions"
        },
        "value": {
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TeragoogleDocumentInfoSection": {
      "description": "Sections to be added to the dynamic repository the docservers build. 'tokens' is either a sequence of tokens encoded using the TokenSequenceEncoder (MDU), or a TokenspaceRepository (depends on what's set in section_type. If 'doc' is present, then the contents of these sections override what was created by parsing 'doc'.",
      "id": "TeragoogleDocumentInfoSection",
      "properties": {
        "fieldName": {
          "description": "List of field repository (subsection) names within the section.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "type": "string"
        },
        "tokens": {
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TeragoogleRepositoryAttachmentOptions": {
      "description": "Compression type to be applied to section/attachment.",
      "id": "TeragoogleRepositoryAttachmentOptions",
      "properties": {
        "compression": {
          "enum": [
            "COMPRESSION_NONE",
            "COMPRESSION_ZIPPY"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TitleSizeParams": {
      "description": "Data related to title sizing calculations in Muppet.",
      "id": "TitleSizeParams",
      "properties": {
        "muppetTitleLengthInDeciems": {
          "description": "Total max length of title in deciems",
          "format": "int32",
          "type": "integer"
        },
        "muppetTitleNumLines": {
          "description": "Number of lines for title",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ToolBarPerDocData": {
      "description": "DO NOT USE THIS FOR ANYTHING LIVE WITHOUT PERMISSION! If you want to use this for anything user-facing file a logs-access ticket describing what you want to do. This data is currently only available in the freshdocs pipeline, so it will only be present in instant mustang and certain librarian shards. Email freshdocs-indexing with questions.",
      "id": "ToolBarPerDocData",
      "properties": {
        "VisitorsPastDay": {
          "description": "Indicates how many distinct toolbar visitors this page had in the past day. Will only be present if the number is reasonably large.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "TravelFlightsAirlineConfig": {
      "description": "Next ID: 27",
      "id": "TravelFlightsAirlineConfig",
      "properties": {
        "adwordsCid": {
          "description": "Populated using airlines_company_ids.csv for AdWords company map",
          "format": "int32",
          "type": "integer"
        },
        "alliance": {
          "description": "STAR_ALLIANCE",
          "enum": [
            "UNKNOWN",
            "AIRUNION",
            "ARAB_AIR_CARRIERS_ORGANIZATION",
            "ARABESK_AIRLINE_ALLIANCE",
            "CENTRAL_MOUNTAIN_AIR",
            "CONTINENTAL_AIRLINES",
            "EAGLE_AIR",
            "FEDEX_EXPRESS",
            "GRUPO_TACA",
            "JAT_AIRWAYS",
            "LUFTHANSA_REGIONAL",
            "ONEWORLD",
            "QUALIFLYER",
            "SIX",
            "SKYTEAM",
            "SKYTEAM_CARGO",
            "STAR_ALLIANCE",
            "TUI_AIRLINES",
            "WOW_ALLIANCE"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Also noted as '6'",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "baggageCarryonLimitationsUrls": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "Default url for baggage fee information."
        },
        "baggageFeeUrls": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "Default url for baggage fee information."
        },
        "countryCode": {
          "description": "ISO 3166-1 alpha-2 country code in which this airline is domestic.",
          "type": "string"
        },
        "countryContactInfo": {
          "description": "LocalizedContactInfo allows localization by country and language. Once the data is ready, we will start filling both fields. After that the old field will be deprecated and deleted at some point.",
          "items": {
            "$ref": "TravelFlightsAirlineConfigCountryContactInfo"
          },
          "type": "array"
        },
        "dupFlag": {
          "description": "true, if this carrier's IATA code is a \"controlled duplicate\" (goto/controlled-duplicate).",
          "type": "boolean"
        },
        "fareFamilyUrls": {
          "$ref": "TravelFlightsNameCatalogProto"
        },
        "fqtvPartnerCode": {
          "description": "IATA codes of airlines who this airline's travel can be credited to for mileage accrual.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "iataCode": {
          "description": "Note that some iata_codes are reused (`dup_flag` field). For details, including how to resolve collisions for airlines shown in Google Flights, see: go/controlled-duplicate go/flights-data/airlines#resolving-iata-code-collisions cs/go/controlled-duplicate U2 - some have no IATA code",
          "type": "string"
        },
        "icaoCode": {
          "description": "EZY - some have no ICAO code",
          "type": "string"
        },
        "innovataCode": {
          "description": "U2! - with optional dedup sign ('!')",
          "type": "string"
        },
        "localizedContactInfo": {
          "items": {
            "$ref": "TravelFlightsAirlineConfigLocalizedContactInfo"
          },
          "type": "array"
        },
        "mid": {
          "description": "Note: fields #16 and #17 are ununused. The identifier of the airline, e.g. /m/07y2s for United Populated using airlines_mids.csv.",
          "type": "string"
        },
        "names": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "EasyJet/\u30a4\u30fc\u30b8\u30fc\u30b8\u30a7\u30c3\u30c8"
        },
        "passengerAssistanceUrls": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "Default url for passenger assistance information."
        },
        "popularity": {
          "description": "Number of flights with this airline over the next 180 days.",
          "format": "int32",
          "type": "integer"
        },
        "shortNames": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "KLM - instead of 'KLM Royal Dutch Airlines'"
        },
        "type": {
          "enum": [
            "SCHEDULED_PASSENGER",
            "NON_SCHEDULED_PASSENGER",
            "SCHEDULED_CARGO",
            "NON_SCHEDULED_CARGO",
            "NON_AIRLINE_LOAD_DEVICE",
            "CRS",
            "SCHEDULED_PASSENGER_CARGO",
            "NON_SCHEDULED_PASSENGER_CARGO",
            "RAILWAY",
            "AIRLINE_PREFIX",
            "UNRECOGNIZED"
          ],
          "enumDescriptions": [
            "A",
            "B",
            "C",
            "D",
            "G",
            "H",
            "I",
            "J",
            "K",
            "O",
            "next id: 12"
          ],
          "type": "string"
        },
        "urls": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "http://www.airfrance.us/"
        },
        "waiverSummaryUrls": {
          "$ref": "TravelFlightsNameCatalogProto",
          "description": "Default url for waiver information."
        }
      },
      "type": "object"
    },
    "TravelFlightsAirlineConfigContactInfo": {
      "id": "TravelFlightsAirlineConfigContactInfo",
      "properties": {
        "data": {
          "description": "Typically, formatted phone number.",
          "type": "string"
        },
        "type": {
          "enum": [
            "PHONE_PRIMARY",
            "PHONE_TTY"
          ],
          "enumDescriptions": [
            "Primary phone number.",
            "TTY(Teletype) number for hearing/speech impaired users."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TravelFlightsAirlineConfigCountryContactInfo": {
      "description": "Airline contact info grouped by country.",
      "id": "TravelFlightsAirlineConfigCountryContactInfo",
      "properties": {
        "contactInfo": {
          "items": {
            "$ref": "TravelFlightsAirlineConfigContactInfo"
          },
          "type": "array"
        },
        "countryCode": {
          "description": "Two char country code, e.g. \"US\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TravelFlightsAirlineConfigLocalizedContactInfo": {
      "description": "Airline contact info grouped by language. The language locale subcode will determine the country.",
      "id": "TravelFlightsAirlineConfigLocalizedContactInfo",
      "properties": {
        "contactInfo": {
          "items": {
            "$ref": "TravelFlightsAirlineConfigContactInfo"
          },
          "type": "array"
        },
        "language": {
          "description": "IETF BCP-47, e.g. \"en\" or \"zh-HK-Hant\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TravelFlightsNameCatalogEntry": {
      "id": "TravelFlightsNameCatalogEntry",
      "properties": {
        "language": {
          "type": "string"
        },
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "TravelFlightsNameCatalogProto": {
      "id": "TravelFlightsNameCatalogProto",
      "properties": {
        "name": {
          "items": {
            "$ref": "TravelFlightsNameCatalogEntry"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "TrawlerClientServiceInfo": {
      "description": "ClientServiceInfo is meant for trawler/harpoon clients which are in turn services to store some data specific to their clients. E.g., Kodachrome may serve multiple other clients. In this case they can store their client name here. Webmirror may also store the feed name here even though a feed is technically not a service client. ClientServiceInfo is in nature similar to ClientInfo, except it's stored in FetchReplyData (i.e., trawler logs), whereas ClientInfo is copied to FetchReply (outside FetchReplyData), thus it's not stored in trawler logs.",
      "id": "TrawlerClientServiceInfo",
      "properties": {
        "DelegatedProjectName": {
          "description": "Project delegation name to support bandwidth enforcement. Harpoon will call SetDelegatedUser() with the specified DelegatedProjectName and a domain associated with the RequestorID provided in the client capatibility file.",
          "type": "string"
        },
        "ServiceClientID": {
          "type": "string"
        },
        "clientLabels": {
          "items": {
            "$ref": "TrawlerClientServiceInfoClientLabels"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "TrawlerClientServiceInfoClientLabels": {
      "description": "ClientLabels contains client-specified key/value pairs, used to annotate individual FetchRequests and FetchReplies. This is primarily useful when the Multiverse Nexus performs postprocessing of fetchreplies. ClientLabels essentially allow clients to use the Nexus UI to slice statistics computed on fetchreplies by the specified key/value pairs. Note: we don't use \"map\" type here delibrately in order to avoid the non-deterministric serialization of the \"map\" field. See b/69064361 for more details.",
      "id": "TrawlerClientServiceInfoClientLabels",
      "properties": {
        "labelsDeprecated": {
          "additionalProperties": {
            "$ref": "TrawlerClientServiceInfoClientLabelsClientLabelValues"
          },
          "description": "======================== End of Deprecated Part ========================",
          "type": "object"
        },
        "name": {
          "type": "string"
        },
        "values": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "TrawlerClientServiceInfoClientLabelsClientLabelValues": {
      "description": "===================== Beginning of Deprecated Part ======================",
      "id": "TrawlerClientServiceInfoClientLabelsClientLabelValues",
      "properties": {
        "value": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "TrawlerContentRangeInfo": {
      "description": "Parsed version of a Content-Range field, which in http might look like: Content-Range: bytes 500-999/3156",
      "id": "TrawlerContentRangeInfo",
      "properties": {
        "EndPos": {
          "format": "int64",
          "type": "string"
        },
        "StartPos": {
          "description": "In ContentRange, the first byte is 0 (rather than 1), and the positions are inclusive. Thus, length is EndPos+1-StartPos",
          "format": "int64",
          "type": "string"
        },
        "TotalLength": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerCrawlTimes": {
      "description": "This is similar to CrawlDates group in FetchReplyData, except that 1) it's a message; 2) it's filled in each Redirects hop; and 3) the timestamps are in ms rather than seconds since Unix Epoch.",
      "id": "TrawlerCrawlTimes",
      "properties": {
        "NotChangedTimeMs": {
          "description": "fetched from the web. Time when the page was last",
          "format": "int64",
          "type": "string"
        },
        "OriginalCrawlTimeMs": {
          "description": "Time when the page was",
          "format": "int64",
          "type": "string"
        },
        "ReuseTimeMs": {
          "description": "checked but found to be the same as before. If set, timestamp to indicate",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerEvent": {
      "description": "Event is for logging interesting events that happen during a url fetch. Interesting events include \"fetch start\", \"url rejected\", etc. The events are written to binary logs together with the request and reply messages. If the same event occurs multiple times consecutively, We record the time of the first three instances in EarliestTimeStamp but omit the rest. We keep track the total number of occurrences in NumOccurrences and the timestamp of the last occurrence is kept in TimeStamp field.",
      "id": "TrawlerEvent",
      "properties": {
        "ID": {
          "format": "uint64",
          "type": "string"
        },
        "Msg": {
          "type": "string"
        },
        "NumOccurrences": {
          "format": "int32",
          "type": "integer"
        },
        "OldestTimeStampInUS": {
          "description": "Limited to 3.",
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array"
        },
        "TimeStampInUS": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchBodyData": {
      "id": "TrawlerFetchBodyData",
      "properties": {
        "compression": {
          "enum": [
            "NO_COMPRESSION",
            "ZLIB_COMPRESSION",
            "HTML_DICTIONARY_COMPRESSION"
          ],
          "enumDescriptions": [
            "",
            "RFC 1950",
            "RFC 1950 with html-dictionary"
          ],
          "type": "string"
        },
        "content": {
          "format": "byte",
          "type": "string"
        },
        "uncompressedSize": {
          "description": "Size hint. Set if compression != NO_COMPRESSION",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyData": {
      "description": "Fetcher -> FetchClient FetchReplyData is the metadata for a reply from a FetchRequest. For metadata + document body, FetchReply is further below. NOTE: FetchReplyData (and FetchReply) is the output interface from Multiverse. Teams outside Multiverse/Trawler should not create fake FetchReplies. Trawler: When adding new fields here, it is recommended that at least the following be rebuilt and pushed: - cron_fetcher_index mapreduces: so that UrlReplyIndex, etc. retain the new fields - tlookup, tlookup_server: want to be able to return the new fields - logviewer, fetchutil: annoying to get back 'tag88:' in results -------------------------- Next Tag: 124 -----------------------",
      "id": "TrawlerFetchReplyData",
      "properties": {
        "BadSSLCertificate": {
          "description": "This field, if non-empty, contains the SSL certificate chain from the server. The filed should be serialized SSLCertificateInfo protobuf, although it used to be text format. Hence, one should ideally use trawler::CertificateUtil to check this field and understand in more detail. This field is populated in two cases: (1) something is wrong with the server certificate and we cannot verify the server's identity. In this case the URL most likely won't display in a browser; (2) if you turned on WantSSLCertificateChain in the FetchRequest. In this case the server certificate may be perfectly fine (despite the field name). This is for the initial hop; additional hops are in Redirects group.",
          "format": "byte",
          "type": "string"
        },
        "ClientServiceInfo": {
          "$ref": "TrawlerClientServiceInfo",
          "description": "Some client specific data that's set by client in the FetchRequest, and we just copy it here verbatim. This is similar to ClientInfo that we copy from FetchRequest to FetchReply, but this is copied to FetchReplyData, thus stored in trawler logs so can be useful for debugging cases."
        },
        "CompressedBody": {
          "description": "Is the associated body compressed ?",
          "type": "boolean"
        },
        "CrawlTimes": {
          "$ref": "TrawlerCrawlTimes"
        },
        "DNSHost": {
          "description": "Sometimes the hostid and destination IP in the FetchReplyData are not for the hostname in the url. If that's the case DNSHost will be the host that we have used when resolving hostid and DNS. Right now there are two cases: (1) malware team provides a proxy IP:Port to us, so DNSHost will be the proxy IP; and (2) PSS team provides a reference DNS host; so DNSHost will be the reference DNS host.",
          "type": "string"
        },
        "DownloadTime": {
          "description": "The download time for this fetch (ms). This is the RTT time between fetcher and HOPE, note it does not include time from redirects, just initial hop. If you want the sum of the DownloadTime values for all fetches in the redirect chain, then use the DownLoadTime value in the FetchStats.",
          "format": "int32",
          "type": "integer"
        },
        "EgressRegion": {
          "description": "If present, the edge region that we have used.",
          "type": "string"
        },
        "EligibleGeoCrawlEgressRegion": {
          "description": "If present, it means this host might be eligible for geo crawl. However, this does not mean we enable geo-crawl for this request. Check \"GeoCrawlEgressRegion\" instead to see if this fetch is conducted via geo crawl.",
          "type": "string"
        },
        "Endpoints": {
          "$ref": "TrawlerTCPIPInfo",
          "description": "------- If fetched, the IP from which we fetched, as well as source IP and ports. It is recommended to use trawler::DestinationIP()/HasDestinationIP() accessors, which return a proper IPAddress."
        },
        "Events": {
          "items": {
            "$ref": "TrawlerEvent"
          },
          "type": "array"
        },
        "FetchPatternFp": {
          "description": "With the introduction of fetch pattern based hostload exceptions, one hostid may have multiple hostload buckets, each with its own hostload. In this case, FetchPatternFp will be set to identify the hostload bucket within the hostid. Note this field is only meaningful for the HostBucketData which is recorded only when the client requests to have as part of reply. However, this field is useful for certain stats gathering, so we choose to always record it if its value is available during the fetch.",
          "format": "uint64",
          "type": "string"
        },
        "FlooEgressRegion": {
          "description": "If present, fetch was conducted using floonet and this is the location of floonet egress point we used.",
          "type": "string"
        },
        "GeoCrawlEgressRegion": {
          "description": "If present, the last hop of the fetch was conducted using floonet and this is the location of floonet egress point. It is different from EgressRegion and FlooEgressREgion because it is a Trawler transparent routing configured in the geo crawl rules(go/da-geo-crawl).",
          "type": "string"
        },
        "GeoCrawlFallback": {
          "description": "Whether we fallback from geo crawl to local crawl during fetch. The fallback could happen in any hops and there can be at most one fallback because once fallback happens, we will not try geo-crawl anymore.",
          "type": "boolean"
        },
        "GeoCrawlLocationAttempted": {
          "description": "Set only when GeoCrawlFallback is true. Logs the geo crawl location we attempted but failed for this request.",
          "type": "string"
        },
        "HSTSInfo": {
          "description": "Set to: o HSTS_STATUS_NONE if there was no HSTS policy match for the URL's host. o HSTS_STATUS_AVAILABLE if there was an HSTS policy, but the URL was not rewritten from HTTP to HTTPS because enable_hsts was not set in client capability config. o HSTS_STATUS_REWRITTEN if the HSTS policy was followed and url was rewritten from HTTP to HTTPS. This field only pertains to the current URL fetch and does not explain a redirect's HSTS status. However, FetchReplyData.Redirects have their own HSTSInfo.",
          "enum": [
            "HSTS_STATUS_NONE",
            "HSTS_STATUS_AVAILABLE",
            "HSTS_STATUS_REWRITTEN"
          ],
          "enumDescriptions": [
            "No HSTS policy available for this fetch.",
            "There is an HSTS policy for this fetch but the fetch URL was not applied.",
            "There is an HSTS policy for this fetch and the URL was rewritten from HTTP -> HTTPS."
          ],
          "type": "string"
        },
        "HTTPTrailers": {
          "description": "The received HTTP trailers if available.",
          "items": {
            "$ref": "TrawlerFetchReplyDataHTTPHeader"
          },
          "type": "array"
        },
        "HopCacheKeyForLookup": {
          "description": "Returns the cache key used when doing cache lookup/update, on a per-hop basis (initial hop) Note this field will not be set if cache lookup/update is disabled/skipped.",
          "format": "uint64",
          "type": "string"
        },
        "HopCacheKeyForUpdate": {
          "format": "uint64",
          "type": "string"
        },
        "HopReuseInfo": {
          "description": "Returns trawler::ReuseInfo with status of IMS/IMF/cache query, on a per-hop basis (initial hop) For example, if the URL redirect chain is [URL A] --> [URL B] --> [URL C], this field stores the reuse info of [URL A].",
          "enum": [
            "RUI_NONE",
            "RUI_IMS_CACHE_CURRENT",
            "RUI_IMS_NOT_MODIFIED",
            "RUI_IMS_CHANGED",
            "RUI_IMF_NOCACHE",
            "RUI_IMF_CACHE_CURRENT",
            "RUI_IMF_HIT",
            "RUI_IMF_CHANGED",
            "RUI_IMF_POST_HIT_ERROR",
            "RUI_CACHE_CURRENT",
            "RUI_CACHE_EXPIRED",
            "RUI_CACHE_NOCACHE",
            "RUI_CACHE_UNUSABLE",
            "RUI_IMF_UNUSABLE",
            "NUM_REUSE_INFO_VALS"
          ],
          "enumDescriptions": [
            "Neither IMS or IMF were enabled",
            "IMS Had IMS enabled; but had cache hit;",
            "so didn't need to do the fetch Did IMS and got back 304",
            "Did IMS and got back non-304",
            "IMF - UseBigTableIMF set IMF enabled; but result wasn't in the cache",
            "IMF enabled; but cached copy was current",
            "IMF enabled; had older cached copy;",
            "but got back 304; returned content IMF enabled; had older cached copy;",
            "got back non-304; indicating change Got back 304 on IMF; but cached copy failed;",
            "ACCEPTABLE AGE; no IMF Cache hit",
            "Had content; but older than max",
            "No content in cache",
            "Cache entry; but not usable",
            "Cache entry for IMF; but not usable",
            "*** don't forget to update."
          ],
          "type": "string"
        },
        "HopRobotsInfo": {
          "description": "Extra information in robots.txt for this page (integer: or'ed together of type trawler::RobotsInfo) on a per-hop basis (initial hop)",
          "format": "int32",
          "type": "integer"
        },
        "HostBucketData": {
          "$ref": "TrawlerHostBucketData",
          "description": "Data about the host bucket this request is in (if desired) Please talk with Trawler team before considering using this, since what we fill in here is subject to change."
        },
        "HostId": {
          "description": "If known, the trawler::HostId that identifies the host (initial hop).",
          "format": "uint64",
          "type": "string"
        },
        "HttpProtocol": {
          "description": "The http protocol we send to fetch this URL. This will only be set if the request is using http",
          "enum": [
            "PROTO_GET",
            "PROTO_POST",
            "PROTO_HEAD",
            "PROTO_PUT",
            "PROTO_DELETE",
            "PROTO_PATCH",
            "PROTO_OPTIONS",
            "FIRST_PROTO",
            "NUM_PROTOS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "We list this after PROTO_* values to make sure",
            "HTTPProtocolType_Name(0) returns the correct string."
          ],
          "type": "string"
        },
        "HttpRequestHeaders": {
          "description": "The HTTP headers we sent to fetch this URL (initial hop). Not normally filled in, unless FetchParams.WantSentHeaders is set.",
          "type": "string"
        },
        "HttpResponseHeaders": {
          "description": "HTTP headers from the response (initial hop). Trawler does not fill this in; this is intended as a placeholder for crawls like webmirror that fill in and want to track this across redirect hops.",
          "type": "string"
        },
        "HttpVersion": {
          "description": "Stores the HTTP version we used in the final hop.",
          "enum": [
            "HTTP_11",
            "HTTP_10",
            "HTTP_09",
            "HTTP_2",
            "HTTP_AUTO",
            "FIRST_VERSION",
            "NUM_VERSIONS"
          ],
          "enumDescriptions": [
            "",
            "",
            "??? do we want this ???",
            "EXPERIMENTAL, DO NOT USE unless you have talked to",
            "trawler-dev@. Allow fetcher to automatically select HTTP protocol",
            "version. The selection is based on prior knowledge and dynamic server response. Basically, if the client and the host is configured to allow HTTP/2 traffic, we will select HTTP/2 and send HTTP/2 traffic; and we will fallback to HTTP/1 if we found the server does not support HTTP/2 through ALPN. HTTP Version selection will be applied to each redirect hop. More details about HTTP/2 traffic configuration can be found in: googledata/googlebot/http2_traffic_control_file. We list this after HTTP_* values to make sure",
            "HTTPVersion_Name(0) returns the correct string."
          ],
          "type": "string"
        },
        "ID": {
          "description": "Same as the ID of the matching request (used for matching internal fetchclient data in request/reply)",
          "format": "uint64",
          "type": "string"
        },
        "LastUrlStatus": {
          "$ref": "TrawlerFetchStatus",
          "description": "Crawl status of the last url on chain"
        },
        "PolicyData": {
          "description": "Trawler can optionally add a policy label to a FetchReply. Some uses: - \"spam\" label via trawler_site_info - \"roboted:googlebot\" label as a signal to crawls supporting multiple useragents that it's not safe to share the fetch replies with googlebot crawls.",
          "items": {
            "$ref": "TrawlerPolicyData"
          },
          "type": "array"
        },
        "PostData": {
          "description": "If the fetch uses HTTP POST, PUT, or PATCH protocol, and WantPostData is true, the POST data will be copied here. This is only for initial hop. If there are redirects, HTTP POST will be changed to GET on subsequent hops, and the PostData will be cleared. There is only one exception, if the HTTP response code to the POST request is 307 (a new code introduced in RFC7321, sec. 6.4.7), we will preserve the request method and the PostData for the next hop.",
          "format": "byte",
          "type": "string"
        },
        "PredictedDownloadTimeMs": {
          "description": "This is available only if a fetch results in TIMEOUT_WEB, and we were able to predict, based on content length and bandwidth we were using, how much time (in ms) would be needed to download the entire content.",
          "format": "int32",
          "type": "integer"
        },
        "ProtocolVersionFallback": {
          "description": "Whether we fallback from HTTP/2 to HTTP/1.1 during fetch. The fallback could happen in any hops and there can be at most one fallback because once fallback happens, we will not try HTTP/2 anymore.",
          "type": "boolean"
        },
        "RedirectSourceFetchId": {
          "description": "If this fetch was a result of a redirect, we populate the parent ID here.",
          "format": "uint64",
          "type": "string"
        },
        "RequestorID": {
          "description": "RequestorId is the same on as in the request that triggers this reply -- mainly for diagnostics purpose",
          "type": "string"
        },
        "RequestorIPAddressPacked": {
          "description": "Machine that sent Trawler this request, for logging. An IPAddress object, packed as a string.",
          "format": "byte",
          "type": "string"
        },
        "ReuseInfo": {
          "description": "-------- Returns trawler::ReuseInfo with status of IMS/IMF/cache query. Consider using HopReuseInfo instead, which has per-redirect hop detail. If there's URL redirection, this field stores the reuse info of the last hop. For example, if the and URL redirect chain is [URL A] --> [URL B] --> [URL C], this field stores the reuse info of [URL C].",
          "enum": [
            "RUI_NONE",
            "RUI_IMS_CACHE_CURRENT",
            "RUI_IMS_NOT_MODIFIED",
            "RUI_IMS_CHANGED",
            "RUI_IMF_NOCACHE",
            "RUI_IMF_CACHE_CURRENT",
            "RUI_IMF_HIT",
            "RUI_IMF_CHANGED",
            "RUI_IMF_POST_HIT_ERROR",
            "RUI_CACHE_CURRENT",
            "RUI_CACHE_EXPIRED",
            "RUI_CACHE_NOCACHE",
            "RUI_CACHE_UNUSABLE",
            "RUI_IMF_UNUSABLE",
            "NUM_REUSE_INFO_VALS"
          ],
          "enumDescriptions": [
            "Neither IMS or IMF were enabled",
            "IMS Had IMS enabled; but had cache hit;",
            "so didn't need to do the fetch Did IMS and got back 304",
            "Did IMS and got back non-304",
            "IMF - UseBigTableIMF set IMF enabled; but result wasn't in the cache",
            "IMF enabled; but cached copy was current",
            "IMF enabled; had older cached copy;",
            "but got back 304; returned content IMF enabled; had older cached copy;",
            "got back non-304; indicating change Got back 304 on IMF; but cached copy failed;",
            "ACCEPTABLE AGE; no IMF Cache hit",
            "Had content; but older than max",
            "No content in cache",
            "Cache entry; but not usable",
            "Cache entry for IMF; but not usable",
            "*** don't forget to update."
          ],
          "type": "string"
        },
        "RobotsInfo": {
          "description": "Extra information in robots.txt for this page (ORed together bits from trawler::RobotsInfo). e.g. nosnippet vs. noarchive vs nofollow vs noindex vs disallow Consider using HopRobotsInfo instead, which has per-redirect hop detail.",
          "format": "int32",
          "type": "integer"
        },
        "RobotsStatus": {
          "$ref": "TrawlerFetchStatus",
          "description": "Status of the robots.txt fetch. Currently, this is present if: - Certain robots error cases, such as URL_TIMEOUT-TIMEOUT_ROBOTS or URL_UNREACHABLE-UNREACHABLE_ROBOTS_ERROR. - If WantRobotsBody is set in the FetchParams."
        },
        "RobotsTxt": {
          "description": "The robots.txt we used for this URL (initial hop). Not normally filled in unless WantRobotsBody is set. This is mostly for debugging purposes and should not be used for large volumes of traffic.",
          "format": "byte",
          "type": "string"
        },
        "Status": {
          "$ref": "TrawlerFetchStatus",
          "description": "Status of the fetch - refers to the final status at the end of the redirect chain."
        },
        "ThrottleClient": {
          "$ref": "TrawlerThrottleClientData",
          "description": "If present, Client API will enforce the contained constraints"
        },
        "ThrownAwayBytes": {
          "description": "Sometimes we throw away content because we cannot store it in the internal buffers. These is how many bytes we have thrown away for this factor.",
          "format": "int64",
          "type": "string"
        },
        "TimestampInMS": {
          "description": "When this reply came back from fetcher NOTE: TimestampInMS is used for internal debugging. To see when a document was crawled, check CrawlDates.",
          "format": "int64",
          "type": "string"
        },
        "TotalFetchedSize": {
          "description": "How many raw bytes we read from the connection to the server when we fetched the page. Includes everything: HTTP headers, overhead for HTTP chunked encoding, whatever compressed/uncompressed form (i.e. gzip/deflate accept-encoding) the content was sent in, etc. This is NOT the same as the size of the uncompressed FetchReply::Body - if the webserver used gzip encoding, this value might be much smaller, since it only counts the compressed wire size. To illustrate, think of 3 sizes: 1) TotalFetchedSize - amount Trawler read over the wire from the server. If they used gzip/deflate, this might be 4-5x smaller than the body. 2) UnTruncatedSize/CutoffSize - how big is the full document, after uncompressing any gzip/deflate encoding? If truncated, this is reflected in CutoffSize. 3) FetchReply::Body size - most crawls enable Trawler compression to save storage space (gzip + a google html dictionary). The body size that the end Trawler client sees is post-compression.",
          "format": "int64",
          "type": "string"
        },
        "TransparentRewrites": {
          "description": "If the url got rewriten by transparent rewrites, here it is the series of rewrites it got through. The fetched one is the last",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "TrawlerPrivate": {
          "$ref": "TrawlerTrawlerPrivateFetchReplyData",
          "description": "For logging only; not present in the actual fetcher response"
        },
        "Url": {
          "description": "The original url in the request we are answering. Even though \"optional,\" url must be filled in on all well-formed replies. Trawler guarantees that it is filled in, and basically every client expects it (CHECKs in some cases). -> Not filling this field in is a bug, if you share this data with other crawls/pipelines. You should expect everybody else to require a url.",
          "type": "string"
        },
        "UrlEncoding": {
          "description": "Encoding info for the original url itself. Bitfield encoding; see UrlEncoding::{Set,Get}Value in webutil/urlencoding.",
          "format": "int32",
          "type": "integer"
        },
        "UseHtmlCompressDictionary": {
          "description": "Use the special compression dictionary for uncompressing this. (trawler::kHtmlCompressionDict. Use trawler::FetchReplyUncompressor to uncompress; crawler/trawler/public/fetchreply-util.h)",
          "type": "boolean"
        },
        "crawldates": {
          "$ref": "TrawlerFetchReplyDataCrawlDates"
        },
        "deliveryReport": {
          "$ref": "TrawlerFetchReplyDataDeliveryReport",
          "description": "Transfer operation detailed report."
        },
        "fetchstats": {
          "$ref": "TrawlerFetchReplyDataFetchStats"
        },
        "originalProtocolUrl": {
          "description": "If the input url in FetchRequest is Amazon S3 protocol or Apple Itunes protocol, we will translate it into https url and log it as https url. In the meantime we will store the original s3/itunes url in this field. Before sending back to client, the Url will be translated back to s3 and this field will be cleard.",
          "type": "string"
        },
        "partialresponse": {
          "$ref": "TrawlerFetchReplyDataPartialResponse"
        },
        "protocolresponse": {
          "$ref": "TrawlerFetchReplyDataProtocolResponse"
        },
        "redirects": {
          "items": {
            "$ref": "TrawlerFetchReplyDataRedirects"
          },
          "type": "array"
        },
        "trafficType": {
          "description": "Traffic type of this fetch.",
          "enum": [
            "TRAFFIC_TYPE_UNSPECIFIED",
            "TRAFFIC_TYPE_NO_FETCH",
            "TRAFFIC_TYPE_ONEOFF_CRAWL",
            "TRAFFIC_TYPE_DISCOVERY",
            "TRAFFIC_TYPE_REFRESH"
          ],
          "enumDescriptions": [
            "",
            "Not fetch traffic is consisted of requests that we schedule it as notification for clients, but not need to actually fetch.",
            "As the name suggests, oneoff crawl means client just needs to crawl the URLs once.",
            "Discovery traffic is consisted of the new URLs discovered by Multiverse, that we have never seen in the crawl history.",
            "The context of refresh crawl is that client needs to check the content of some URLs periodically, so they refresh those URLs regularly."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataCrawlDates": {
      "description": "Reuse information returned if UrlState == CRAWLED, specifying when we may have reused from cache. See also ReuseInfo below. NOTE: Please use the CrawlTimes below. CrawlDates is deprecated. use CrawlTimes instead!",
      "id": "TrawlerFetchReplyDataCrawlDates",
      "properties": {
        "NotChangedDate": {
          "description": "fetched from the web. Timestamp indicates when",
          "format": "int32",
          "type": "integer"
        },
        "OriginalCrawlDate": {
          "description": "Timestamp when the page was",
          "format": "int32",
          "type": "integer"
        },
        "ReuseDate": {
          "description": "the page was last checked but found to be the same as before. If set, timestamp to indicate",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataDeliveryReport": {
      "description": "Depending on which Data Acquisition API the client uses, the fetched content can be delivered to the client in the RPC, via Goops, or copied to the client's storage system (possibly after transformation). In the latter case, DeliveryReport will contain info about the delivery status, such as whether we have permission error, whether the destination storage is out of quota, etc).",
      "id": "TrawlerFetchReplyDataDeliveryReport",
      "properties": {
        "events": {
          "description": "The events store the detail of messages (usually error).",
          "items": {
            "$ref": "TrawlerEvent"
          },
          "type": "array"
        },
        "filePath": {
          "description": "The complete path (include the file name) of the file downloaded. For requests that require delivery, this path will be the user specified location. For requests that use Multiverse default storage, this path will be the managed by Multiverse.",
          "type": "string"
        },
        "status": {
          "description": "Status of the transfer action.",
          "enum": [
            "TRANSFER_UNSPECIFIED",
            "TRANSFER_OK",
            "TRANSFER_UNAVAILABLE",
            "TRANSFER_INTERNAL",
            "TRANSFER_INVALID_DESTINATION",
            "TRANSFER_PERMISSION_DENIED",
            "TRANSFER_RESOURCE_EXHAUSTED",
            "TRANSFER_NOT_ATTEMPTED"
          ],
          "enumDescriptions": [
            "",
            "Everything looks good!",
            "The service is currently unavailable. This is most likely a transient condition, which can be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations.",
            "Internal errors. This means that some invariants expected by the underlying system have been broken.",
            "File can't be moved to the specified destination. Most likely due to an invalid destination or invalid destination configuration.",
            "The request does not have valid authentication credentials for the operation.",
            "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.",
            "The transfer did not start, typically because of the fetch failure."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataFetchStats": {
      "description": "The fetcher keeps track of various time intervals spent in the states of the fetcher url control flow. Sometimes flows branch out into more than one flow (next flow), and we aggregate all the time intervals spent in a specific state for all the flows to get the time interval for the state. The time interval for a state is therefore not the time interval of an individual flow, if the WaitNextFlow time is non zero. The WaitNextFlow interval included here is the time spent by one flow waiting for another flow. Although the WaitNextFlow time is the time spent by a flow in the WaitNextFlow state, its also equivalent to the entire timeline of another flow. It is the time spent in the various states of another flow. In computing the total time spent in the primary flow, one must omit the WaitNextFlow time, since it is already included in the form of slices of individual state time intervals in the aggregated time intervals for other states, and will result in double counting.",
      "id": "TrawlerFetchReplyDataFetchStats",
      "properties": {
        "BotOverheadMS": {
          "description": "Overhead spent RPCing with the Bot/proxy.",
          "format": "int32",
          "type": "integer"
        },
        "ClientControlflowStats": {
          "$ref": "TrawlerFetchReplyDataFetchStatsClientStateStats"
        },
        "ConnectTimeMs": {
          "description": "Report only with first request on connection, so that we keep track of the connect time with a host. Sometimes a connection is initiated by a prior request that times out before the connection is established. Another request can get scheduled on a connection that is already in the process of being established but has no request scheduled onto it. We want to keep track of the entire connect time even if a request didn't need to wait for the entire connection establishment time. Sometimes a connection may get established before the first request uses it. We tag along the connect time with the first request using the connection. ConnectTimeMs also includes SSL negotiation time.",
          "format": "int32",
          "type": "integer"
        },
        "ControlflowStats": {
          "$ref": "TrawlerFetchReplyDataFetchStatsStateStats"
        },
        "DownLoadTime": {
          "description": "DownLoadTime = Share of connect time + ServerResponseTimeMs + TransferTimeMs (see below) in ms",
          "format": "int32",
          "type": "integer"
        },
        "EdgeEgressOverheadMs": {
          "description": "Overhead spent routing the request from HOPE to edge egress nodes, which open connection to webservers. This is only set for edge fetches (e.g., through Floonet egress nodes).",
          "format": "int32",
          "type": "integer"
        },
        "SSLConnectTimeMs": {
          "description": "ConnectTimeMs includes TCP connect time + SSL time, whereas SSLConnectTimeMs includes only the latter.",
          "format": "int32",
          "type": "integer"
        },
        "ServerResponseTimeMs": {
          "description": "Time between the request send and the receipt of the first fragment of the response. For HTTP responses the first fragment is the first fragment of the response payload (the headers are ignored).",
          "format": "int32",
          "type": "integer"
        },
        "TransferTimeMs": {
          "description": "Time to receive the entire response payload starting the clock on receiving the first fragment.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataFetchStatsClientStateStats": {
      "description": "Records stats about state changes on the client side if there're any. For example, there's a state of cache lookup when using private-cache client library.",
      "id": "TrawlerFetchReplyDataFetchStatsClientStateStats",
      "properties": {
        "WaitContentCacheUsec": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataFetchStatsStateStats": {
      "description": "The following are only populated if Params.WantStateStats is true.",
      "id": "TrawlerFetchReplyDataFetchStatsStateStats",
      "properties": {
        "EndTrackingTimeUsec": {
          "format": "int64",
          "type": "string"
        },
        "StartTrackingTimeUsec": {
          "description": "Start and end timestamp tracking the delays for this request.",
          "format": "int64",
          "type": "string"
        },
        "WaitCompressTimeUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitContentCacheUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitCredentialTimeUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitDNSTimeUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitFetchClientUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitForCachedContentStreamingUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitForFetchUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitHostIdTimeUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitNextFlowUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitRobotsCacheTimeUsec": {
          "description": "obsolete. Not set.",
          "format": "int32",
          "type": "integer"
        },
        "WaitRobotsFetchTimeUsec": {
          "description": "obsolete. Not set.",
          "format": "int32",
          "type": "integer"
        },
        "WaitRobotsTimeUsec": {
          "format": "int32",
          "type": "integer"
        },
        "WaitScheduleTimeUsec": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataHTTPHeader": {
      "description": "header : value",
      "id": "TrawlerFetchReplyDataHTTPHeader",
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataPartialResponse": {
      "description": "---------------------------------------------------------------------- PartialResponse is used with streaming responses in LargeFileFetchAdapter. Rather than fitting entirely in a single FetchReply, there is a series of FetchReplies until IsFinalResponse. Each group of responses will have a unique FetchID to link them.",
      "id": "TrawlerFetchReplyDataPartialResponse",
      "properties": {
        "BodyLocation": {
          "description": "If set, indicates where the fetched body is, e.g. a CNS file path. FetchReply.Body should be empty in this case. In the case where client does not support streaming but the content is too large to be accumulated in memory, we keep writing the streaming chunks to some storage unit and notify client when it is done.",
          "type": "string"
        },
        "ChunkNumber": {
          "description": "Fetch number in this series of fetches",
          "format": "int32",
          "type": "integer"
        },
        "ContentRange": {
          "$ref": "TrawlerContentRangeInfo",
          "description": "If there is a Content-Range header, the ranges in it"
        },
        "ETag": {
          "description": "Any ETag seen in the headers",
          "type": "string"
        },
        "FetchID": {
          "description": "ID which links all partial fetches for this url",
          "format": "uint64",
          "type": "string"
        },
        "IsFinalResponse": {
          "description": "Is this the final response for this fetch?",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataProtocolResponse": {
      "description": "Group with protocol specific response (determined by the protocol of the url that generated the content we return).",
      "id": "TrawlerFetchReplyDataProtocolResponse",
      "properties": {
        "Code": {
          "description": "Response code. We emulate the HTTP response codes for all protocols that we know. -- HTTP: response code for the downloaded page. -- FTP: similar with HTTP: 200 - OK, 40X - errors (not found, etc), 500 - server unavailable",
          "format": "int32",
          "type": "integer"
        },
        "ContentType": {
          "description": "Content type as inferred by the fetcher (webutil/http/content-type.proto)",
          "enum": [
            "CONTENT_FIRST_TYPE",
            "CONTENT_GOOGLE_ERROR",
            "CONTENT_GOOGLE_EMPTY",
            "CONTENT_GOOGLE_OTHER",
            "CONTENT_TEXT_HTML",
            "CONTENT_TEXT_PLAIN",
            "CONTENT_APPLICATION_POSTSCRIPT",
            "CONTENT_APPLICATION_PDF",
            "CONTENT_TEXT_WML",
            "CONTENT_GOOGLE_WHITEPAGE",
            "CONTENT_TEXT_HDML",
            "CONTENT_TEXT_PDF",
            "CONTENT_GOOGLE_USENET",
            "CONTENT_IMAGE",
            "CONTENT_IMAGE_THUMBNAIL",
            "CONTENT_AUDIO_MP3",
            "CONTENT_TEXT_POSTSCRIPT",
            "CONTENT_APPLICATION_MSWORD",
            "CONTENT_TEXT_MSWORD",
            "CONTENT_APPLICATION_MS_POWERPOINT",
            "CONTENT_TEXT_MS_POWERPOINT",
            "CONTENT_APPLICATION_RTF",
            "CONTENT_TEXT_RTF",
            "CONTENT_APPLICATION_MS_EXCEL",
            "CONTENT_TEXT_MS_EXCEL",
            "CONTENT_TEXT_OTHER",
            "CONTENT_APPLICATION_XSHOCKWAVEFLASH",
            "CONTENT_TEXT_XSHOCKWAVEFLASH",
            "CONTENT_APPLICATION_XGZIP",
            "CONTENT_IMAGE_JPEG",
            "CONTENT_IMAGE_XDJVU",
            "CONTENT_SCAN_ATTR",
            "CONTENT_SCAN_FAKE_HTML",
            "CONTENT_GOOGLE_QECONOMY",
            "CONTENT_GOOGLE_FROOGLE_OFFER",
            "CONTENT_GOOGLE_DPL",
            "CONTENT_GOOGLE_YP",
            "CONTENT_APPLICATION_XML",
            "CONTENT_GOOGLE_OCEAN_METADATA",
            "CONTENT_GOOGLE_LOCALSEARCH",
            "CONTENT_BINARY_OTHER",
            "CONTENT_APPLICATION_ATOM_XML",
            "CONTENT_APPLICATION_RDF_XML",
            "CONTENT_APPLICATION_RSS_XML",
            "CONTENT_APPLICATION_XHTML_XML",
            "CONTENT_APPLICATION_OCTET_STREAM",
            "CONTENT_TEXT_XML",
            "CONTENT_GOOGLE_OCEAN_DOC",
            "CONTENT_IMAGE_PNG",
            "CONTENT_IMAGE_GIF",
            "CONTENT_IMAGE_TIFF",
            "CONTENT_APPLICATION_ZIP_ARCHIVE",
            "CONTENT_TEXT_ZIP_ARCHIVE",
            "CONTENT_APPLICATION_XGZIP_ARCHIVE",
            "CONTENT_TEXT_XGZIP_ARCHIVE",
            "CONTENT_APPLICATION_XTAR_ARCHIVE",
            "CONTENT_TEXT_XTAR_ARCHIVE",
            "CONTENT_APPLICATION_XCOMPRESS_ARCHIVE",
            "CONTENT_TEXT_XCOMPRESS_ARCHIVE",
            "CONTENT_APPLICATION_WAP_XHTML",
            "CONTENT_APPLICATION_XJAVASCRIPT",
            "CONTENT_APPLICATION_JAVASCRIPT",
            "CONTENT_APPLICATION_ECMASCRIPT",
            "CONTENT_TEXT_JAVASCRIPT",
            "CONTENT_TEXT_ECMASCRIPT",
            "CONTENT_APPLICATION_KML",
            "CONTENT_APPLICATION_KMZ_ARCHIVE",
            "CONTENT_TEXT_KML",
            "CONTENT_APPLICATION_DWF",
            "CONTENT_DRAWING_DWF",
            "CONTENT_TEXT_DWF",
            "CONTENT_APPLICATION_ODF",
            "CONTENT_TEXT_ODF",
            "CONTENT_GOOGLE_NEW",
            "CONTENT_APPLICATION_OPENXML_WORD",
            "CONTENT_TEXT_OPENXML_WORD",
            "CONTENT_APPLICATION_OPENXML_EXCEL",
            "CONTENT_TEXT_OPENXML_EXCEL",
            "CONTENT_APPLICATION_OPENXML_POWERPOINT",
            "CONTENT_TEXT_OPENXML_POWERPOINT",
            "CONTENT_APPLICATION_OPENXML",
            "CONTENT_TEXT_CSS",
            "CONTENT_APPLICATION_JSON",
            "CONTENT_TEXT_CROSS_DOMAIN_POLICY",
            "CONTENT_APPLICATION_GPX_XML",
            "CONTENT_APPLICATION_ENDNOTE_STYLE",
            "CONTENT_TEXT_ENDNOTE_STYLE",
            "CONTENT_APPLICATION_XPROTOBUFFER",
            "CONTENT_APPLICATION_OPENSEARCHDESCRIPTION_XML",
            "CONTENT_TEXT_CACHE_MANIFEST",
            "CONTENT_VIDEO_3GPP",
            "CONTENT_APPLICATION_ADOBE_ACSM",
            "CONTENT_MODEL_DWFX",
            "CONTENT_IMAGE_SVG_XML",
            "CONTENT_APPLICATION_XHWP",
            "CONTENT_TEXT_XHWP",
            "CONTENT_APPLICATION_EPUB_ZIP",
            "CONTENT_APPLICATION_X_WINDOWS_EXECUTABLE",
            "CONTENT_APPLICATION_TEX_LATEX",
            "CONTENT_TEXT_TEX_LATEX",
            "CONTENT_APPLICATION_SAFEBROWSING_UPDATE",
            "CONTENT_APPLICATION_SAFEBROWSING_CHUNK",
            "CONTENT_APPLICATION_SAFEBROWSING_KEY",
            "CONTENT_VIDEO_X_MS_ASF",
            "CONTENT_APPLICATION_XBZIP",
            "CONTENT_APPLICATION_OCTET_STREAM_COMPRESSIBLE",
            "CONTENT_IMAGE_X_ICON",
            "CONTENT_APPLICATION_ICS",
            "CONTENT_IMAGE_WEBP",
            "CONTENT_IMAGE_BMP",
            "CONTENT_FONT_TTF",
            "CONTENT_FONT_OTF",
            "CONTENT_FONT_WOFF",
            "CONTENT_FONT_WOFF2",
            "CONTENT_APPLICATION_CSP_REPORT",
            "CONTENT_VIDEO_MP2T",
            "CONTENT_TEXT_X_VCALENDAR",
            "CONTENT_FONT_EOT",
            "CONTENT_APPLICATION_XMPEG_URL",
            "CONTENT_APPLICATION_X_BROTLI_DICT_COMPRESSED",
            "CONTENT_VIDEO_MP4",
            "CONTENT_AUDIO_MP4",
            "CONTENT_APPLICATION_MANIFEST_JSON",
            "CONTENT_APPLICATION_MS_TNEF",
            "CONTENT_TEXT_EPUB_ZIP",
            "CONTENT_APPLICATION_FB2_XML",
            "CONTENT_TEXT_FB2_XML",
            "CONTENT_APPLICATION_WASM",
            "CONTENT_APPLICATION_GEO_JSON",
            "CONTENT_TEXT_CSV",
            "CONTENT_APPLICATION_XPROTOBUF",
            "CONTENT_VIDEO_WEBM",
            "CONTENT_AUDIO_WEBM",
            "CONTENT_TEXT_CONVERTED_XML",
            "CONTENT_NUM_TYPES"
          ],
          "enumDescriptions": [
            "",
            "Initialization value, never used",
            "empty page",
            "none of the types below, unknown",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "PDF converted to HTML",
            "",
            "image, not one of the image types",
            "below",
            "",
            "POSTSCRIPT converted to HTML",
            "",
            "MSWORD converted to HTML",
            "",
            "POWERPOINT converted to HTML",
            "",
            "RTF converted to HTML",
            "",
            "EXCEL converted to HTML",
            "unknown content type converted to HTML",
            "",
            "SWF converted to HTML",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "ZIP_ARCHIVE converted to HTML",
            "",
            "XGZIP_ARCHIVE converted to HTML",
            "",
            "XTAR_ARCHIVE converted to HTML",
            "",
            "XCOMPRESS_ARCHIVE converted to HTML",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "KML/KMZ converted to HTML",
            "",
            "",
            "DWF converted to HTML",
            "OASIS OpenDocument formats",
            "(16 real MIME types) ODF converted to HTML",
            "",
            "",
            "OPENXML_WORD converted to HTML",
            "",
            "OPENXML_EXCEL converted to HTML",
            "",
            "OPENXML_POWERPOINT converted to HTML",
            "Generic office 2007 document.",
            "",
            "",
            "",
            "http://www.topografix.com/GPX/1/1/",
            "",
            "ENDNOTE_STYLE converted to HTML",
            "Use CONTENT_APPLICATION_XPROTOBUF instead. See go/spectrejs#use-canonical-content-types.",
            "http://go/searchdomaincheck",
            "HTML 5 - http://whatwg.org",
            "",
            "Adobe Content Server message",
            "",
            "http://www.w3.org/TR/SVG/intro.html#MIMEType",
            "Hangul Word Processor",
            "HWP converted to HTML",
            "",
            "Windows executable files.",
            "LaTeX or TeX",
            "LaTeX or TeX content converted to html",
            "SafeBrowsing update response",
            "SafeBrowsing chunk data",
            "SafeBrowsing key response",
            "MS Advanced Systems Format container.",
            "For Bzip2 compressed files.",
            "For binary content",
            "that is OK to be compressed. Equivalent to application/octet-stream but listed in net/http/gzip_rules.txt as safe to gzip.",
            "Calendar files.",
            "",
            "BMP image files.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Brotli compound dict.",
            "Used to return streams compressed with brotli and a shared dictionary between client and server. Used by AGSA, Google Go and other clients in the interim period before the standardization of shared brotli. Handles the video/mp4 content type",
            "Handles the audio/mp4 content type",
            "Handles the manifest content type",
            "Handles the application/ms-tnef type",
            "EPUB converted to HTML",
            "http://fictionbook.org/index.php/Eng:FictionBook",
            "FB2 converted to HTML",
            "WebAssembly binary format",
            "GeoJSON",
            "Comma-separated values (CSV)",
            "Binary protocol buffers",
            "Handles the video/webm content type",
            "Handles the audio/webm content type",
            "CONTENT_APPLICATION_XML or",
            "CONTENT_TEXT_XML converted to HTML. Add new content types above this"
          ],
          "type": "string"
        },
        "CutoffSize": {
          "description": "Where did we cut off? Includes headers plus truncated but uncompressed content. Present if and only if we truncated the document.",
          "format": "int64",
          "type": "string"
        },
        "HttpVersion": {
          "description": "DEPRECATED, see field 113. Stores the HTTP version we used in the final hop.",
          "enum": [
            "HTTP_11",
            "HTTP_10",
            "HTTP_09",
            "HTTP_2",
            "HTTP_AUTO",
            "FIRST_VERSION",
            "NUM_VERSIONS"
          ],
          "enumDescriptions": [
            "",
            "",
            "??? do we want this ???",
            "EXPERIMENTAL, DO NOT USE unless you have talked to",
            "trawler-dev@. Allow fetcher to automatically select HTTP protocol",
            "version. The selection is based on prior knowledge and dynamic server response. Basically, if the client and the host is configured to allow HTTP/2 traffic, we will select HTTP/2 and send HTTP/2 traffic; and we will fallback to HTTP/1 if we found the server does not support HTTP/2 through ALPN. HTTP Version selection will be applied to each redirect hop. More details about HTTP/2 traffic configuration can be found in: googledata/googlebot/http2_traffic_control_file. We list this after HTTP_* values to make sure",
            "HTTPVersion_Name(0) returns the correct string."
          ],
          "type": "string"
        },
        "ProtocolVersionFallback": {
          "description": "DEPRECATED, see field 114. Whether we fallback from HTTP/2 to HTTP/1.1 during fetch. The fallback could happen in any hops and there can be at most one fallback because once fallback happens, we will not try HTTP/2 anymore.",
          "type": "boolean"
        },
        "UnTruncatedSize": {
          "description": "The amount of data we got from the webserver before any truncation, but after undoing any HTTP gzip/deflate encoding. For HTTP, this includes headers and uncompressed content. Content size is excluded if content was not successfully fetched. See description above TotalFetchedSize for comparison.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchReplyDataRedirects": {
      "description": "The sequence of redirects fetched, if applicable. This includes url plus stats for each hop after the first hop. NOTE: This can be one redirect longer than the chain of redirects *followed*, in the case where there was a redirect at the end of the chain that the fetcher detected but did not follow.",
      "id": "TrawlerFetchReplyDataRedirects",
      "properties": {
        "BadSSLCertificate": {
          "description": "The server SSL certificate chain in SSLCertificateInfo protobuf format. See this field in FetchReplyData (i.e., the initial hop) for more description on when it will be populated.",
          "format": "byte",
          "type": "string"
        },
        "CrawlTimes": {
          "$ref": "TrawlerCrawlTimes",
          "description": "Per redirect hop timestamps. This"
        },
        "DownloadTime": {
          "description": "Download time of this fetch (ms)",
          "format": "int32",
          "type": "integer"
        },
        "Endpoints": {
          "$ref": "TrawlerTCPIPInfo",
          "description": "## stats If fetched, ip info."
        },
        "HSTSInfo": {
          "description": "This specifies if the url in a redirect was rewritten to HTTPS because of an HSTS policy for the domain. See comments on FetchReplyData.HSTSInfo for how this field's values. A redirect that was rewritten with HSTS will have HSTS_STATUS_REWRITTEN ## here.",
          "enum": [
            "HSTS_STATUS_NONE",
            "HSTS_STATUS_AVAILABLE",
            "HSTS_STATUS_REWRITTEN"
          ],
          "enumDescriptions": [
            "No HSTS policy available for this fetch.",
            "There is an HSTS policy for this fetch but the fetch URL was not applied.",
            "There is an HSTS policy for this fetch and the URL was rewritten from HTTP -> HTTPS."
          ],
          "type": "string"
        },
        "HTTPResponseCode": {
          "description": "The HTTP response code for this hop. We need this since multiple response codes may have the same redirect type (e.g., 302 and 307 are both REDIRECT_TEMPORARILY), but clients may want to know which one was received. Note this is set only for the hops that are followed (i.e., TargetUrl is present). If the last redirect hop was not followed the fetch status will be URL_NOT_FOLLOWED, and the response code will be in the top level ProtocolResponse field.",
          "format": "int32",
          "type": "integer"
        },
        "HopPageNoIndexInfo": {
          "description": "Extra trawler::PageNoIndexInfo for this hop. Integer: ORed together bits from trawler::PageNoIndexInfo. The information specified by this field comes from the http header or content of the source url, not the \"TargetUrl\" in this Redirects group.",
          "format": "int32",
          "type": "integer"
        },
        "HopReuseInfo": {
          "description": "trawler::ReuseInfo with status of IMS/IMF/cache query, for this hop.",
          "enum": [
            "RUI_NONE",
            "RUI_IMS_CACHE_CURRENT",
            "RUI_IMS_NOT_MODIFIED",
            "RUI_IMS_CHANGED",
            "RUI_IMF_NOCACHE",
            "RUI_IMF_CACHE_CURRENT",
            "RUI_IMF_HIT",
            "RUI_IMF_CHANGED",
            "RUI_IMF_POST_HIT_ERROR",
            "RUI_CACHE_CURRENT",
            "RUI_CACHE_EXPIRED",
            "RUI_CACHE_NOCACHE",
            "RUI_CACHE_UNUSABLE",
            "RUI_IMF_UNUSABLE",
            "NUM_REUSE_INFO_VALS"
          ],
          "enumDescriptions": [
            "Neither IMS or IMF were enabled",
            "IMS Had IMS enabled; but had cache hit;",
            "so didn't need to do the fetch Did IMS and got back 304",
            "Did IMS and got back non-304",
            "IMF - UseBigTableIMF set IMF enabled; but result wasn't in the cache",
            "IMF enabled; but cached copy was current",
            "IMF enabled; had older cached copy;",
            "but got back 304; returned content IMF enabled; had older cached copy;",
            "got back non-304; indicating change Got back 304 on IMF; but cached copy failed;",
            "ACCEPTABLE AGE; no IMF Cache hit",
            "Had content; but older than max",
            "No content in cache",
            "Cache entry; but not usable",
            "Cache entry for IMF; but not usable",
            "*** don't forget to update."
          ],
          "type": "string"
        },
        "HopRobotsInfo": {
          "description": "Extra trawler::RobotsInfo for this hop. Integer: ORed together bits from trawler::RobotsInfo",
          "format": "int32",
          "type": "integer"
        },
        "HostId": {
          "description": "If known, the hostid for this hop",
          "format": "uint64",
          "type": "string"
        },
        "HttpRequestHeaders": {
          "description": "The http headers we sent for fetching this redirect hop. Not normally filled in, unless FetchParams.WantSentHeaders is set.",
          "type": "string"
        },
        "HttpResponseHeaders": {
          "description": "The http headers we received from this redirect hop. Trawler does not fill this in; this is intended as a placeholder for crawls like webmirror that fill in and want to track this across redirect hops.",
          "type": "string"
        },
        "RawTargetUrl": {
          "description": "bytes: can contain bad encoding.",
          "format": "byte",
          "type": "string"
        },
        "RefreshTime": {
          "description": "Refresh time in meta redirect tag",
          "format": "int32",
          "type": "integer"
        },
        "RobotsTxt": {
          "description": "The robots.txt we used for this fetch. Not normally filled in unless WantRobotsBody is set.",
          "format": "byte",
          "type": "string"
        },
        "SourceBody": {
          "$ref": "TrawlerFetchBodyData",
          "description": "For meta-redirects, this field may contain the body of the source document. Currently only filled client side and not implemented (yet) for server-side redirects."
        },
        "TargetUrl": {
          "description": "Difference between the following two fields: TargetUrl is set when we have followed the redirect target, and the url is canonicalized. RawTargetUrl is set in either of the following two cases: (1) The url has not be been followed. For example, the redirect is intended to be handled by the client. In the fetch reply response, you will see the url's status as URL_NOT_FOLLOWED-NOT_FOLLOWED*. (2) The extracted redirect url is different from its *canonicalized* form. For example, if the target url contains fragments, then this RawTargetUrl will have the fragments. Redirect target",
          "type": "string"
        },
        "Type": {
          "description": "URL and redirect type",
          "enum": [
            "REDIRECT_NONE",
            "REDIRECT_EMPTY",
            "REDIRECT_TOO_LONG",
            "REDIRECT_PERMANENT",
            "REDIRECT_TEMPORARILY",
            "REDIRECT_META",
            "REDIRECT_BAD_URL",
            "REDIRECT_HTTP_REFRESH",
            "REDIRECT_SCRIPT",
            "REDIRECT_CUSTOM",
            "REDIRECT_META_FRAGMENT",
            "NUM_REDIRECT_TYPES"
          ],
          "enumDescriptions": [
            "No redirect",
            "Looks like a redirect but is empty",
            "Looks like a redirect but is too long",
            "Permanent redirect (301)",
            "Temp redirect (302 + meta here)",
            "Redirect with tag",
            "Looks like a redirect but target is a bad URL",
            "HTTP \"Refresh:\" header; similar to meta refresh",
            "Redirect derived from a script section",
            "Redirect derived from a Google-specific rule",
            "Redirect from meta name=fragment",
            "*** don't forget to update."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerFetchStatus": {
      "id": "TrawlerFetchStatus",
      "properties": {
        "Reason": {
          "description": "The Reason field gives further clarifying details about why or how the fetch had the given outcome. For instance, if State is URL_ERROR - was it a 404/NotFound or a DNS error? The Reason field is present iff State != URL_CRAWLED. For a given crawl status of URL_FOO, the Reason value will be one of the various FetchFooReason enum values from crawler/trawler/trawler_enums.proto",
          "format": "int32",
          "type": "integer"
        },
        "State": {
          "description": "The State field describes the basic outcome of a fetch (URL_CRAWLED, URL_ROBOTED, URL_ERROR, etc). The value is one of the UrlStatusType enum values from crawler/trawler/trawler_enums.proto Note, there are several combinations of this Status/Reason tuple that could mean that your content is crawled or can be bucketed in a particular type of error. So instead of comparing the enumeration values manually, we suggest to use the predicate functions such as IsContentCrawled() provided in crawler/trawler/public/basictypes.h (see details there).",
          "enum": [
            "URL_CRAWLED",
            "URL_ERROR",
            "URL_ROBOTED",
            "URL_UNREACHABLE",
            "URL_TIMEOUT",
            "URL_REJECTED",
            "URL_NOT_FOLLOWED",
            "NUM_STATE_TYPES"
          ],
          "enumDescriptions": [
            "",
            "Error fetching; most commonly 404;",
            "but many other possible reasons. Roboted out.",
            "Fetch error; 5xx; truncated response; etc.",
            "Timeout while fetching.",
            "Rejected based on capacity or permissions.",
            "Redirects/retries-related: we crawled something",
            "*** don't forget to update."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerHostBucketData": {
      "description": "============================ Next Tag: 21 ============================ Data about the scheduling host bucket a URL was in (if the client wants to use this, e.g. for more intelligent scheduling, etc).",
      "id": "TrawlerHostBucketData",
      "properties": {
        "ClientTrafficFraction": {
          "description": "How much existing traffic",
          "format": "float",
          "type": "number"
        },
        "ClientWeightFraction": {
          "description": "belong to the client How much weight the client",
          "format": "float",
          "type": "number"
        },
        "CurrentActiveConnections": {
          "description": "How many connections are actively used for downloading ?",
          "format": "int32",
          "type": "integer"
        },
        "IsFull": {
          "description": "Is this bucket currently full ?",
          "type": "boolean"
        },
        "LastScheduleIntervalMs": {
          "description": "How many ms ago we last scheduled a url",
          "format": "int64",
          "type": "string"
        },
        "MaxActiveConnections": {
          "description": "The current hostload value (# of connections) - if negative does not apply",
          "format": "float",
          "type": "number"
        },
        "MediumTermLoad": {
          "description": "The load the recent times (the actual hostload that we apply is MaxActiveConnections / MediumTermLoad) - a hostload of 1.00 is normal, while over 1.0 is higher than normal load",
          "format": "float",
          "type": "number"
        },
        "MinInterRequestSecs": {
          "description": "The min delay between requests (in secs) - if negative does not apply",
          "format": "float",
          "type": "number"
        },
        "NonFullIntervalMs": {
          "description": "If is full, when is becoming non-full (in ms)",
          "format": "int64",
          "type": "string"
        },
        "TotalCapacityQps": {
          "description": "The following four fields attempt to make things simpler for clients to estimate available capacity. They are not populated yet as of 2013/08/21. Even after they are populated, they may change. So talk to trawler-dev@ before you use the fields. Total qps for this hostid",
          "format": "float",
          "type": "number"
        },
        "TotalUsedQps": {
          "description": "Currently used qps",
          "format": "float",
          "type": "number"
        },
        "urllist": {
          "items": {
            "$ref": "TrawlerHostBucketDataUrlList"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "TrawlerHostBucketDataUrlList": {
      "description": "Per each list that wishes to schedule url we return one of these:",
      "id": "TrawlerHostBucketDataUrlList",
      "properties": {
        "ClientCanCrawl": {
          "description": "Is this client/requestorid allowed to crawl now? (based on resource use)",
          "type": "boolean"
        },
        "IsDefaultNode": {
          "description": "Is this the 'default' user's list",
          "type": "boolean"
        },
        "IsListForUrl": {
          "description": "Was this the list that a given request landed in?",
          "type": "boolean"
        },
        "NumCurrentFetches": {
          "description": "# of current active fetches",
          "format": "int32",
          "type": "integer"
        },
        "NumUrls": {
          "description": "# of urls currently in the queue",
          "format": "int32",
          "type": "integer"
        },
        "RequestType": {
          "description": "The type of the request (low latency vs. high throughput)",
          "enum": [
            "HIGH_THROUGHPUT",
            "LOW_LATENCY",
            "NUM_REQUEST_TYPES"
          ],
          "enumDescriptions": [
            "Note: keep in sync with default in trawler.proto",
            "",
            "*** don't forget to update."
          ],
          "type": "string"
        },
        "RequestorFp": {
          "description": "The fp64 of the requestor string",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerLoggedVPCDestination": {
      "description": "Information about VPC fetches tracked for logging purposes.",
      "id": "TrawlerLoggedVPCDestination",
      "properties": {
        "cloudRegion": {
          "type": "string"
        },
        "vnid": {
          "$ref": "NetFabricRpcVirtualNetworkId"
        }
      },
      "type": "object"
    },
    "TrawlerMultiverseClientIdentifier": {
      "description": "Contain Multiverse client information, such as topic name. Can include other information such as crawl policy id in the future.",
      "id": "TrawlerMultiverseClientIdentifier",
      "properties": {
        "topicName": {
          "type": "string"
        },
        "trafficType": {
          "enum": [
            "TRAFFIC_TYPE_UNSPECIFIED",
            "TRAFFIC_TYPE_NO_FETCH",
            "TRAFFIC_TYPE_ONEOFF_CRAWL",
            "TRAFFIC_TYPE_DISCOVERY",
            "TRAFFIC_TYPE_REFRESH"
          ],
          "enumDescriptions": [
            "",
            "Not fetch traffic is consisted of requests that we schedule it as notification for clients, but not need to actually fetch.",
            "As the name suggests, oneoff crawl means client just needs to crawl the URLs once.",
            "Discovery traffic is consisted of the new URLs discovered by Multiverse, that we have never seen in the crawl history.",
            "The context of refresh crawl is that client needs to check the content of some URLs periodically, so they refresh those URLs regularly."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerOriginalClientParams": {
      "description": "The information about the original client who starts the request.",
      "id": "TrawlerOriginalClientParams",
      "properties": {
        "clientCell": {
          "type": "string"
        },
        "clientIp": {
          "type": "string"
        },
        "clientRpcType": {
          "description": "through which RPC request",
          "enum": [
            "UNKNOWN_RPC",
            "PUSH_URL_TO_CRAWL",
            "PUSH_BATCH_TO_CRAWL",
            "CRAWL_URL",
            "STREAM_FETCH_URL",
            "LEGACY_STREAM_FETCH_URL",
            "SUBSCRIBE_URL_ONCE",
            "FEEDS_TRANSFER"
          ],
          "enumDescriptions": [
            "",
            "CrawlService.PushUrlToCrawl.",
            "CrawlService.PushBatchToCrawl.",
            "CrawlService.CrawlUrl.",
            "CrawlService.StreamFetchUrl.",
            "CrawlService.LegacyStreamFetchUrl.",
            "CrawlService.SubscribeUrlOnce.",
            "FeedsTransfer.BatchTransfer."
          ],
          "type": "string"
        },
        "clientUsername": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerPolicyData": {
      "description": "Trawler can add a policy label to a FetchReply. The two main cases are: - \"spam\" label added for specific spammer IPs listed in trawler_site_info, which most crawls auto-reject. - \"roboted:useragent\" (e.g. \"roboted:googlebot\") if InfoOnlyUserAgents field is set in FetchParams",
      "id": "TrawlerPolicyData",
      "properties": {
        "ExtraData": {
          "description": "in roboted case, the RobotsInfo",
          "format": "int32",
          "type": "integer"
        },
        "Label": {
          "description": "\"spam\" or \"roboted:googlebot\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerSSLCertificateInfo": {
      "description": "This protobuf specifies the results of https certificate validation, typically used for the BadSSLCertificate field in FetchReplyData. -------------------------- Next Tag: 13 -------------------------------",
      "id": "TrawlerSSLCertificateInfo",
      "properties": {
        "ALPNNegotiatedProtocol": {
          "description": "ALPN negotiated protocol, see https://tools.ietf.org/html/rfc7301 The value will either be empty, or one of the protocol names sent by the client that the server accepted. Examples include \"h2\" and \"acme-tls/1\".",
          "type": "string"
        },
        "CertificateChain": {
          "description": "If present, this consists of the remote webserver's X.509 certificate chain in DER format. The chain stored here is the *reversed* result of SSL_get_peer_cert_chain(). That is to say, it is the chain presented by the peer (which may differ from the chain that was built and verified), but in leaf-last order. Typically the root cert will not be included. But do not assume anything, because servers do all manner of weird things. (For example on the beginning of the chain, there might be also some irrelevant certificates besides the root certificate.) Certificates may be the empty string, indicating an encoding failure. See also |IsTruncated|. Certs can be loaded with util/sig/cert.h Cert::LoadBinaryCert(), converted to ASCII PEM format (CertificateUtil::CertificateToPEM()) or shown as text at the commandline by piping them into 'openssl x509 -text -inform DER'.",
          "items": {
            "format": "byte",
            "type": "string"
          },
          "type": "array"
        },
        "ErrorMessages": {
          "description": "ErrorMessages contains errors from HTTPS validation. Examples of such errors include invalid certificates, failure to build a certificate chain, certificates that do not match the expected hostname, and internal errors. If ErrorMessages is empty, HTTPS validation succeeded. Otherwise, it failed. This is the only guarantee about the contents of this field, though legacy code exists that embeds invalid assumptions, b/70904498. New code should not do anything with this field other than test whether it is empty and display its value to humans. If you need to know more about the details of a particular HTTPS validation, you can revalidate |CertificateChain| independently.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "IsTruncated": {
          "description": "This SSLCertificateInfo had its fields truncated because it was too large. It is no longer set (cl/205356251) but may be true in old records.",
          "type": "boolean"
        },
        "OCSPResponse": {
          "description": "Stapled OCSP response obtained during the TLS handshake, if any. An OCSP (Online Certificate Status Protocol) response is an indication, signed by the issuing CA, that the certificate has not been revoked. A TLS handshake extension allows servers to \"staple\" a response to the certificate served in the handshake, saving the need for the client to fetch it itself from the CA. This field contain the stapled OCSP response if the server served one. See RFC6066, Section 8 for the data format: https://tools.ietf.org/html/rfc6066#section-8",
          "format": "byte",
          "type": "string"
        },
        "SCTList": {
          "description": "SCTList obtained during the TLS handshake, if any. See RFC6962, Section 3.3 for the data format: https://tools.ietf.org/html/rfc6962#section-3.3",
          "format": "byte",
          "type": "string"
        },
        "SSLCipherSuite": {
          "format": "int32",
          "type": "integer"
        },
        "SSLCipherSuiteName": {
          "type": "string"
        },
        "SSLProtocolVersion": {
          "description": "Details about the SSL/TLS protocol and cipher. See RFC5246 and google3/crawler/trawler/hope/proto/ssl.proto for more details.",
          "format": "int32",
          "type": "integer"
        },
        "SSLProtocolVersionName": {
          "description": "The names of the SSL protocol version and cipher suite. These strings are implementation defined and may be subject to change.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrawlerTCPIPInfo": {
      "description": "To keep track of fetch connection endpoints. Note: You can use trawler::SourceIP(info) or trawler::DestinationIP(info) (as well as HasSourceIP/HasDestinationIP) in basictypes.h instead of accessing the packed strings directly. This will return a proper IPAddress. Never use the fixed32 based Source/Destination-IP in new code as they will go away (only IPv4).",
      "id": "TrawlerTCPIPInfo",
      "properties": {
        "DestinationIPAddressPacked": {
          "description": "Address of the destination host. Extract with trawler::DestinationIP() or decode with PackedStringToIPAddress().",
          "format": "byte",
          "type": "string"
        },
        "DestinationPort": {
          "format": "int32",
          "type": "integer"
        },
        "SourceIPAddressPacked": {
          "description": "Source address of the crawl machine we originated the fetch from. Extract with trawler::SourceIP() or decode with PackedStringToIPAddress().",
          "format": "byte",
          "type": "string"
        },
        "SourcePort": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "TrawlerThrottleClientData": {
      "id": "TrawlerThrottleClientData",
      "properties": {
        "IsBandwidthThrottle": {
          "type": "boolean"
        },
        "MaxAllowedRate": {
          "description": "Max doc_requestor urls/second allowed from this client to this fetcher.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "TrawlerTrawlerPrivateFetchReplyData": {
      "description": "This is an optional container of arbitrary data that can be added to a FetchReplyData. This data is meant to be logged, but not sent back in a fetch reply (it should be added *after* the reply is prepared). Use FetchResponsePreparatorImpl::AddTrawlerPrivateDataToFetchReplyData to add. See also the comment in fetch_response_preparator_impl.cc. Next Tag: 44",
      "id": "TrawlerTrawlerPrivateFetchReplyData",
      "properties": {
        "BotGroupName": {
          "description": "If we fetched using BotFetchAgent, what is the BotGroupName?",
          "type": "string"
        },
        "BotHostname": {
          "description": "This is the HOPE server that we sent the url to. We log the HOPE backend cell and hope server shard number (e.g., 'qf:6'). This allows us to understand how we are balancing our load to the HOPE servers.",
          "type": "string"
        },
        "CacheRequestorID": {
          "description": "Present if the reply is from the trawler cache. This is the requestorid of the trawler client that populated the cache with the data we are reusing.",
          "type": "string"
        },
        "FetcherTaskNumber": {
          "description": "Which Trawler fetcher task fetched this URL.",
          "format": "int32",
          "type": "integer"
        },
        "HSTSHeaderValue": {
          "description": "HTTP Strict-Transport-Security (RFC6797) header value. We log this so we can generate a list of hosts that prefer HTTPS over HTTP.",
          "type": "string"
        },
        "HadInMemCacheHit": {
          "type": "boolean"
        },
        "HintIPAddress": {
          "description": "If we do not have Endpoints in FetchReplyData (e.g., url rejected due to hostload limit), do we have a guess of the server IPAddress (e.g., from robots fetch)? This helps us classify URLs based on country code, etc. The field is filled with IPAddress::ToPackedString().",
          "format": "byte",
          "type": "string"
        },
        "Is5xxHostId": {
          "description": "Represents if the HostId belongs to HostId set in 5xx url patterns, it can work as a tag when emitting requestor minute summary, this helps us to aggregate traffic affected by 5xx patterns, and test if there are any fetching changes.",
          "type": "boolean"
        },
        "IsRobotsFetch": {
          "description": "Was this an internally-initiated robots.txt fetch?",
          "type": "boolean"
        },
        "PostDataSize": {
          "description": "What's the post data size (in bytes) if it's a post request.",
          "format": "int64",
          "type": "string"
        },
        "Producer": {
          "description": "Note TrawlerPrivateFetchReplyData is never sent back to clients. The following field is just for Trawler and Multiverse internal tracking, and clients should not look at this field at all.",
          "enum": [
            "UNKNOWN_SUBSYSTEM_NAME",
            "TRAWLER_HARPOON_FETCHER",
            "WEBMIRROR_DISPATCHER",
            "WEBMIRROR_CRAWL_ENGINE",
            "MULTIVERSE_TRAWLER_FETCHPROXY",
            "MULTIVERSE_FRONTEND_SERVER"
          ],
          "enumDescriptions": [
            "May be used as a placeholder for the actual",
            "sub-system name when the FetchReply is generated in the Trawler/Harpoon client library.",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "ProxyInstance": {
          "description": "If set, this fetch was done through a proxy (e.g., fetchproxy).",
          "type": "string"
        },
        "RequestUserName": {
          "description": "Log the loas username in trawler private to help with debugging. Store the username in trawler private so clients won't see it from FetchReply. To reduce disk usage, we only log the loas username if the requestorid being used does not have ClientUsernameRestrictions.",
          "type": "string"
        },
        "ResponseBytes": {
          "description": "The number of bytes we sent back to the client.",
          "format": "int64",
          "type": "string"
        },
        "RobotsBody": {
          "description": "If this was a robots.txt fetch (IsRobotsFetch above), this may contain the robots.txt body. (It may not, for instance, 404s are omitted; current policy is URL_CRAWLED + partially crawled) This includes http headers + body.",
          "type": "string"
        },
        "RpcEndDeadlineLeftMs": {
          "description": "RPC deadline left at the end of url control flow. Can be useful for debugging rpc deadline exceeded error received by clients, this field is only recorded if it's small enough.",
          "format": "int32",
          "type": "integer"
        },
        "RpcStartDeadlineLeftMs": {
          "description": "RPC deadline left at the start of url control flow. Can be useful for debugging rpc deadline exceeded error received by clients, this field is only recorded if RpcEndDeadlineLeftMs is small enough.",
          "format": "int32",
          "type": "integer"
        },
        "ServerSignature": {
          "description": "An arbitrary string signature identifying the remote server type/version. In the case of HTTP, this would be the contents of the \"Server:\" header.",
          "type": "string"
        },
        "TrawlerInstance": {
          "description": "Which Trawler cell was this response fetched in? (e.g. \"HR\" or \"YQ\")",
          "type": "string"
        },
        "UserAgentSent": {
          "description": "The useragent string sent to the remote webserver. It corresponds to UserAgentToSend field in FetchParams.",
          "type": "string"
        },
        "UserAgentSentFp": {
          "description": "The fp2011 of useragent sent to the remote webserver, note it corresponds to UserAgentToSend field in FetchParams",
          "format": "uint64",
          "type": "string"
        },
        "authenticationInfo": {
          "description": "Stores the OAuth authentication method.",
          "enum": [
            "AUTHORIZATION_UNKNOWN",
            "AUTHORIZATION_REQUEST_HEADER",
            "AUTHORIZATION_POST_BODY",
            "AUTHORIZATION_QUERY_PARAMETER"
          ],
          "enumDescriptions": [
            "",
            "When sending the access token in the \"Authorization\" request header field defined by HTTP/1.1 [RFC2617], the client uses the \"Bearer\" authentication scheme to transmit the access token. GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer mF_9.B5f-4.1JqM",
            "When sending the access token in the HTTP request entity-body, the client adds the access token to the request-body using the \"access_token\" parameter. POST /resource HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded access_token=mF_9.B5f-4.1JqM",
            "Adds the access token to the request URI query component. GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1 Host: server.example.com"
          ],
          "type": "string"
        },
        "bypassedHostOverfull": {
          "description": "Cache hit for this url, bypassed host_overfull error.",
          "type": "boolean"
        },
        "cacheAcceptableAfterDate": {
          "description": "Corresponds to AcceptableAfterDate field in FetchParams.",
          "format": "int32",
          "type": "integer"
        },
        "cacheAcceptableAge": {
          "description": "Corresponds to AcceptableAge field in FetchParams.",
          "format": "int32",
          "type": "integer"
        },
        "cacheHitType": {
          "description": "Only set if the fetch uses cache content (is_cache_fetch is true).",
          "enum": [
            "CACHE_HIT_NONE",
            "FETCHER_IN_MEMORY_HIT",
            "CACHE_PROXY_CACHE_SERVER_HIT",
            "CACHE_PROXY_LARGE_STORE_HIT",
            "CACHE_SERVER_HIT"
          ],
          "enumDescriptions": [
            "There isn't a cache hit.",
            "Cache hit comes from fetcher side",
            "local in-memory cache. Cache hit comes from cache proxy, the",
            "endpoint of cache storage is cacheserver. Cache hit comes from cache proxy, the",
            "endpoint of cache storage is large store (CNS). Cache hit comes from cacheserver"
          ],
          "type": "string"
        },
        "cdnProvider": {
          "enum": [
            "NON_CDN",
            "CLOUDFLARE"
          ],
          "enumDescriptions": [
            "",
            ""
          ],
          "type": "string"
        },
        "concurrentStreamNum": {
          "description": "How many concurrent streams are on the connection when the request finishes (including this request). Export this value to monitor the stream multiplexing for HTTP/2.",
          "format": "int64",
          "type": "string"
        },
        "dependentFetchType": {
          "description": "Dependent fetch type",
          "enum": [
            "DEPENDENT_UNSPECIFIED",
            "DEPENDENT_COMPOSITE_FETCH"
          ],
          "enumDescriptions": [
            "",
            "A flag set by Webmirror to indicate this fetch is associated with a top-level fetch (aka. composite fetch). Unified reporting may choose to ignore a fetch if this flag was set. Notice this is a short-term solution. Composite fetch is a client feature, we should eventually use the logs generated by Webmirror as the source of truth. See go/da-reporting-data-generation for more details."
          ],
          "type": "string"
        },
        "downloadFileName": {
          "description": "If the response header contains Content-Disposition header \"attachment; filename=\"google.zip\": the download_file_name would be \"google.zip\"",
          "type": "string"
        },
        "httpVersion": {
          "description": "Stores the HTTP version we used in the last hop.",
          "enum": [
            "HTTP_11",
            "HTTP_10",
            "HTTP_09",
            "HTTP_2",
            "HTTP_AUTO",
            "FIRST_VERSION",
            "NUM_VERSIONS"
          ],
          "enumDescriptions": [
            "",
            "",
            "??? do we want this ???",
            "EXPERIMENTAL, DO NOT USE unless you have talked to",
            "trawler-dev@. Allow fetcher to automatically select HTTP protocol",
            "version. The selection is based on prior knowledge and dynamic server response. Basically, if the client and the host is configured to allow HTTP/2 traffic, we will select HTTP/2 and send HTTP/2 traffic; and we will fallback to HTTP/1 if we found the server does not support HTTP/2 through ALPN. HTTP Version selection will be applied to each redirect hop. More details about HTTP/2 traffic configuration can be found in: googledata/googlebot/http2_traffic_control_file. We list this after HTTP_* values to make sure",
            "HTTPVersion_Name(0) returns the correct string."
          ],
          "type": "string"
        },
        "isBidiStreamingFetch": {
          "description": "Whether this is a bidirectional streaming fetch.",
          "type": "boolean"
        },
        "isFloonetFetch": {
          "description": "Whether or not this is a Floonet fetch request. Floonet requests have inherent lower availability (due to HOPE rejections when HOPE is in degraded mode, and other Floonet specific reasons). Therefore, it is important for debugging and for our availability SLO to know whether of not it is a floonet fetch. IMPORTANT NOTE: This field is only currently set for traffic that explicitly requires Floonet and can not failover to use Googlebot (i.e. \"transparent\" or \"implicit\" Floonet fetches).",
          "type": "boolean"
        },
        "isFromGrpcProxy": {
          "description": "Whether or not this response is sent from gRPC proxy service.",
          "type": "boolean"
        },
        "isVpcTraffic": {
          "description": "Set if the fetch goes through the virtual private cloud path so we can track the VPC traffic.",
          "type": "boolean"
        },
        "largeStoreHitLocation": {
          "description": "Set to the hit location (CNS filename) if cache comes from large store.",
          "type": "string"
        },
        "multiverseClientIdentifier": {
          "$ref": "TrawlerMultiverseClientIdentifier",
          "description": "Multiverse client information"
        },
        "numDroppedReplies": {
          "description": "Number of times we drop the content of a stream reply or the final reply, which can only be caused by REJECTED_NO_RPC_BUFFERS now.",
          "format": "int64",
          "type": "string"
        },
        "originalClientParams": {
          "$ref": "TrawlerOriginalClientParams",
          "description": "Store the original client information."
        },
        "resourceBucket": {
          "description": "If the requestor shares resource bucket with other requestorids, we will store the resource bucket name in these fields.",
          "type": "string"
        },
        "subResourceBucket": {
          "type": "string"
        },
        "tier": {
          "description": "Service tier info will be used in traffic grapher for ploting per tier graph.",
          "enum": [
            "SERVICE_TIER_UNKNOWN",
            "SERVICE_TIER_TRAWLER",
            "SERVICE_TIER_HARPOON",
            "SERVICE_TIER_PARTNER"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "vpcDestination": {
          "$ref": "TrawlerLoggedVPCDestination",
          "description": "The following are vpc information that's only set if is_vpc_traffic is true."
        }
      },
      "type": "object"
    },
    "UniversalsearchNewPackerKnowledgeResultSupport": {
      "description": "Information about the result support for a given interpretation.",
      "id": "UniversalsearchNewPackerKnowledgeResultSupport",
      "properties": {
        "debug": {
          "description": "A debug message that summarizes how the score was computed. Populated if result was matched and in debug mode.",
          "type": "string"
        },
        "docid": {
          "description": "The docid of the result, if available.",
          "format": "uint64",
          "type": "string"
        },
        "estimatedNaviness": {
          "description": "The naviness for this result. Each matcher can determine the naviness to use for the result. This can be copied directly from the result, or estimated based on clicks or some other heuristic. The value should be between 0 and 1 and should indicate the probability that the user will click on that result. The estimated_naviness is used to break ties when between results with the same rank.",
          "format": "float",
          "type": "number"
        },
        "provenance": {
          "description": "All provenances of this result support.",
          "items": {
            "$ref": "UniversalsearchNewPackerKnowledgeResultSupportProvenance"
          },
          "type": "array"
        },
        "rank": {
          "description": "The 0 based rank for this result. When the source is MAIN_GSR this corresponds to the index of the result in the generic search response specific in AddKnowledgePackerPreprocessors. Otherwise, the rank should be estimated so the result is closest in importance to the web result at the same rank.",
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "description": "A score from 0 to 1 inclusive that represents the strength of the result support. A score of one indicates this result is entirely about this interpretation.",
          "format": "float",
          "type": "number"
        },
        "source": {
          "description": "The source of the result support.",
          "enum": [
            "MAIN_GSR",
            "LIVE_RESULT",
            "NEWS",
            "CLIR_GSR",
            "CONTEXTBOOST_RESULT",
            "SUPPORT_FROM_KSCORER",
            "PERSONALIZED_RESULT"
          ],
          "enumDescriptions": [
            "MAIN_GSR is the generic search response specified in AddKnowledgePackerPreprocessors. This will normally be universal::kResponseWeb but can also be universal::kResponseQuimbyTextWeb or potentially another response depending on the search mode.",
            "",
            "",
            "",
            "The following source is used by ContextBoostVoteAwareVoter to provide support for the selected interpretation. Note that this should not be used for any other purpose like navboost signals smearing.",
            "This is added for temporary legacy compatibility until all interpretations that use voting have migrated to KScorer. A KScorer-eligible interpretation may not receive any direct support from a particular result, but will require a ResultSupport rank in order to participate in legacy voting.",
            "The following source is used by the PersonalizationTwiddler"
          ],
          "type": "string"
        },
        "url": {
          "description": "The result url when available.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "UniversalsearchNewPackerKnowledgeResultSupportProvenance": {
      "description": "Information about provenance of a result support.",
      "id": "UniversalsearchNewPackerKnowledgeResultSupportProvenance",
      "properties": {
        "entityGroupType": {
          "description": "Entity group type of the supported entity. This field should only be set for support on entities.",
          "enum": [
            "QUESTION",
            "ANSWER",
            "INTENT"
          ],
          "enumDescriptions": [
            "The entity group corresponds to a question entity.",
            "The entity group corresponds to an answer entity.",
            "The entity group corresponds to an intent entity."
          ],
          "type": "string"
        },
        "fromAnswer": {
          "description": "===== Deprecated Fields ===== The bool flag indicating whether the ResultSupport comes from answer entities.",
          "type": "boolean"
        },
        "name": {
          "description": "The provenance provider name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "UrlPoisoningData": {
      "description": "Url poisoning information. This information is sparse: if num_spam_siblings is not populated, none of the following fields will be populated. Next tag: 6",
      "id": "UrlPoisoningData",
      "properties": {
        "NotChangedTimeMs": {
          "description": "fetched from the web. Time when the page was last",
          "format": "int64",
          "type": "string"
        },
        "OriginalCrawlTimeMs": {
          "description": "Time when the page was",
          "format": "int64",
          "type": "string"
        },
        "ReuseTimeMs": {
          "description": "checked but found to be the same as before. If set, timestamp to indicate",
          "format": "int64",
          "type": "string"
        },
        "numSpamSiblings": {
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "description": "when it is fetched from the repository. URL of the document for debugging",
          "type": "string"
        }
      },
      "type": "object"
    },
    "UtilStatusProto": {
      "description": "Wire-format for a Status object",
      "id": "UtilStatusProto",
      "properties": {
        "canonicalCode": {
          "description": "The canonical error code (see codes.proto) that most closely corresponds to this status. May be missing.",
          "format": "int32",
          "type": "integer"
        },
        "code": {
          "description": "Numeric code drawn from the space specified below. Often, this is the canonical error space, and code is drawn from google3/util/task/codes.proto",
          "format": "int32",
          "type": "integer"
        },
        "message": {
          "description": "Detail message",
          "type": "string"
        },
        "messageSet": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "message_set associates an arbitrary proto message with the status."
        },
        "space": {
          "description": "The following are usually only present when code != 0 Space to which this status belongs",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VendingConsumerProtoTrustedGenomeAnnotation": {
      "description": "------------------------------------------------------------------------------ Proto message containing the trusted genome entities that belong to an app. Document type: ANDROID_APP See go/gd-server-design for more info. ## Next tag: 4",
      "id": "VendingConsumerProtoTrustedGenomeAnnotation",
      "properties": {
        "policy": {
          "$ref": "VendingConsumerProtoTrustedGenomePolicy",
          "description": "The list of trusted genome policy."
        },
        "testCode": {
          "description": "The list of test code, used to log when serving. The test code is set in both control and experiment annotations when they are different.",
          "items": {
            "enum": [
              "UNKNOWN",
              "RESERVED",
              "RESERVED_2",
              "RESERVED_3",
              "CRSCORE_EQ_0",
              "CRSCORE_GT_0",
              "STORIES_IN_MOVIES_HOME",
              "RELATED_X_DC_CLUSTERS_IN_MOVIE_DETAILS_PAGES",
              "TC_IN_PSS_CHECK_A",
              "TC_IN_PSS_CHECK_B",
              "QUERY_IS_BOOTS_ELIGIBLE",
              "QUERY_HAS_SELECTED_BOOTS_CHIP",
              "QUERY_HAS_ONLY_UNSELECTED_BOOTS_CHIPS",
              "SPONSORED_ADS_CLUSTER",
              "IRON_THRONE_QUERY",
              "GUIDED_DISCOVERY",
              "BOOKS_AUTHOR_QUERY",
              "BOOTS_PROD_V1_QUERY",
              "SHOULD_SEE_LIVE_OP_CLUSTER_CANDIDATES",
              "ENTERTAINMENT_CLUSTER_TRIGGERING",
              "BOOTS_EN_IN",
              "BOOTS_EN_GB",
              "BOOTS_EN_PH",
              "BOOTS_EN_CA",
              "ENTERTAINMENT_CLUSTER_CONTAINER_SEARCH_ENABLED",
              "SEARCH_NAV_SPONSORED_ADS_CLUSTER",
              "TOP_CHART_RANKING_INFO",
              "APPS_PUB_QUERY",
              "ABUSIVE_QUERY_SQUASHING_EVENT",
              "APP_SUPPORTS_INSTANT_LAUNCH",
              "LOW_RESULT_CLUSTER",
              "PERSONALIZED_CLUSTER",
              "GAME_SEEKING_PERSONALIZED_CLUSTER_AT_EVENT_LEVEL",
              "VX_CLUSTER",
              "MOVIES_GROOT_20",
              "MOVIES_GROOT_10",
              "MOVIES_GROOT_5",
              "MOVIES_GROOT_3",
              "MOVIES_GROOT_1",
              "MOVIES_DORA_SEARCH",
              "MOVIES_MDP_SEARCH",
              "MOVIES_ORGANIC_SEARCH",
              "FULL_PAGE_REPLACEMENT",
              "AUDIOBOOKS_KIDS_CATEGORICAL_SEARCH",
              "ZERO_RESULT",
              "BOOTS_I18N_100_THRESH",
              "DISPLAY_ADS_RESPONSE_RECEIVED_EVENT_LEVEL",
              "BEST_SELLER_CART_TAG_FOR_MENDEL_AT_EVENT_LEVEL",
              "ABUSIVE_QUERY",
              "HOME_SPONSORED_ADS_CLUSTER_NO_ADS",
              "BOOKS_XSELL_ELIGIBLE_APP",
              "NAV_EXT_EVENT",
              "ADS_CUSTOM_DETAILS_PAGE_ASSETS_SERVED_EVENT_LEVEL",
              "BOOKS_DETAILS_PAGE_SIMILAR_CLUSTER",
              "BOOKS_DETAILS_PAGE_POST_ACQUIRE_SIMILAR_CLUSTER",
              "APPS_PERSONALIZED_TOPIC_QUERY_EVENT_LEVEL",
              "APPS_PERSONALIZED_TG_QUERY_EVENT_LEVEL",
              "APPS_PERSONALIZED_ALL_GAME_QUERIES_EVENT_LEVEL",
              "APPS_PERSONALIZED_CATEGORICAL_GAME_SEEKING_QUERIES_EVENT_LEVEL",
              "APPS_PERSONALIZED_CATEGORICAL_NON_TG_QUERIES_EVENT_LEVEL",
              "BOOKS_ELIGIBLE_FOR_BUNDLE_EVENT_LEVEL",
              "GAMES_PROFILE_CREATION_EVENT",
              "MOVIES_QUERY_ELIGIBLE_FOR_APPS_CLUSTER",
              "MOVIES_WALLE_SEARCH",
              "TRUSTED_ENTITY_SEARCH_QUERY_EVENT",
              "BUNDLE_FBT_DISCOUNT",
              "BUNDLE_SERIES_DISCOUNT",
              "APPS_SEARCH_TOPIC_RFY_CLUSTER_AT_EVENT_LEVEL",
              "APPS_SEARCH_MINI_TOP_CHARTS_CLUSTER_AT_EVENT_LEVEL",
              "APPS_SEARCH_TOPIC_RFY_CLUSTER_COUNTERFACTUAL",
              "APPS_SEARCH_MINI_TOP_CHARTS_CLUSTER_COUNTERFACTUAL",
              "GEARHEAD_TOOLTIP_ASSISTANT_FIRST_RUN",
              "GEARHEAD_TOOLTIP_ASSISTANT_NTH_RUN",
              "GEARHEAD_TOOLTIP_ASSISTANT_NTH_RUN_BUTTON",
              "GEARHEAD_TOOLTIP_LAUNCHER_FIRST_RUN",
              "GEARHEAD_TOOLTIP_LAUNCHER_NTH_RUN",
              "GEARHEAD_TOOLTIP_NOTIFICATION_FIRST_RUN",
              "GEARHEAD_TOOLTIP_NOTIFICATION_NEW",
              "GEARHEAD_TOOLTIP_NOTIFICATION_NTH_NEW",
              "KIDS_AGE_SCORE_BONUS_AT_EVENT_LEVEL",
              "KIDS_QUALITY_TAG_SCORE_BONUS_AT_EVENT_LEVEL",
              "LB_TARGETED_AT_EVENT_LEVEL",
              "LB_IMPRESSED_AT_EVENT_LEVEL",
              "GEARHEAD_INPUT_TOUCH_PRESENT",
              "GEARHEAD_INPUT_ROTARY_PRESENT",
              "GEARHEAD_INPUT_TOUCHPAD_PRESENT",
              "GEARHEAD_INPUT_TOUCH_ABSENT",
              "GEARHEAD_INPUT_ROTARY_ABSENT",
              "GEARHEAD_INPUT_TOUCHPAD_ABSENT",
              "CANCEL_SUBSCRIPTION_CONFIRMATION_DIALOG_SHOWN_WHEN_ELIGIBLE_FOR_ENTITLEMENT_BENEFITS_EVENT_LEVEL_AT_EVENT_LEVEL",
              "SMART_FOP_AT_EVENT_LEVEL",
              "VX_CLUSTER_IN_APPS_SERP_IMPRESSION",
              "KIDS_CONTENT_SEEKING_QUERY",
              "KIDS_CONTENT_SEEKING_QUERY_TREATMENT_APPLIED",
              "PREFERRED_FOP",
              "REDEEM_NOT_ENROLLED_TO_LOYALTY",
              "GEARHEAD_TOOLTIP_SETTINGS",
              "SEARCH_MDP_TRIGGERED_EVENT_LEVEL",
              "DEVELOPER_PAGE_AT_EVENT_LEVEL",
              "BOOKS_FREE_FIXED_DURATION_RENTAL_EVENT_LEVEL",
              "BOOKS_FREE_FIXED_DATE_RENTAL_EVENT_LEVEL",
              "BOOKS_PRICE_DROP_EVENT_LEVEL",
              "TG_VALIDATED_CRISPR_TAG_AT_EVENT_LEVEL",
              "GEARHEAD_TOOLTIP_ASSISTANT_DIALER_FIRST_OPEN",
              "GEARHEAD_TOOLTIP_ASSISTANT_MEDIA_OPEN",
              "GEARHEAD_WIDESCREEN_DISPLAY",
              "GEARHEAD_TOOLTIP_ASSISTANT_PHONE_CALL_ENDED",
              "SERIES_BUNDLE_MULTI_TIER_DISCOUNT_EVENT_LEVEL",
              "GEARHEAD_TOOLTIP_FEEDBACK",
              "GEARHEAD_TOOLTIP_ASSISTANT_MEDIA_REC_FIRST_RUN",
              "GEARHEAD_WORK_PROFILE_DETECTED",
              "GEARHEAD_WORK_PROFILE_DETECTED_AND_COMPATIBLE",
              "GEARHEAD_WORK_PROFILE_QUERYING_ALLOWED",
              "PLAY_ADS_REENGAGEMENT_COUNTERFACTUAL",
              "GEARHEAD_TOOLTIP_ASSISTANT_LAUNCHER_OPEN",
              "GEARHEAD_MULTIPLE_CALLABLE_PHONE_ACCOUNTS_DETECTED",
              "GEARHEAD_USER_HAS_SELECTED_OUTGOING_PHONE_ACCOUNT",
              "GEARHEAD_TOOLTIP_ASSISTANT_LONG_DRIVE_START",
              "GEARHEAD_TOOLTIP_DIALER_MULTI_SIM",
              "GEARHEAD_AUDIO_SERVICE_MIGRATION",
              "GEARHEAD_TOOLTIP_ASSISTANT_MEDIA_REC_MEDIA_IDLE",
              "GEARHEAD_DO_NOT_DISTURB_CALLS_ENABLED",
              "REGIONAL_NAV_EXT_EVENT_LEVEL",
              "GEARHEAD_TOOLTIP_BUGREPORT",
              "GENERAL_QUERY_PAGINATION_EVENT_LEVEL",
              "GEARHEAD_SESSION_ELIGIBLE_FOR_MEDIA_AUTOPLAY",
              "GEARHEAD_AUDIO_FLOW_CONTROL_PERMIT_UNAVAILABLE",
              "SHOULD_SEE_SEARCH_MEDIA_RESULT_CLUSTER",
              "FRESH_RESULTS_SEEKING_SEARCH_QUERY_EVENT_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_1_EVENT_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_2_EVENT_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_3_EVENT_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_4_EVENT_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_5_EVENT_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_6_EVENT_LEVEL",
              "TRUSTED_GENOME_RELATED_QUERY_CLUSTER_EVENT",
              "NAV_TG_RELATED_QUERY_EVENT",
              "PROMOTABLE_APPS_EVENT",
              "PROMOTABLE_APPS_STRONG_CAT_EVENT",
              "INLINE_DETAILS_TQUALITY_CHECK_PASS",
              "INLINE_DETAILS_TQUALITY_CHECK_FAIL",
              "INLINE_DETAILS_IS_INLINE_URL",
              "EDITORS_CHOICE_CLUSTER_SERP_EVENT_LEVEL",
              "BESTK_CLUSTER_SERP_EVENT_LEVEL",
              "LIVEOPS_CLUSTER_SERP_EVENT_LEVEL",
              "QUICKPICKS_CLUSTER_SERP_EVENT_LEVEL",
              "INLINE_DETAILS_AQUALITY_CHECK_PASS",
              "INLINE_DETAILS_AQUALITY_CHECK_FAIL",
              "FRESH_RESULTS_SEEKING_CURRENT_YEAR_EVENT_LEVEL",
              "FILTER_TQ_FAILURE_APP",
              "EDITORIAL_CONTENT_CLUSTER_FHR_SERP_EVENT_LEVEL",
              "PGSS_DETAILS_PAGE_TQUALITY_UNKNOWN_EVENT_LEVEL",
              "PGSS_DETAILS_PAGE_TQUALITY_FAILED_EVENT_LEVEL",
              "PGSS_DETAILS_PAGE_TQUALITY_PASSED_EVENT_LEVEL",
              "PGSS_DETAILS_PAGE_AQUALITY_UNKNOWN_EVENT_LEVEL",
              "PGSS_DETAILS_PAGE_AQUALITY_FAILED_EVENT_LEVEL",
              "PGSS_DETAILS_PAGE_AQUALITY_PASSED_EVENT_LEVEL",
              "PRE_INSTALL_LOW_QUALITY_DETAILS_PAGE_SIMILAR_APPS_ABSENT_EVENT_LEVEL",
              "PRE_INSTALL_LOW_QUALITY_DETAILS_PAGE_SIMILAR_APPS_PRESENT_EVENT_LEVEL",
              "INLINE_DETAILS_CALLER_AQUALITY_CHECK_PASS",
              "INLINE_DETAILS_CALLER_AQUALITY_CHECK_FAIL",
              "HSDP_AD_NETWORK_CALLER_TABLET_AQUALITY_CHECK_PASS",
              "HSDP_AD_NETWORK_CALLER_TABLET_AQUALITY_CHECK_FAIL",
              "HSDP_INDEPENDENT_APP_TABLET_AQUALITY_CHECK_UNKNOWN",
              "HSDP_INDEPENDENT_APP_TABLET_AQUALITY_CHECK_PASS",
              "HSDP_INDEPENDENT_APP_TABLET_AQUALITY_CHECK_FAIL",
              "PTP_CLUSTER_SERP_P13N_RANKING_EVENT_LEVEL",
              "BROAD_INTENT_REWEIGHTING_EVENT_LEVEL",
              "QUERY_DEPENDENT_SNIPPET_EVENT_LEVEL",
              "EXPANDED_DEV_SUCCESS_CLUSTER_EVENT_LEVEL",
              "COLLAPSED_DEV_SUCCESS_CLUSTER_EVENT_LEVEL",
              "TRIGGERED_DEV_SUCCESS_CLUSTER_EVENT_LEVEL",
              "BROAD_INTENT_GAMES_TIMESPENT_EVENT_LEVEL",
              "GEARHEAD_ATTEMPT_USB_RECOVERY",
              "MDP_P13N_ALL_EVENT_LEVEL",
              "MDP_P13N_GAME_QUERY_L5_EVENT_LEVEL",
              "MDP_P13N_GAME_QUERY_L6_EVENT_LEVEL",
              "MDP_P13N_GAME_QUERY_L7_EVENT_LEVEL",
              "MDP_P13N_GAME_QUERY_L8_EVENT_LEVEL",
              "MDP_P13N_GAME_QUERY_L9_EVENT_LEVEL",
              "MDP_P13N_RERANKING_UNKNOWN_EVENT_LEVEL",
              "MDP_P13N_RERANKING_CATEGORICAL_EVENT_LEVEL",
              "MDP_P13N_RERANKING_NAVIGATIONAL_EVENT_LEVEL",
              "MDP_P13N_RERANKING_MULTI_NAVIGATIONAL_EVENT_LEVEL",
              "MDP_P13N_RERANKING_NAVIGATIONAL_EXT_EVENT_LEVEL",
              "SECOND_PASS_POLARIS_RERANKING_EVENT_LEVEL",
              "SECOND_PASS_POLARIS_WITH_RANKING_CHANGE_EVENT_LEVEL",
              "GEARHEAD_TOOLTIP_COOLWALK_DASHBOARD_UNAVAILABLE",
              "SECOND_PASS_BROAD_INTENT_QUERY_EVENT_LEVEL",
              "SECOND_PASS_REWEIGHTING_TRIGGERED_EVENT_LEVEL",
              "GEARHEAD_TOOLTIP_COOLWALK_RAIL_WIDGET",
              "INLINE_DETAILS_TQUALITY_CHECK_UNKNOWN",
              "SUPERROOT_PDS_SHORT_DESCRIPTION_EVENT_LEVEL",
              "PGSS_SHORT_DESCRIPTION_DIFF_EVENT_LEVEL",
              "SECOND_PASS_QUALITY_REWEIGTHING_EVENT_LEVEL",
              "SECOND_PASS_QUALITY_REWEIGTHING_MDP_EVENT_LEVEL",
              "EVENT_LEVEL_TEST_CODE_LIMIT",
              "ENTERTAINMENT_CLUSTER_TRIGGERING_AT_SESSION_LEVEL",
              "BEST_SELLER_CART_TAG_AT_SESSION_LEVEL",
              "SHOULD_SEE_BOOKS_WISHLIST_CLUSTER",
              "PRIMETIME_CONTENT_IN_DETAILS_PAGES",
              "SEARCH_NON_NAV_SPONSORED_ADS_CLUSTER",
              "BOOTS_NO_DIFF_AT_SESSION_LEVEL",
              "ABUSIVE_QUERY_SQUASHING_AT_SESSION_LEVEL",
              "CART_ABANDONMENT_TEST_CODE",
              "APP_SUPPORTS_INSTANT_LAUNCH_AT_SESSION_LEVEL",
              "LOW_RESULT_CLUSTER_AT_SESSION_LEVEL",
              "PERSONALIZED_CLUSTER_AT_SESSION_LEVEL",
              "GAME_SEEKING_PERSONALIZED_CLUSTER_AT_SESSION_LEVEL",
              "VX_CLUSTER_AT_SESSION_LEVEL",
              "MOVIES_GROOT_20_AT_SESSION_LEVEL",
              "MOVIES_GROOT_10_AT_SESSION_LEVEL",
              "MOVIES_GROOT_5_AT_SESSION_LEVEL",
              "MOVIES_GROOT_3_AT_SESSION_LEVEL",
              "MOVIES_GROOT_1_AT_SESSION_LEVEL",
              "GEARHEAD_MESSAGING_AUTO_REPLY_CANDIDATE",
              "MOVIES_DORA_SEARCH_AT_SESSION_LEVEL",
              "MOVIES_MDP_SEARCH_AT_SESSION_LEVEL",
              "MOVIES_ORGANIC_SEARCH_AT_SESSION_LEVEL",
              "BUY_NOW_BUTTON",
              "AUDIOBOOKS_KIDS_CATEGORICAL_SEARCH_AT_SESSION_LEVEL",
              "ZERO_RESULT_AT_SESSION_LEVEL",
              "ABUSIVE_QUERY_AT_SESSION_LEVEL",
              "HOME_SPONSORED_ADS_CLUSTER_NO_ADS_AT_SESSION_LEVEL",
              "BOOKS_XSELL_ELIGIBLE_APP_AT_SESSION_LEVEL",
              "PURCHASABLE_SUBSCRIPTIONS_IN_DETAILS_PAGE_SESSION_LEVEL",
              "NAV_EXT_SESSION",
              "FAST_REINSTALL_TEST_CODE",
              "APPS_DETAILS_PAGE_PROMOTION_SESSION_LEVEL",
              "BOOKS_DETAILS_PAGE_PROMOTION_SESSION_LEVEL",
              "DETAILS_PAGE_PROMOTION_SESSION_LEVEL",
              "SHOULD_SEE_LIVE_OPS_V2_CLUSTER",
              "BOOKS_DETAILS_PAGE_SIMILAR_CLUSTER_AT_SESSION_LEVEL",
              "BOOKS_DETAILS_PAGE_POST_ACQUIRE_SIMILAR_CLUSTER_AT_SESSION_LEVEL",
              "FLOATING_HIGHLIGHTS_ROW_TRIGGERING_AT_SESSION_LEVEL",
              "APPS_DETAILS_PAGE_EXISTING_PROMOTION_SESSION_LEVEL",
              "BOOKS_DETAILS_PAGE_EXISTING_PROMOTION_SESSION_LEVEL",
              "BOOKS_ELIGIBLE_FOR_BUNDLE",
              "FALLBACK_FOP_OPTIONS_RECOMMENDED",
              "SHOULD_SEE_PREREG_LIVE_OPS_EH",
              "SHOULD_SEE_PREREG_LIVE_OPS_DP",
              "HERO_CARD_CLUSTER_AT_SESSION_LEVEL",
              "FALLBACK_FOP_OPTIONS_AVAILABLE",
              "SWOOP_10P_OFF_SESSION_LEVEL",
              "SWOOP_25P_OFF_SESSION_LEVEL",
              "SWOOP_50P_OFF_SESSION_LEVEL",
              "SWOOP_75P_OFF_SESSION_LEVEL",
              "CANCEL_SUBSCRIPTION_CONFIRMATION_DIALOG_SHOWN_WHEN_ELIGIBLE_FOR_ENTITLEMENT_BENEFITS",
              "PREREGISTRATION_AT_SESSION_LEVEL",
              "GAMES_PROFILE_CREATION",
              "IN_APP_SALE_IN_CART",
              "MOVIES_MAX_NUMBER_MEESEEKS_CLUSTERS_SHOWN",
              "MOVIES_MAX_NUMBER_BYW_CLUSTERS_SHOWN",
              "RANDOM_FOP_OPTIONS_RECOMMENDED",
              "MOVIES_QUERY_ELIGIBLE_FOR_APPS_CLUSTER_AT_SESSION_LEVEL",
              "INSTANT_BANNER_ELIGIBLE",
              "SUGGEST_NAV_SUGGEST_TRIGGERED",
              "TRUSTED_ENTITY_SEARCH_QUERY",
              "BURNSIE_ADD_FOP_PROMOTION_SESSION_LEVEL",
              "MOVIES_WALLE_SEARCH_AT_SESSION_LEVEL",
              "BUNDLE_FBT_DISCOUNT_AT_SESSION_LEVEL",
              "BUNDLE_SERIES_DISCOUNT_AT_SESSION_LEVEL",
              "MOVIES_REPEATED_BUYER",
              "SUBSCRIPTION_CANCELLATION_PROMOTION_SESSION_LEVEL",
              "SUBSCRIPTION_RETRY_FOP_FOR_DCB_AS_PRIMARY_SESSION_LEVEL",
              "SUBSCRIPTION_DCB_AS_ADD_FOP_OPTION_SESSION_LEVEL",
              "APPS_SEARCH_TOPIC_RFY_CLUSTER_AT_SESSION_LEVEL",
              "APPS_SEARCH_MINI_TOP_CHARTS_CLUSTER_AT_SESSION_LEVEL",
              "APPS_PERSONALIZED_TOPIC_QUERY_SESSION_LEVEL",
              "APPS_PERSONALIZED_TG_QUERY_SESSION_LEVEL",
              "APPS_PERSONALIZED_ALL_GAME_QUERIES_SESSION_LEVEL",
              "APPS_PERSONALIZED_CATEGORICAL_GAME_SEEKING_QUERIES_SESSION_LEVEL",
              "APPS_PERSONALIZED_CATEGORICAL_NON_TG_QUERIES_SESSION_LEVEL",
              "PLAY_STORE_SHOW_CART",
              "MOVIES_RENTER",
              "APPS_SEARCH_TOPIC_RFY_CLUSTER_COUNTERFACTUAL_AT_SESSION_LEVEL",
              "APPS_SEARCH_MINI_TOP_CHARTS_CLUSTER_COUNTERFACTUAL_AT_SESSION_LEVEL",
              "FREE_TRIAL_SUBSCRIPTION_CANCELATION_APP_INSTALLED",
              "FREE_TRIAL_SUBSCRIPTION_CANCELATION_APP_NOT_INSTALLED",
              "NON_FREE_TRIAL_SUBSCRIPTION_CANCELATION_APP_INSTALLED",
              "NON_FREE_TRIAL_SUBSCRIPTION_CANCELATION_APP_NOT_INSTALLED",
              "CLIENT_NOTIFICATION_APP_UNINSTALLED_WITH_SUBSCRIPTION",
              "PURCHASABLE_SUBSCRIPTIONS_IN_DETAILS_PAGE_APP_1_AT_SESSION_LEVEL",
              "PURCHASABLE_SUBSCRIPTIONS_IN_DETAILS_PAGE_APP_3_AT_SESSION_LEVEL",
              "KIDS_AGE_SCORE_BONUS",
              "UPDATE_SUBSCRIPTION_INSTRUMENT_PAYMENT_DECLINED_FOP_IMPRESSION",
              "UPDATE_SUBSCRIPTION_INSTRUMENT_PAYMENT_DECLINED_FOP_MESSAGE_IMPRESSION",
              "KIDS_QUALITY_TAG_SCORE_BONUS_AT_SESSION_LEVEL",
              "SHOULD_SEE_REVIEW_MORE_LINK",
              "INCENTIVIZED_OPTIN_INTERSTITIAL_AT_SESSION_LEVEL",
              "PREMIUM_GAME_HOME",
              "LB_TARGETED_AT_SESSION_LEVEL",
              "PCD_APP_DETAILS",
              "MIXED_AUDIENCE_APP_DETAILS",
              "LB_IMPRESSED_AT_SESSION_LEVEL",
              "HERO_CARD_CLUSTER_INSTANT_ELIGIBLE",
              "LOYALTY_SHOULD_NOT_SEE_FREE_TRIAL_SUBSCRIPTION_POINTS_EARN_MESSAGE",
              "MOVIES_USER_INTERESTS_NONE_AT_SESSION_LEVEL",
              "MOVIES_USER_INTERESTS_LOW_AT_SESSION_LEVEL",
              "MOVIES_USER_INTERESTS_MEDIUM_AT_SESSION_LEVEL",
              "MOVIES_USER_INTERESTS_HIGH_AT_SESSION_LEVEL",
              "MOVIES_BOY_SEEDS_NONE_AT_SESSION_LEVEL",
              "MOVIES_BOY_SEEDS_LOW_AT_SESSION_LEVEL",
              "MOVIES_BOY_SEEDS_MEDIUM_AT_SESSION_LEVEL",
              "MOVIES_BOY_SEEDS_HIGH_AT_SESSION_LEVEL",
              "RENEWAL_REMINDER_SET_IN_CANCEL_FLOW",
              "RENEWAL_REMINDER_CAN_BE_SET_IN_CANCEL_FLOW",
              "PLAY_PASS_SIGNUP_INTERSTITIAL_ELIGIBLE_SESSION_LEVEL",
              "PLAY_PASS_SIGNUP_INTERSTITIAL_TARGETED_SESSION_LEVEL",
              "PLAY_PASS_IPD_ELIGIBLE_SESSION_LEVEL",
              "PLAY_PASS_FHR_ELIGIBLE_SESSION_LEVEL",
              "DOUBLE_WIDE_SCREENSHOT_CLUSTER_TRIGGERING_AT_SESSION_LEVEL",
              "TRIPLE_WIDE_VIDEO_CLUSTER_TRIGGERING_AT_SESSION_LEVEL",
              "WIDE_MEDIA_CLUSTER_TRIGGERING_AT_SESSION_LEVEL",
              "SMART_FOP_AT_SESSION_LEVEL",
              "BILLING_PROFILE_DCB_ELIGIBLE",
              "LOYALTY_UPSELL_AFTER_IN_APP_PURCHASE_AT_SESSION_LEVEL",
              "SHOULD_SEE_APPS_COMPARISON_CLUSTER",
              "RESIGNUP_FROM_SUBS_CENTER",
              "VX_CLUSTER_IN_APPS_SERP_IMPRESSION_SESSIONS",
              "PARTNER_REWARD_ON_LOYALTY_SIGNUP_PAGE",
              "UGC_CLUSTER_AT_SESSION_LEVEL",
              "REGIONAL_TRENDING_CLUSTER",
              "USABLE_ANON_ML_FOP_OPTIONS_FOUND",
              "ANON_ML_FOP_OPTIONS_RECOMMENDED",
              "BUY_BUTTON_CLICK",
              "TV_BUTTON_CLICK",
              "LOYALTY_SEES_POINTS_EARN_PROMOTIONS_AT_SESSION_LEVEL",
              "KIDS_CONTENT_SEEKING_QUERY_SESSION",
              "KIDS_CONTENT_SEEKING_QUERY_TREATMENT_APPLIED_SESSION",
              "UGC_CLUSTER_NON_FIRST_PAGE_AT_SESSION_LEVEL",
              "UGC_CLUSTER_ELIGIBLE_AT_SESSION_LEVEL",
              "LOYALTY_SEES_FREE_TRIAL_SUBSCRIPTION_AT_SESSION_LEVEL",
              "APPS_SEARCH_FILTERS_TRIGGERED",
              "APPS_SEARCH_FILTERS_ACTIVATED",
              "PLAY_SUBMANAGEMENT_LOG_HOOK_SESSION_EXAMPLE",
              "LOYALTY_SIGNUP_INTERSTITIAL_AT_SESSION_LEVEL",
              "BOOTS_CHIPS_NOT_TRIGGERED_COUNTERFACTUAL",
              "BOOTS_CHIPS_TRIGGERED_COUNTERFACTUAL",
              "APPS_SEARCH_FILTERS_NOT_TRIGGERED",
              "PREFERRED_FOP_AT_SESSION_LEVEL",
              "REDEEM_NOT_ENROLLED_TO_LOYALTY_AT_SESSION_LEVEL",
              "VIDEO_CLUSTER_EXPANDED",
              "LOYALTY_UPSELL_SEEN_AT_SESSION_LEVEL",
              "TRIPLE_WIDE_SCREENSHOT_CLUSTER_TRIGGERING_AT_SESSION_LEVEL",
              "LOYALTY_LIVE_OPS_RETURNED_AT_SESSION_LEVEL",
              "SEARCH_MDP_TRIGGERED_SESSION_LEVEL",
              "PROMOLINK_CDP_SESSION_LEVEL",
              "PROMOLINK_CDP_TITLE_PAGE_SESSION_LEVEL",
              "PROMOLINK_CDP_TOPIC_PAGE_SESSION_LEVEL",
              "PROMOLINK_CDP_GENERIC_PAGE_SESSION_LEVEL",
              "WMC_INSTANT_PREVIEW_CLUSTER_AT_SESSION_LEVEL",
              "POINTS_PROMOTION_CONTENT_PAGE_AT_SESSION_LEVEL",
              "SEARCH_SYN_APPS_SESSION_LEVEL",
              "IN_APP_OFFER_AT_SESSION_LEVEL",
              "IN_APP_OFFER_APP_1_AT_SESSION_LEVEL",
              "IN_APP_OFFER_APP_2_AT_SESSION_LEVEL",
              "IN_APP_OFFER_APP_3_AT_SESSION_LEVEL",
              "IN_APP_OFFER_APP_4_AT_SESSION_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_AT_SESSION_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_1_AT_SESSION_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_2_AT_SESSION_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_3_AT_SESSION_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_4_AT_SESSION_LEVEL",
              "IN_APP_OFFER_SAVED_AT_SESSION_LEVEL",
              "IN_APP_OFFER_SAVED_APP_1_AT_SESSION_LEVEL",
              "IN_APP_OFFER_SAVED_APP_2_AT_SESSION_LEVEL",
              "IN_APP_OFFER_SAVED_APP_3_AT_SESSION_LEVEL",
              "IN_APP_OFFER_SAVED_APP_4_AT_SESSION_LEVEL",
              "QUICK_BUY_AT_SESSION_LEVEL",
              "DEVELOPER_PAGE_AT_SESSION_LEVEL",
              "GAMES_SUBNAV_SHUFFLE_APPLIED",
              "APPS_SUBNAV_SHUFFLE_APPLIED",
              "BOOKS_FREE_FIXED_DURATION_RENTAL_SESSION_LEVEL",
              "BOOKS_FREE_FIXED_DATE_RENTAL_SESSION_LEVEL",
              "PAYMENTS_DELAYED_CHARGING_AT_SESSION_LEVEL",
              "BOOKS_PRICE_DROP_SESSION_LEVEL",
              "NON_EMPTY_HOME_STREAM_LIVE_OPS_CLUSTER_SERVED",
              "SHOULD_SEE_LIVE_OPS_CARD_IN_SEARCH_MDP",
              "CART_ABANDONMENT_SUBSCRIPTION_ONE_TIME_PASS_SESSION_LEVEL",
              "MY_REVIEWS_PAGE_VISIT_USER_LEVEL",
              "SERIES_BUNDLE_MULTI_TIER_DISCOUNT_SESSION_LEVEL",
              "GOOGLE_PROMOTIONS_ELIGIBLE_SESSION_LEVEL",
              "USER_TRIGGERED_IAP_PROMOTION_RETRIEVAL_SESSION_LEVEL",
              "IAP_HAS_UNREDEEMED_PROMOTIONS_CLIENT_SESSION_LEVEL",
              "SUBSCRIPTION_UPDATE_FOP_FOR_DCB_AS_PRIMARY_SIGNUP_SESSION_LEVEL",
              "SUBSCRIPTION_UPDATE_FOP_FOR_DCB_AS_PRIMARY_SUB_CENTER_SESSION_LEVEL",
              "RENEW_TASK_DELAYED_SUBSCRIPTION_TARGETED",
              "RENEW_TASK_DELAYED_SUBSCRIPTION_NOT_TARGETED",
              "PRE_AUTH_TASK_DELAYED_SUBSCRIPTION_TARGETED",
              "PRE_AUTH_TASK_DELAYED_SUBSCRIPTION_NOT_TARGETED",
              "REDEEM_REDIRECT_CHALLENGE_AT_SESSION_LEVEL",
              "PLAY_STORE_IAP_SALES",
              "PLAY_STORE_IAP_SALES_APP_1",
              "PLAY_STORE_IAP_SALES_MINI_DETAILS_PAGE",
              "CROSS_DEVICE_INSTALL_OPTIONS_FETCHED_IN_SESSION",
              "CROSS_DEVICE_INSTALL_OPTIONS_ITEM_FIELDS_TRIGGERED",
              "OTHER_DEVICES_SUBNAV_RETURNED_IN_SESSION",
              "GEARHEAD_FRX_SENSITIVE_PERMISSION_SCREEN_SEEN",
              "POST_PURCHASE_ITEM_UPSELL_SESSION_LEVEL",
              "PLAY_PASS_SIGNUP_INTERSTITIAL_SHOWN_SESSION_LEVEL",
              "FETCH_PROMOTION_BANNER_FROM_P3_SESSION_LEVEL",
              "AVP_SWOOP_10P_OFF_SESSION_LEVEL",
              "AVP_SWOOP_25P_OFF_SESSION_LEVEL",
              "AVP_SWOOP_50P_OFF_SESSION_LEVEL",
              "AVP_SWOOP_75P_OFF_SESSION_LEVEL",
              "CLUSTER_TRIGGER_CONDITION_IS_PARENT",
              "CDP_ENABLE_PREFETCH_SESSION_LEVEL",
              "P13N_INTERSTITIAL_SESSION_LEVEL",
              "GEARHEAD_SKIP_LEGACY_FRX_FOR_CAKEWALK",
              "FEATURED_SUBSCRIPTIONS_PRESENT",
              "SHOULD_NOT_SEE_HOME_LIVE_OPS_CLUSTER",
              "SHOULD_SEE_HOME_LIVE_OPS_CLUSTER_K1_2",
              "SHOULD_SEE_HOME_LIVE_OPS_CLUSTER_K1",
              "SHOULD_SEE_HOME_LIVE_OPS_CLUSTER_K2",
              "SHOULD_SEE_HOME_LIVE_OPS_CLUSTER_K3_4",
              "SHOULD_SEE_HOME_LIVE_OPS_CLUSTER_GTE_K5",
              "SHOULD_NOT_SEE_HOME_OFFER_CLUSTER",
              "SHOULD_SEE_HOME_OFFER_CLUSTER_K1",
              "SHOULD_SEE_HOME_OFFER_CLUSTER_K2",
              "SHOULD_SEE_HOME_OFFER_CLUSTER_K3_4",
              "SHOULD_SEE_HOME_OFFER_CLUSTER_GTE_K5",
              "SHOULD_NOT_SEE_DEALS_HOME_OFFER",
              "SHOULD_SEE_DEALS_HOME_OFFER_K1",
              "SHOULD_SEE_DEALS_HOME_OFFER_K2",
              "SHOULD_SEE_DEALS_HOME_OFFER_K3_4",
              "SHOULD_SEE_DEALS_HOME_OFFER_GTE_K5",
              "SHOULD_SEE_DEALS_HOME_GAME_K1",
              "SHOULD_SEE_DEALS_HOME_GAME_K2",
              "SHOULD_SEE_DEALS_HOME_GAME_K3",
              "SHOULD_SEE_DEALS_HOME_GAME_K4",
              "SHOULD_SEE_DEALS_HOME_GAME_GTE_K5",
              "SHOULD_SEE_DEALS_HOME_APP_K1",
              "SHOULD_SEE_DEALS_HOME_APP_K2",
              "SHOULD_SEE_DEALS_HOME_APP_K3",
              "SHOULD_SEE_DEALS_HOME_APP_K4",
              "SHOULD_SEE_DEALS_HOME_APP_GTE_K5",
              "SHOULD_SEE_DEALS_HOME_EVER_INSTALL_K1",
              "SHOULD_SEE_DEALS_HOME_EVER_INSTALL_K2",
              "SHOULD_SEE_DEALS_HOME_EVER_INSTALL_K3",
              "SHOULD_SEE_DEALS_HOME_EVER_INSTALL_K4",
              "SHOULD_SEE_DEALS_HOME_EVER_INSTALL_GTE_K5",
              "SHOULD_SEE_DEALS_HOME_NEVER_INSTALL_K1",
              "SHOULD_SEE_DEALS_HOME_NEVER_INSTALL_K2",
              "SHOULD_SEE_DEALS_HOME_NEVER_INSTALL_K3",
              "SHOULD_SEE_DEALS_HOME_NEVER_INSTALL_K4",
              "SHOULD_SEE_DEALS_HOME_NEVER_INSTALL_GTE_K5",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_SESSION_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_PREVIEW_BATCH_SESSION_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_SKU_DETAILS_SESSION_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_PREVIEW_BATCH_SKU_DETAILS_SESSION_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_FOR_ALL_SUBS_SESSION_LEVEL",
              "LEON_LIVEOPS_DEAL_STATE_SYNC_SESSION_LEVEL",
              "SURVEY_AHC_AT_SESSION_LEVEL",
              "PLAY_PASS_CART_MAREKTING_BANNER_ELIGIBLE_AND_SHOWN_CART_SESSION_LEVEL",
              "PLAY_PASS_PERKS_VOUCHER_IN_CART_SESSION_LEVEL",
              "PLAY_SEARCH_MDP_TRIGGERING",
              "PLAY_SEARCH_NON_MDP_TRIGGERING",
              "PRICE_TRANSPARENCY_IS_OFFER_PERSONALIZED_SESSION_LEVEL",
              "GEARHEAD_SKIP_LEGACY_FRX_FOR_CAKEWALK_USB_CANDIDATE",
              "PLAY_PASS_PARENT_FOCUSED_SPLASH_PAGE_SESSION_LEVEL",
              "PLAY_PASS_SPLASH_PAGE_FOR_UNICORN_SESSION_LEVEL",
              "REVIEW_SUBMITTED_SESSION_LEVEL",
              "REVIEW_TOPIC_FILTER_SELECTED_SESSION_LEVEL",
              "PLAY_SEARCH_GENERAL_QUERY_PAGINATION_SESSION_LEVEL",
              "IN_CART_EXCHANGE_OPTIONS_ELIGIBLE_SESSION_LEVEL",
              "PLAY_SEARCH_MULTINAV_PAGINATION_SESSION_LEVEL",
              "REGIONAL_NAV_EXT_SESSION_LEVEL",
              "IAP_SKU_DEALS_LIVE_OP_DEALS_HOME_SESSION_LEVEL",
              "IAP_SKU_DEALS_LIVE_OP_GAMES_HOME_SESSION_LEVEL",
              "FEATURING_AHC_OR_FHR_TRIGGERED_SESSION_LEVEL",
              "ALLOWLIST_EXPANSION_FOR_P13N_INTERSTITIAL_SESSION_LEVEL",
              "SURVEY_RECS_LIST_AT_SESSION_LEVEL",
              "GEARHEAD_FRX_RUNNING_CW175_IN_GH",
              "RANDOM_SHUFFLE_CLUSTERS_ON_TARGET_USERS_SESSION_LEVEL",
              "RANDOM_SHUFFLE_CLUSTERS_AND_APPS_ON_TARGET_USERS_SESSION_LEVEL",
              "ALLOWLIST_EXPANSION_FOR_P13N_NOTIFICATIONS_SESSION_LEVEL",
              "FRESH_RESULTS_SEEKING_SEARCH_QUERY_SESSION_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_1_SESSION_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_2_SESSION_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_3_SESSION_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_4_SESSION_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_5_SESSION_LEVEL",
              "GOOGLE_FUNDED_BUNDLE_DISCOUNT_BUCKET_6_SESSION_LEVEL",
              "TRUSTED_GENOME_RELATED_QUERY_CLUSTER_SESSION",
              "NAV_TG_RELATED_QUERY_SESSION",
              "PROMOTABLE_APPS_SESSION",
              "PROMOTABLE_APPS_STRONG_CAT_SESSION",
              "GROWTH_COFFEE_CARD_IN_PURCHASE_FLOW_SESSION_LEVEL",
              "GROWTH_COFFEE_CARD_IN_PURCHASE_FLOW_SERVER_SESSION_LEVEL",
              "LIVE_OPS_ROI_HOLDBACK",
              "EDITORS_CHOICE_CLUSTER_SERP_SESSION_LEVEL",
              "BESTK_CLUSTER_SERP_SESSION_LEVEL",
              "LIVEOPS_CLUSTER_SERP_SESSION_LEVEL",
              "QUICKPICKS_CLUSTER_SERP_SESSION_LEVEL",
              "WIDE_MEDIA_CLUSTER_INVALID_VIDEO_ASSET_SESSION_LEVEL",
              "ALTERNATE_DEVICE_PRESENT_SESSION_LEVEL",
              "MULTIPLE_ALTERNATE_DEVICES_PER_FORM_FACTOR_SESSION_LEVEL",
              "APPS_SEARCH_DISCOVERY_CLUSTER_TRIGGERED_SESSION_LEVEL",
              "SUGGEST_CROSS_FORM_FACTOR_APPS_WEAR_SUGGESTIONS_ENABLED",
              "SUGGEST_CROSS_FORM_FACTOR_APPS_WEAR_SUGGESTIONS_AVAILABLE",
              "SUGGEST_CROSS_FORM_FACTOR_APPS_TV_SUGGESTIONS_ENABLED",
              "SUGGEST_CROSS_FORM_FACTOR_APPS_TV_SUGGESTIONS_AVAILABLE",
              "SUGGEST_APPS_SUBTEXT_SUGGESTIONS_SESSION_LEVEL",
              "SUGGEST_ZERO_PREFIX_LIVE_OPS_AVAILABLE",
              "INLINE_DETAILS_TQUALITY_CHECK_PASS_SESSION_LEVEL",
              "INLINE_DETAILS_TQUALITY_CHECK_FAIL_SESSION_LEVEL",
              "INLINE_DETAILS_AQUALITY_CHECK_PASS_SESSION_LEVEL",
              "INLINE_DETAILS_AQUALITY_CHECK_FAIL_SESSION_LEVEL",
              "INLINE_DETAILS_CALLER_AQUALITY_CHECK_PASS_SESSION_LEVEL",
              "INLINE_DETAILS_CALLER_AQUALITY_CHECK_FAIL_SESSION_LEVEL",
              "HSDP_AD_NETWORK_CALLER_TABLET_AQUALITY_CHECK_PASS_SESSION_LEVEL",
              "HSDP_AD_NETWORK_CALLER_TABLET_AQUALITY_CHECK_FAIL_SESSION_LEVEL",
              "HSDP_INDEPENDENT_APP_TABLET_AQUALITY_CHECK_UNKNOWN_SESSION_LEVEL",
              "HSDP_INDEPENDENT_APP_TABLET_AQUALITY_CHECK_PASS_SESSION_LEVEL",
              "HSDP_INDEPENDENT_APP_TABLET_AQUALITY_CHECK_FAIL_SESSION_LEVEL",
              "INLINE_DETAILS_IS_INLINE_URL_SESSION_LEVEL",
              "SENT_EMAIL_ENTER_GRACE_PERIOD_SESSION_LEVEL",
              "SENT_EMAIL_ENTER_SUSPENDED_PERIOD_SESSION_LEVEL",
              "ANALYTICS_AD_LINKING_RECOMMENDATION_ELIGIBLE_SESSION_LEVEL",
              "EDITORIAL_FCC_AT_SESSION_LEVEL",
              "FRESH_RESULTS_SEEKING_CURRENT_YEAR_SESSION_LEVEL",
              "FILTER_TQ_FAILURE_APP_SESSION_LEVEL",
              "EDITORIAL_CONTENT_CLUSTER_FHR_SERP_SESSION_LEVEL",
              "HAS_DECLINE_REASON_IN_PAYMENT_DECLINE_EMAIL_SESSION_LEVEL",
              "QUEST_CONTENT_CARD_IN_DEALS_HOME_SESSION_LEVEL",
              "PGSS_DETAILS_PAGE_TQUALITY_UNKNOWN_SESSION_LEVEL",
              "PGSS_DETAILS_PAGE_TQUALITY_FAILED_SESSION_LEVEL",
              "PGSS_DETAILS_PAGE_TQUALITY_PASSED_SESSION_LEVEL",
              "PGSS_DETAILS_PAGE_AQUALITY_UNKNOWN_SESSION_LEVEL",
              "PGSS_DETAILS_PAGE_AQUALITY_FAILED_SESSION_LEVEL",
              "PGSS_DETAILS_PAGE_AQUALITY_PASSED_SESSION_LEVEL",
              "PRE_INSTALL_LOW_QUALITY_DETAILS_PAGE_SIMILAR_APPS_ABSENT_SESSION_LEVEL",
              "PRE_INSTALL_LOW_QUALITY_DETAILS_PAGE_SIMILAR_APPS_PRESENT_SESSION_LEVEL",
              "PRE_INSTALL_LOW_QUALITY_DETAILS_PAGE_WITH_GAME_SESSION_LEVEL",
              "PRE_INSTALL_LOW_QUALITY_DETAILS_PAGE_WITH_NON_GAME_SESSION_LEVEL",
              "QUERY_DEPENDENT_SNIPPET_SESSION_LEVEL",
              "FOP_STEERING_PROMOTION_INITIAL_BILLING_PROFILE_SESSION_LEVEL",
              "FOP_STEERING_PROMOTION_CART_ADD_FOP_SESSION_LEVEL",
              "FOP_STEERING_PROMOTION_CART_CHANGE_FOP_SESSION_LEVEL",
              "FOP_STEERING_PROMOTION_CART_APPLY_PROMOTION_SESSION_LEVEL",
              "PTP_CLUSTER_SERP_P13N_RANKING_SESSION_LEVEL",
              "QUERY_DEPENDENT_SNIPPET_FRONT_END_SESSION_LEVEL",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_SESSION_LEVEL",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_SESSION_LEVEL_V2",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_WITH_EXISTING_FOP_SESSION_LEVEL",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_WITHOUT_EXISTING_FOP_SESSION_LEVEL",
              "MDP_WITHOUT_QUALITY_SESSION_LEVEL",
              "MDP_WITH_HIGH_QUALITY_SESSION_LEVEL",
              "MDP_WITH_MEDIUM_QUALITY_SESSION_LEVEL",
              "MDP_WITH_LOW_QUALITY_SESSION_LEVEL",
              "MDP_TRIGGERED_AND_GAME_SEEKING_SESSION_LEVEL",
              "PLAY_SEARCH_GENERAL_QUERY_MDP_PAGINATION_WITH_GAME_SEEKING_RYF_CLUSTER_SESSION_LEVEL",
              "PLAY_SEARCH_GENERAL_QUERY_NON_MDP_PAGINATION_WITH_GAME_SEEKING_RYF_CLUSTER_SESSION_LEVEL",
              "BUY_BUTTON_WITH_AUTHENTICATION_DISABLED",
              "PSS_GENERAL_PAGINATION_SESSION_LEVEL",
              "PSS_GENERAL_PAGINATION_GAME_SEEKING_SESSION_LEVEL",
              "INLINE_ADD_PAYMENT_CREDIT_CARD_ELIGIBLE",
              "INLINE_ADD_PAYMENT_CARRIER_BILLING_ELIGIBLE",
              "INLINE_ADD_PAYMENT_EWALLET_ELIGIBLE",
              "INLINE_ADD_PAYMENT_NO_ELIGIBLE_TYPE",
              "SHOULD_NOT_SEE_NOW_CONTENT_AH",
              "SHOULD_SEE_NOW_CONTENT_AH_K1",
              "SHOULD_SEE_NOW_CONTENT_AH_K2",
              "SHOULD_SEE_NOW_CONTENT_AH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_AH_GTE_K5",
              "SHOULD_NOT_SEE_NOW_CONTENT_GH",
              "SHOULD_SEE_NOW_CONTENT_GH_K1",
              "SHOULD_SEE_NOW_CONTENT_GH_K2",
              "SHOULD_SEE_NOW_CONTENT_GH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_GH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_AH_K1",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_AH_K2",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_AH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_AH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_GH_K1",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_GH_K2",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_GH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_NEW_RELEASE_GH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_AH_K1",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_AH_K2",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_AH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_AH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_GH_K1",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_GH_K2",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_GH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_EDITORIAL_GH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_AH_K1",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_AH_K2",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_AH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_AH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_GH_K1",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_GH_K2",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_GH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_LIVE_OPS_GH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_AH_K1",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_AH_K2",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_AH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_AH_GTE_K5",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_GH_K1",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_GH_K2",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_GH_K3_4",
              "SHOULD_SEE_NOW_CONTENT_PRE_REGISTRATION_GH_GTE_K5",
              "SHOULD_NOT_SEE_TOP_NOW_CONTENT_AH",
              "SHOULD_SEE_TOP_NOW_CONTENT_AH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_AH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_AH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_AH_GTE_K5",
              "SHOULD_NOT_SEE_TOP_NOW_CONTENT_GH",
              "SHOULD_SEE_TOP_NOW_CONTENT_GH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_GH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_GH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_GH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_AH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_AH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_AH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_AH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_GH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_GH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_GH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_NEW_RELEASE_GH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_AH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_AH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_AH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_AH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_GH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_GH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_GH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_EDITORIAL_GH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_AH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_AH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_AH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_AH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_GH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_GH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_GH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_LIVE_OPS_GH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_AH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_AH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_AH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_AH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_GH_K1",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_GH_K2",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_GH_K3_4",
              "SHOULD_SEE_TOP_NOW_CONTENT_PRE_REGISTRATION_GH_GTE_K5",
              "SHOULD_SEE_TOP_NOW_CONTENT_MERCH_NEW_RELEASE_AH",
              "SHOULD_SEE_TOP_NOW_CONTENT_MERCH_PRE_REGISTRATION_AH",
              "SHOULD_SEE_TOP_NOW_CONTENT_MERCH_LIVE_OPS_AH",
              "SHOULD_SEE_TOP_NOW_CONTENT_MERCH_NEW_RELEASE_GH",
              "SHOULD_SEE_TOP_NOW_CONTENT_MERCH_PRE_REGISTRATION_GH",
              "SHOULD_SEE_TOP_NOW_CONTENT_MERCH_LIVE_OPS_GH",
              "WALLET_WELLBEING_ALERT_SESSION_LEVEL",
              "BROAD_INTENT_REWEIGHTING_SESSION_LEVEL",
              "DYNASTY_DEVICE_HANDOFF_SESSION_LEVEL",
              "EXPANDED_DEV_SUCCESS_CLUSTER_SESSION_LEVEL",
              "COLLAPSED_DEV_SUCCESS_CLUSTER_SESSION_LEVEL",
              "TRIGGERED_DEV_SUCCESS_CLUSTER_SESSION_LEVEL",
              "PLANOGRAM_MERCH_AMERICAS_GAMES_PAYPAL_SESSION_LEVEL",
              "BROAD_INTENT_GAMES_TIMESPENT_SESSION_LEVEL",
              "ELIGIBLE_FOR_MANAGE_IN_APP_DETAILS_SESSION_LEVEL",
              "ELIGIBLE_FOR_ACC_SESSION_LEVEL",
              "ELIGIBLE_FOR_ACQUISITION_ACC_SESSION_LEVEL",
              "ELIGIBLE_FOR_REENGAGEMENT_ACC_SESSION_LEVEL",
              "MDP_P13N_ALL_SESSION_LEVEL",
              "MDP_P13N_GAME_QUERY_L5_SESSION_LEVEL",
              "MDP_P13N_GAME_QUERY_L6_SESSION_LEVEL",
              "MDP_P13N_GAME_QUERY_L7_SESSION_LEVEL",
              "MDP_P13N_GAME_QUERY_L8_SESSION_LEVEL",
              "MDP_P13N_GAME_QUERY_L9_SESSION_LEVEL",
              "MDP_P13N_RERANKING_UNKNOWN_SESSION_LEVEL",
              "MDP_P13N_RERANKING_CATEGORICAL_SESSION_LEVEL",
              "MDP_P13N_RERANKING_NAVIGATIONAL_SESSION_LEVEL",
              "MDP_P13N_RERANKING_MULTI_NAVIGATIONAL_SESSION_LEVEL",
              "MDP_P13N_RERANKING_NAVIGATIONAL_EXT_SESSION_LEVEL",
              "YOUTUBE_FROM_LANDING_PAGE_SESSION_LEVEL",
              "SECOND_PASS_POLARIS_RERANKING_SESSION_LEVEL",
              "SECOND_PASS_POLARIS_WITH_RANKING_CHANGE_SESSION_LEVEL",
              "PLAY_BOOKS_READING_PROGRESS_TOOLTIP_SESSION_LEVEL",
              "NAV_SEARCH_D2D_EMBEDDING_BOOST_SESSION_LEVEL",
              "HAS_NO_BACKUP_FOP_FOR_ORDER_SESSION_LEVEL",
              "SECOND_PASS_BROAD_INTENT_QUERY_SESSION_LEVEL",
              "SECOND_PASS_REWEIGHTING_TRIGGERED_SESSION_LEVEL",
              "BOOKS_SEARCH_PAGE_DORA_QUERY_SESSION_LEVEL",
              "INLINE_DETAILS_TQUALITY_CHECK_UNKNOWN_SESSION_LEVEL",
              "APPS_LAUNCHER_CLUSTER_AT_SESSION_LEVEL",
              "SUPERROOT_PDS_SHORT_DESCRIPTION_SESSION_LEVEL",
              "PGSS_SHORT_DESCRIPTION_DIFF_SESSION_LEVEL",
              "WEAR_AQ_SEARCH_PHONE_DEVICE_WITH_WEAR_FILTER",
              "WEAR_AQ_SEARCH_WEAR_DEVICE",
              "WEAR_AQ_SEARCH_COMBINED",
              "NAV_ADS_DUPLICATE_SERVED_SESSION_LEVEL",
              "NAV_ADS_NON_DUPLICATE_SERVED_SESSION_LEVEL",
              "NAV_ADS_NO_AD_SERVED_SESSION_LEVEL",
              "PAYMENTS_TOS_ACCEPTANCE_SESSION_LEVEL",
              "WEBSKY_SEARCH_THIRD_PARTY_CONTENT_ELIGIBLE_QUERY_SESSION_LEVEL",
              "SHORTEN_COMMERCE_CACHE_TTL_SESSION_LEVEL",
              "SKIP_CHECK_MARK_SCREEN_FOR_BACKUP_FLOW_SESSION_LEVEL",
              "ONE_CLICK_BACKUP_FOP_SESSION_LEVEL",
              "KIDS_LAUNCHER_USER_FEATURES_PRESENT",
              "KIDS_LAUNCHER_USER_FEATURES_MISSING",
              "SECOND_PASS_QUALITY_REWEIGTHING_SESSION_LEVEL",
              "SECOND_PASS_QUALITY_REWEIGTHING_MDP_SESSION_LEVEL",
              "SESSION_LEVEL_TEST_CODE_LIMIT",
              "CART_ABANDONMENT_USER_LEVEL",
              "IN_APP_PRODUCTS_IN_DETAILS_PAGE_USER_LEVEL",
              "BOOKS_DETAILS_PAGE_PROMOTION_USER_LEVEL",
              "BURNSIE_ADD_FOP_PROMOTION_USER_LEVEL",
              "BOOKS_DETAILS_PAGE_EXISTING_PROMOTION_USER_LEVEL",
              "SWOOP_CAMPAIGN_10P_OFF_USER_LEVEL",
              "SWOOP_CAMPAIGN_25P_OFF_USER_LEVEL",
              "SWOOP_CAMPAIGN_50P_OFF_USER_LEVEL",
              "SWOOP_CAMPAIGN_75P_OFF_USER_LEVEL",
              "PURCHASABLE_SUBSCRIPTIONS_IN_DETAILS_PAGE_WAVE_2_USER_LEVEL",
              "CART_ABANDONMENT_ELIGIBLE_USER_LEVEL",
              "APPS_DETAILS_PAGE_PROMOTION_EXP_2_USER_LEVEL",
              "APPS_DETAILS_PAGE_EXISTING_PROMOTION_EXP_2_USER_LEVEL",
              "APPS_DETAILS_PAGE_PROMOTION_EXP_2_IN_APP_ITEM_NEVERS_USER_LEVEL",
              "APPS_PERSONALIZED_TOPIC_QUERY_USER_LEVEL",
              "APPS_PERSONALIZED_TG_QUERY_USER_LEVEL",
              "APPS_PERSONALIZED_ALL_GAME_QUERIES_USER_LEVEL",
              "APPS_PERSONALIZED_CATEGORICAL_GAME_SEEKING_QUERIES_USER_LEVEL",
              "APPS_PERSONALIZED_CATEGORICAL_NON_TG_QUERIES_USER_LEVEL",
              "SUBSCRIPTION_CANCELLATION_PROMOTION_USER_LEVEL",
              "SUBSCRIPTION_UPDATE_FOP_FOR_DCB_AS_PRIMARY_SIGNUP_USER_LEVEL",
              "SUBSCRIPTION_UPDATE_FOP_FOR_DCB_AS_PRIMARY_USER_LEVEL",
              "SUBSCRIPTION_RETRY_FOP_FOR_DCB_AS_PRIMARY_USER_LEVEL",
              "SUBSCRIPTION_DCB_AS_ADD_FOP_OPTION_USER_LEVEL",
              "PURCHASABLE_SUBSCRIPTIONS_IN_DETAILS_PAGE_APP_1_AT_USER_LEVEL",
              "PURCHASABLE_SUBSCRIPTIONS_IN_DETAILS_PAGE_APP_3_AT_USER_LEVEL",
              "DETAILS_PAGE_PROMOTION_HOLDBACK_USER_LEVEL",
              "LB_TARGETED_AT_USER_LEVEL",
              "LB_IMPRESSED_AT_USER_LEVEL",
              "MOVIES_USER_INTERESTS_NONE_AT_USER_LEVEL",
              "MOVIES_USER_INTERESTS_LOW_AT_USER_LEVEL",
              "MOVIES_USER_INTERESTS_MEDIUM_AT_USER_LEVEL",
              "MOVIES_USER_INTERESTS_HIGH_AT_USER_LEVEL",
              "MOVIES_BOY_SEEDS_NONE_AT_USER_LEVEL",
              "MOVIES_BOY_SEEDS_LOW_AT_USER_LEVEL",
              "MOVIES_BOY_SEEDS_MEDIUM_AT_USER_LEVEL",
              "MOVIES_BOY_SEEDS_HIGH_AT_USER_LEVEL",
              "PLAY_PASS_SIGNUP_INTERSTITIAL_ELIGIBLE_USER_LEVEL",
              "PLAY_PASS_SIGNUP_INTERSTITIAL_TARGETED_USER_LEVEL",
              "PLAY_PASS_IPD_ELIGIBLE_USER_LEVEL",
              "PLAY_PASS_FHR_ELIGIBLE_USER_LEVEL",
              "LOYALTY_UPSELL_AFTER_IN_APP_PURCHASE_AT_USER_LEVEL",
              "PROMOTION_BANNER_ELIGIBLE_USER_LEVEL",
              "LOYALTY_SEES_POINTS_EARN_PROMOTIONS_AT_USER_LEVEL",
              "LOYALTY_SEES_FREE_TRIAL_SUBSCRIPTION_AT_USER_LEVEL",
              "LOYALTY_SIGNUP_INTERSTITIAL_AT_USER_LEVEL",
              "PLAY_SUBMANAGEMENT_LOG_HOOK_USER_EXAMPLE",
              "NEW_USER_FOP_PROMOTION_SEEN",
              "LOYALTY_UPSELL_SEEN_AT_USER_LEVEL",
              "LOYALTY_ELIGIBLE_TO_SEE_UPSELL_AT_USER_LEVEL",
              "LOYALTY_LIVE_OPS_RETURNED_AT_USER_LEVEL",
              "PROMOLINK_CDP_USER_LEVEL",
              "PROMOLINK_CDP_TITLE_PAGE_USER_LEVEL",
              "PROMOLINK_CDP_TOPIC_PAGE_USER_LEVEL",
              "PROMOLINK_CDP_GENERIC_PAGE_USER_LEVEL",
              "POINTS_PROMOTION_CONTENT_PAGE_AT_USER_LEVEL",
              "IN_APP_OFFER_AT_USER_LEVEL",
              "IN_APP_OFFER_APP_1_AT_USER_LEVEL",
              "IN_APP_OFFER_APP_2_AT_USER_LEVEL",
              "IN_APP_OFFER_APP_3_AT_USER_LEVEL",
              "IN_APP_OFFER_APP_4_AT_USER_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_AT_USER_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_1_AT_USER_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_2_AT_USER_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_3_AT_USER_LEVEL",
              "IN_APP_OFFER_ELIGIBLE_APP_4_AT_USER_LEVEL",
              "IN_APP_OFFER_SAVED_AT_USER_LEVEL",
              "IN_APP_OFFER_SAVED_APP_1_AT_USER_LEVEL",
              "IN_APP_OFFER_SAVED_APP_2_AT_USER_LEVEL",
              "IN_APP_OFFER_SAVED_APP_3_AT_USER_LEVEL",
              "IN_APP_OFFER_SAVED_APP_4_AT_USER_LEVEL",
              "SHOULD_SEE_FIRST_PARTY_PROMO_LIVE_OP_ON_SERP_MDP_USER_LEVEL",
              "SHOULD_SEE_FIRST_PARTY_PROMO_LIVE_OP_ON_APP_DP_USER_LEVEL",
              "CART_ABANDONMENT_SUBSCRIPTION_ONE_TIME_PASS_USER_LEVEL",
              "GOOGLE_PROMOTIONS_ELIGIBLE_USER_LEVEL",
              "USER_TRIGGERED_IAP_PROMOTION_RETRIEVAL_USER_LEVEL",
              "LOYALTY_IAP_UPSELL_USER_LEVEL",
              "IAP_HAS_UNREDEEMED_PROMOTIONS_CLIENT_USER_LEVEL",
              "PLAY_STORE_IAP_SALES_USER_LEVEL",
              "PLAY_STORE_IAP_SALES_APP_1_USER_LEVEL",
              "PLAY_STORE_IAP_SALES_MINI_DETAILS_PAGE_USER_LEVEL",
              "PLAY_GROWTH_IS_SCHEDULED",
              "GEARHEAD_VISUAL_PREVIEW_UNCHAINED_ELIGIBLE",
              "POST_PURCHASE_ITEM_UPSELL_USER_LEVEL",
              "PLAY_PASS_SIGNUP_INTERSTITIAL_SHOWN_USER_LEVEL",
              "DISABLE_TOPUP_EXPERIMENT_CONTROL_GROUP_USER_LEVEL",
              "DISABLE_TOPUP_EXPERIMENT_TREATMENT_GROUP_USER_LEVEL",
              "AVP_SWOOP_CAMPAIGN_10P_OFF_USER_LEVEL",
              "AVP_SWOOP_CAMPAIGN_25P_OFF_USER_LEVEL",
              "AVP_SWOOP_CAMPAIGN_50P_OFF_USER_LEVEL",
              "AVP_SWOOP_CAMPAIGN_75P_OFF_USER_LEVEL",
              "CDP_ENABLE_PREFETCH_USER_LEVEL",
              "P13N_INTERSTITIAL_USER_LEVEL",
              "PLAY_EVENT_SERVICE_LOG_HOOK_USER_EXAMPLE",
              "FEATURED_SUBSCRIPTIONS_PRESENT_USER_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_USER_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_PREVIEW_BATCH_USER_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_SKU_DETAILS_USER_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_PREVIEW_BATCH_SKU_DETAILS_USER_LEVEL",
              "USE_SUBSCRIPTION_NEW_DOCUMENT_FORMAT_FOR_ALL_SUBS_USER_LEVEL",
              "LEON_LIVEOPS_DEAL_STATE_SYNC_USER_LEVEL",
              "SURVEY_AHC_AT_USER_LEVEL",
              "PLAY_PASS_CART_MAREKTING_BANNER_ELIGIBLE_AND_SHOWN_CART_USER_LEVEL",
              "PLAY_PASS_PERKS_VOUCHER_IN_CART_USER_LEVEL",
              "PLAY_PASS_PARENT_FOCUSED_SPLASH_PAGE_USER_LEVEL",
              "PLAY_PASS_SPLASH_PAGE_FOR_UNICORN_USER_LEVEL",
              "IN_CART_EXCHANGE_OPTIONS_ELIGIBLE_USER_LEVEL",
              "GE_USER_BUYER_STATE_UNKNOWN",
              "GE_USER_BUYER_STATE_NEVER",
              "GE_USER_BUYER_STATE_NEW",
              "GE_USER_BUYER_STATE_CHURN",
              "GE_USER_BUYER_STATE_REPEAT",
              "GE_USER_VALUE_SEGMENT_UNKNOWN",
              "GE_USER_VALUE_SEGMENT_LOW",
              "GE_USER_VALUE_SEGMENT_MEDIUM",
              "GE_USER_VALUE_SEGMENT_HIGH",
              "GE_USER_VALUE_SEGMENT_NEVER",
              "GE_IS_SCHEDULED_UNKNOWN_SURFACE",
              "GE_IS_SCHEDULED_LEON",
              "GE_IS_SCHEDULED_NOTIFICATION",
              "GE_IS_SCHEDULED_CART_ABANDONMENT",
              "GE_IS_SCHEDULED_SWOOP",
              "GE_IS_SCHEDULED_LIVE_OP",
              "GE_IS_SCHEDULED_REDEEM_SAVE",
              "GE_IS_SCHEDULED_APP_HERO_CARD",
              "GE_IS_SCHEDULED_POINTS_BOOSTER",
              "GE_IS_SCHEDULED_INTERSTITIAL",
              "GE_IS_SCHEDULED_COFFEE_CARD",
              "GE_IS_SCHEDULED_QUEST",
              "GE_IS_SCHEDULED_LOYALTY_MULTIPLIER",
              "IAP_SKU_DEALS_LIVE_OP_DEALS_HOME_USER_LEVEL",
              "IAP_SKU_DEALS_LIVE_OP_GAMES_HOME_USER_LEVEL",
              "FEATURING_AHC_OR_FHR_TRIGGERED_USER_LEVEL",
              "ALLOWLIST_EXPANSION_FOR_P13N_INTERSTITIAL_USER_LEVEL",
              "SURVEY_RECS_LIST_AT_USER_LEVEL",
              "DEV_OFFER_SWGOH_USER_LEVEL",
              "ALLOWLIST_EXPANSION_FOR_P13N_NOTIFICATIONS_USER_LEVEL",
              "GROWTH_COFFEE_CARD_IN_PURCHASE_FLOW_USER_LEVEL",
              "GROWTH_COFFEE_CARD_IN_PURCHASE_FLOW_SERVER_USER_LEVEL",
              "GROWTH_CORPUS_WIDE_STAMP_CARD_PURCHASE_FLOW_CLIENT_USER_LEVEL",
              "GROWTH_CORPUS_WIDE_STAMP_CARD_PURCHASE_FLOW_SERVER_USER_LEVEL",
              "GROWTH_CORPUS_WIDE_STAMP_CARD_GAMES_HOME_USER_LEVEL",
              "LOYALTY_PURCHASE_QUEST_GAMES_HOME_USER_LEVEL",
              "GROWTH_CORPUS_WIDE_STAMP_CARD_GAMES_HOME_SERVER_USER_LEVEL",
              "LOYALTY_PURCHASE_QUEST_GAMES_HOME_SERVER_USER_LEVEL",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_USER_LEVEL",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_USER_LEVEL_V2",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_WITH_EXISTING_FOP_USER_LEVEL",
              "SUBS_HIGH_CHURN_FOP_OPTIONS_AVAILABLE_WITHOUT_EXISTING_FOP_USER_LEVEL",
              "WIDE_MEDIA_CLUSTER_INVALID_VIDEO_ASSET_USER_LEVEL",
              "WEBSKY_SEARCH_THIRD_PARTY_CONTENT_ELIGIBLE_QUERY_USER_LEVEL",
              "EDITORIAL_FCC_AT_USER_LEVEL",
              "QUEST_CONTENT_CARD_IN_DEALS_HOME_USER_LEVEL",
              "FOP_STEERING_PROMOTION_INITIAL_BILLING_PROFILE_USER_LEVEL_V2",
              "FOP_STEERING_PROMOTION_CART_ADD_FOP_USER_LEVEL_V2",
              "FOP_STEERING_PROMOTION_CART_CHANGE_FOP_USER_LEVEL_V2",
              "FOP_STEERING_PROMOTION_CART_APPLY_PROMOTION_USER_LEVEL_V2",
              "FOP_STEERING_PROMOTION_USER_LEVEL",
              "LOYALTY_STAMP_CARD_IN_PURCHASE_FLOW_USER_LEVEL",
              "HAS_MONETIZATION_BEHAVIOR_USER_LEVEL",
              "HAS_MONETIZATION_BEHAVIOR_LAST_180D_USER_LEVEL",
              "HAS_LAST_28D_CART_ABANDONMENT_USER_LEVEL",
              "HAS_LAST_7D_CART_ABANDONMENT_USER_LEVEL",
              "POST_SUCCESS_ADD_BACKUP_FLOW_USER_LEVEL",
              "SKIP_CHECK_MARK_SCREEN_WITH_BACKUP_FLOW_USER_LEVEL",
              "IS_ELIGIBLE_FOR_ONE_CLICK_BACKUP_FOP_USER_LEVEL",
              "LOYALTY_STAMP_CARD_IN_PURCHASE_FLOW_SERVER_USER_LEVEL",
              "ELIGIBLE_FOR_MANAGE_IN_APP_DETAILS_USER_LEVEL",
              "PLAY_ONBOARDING_QUEST_GAMES_HOME_USER_LEVEL",
              "SERVED_GPP_ONBOARDING_QUEST_USER_LEVEL",
              "PLAY_ONBOARDING_QUEST_GAMES_HOME_SERVER_USER_LEVEL",
              "PCH_O2_WITH_CRE_USER_LEVEL",
              "MERCH_USER_JOURNEY_SPEND_USER_LEVEL",
              "MERCH_USER_JOURNEY_PUBG_NPU",
              "MERCH_USER_JOURNEY_PUBG_REPEAT_SPEND",
              "MERCH_USER_JOURNEY_APEX_NEW_ACTIVE_USERS",
              "MERCH_USER_JOURNEY_APEX_NEW_CHURN",
              "MERCH_USER_JOURNEY_PUBG_NEW_USERS",
              "MERCH_USER_JOURNEY_PUBG_ADVANCED_AND_CHURN",
              "MERCH_USER_JOURNEY_FREE_FIRE_ADVANCED_AND_CHURN",
              "MERCH_USER_JOURNEY_GARENA_REPEAT",
              "MERCH_USER_JOURNEY_NIKKE_NEW_UPDATE",
              "MERCH_USER_JOURNEY_NIKKE_ADVANCED_UPDATE",
              "MERCH_USER_JOURNEY_POKEMON_GO_ADVANCED_AND_CHURN",
              "PLAY_GAMES_ACHIEVEMENT_LOYALTY_QUEST_USER_LEVEL",
              "PLAY_BOOKS_READING_PROGRESS_TOOLTIP_USER_LEVEL",
              "IAP_SKU_DEALS_LIVE_OP_GAMES_HOME_USER_LEVEL1",
              "POST_PURCHASE_OFFER_POST_PURCHASE_CONFIRMATION_DIALOG_SERVER_USER_LEVEL",
              "POST_PURCHASE_OFFER_POST_PURCHASE_OFFER_SAVED_DIALOG_SERVER_USER_LEVEL",
              "POST_PURCHASE_OFFER_VALUE_PROMOTION_DIALOG_SHOWN_SERVER_USER_LEVEL",
              "MDP_P13N_RERANKING_UNKNOWN_USER_LEVEL",
              "MDP_P13N_RERANKING_CATEGORICAL_USER_LEVEL",
              "MDP_P13N_RERANKING_NAVIGATIONAL_USER_LEVEL",
              "MDP_P13N_RERANKING_MULTI_NAVIGATIONAL_USER_LEVEL",
              "MDP_P13N_RERANKING_NAVIGATIONAL_EXT_USER_LEVEL",
              "PLAY_ONBOARDING_QUEST_PLATFORM_SERVING_USER_LEVEL",
              "APPS_LAUNCHER_CLUSTER_AT_USER_LEVEL",
              "TRIGGERED_DEV_SUCCESS_CLUSTER_USER_LEVEL",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_INVALID_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_0_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_1_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_2_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_3_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_4_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_5_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_6_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_7_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_8_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_9_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_10_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_11_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_12_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_13_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_14_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_15_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_16_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_17_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_18_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_19_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_20_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_21_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_22_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_23_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_24_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_25_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_26_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_27_USER_LEVEL_V2",
              "PREPERIOD_PAGE_VISIT_28D_FREQUENCY_28_USER_LEVEL_V2",
              "HAS_REINSTALL_APP_PASSING_FILTERING_USER_LEVEL",
              "USER_LEVEL_TEST_CODE_LIMIT"
            ],
            "enumDescriptions": [
              "useful always",
              "useful always",
              "useful always",
              "useful always",
              "useful always",
              "useful always",
              "",
              "",
              "",
              "",
              "Query is eligible to show Boots chips",
              "",
              "",
              "",
              "Create test code for go/it-design experiment",
              "go/guided-discovery-design for details.",
              "",
              "",
              "User has live op cluster candidates.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Details page of an app eligible for Books XSell",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Indicates triggering of Topic RFY cluster",
              "Triggered Mini Topcharts in apps search.",
              "",
              "",
              "User eligible for Assistant first-run tooltip",
              "User eligible for Assistant nth-run tooltip",
              "User eligible for Assistant nth-run button tooltip",
              "User eligible for Launcher first run tooltip",
              "User eligible for Launcher nth run tooltip",
              "User eligible for Notification first run tooltip",
              "User eligible for Notification new tooltip",
              "User eligible for Notification nth new tooltip",
              "",
              "",
              "leon banner is targeted at event level.",
              "",
              "User input has touch hardware",
              "User input has rotary hardware",
              "User input has touchpad hardware",
              "User input lacks touch hardware",
              "User input lacks rotary hardware",
              "User input lacks touchpad hardware",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Indicates a work profile was detected while running Android Auto",
              "Indicates Android Auto has detected a work profile, and could query for work data, but might (or might not) need to prompt for permissions first. Also indicates Android Auto has permission to post any needed permission prompts.",
              "Indicates Android Auto has permission to query work data, and show it to the user",
              "",
              "",
              "Indicates that Android Auto has detected multiple phone accounts, which are capable of placing/receiving calls. VOIP accounts are not included.",
              "Indicates that a phone with multiple callable accounts has a default account specified for placing outgoing calls. This means account disambiguation generally won't be needed when placing a call from Android Auto.",
              "",
              "Indicates that Android Auto has displayed a multi-SIM calling tooltip.",
              "",
              "",
              "",
              "",
              "",
              "",
              "Indicates that the Android Auto session is eligible to receive media autoplay (i.e. system requesting playback automatically)",
              "",
              "Indicates that some organic search results have generated large-format cluster candidates (i.e. to be shown as search results with media).",
              "Event level test code for tracking fresh results seeking search queries.",
              "Google funded series bundle discount bucket.",
              "",
              "",
              "",
              "",
              "",
              "Event level test code that indicates that a tg related query search cluster could be shown.",
              "Event level test code that indicates that tg related queries could be inserted to related query cluster for navigational search.",
              "Event level testcode for promotable apps in search. STRONG_CAT and CAT are for strong CAT and general CAT query slices.",
              "",
              "Event level test codes containing result of tquality lookup during market details url matching. A failed tquality result suppresses inline details.",
              "",
              "Event level test code indicating external details URL is an inline URL.",
              "",
              "",
              "",
              "",
              "Event level test codes containing result of aQuality lookup during market details url matching. A failed aQuality result suppresses inline details.",
              "",
              "Event level test code for tracking fresh results seeking within the current year search queries.",
              "Event level test code for when we filtered >=1 apps due to tq failure.",
              "Event level test code for Editorial Content/Articles in SERP (FHR)",
              "The following are used by the server side.",
              "",
              "",
              "",
              "",
              "",
              "Indicate whether the similar apps cluster is dropped due to little recommendations generated from low quality seed app.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Event level test code for cluster, p13n ranking.",
              "TestCode for Broad Intent Reweighting Event Level.",
              "Event level test code for query dependent snippet.",
              "Event level test code for dev success cluster.",
              "",
              "",
              "TestCode for Broad Intent Games TimeSpent Event Level.",
              "USB connection recovery.",
              "MDP P13N",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Second pass polaris reranking event level.",
              "Second pass polaris with ranking change event level.",
              "Tooltip for unavailable dashboard support for selected navigation app.",
              "Test code for second pass broad intent query event level.",
              "Test code for second pass reweighting triggered event level.",
              "Tooltip for notifying user of the rail widget setting.",
              "Event level test codes containing result of tquality lookup during market details url matching. An unknown result means the lookup found nothing.",
              "Event level test code when Short Description is populated in Superroot.",
              "Event level test code when Short Description fetched in PGSS is different from that fetched in Superroot.",
              "Event level test code that indicates second pass quality reweigthing is triggered.",
              "Event level test code that indicates second pass quality reweigthing is triggered.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Testcode for abusive query squashing experiment",
              "Cart abandonment flow for purchase flow.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Details page of an app eligible for Books XSell",
              "",
              "",
              "",
              "User saw/would have seen the details page promotion in App",
              "Details Page. User saw/would have seen the details page promotion in Books",
              "",
              "",
              "",
              "",
              "",
              "User saw/would have seen the promotion that was redeemd from",
              "non details page in App Details Page. User saw/would have seen the promotion that was redeemd from",
              "non details page in Books Details Page.",
              "",
              "",
              "",
              "",
              "",
              "",
              "User eligible for 25% off for next renewal",
              "User eligible for 50% off for next renewal",
              "User eligible for 75% off for next renewal",
              "",
              "",
              "",
              "User saw/would have seeen an in-app sale.",
              "",
              "",
              "",
              "",
              "",
              "At least one navigational suggestion was returned.",
              "",
              "Uer sees/should have seen promotion for Burnsie(Prompt for",
              "",
              "",
              "",
              "",
              "",
              "Subscription retry fop flow when the primary fop is dcb.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Distigunish who see the incentivized opt-in prompt",
              "",
              "leon banner is targeted at session level.",
              "User visited a child directed app details page.",
              "User visited a mixed audience app details page.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Gameplay video cluster.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Test Codes for in-app offers at session level.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "see go/reordering-subnav-tabs",
              "see go/reordering-subnav-tabs",
              "",
              "",
              "",
              "",
              "",
              "",
              "User saw/would have seen the subscription one time pass offer",
              "",
              "",
              "",
              "",
              "",
              "Subscription update fop flow at signup when the primary fop",
              "is dcb. Subscription update fop flow at sub center when the primary",
              "",
              "",
              "",
              "",
              "",
              "Test codes for the feature and each early-access partners for the Play Store IAP sales project. go/play-store-iap-sales-dd",
              "",
              "",
              "Test codes for cross-device features. See go/play-cross-device.",
              "",
              "Test code for other devices subnav. Logged for eligible users when home subnavs are fetched.",
              "",
              "",
              "Test code logged on client side for users who see the Play Pass signup interstitial.",
              "",
              "User eligible for 10% off for next renewal",
              "User eligible for 25% off for next renewal",
              "User eligible for 50% off for next renewal",
              "User eligible for 75% off for next renewal",
              "",
              "",
              "",
              "Indicates Cakewalk that legacy (phone screen) FRX was skipped in favor of the updated HU-only FRX (Cakewalk 2.0)",
              "",
              "LiveOps/Offer user coverage metrics. See: go/liveops-user-coverage",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Test code for tracking the new subscription document format in GetSkuDetails, Acquire and SubscriptionDocumentsFetcher flows",
              "",
              "",
              "",
              "",
              "",
              "",
              "Test code for tracking eligble users who are shown the cart with marketing banner.",
              "Test code for tracking users shown Play Pass perks icon in cart.",
              "Testcode for slicing MDP triggering queries in Play search.",
              "Testcode for slicing non-MDP triggering queries in Play search.",
              "Testcode for slicing requests where the offer is considered to be personalized to the users, either by google or by Play Billing Library developers.",
              "Indicates that legacy (phone screen) FRX could be skipped during a session, ignoring the feature flag and other conditions that differ between experiment arms. This will allow us to compare metrics between Cakewalk users in the experiment group and *potential* Cakewalk users in the control group.",
              "Test code for tracking sessions which are supposed to show a Play Pass parent-focused splash page.",
              "",
              "Test code for tracking sessions where a review is submitted.",
              "",
              "Test code for tracking sessions where the page is paginated by general query pagination.",
              "Test code for tracking sessions where in cart exchange options are available.",
              "Test code fpr tracking sessions where the page is being paginated by multinav pagination.",
              "",
              "Session level test code for tracking users who should see the IAP Sku Deals liveops card.",
              "Session level test code for tracking users who should see the IAP Sku Games Home liveops card.",
              "Test code for tracking sessions where featuring AHC or FHR is triggered.",
              "Session level test code for tracking users who have p13n interstitials impressions.",
              "Session-level test code logged when PRS returns a survey RecsList.",
              "",
              "Session-level test code logged when randomly shuffle clusters on target users.",
              "Session-level test code logged when randomly shuffle both clusters and apps on target users.",
              "Session level test code for tracking users who have p13n Notifications candidates.",
              "Session level test code for tracking fresh results seeking search queries.",
              "Google funded series bundle discount bucket.",
              "",
              "",
              "",
              "",
              "",
              "Session level test code that indicates that a tg related query search cluster could be shown.",
              "Session level test code that indicates that tg related queries could be inserted to related query cluster for navigational search.",
              "Event level test code that indicates promotable apps boosting is enabled. STRONG_CAT and CAT are for strong CAT and general CAT query slices.",
              "",
              "Session level test code for Growth Coffee Card Phase 1 launch, for tracking users who made eligible purchases and are eligible for the GCC in purchase flow.",
              "Session level test code for Growth Coffee Card, for tracking users who made eligible purchases and are eligible for the GCC in purchase flow. This test code is logged on server side.",
              "Test code for live ops ROI holdback experiment. Record the test code if user was in control/treatment and was eligible to see at least one liveop prior to filtering. For more info, see: go/roi-design",
              "",
              "",
              "",
              "",
              "Session level test code logged when the wide media card has invalid video asset in the asset agnostic 3x experiment.",
              "Session level test code that indicates that the user has at least one alternate form factor device.",
              "Session level test code that indicates that the user has at more than one alternate form factor devices per form factor.",
              "Session level test code that indicates that an apps discovery cluster was triggered on the search page.",
              "Session level test code that indicates that cross form factor wear Suggestion is enabled. b/222328256 for more details.",
              "Session level test code that indicates that at least one cross form factor wear suggestion is available. b/222328256 for more details.",
              "Session level test code that indicates that cross form factor tv Suggestion is enabled. b/257494005 for more details.",
              "Session level test code that indicates that at least one cross form factor tv suggestion is available. b/257494005 for more details.",
              "Session level test code that indicates the subtext is triggered for that group of suggestions. Could either be for XFF Cat, Nav or legacy subtext.",
              "Session level test code that indicates that the user has been shown some zero prefix liveops.",
              "Session level test codes containing result of tQuality lookup during market details url matching. A failed tQuality result suppresses inline details.",
              "",
              "Session level test codes containing result of aQuality lookup during market details url matching. A failed aQuality result suppresses inline details.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Session level test code indicating external details URL is an inline URL.",
              "Session level test code that indicates that decline email is sent when the subscription enters grace period.",
              "Session level test code that indicates that decline email is sent when the subscription enters suspended period.",
              "Session level test code that indicates that user was eligible for ad linking recommendation.",
              "Session level test code that indicates that a user was served an editorial FCC (Flexible Content Cluster).",
              "Session level test code for tracking fresh results seeking within the current year search queries.",
              "Event level test code for when we filtered >=1 apps due to tq failure.",
              "Session level test code for Editorial Content/Articles in SERP (FHR)",
              "Session level test code that indicates the decline reason is populated to payment decline email.",
              "Session level test code for Quest Content Card launch on Deals Home, for tracking users who made eligible purchases and are eligible for the QCC.",
              "The following are used by the server side.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Session level test code for query dependent snippet.",
              "Session level test code for Fop Steering Promotion with initial billing profile.",
              "Session level test code for Fop Steering Promotion displayed in cart with add fop action.",
              "Session level test code for Fop Steering Promotion displayed in cart with change fop action.",
              "Session level test code for Fop Steering Promotion displayed in cart with apply promotion action.",
              "Session level test code for cluster, p13n ranking.",
              "Session level test code for query dependent snippet. It is logged when the front end shows at least 1 query dependent snippet.",
              "Session level test code that indicates that at least one high churn fop options is available for user when visiting add fop page for subscription purchase. Deprecated, use 10779 instead.",
              "",
              "",
              "",
              "Session level test code for quality modulated MDP. It is logged when the front end receives a MDP without quality information.",
              "Session level test code for quality modulated MDP. It is logged when the front end receives a MDP with high quality.",
              "Session level test code for quality modulated MDP. It is logged when the front end receives a MDP with medium quality.",
              "Session level test code for quality modulated MDP. It is logged when the front end receives a MDP with low quality.",
              "Session level test code for headroom experiment. It is logged when MDP is triggered and the search is categorized as game seeking.",
              "Session level test code for rfy cluster which is displayed above general query pagination for queries which are game seeking.",
              "",
              "Testcode for logging users with authentication deactivated or set to biometric who click on \"1-tap buy\" or its alternative",
              "Session level test code that indicates the related query cluster is supposed to be displayed at the manual pagination location.",
              "Besides (10794), the query is also game seeking.",
              "Session level test code that marks eligibility of inline payment add. Eligibility bucketed based on payment method types.",
              "",
              "",
              "",
              "Session level test codes for Now! content coverage metrics. Any Now! content on Apps Home.",
              "",
              "",
              "",
              "",
              "Any Now! content on Games Home.",
              "",
              "",
              "",
              "",
              "New release Now! content on Apps Home.",
              "",
              "",
              "",
              "New release Now! content on Games Home.",
              "",
              "",
              "",
              "Editorial Now! content on Apps Home.",
              "",
              "",
              "",
              "Editorial Now! content on Games Home.",
              "",
              "",
              "",
              "Live Ops Now! content on Apps Home.",
              "",
              "",
              "",
              "Live Ops Now! content on Games Home.",
              "",
              "",
              "",
              "Pre-registration now! content on Apps Home.",
              "",
              "",
              "",
              "Pre-registration now! content on Games Home.",
              "",
              "",
              "",
              "Session level test codes for top of page Now! content coverage metrics. Any Now! content on Top of Apps Home.",
              "",
              "",
              "",
              "",
              "Any Now! content on Top of Games Home.",
              "",
              "",
              "",
              "",
              "New release Now! content on Top of Apps Home.",
              "",
              "",
              "",
              "New release Now! content on Top of Games Home.",
              "",
              "",
              "",
              "Editorial Now! content on Top of Apps Home.",
              "",
              "",
              "",
              "Editorial Now! content on Top of Games Home.",
              "",
              "",
              "",
              "Live Ops Now! content on Top of Apps Home.",
              "",
              "",
              "",
              "Live Ops Now! content on Top of Games Home.",
              "",
              "",
              "",
              "Pre-registration now! content on Top of Apps Home.",
              "",
              "",
              "",
              "Pre-registration now! content on Top of Games Home.",
              "",
              "",
              "",
              "Merch featuring Now! content on Top of Apps Home.",
              "",
              "",
              "Merch featuring Now! content on Top of Games Home.",
              "",
              "",
              "TestCode for slicing the users cohorts that should have received a budget Warning alert",
              "TestCode for Broad Intent Reweighting Session Level.",
              "TestCode for Dynasty Device Handoff Session Level.",
              "Session level test code for dev success cluster.",
              "",
              "",
              "Session level test code for merch run planogram experiment",
              "TestCode for Broad Intent Games TimeSpent Session Level.",
              "Session level test code for eligible users for manage in-app details",
              "Session level test code for users are eligible for ACC",
              "Session level test code for users are eligible for acquisition ACC",
              "Session level test code for users are eligible for reengagement ACC",
              "MDP P13N",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Second pass polaris reranking session level.",
              "Second pass polaris with ranking change session level.",
              "Session level test code for reading progress tooltip.",
              "Session level test code for Nav search d2d embedding boost.",
              "Session level test code for orders that don\u2019t have a backup fop.",
              "Test code for second pass broad intent query session level.",
              "Test code for second pass reweighting triggered session level.",
              "Test code for Books search queries that trigger Dora categorical search.",
              "Session level test code containing result of tQuality lookup during market details url matching. Unknown means the lookup found nothing.",
              "Session-level test code that indicates a user was served an Apps Launcher Cluster.",
              "Session level test code when Short Description is populated in Superroot.",
              "Session level test code when Short Description fetched in PGSS is different from that fetched in Superroot.",
              "Session level test code for queries from phone device with wear filter",
              "Session level test code for queries from wear device",
              "Session level test code for all queries using wear aq",
              "Session-level test code indicating that the user was served a Nav Ad with a app or game that is the same as the MDP on stream.",
              "Session-level test code indicating that the user was served a Nav Ad with an app or game that differs from the MDP on stream.",
              "Session-level test code indicating that the user was not served a Nav Ad.",
              "Session-level test code for Payment Tos.",
              "Session level test code that indicates a user's search query qualifies them to see third party content in Websky search stream.",
              "Session-level test code for shortening Phonesky commerce cache TTL.",
              "Session level test code for skip check mark screen for backup flow.",
              "Session level test code for one click backup fop.",
              "Session-level test code related to Google Kids Space PRS processor, indicating whether that the user had the required user features for ranking model.",
              "",
              "Session level test code that indicates second pass quality reweigthing is triggered.",
              "Session level test code that indicates second pass quality reweigthing is triggered.",
              "",
              "Cart abandonment flow for purchase flow.",
              "User saw/would have seen the in app products section in App",
              "Details Page. User saw/would have seen the details page promotion in Books",
              "Suer saw/should have seem promotion for Burnsie(Prompt for",
              "non details page in App Details Page. User saw/would have seen the promotion that was redeemd from",
              "non details page in Books Details Page. User saw/would have seen the 10% off swoop campaign.",
              "go/subs-swoop-experiment User saw/would have seen the 25% off swoop campaign.",
              "go/subs-swoop-experiment User saw/would have seen the 50% off swoop campaign.",
              "go/subs-swoop-experiment User saw/would have seen the 75% off swoop campaign.",
              "User saw/would have seen the \"wave 2\" purchasable",
              "available to the app for the current user. It helps us to slice metrics for the S&I UDPR migration (a client change). Context: https://screenshot.googleplex.com/APAqqLFYpXjfmWQ. User is eligible for some campaign, and passes surface",
              "DEPRECATED. Use campaign-specific test codes (20034-20036).",
              "User saw/would have seen the promotion that was redeemd from",
              "non details page in App Details Page. User saw/would have seen the details page in-app item",
              "promotion for Lapsed Buyers in App Details Page.",
              "",
              "",
              "",
              "",
              "Subscription cancellation flow for purchase flow per user.",
              "Subscription update fop flow at signup when the primary fop",
              "is dcb. Subscription update fop flow when the primary fop is dcb.",
              "Subscription retry fop flow when the primary fop is dcb.",
              "",
              "",
              "",
              "User level test code for Details Page Global Holdback.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "Test codes for in-app offers at user level.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "User saw/would have seen the subscription one time pass offer",
              "",
              "",
              "",
              "",
              "Test codes for the feature and each early-access partners for the Play Store IAP sales project. go/play-store-iap-sales-dd",
              "",
              "",
              "",
              "Test code for when a user was eligible for visual preview while in motion. E.g. received a notification and had visual preview setting enabled.",
              "",
              "Test code logged on client side for users who see the Play Pass signup interstitial.",
              "Test codes for seeing the effects of disabling topup in select countries.",
              "",
              "User saw/would have seen the 10% off swoop campaign.",
              "http://shortn/_L6kJNPGsS0 User saw/would have seen the 25% off swoop campaign.",
              "http://shortn/_L6kJNPGsS0 User saw/would have seen the 50% off swoop campaign.",
              "http://shortn/_L6kJNPGsS0 User saw/would have seen the 75% off swoop campaign.",
              "",
              "",
              "",
              "",
              "Test code for tracking the new subscription document format in GetSkuDetails, Acquire and SubscriptionDocumentsFetcher flows",
              "",
              "",
              "",
              "",
              "",
              "",
              "Test code for tracking banner eligble users who are shown the cart.",
              "Test code for tracking users shown Play Pass perks icon in cart.",
              "Test code for tracking users who see a Play Pass parent-focused splash page.",
              "",
              "",
              "Test code GE ranker service unknown users.",
              "Test code GE ranker service never users.",
              "Test code GE ranker service new users.",
              "Test code GE ranker service churn users.",
              "Test code GE ranker service repeat users.",
              "Test code GE ranker service unknown user value segment.",
              "Test code GE ranker service low user value segment.",
              "Test code GE ranker service medium user value segment.",
              "Test code GE ranker service high user value segment.",
              "Test code GE ranker service never user value segment.",
              "Test codes for GE surfaces.",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "User level test code for tracking users who should see the IAP Sku Deals liveops card.",
              "User level test code for tracking users who should see the IAP Sku Games Home liveops card.",
              "User level test code for tracking users who should see the featuring AHC or FHR.",
              "User level test code for tracking users who have p13n interstitials impressions.",
              "User-level test code logged when PRS returns a survey RecsList.",
              "User level test code logged when the Dev Offer EAP campaign is about to be returned.",
              "User level test code for tracking users who have p13n Notifications candidates.",
              "User level test code for Growth Coffee Card Phase 1 launch, for tracking users who made eligible purchases and are eligible for the GCC in purchase flow.",
              "User level test code for Growth Coffee Card, for tracking users who made eligible purchases and are eligible for the GCC in purchase flow. This test code is logged on server side.",
              "User level test code for Corpus Wide Growth Stamp Card, for tracking users who made eligible purchases and are eligible for the GSC in purchase flow. This test code is logged on client side.",
              "User level test code for Corpus Wide Growth Stamp Card, for tracking users who made eligible purchases and are eligible for the GSC in purchase flow. This test code is logged on server side.",
              "User level test code for Corpus Wide Growth Stamp Card, for tracking users who are eligible for the GSC in Games Home.",
              "User level test code for Loyalty Purchase Quest, for tracking users who are eligible for the LPQ in Games Home.",
              "User level test code for Corpus Wide Growth Stamp Card, for tracking users who are eligible for the GSC in Games Home. This test code is logged on server side.",
              "User level test code for Loyalty Purchase Quest, for tracking users who are eligible for the LPQ in Games Home. This test code is logged on server side.",
              "User level test code that indicates that at least one high churn fop options is available for user when visiting add fop page for subscription purchase. Deprecated, use 20361 instead.",
              "",
              "",
              "",
              "User level test code logged when the wide media card has invalid video asset in the asset agnostic 3x experiment.",
              "User level test code that indicates a user's search query qualifies them to see third party content in Websky search stream.",
              "User level test code that indicates that a user was served an editorial FCC (Flexible Content Cluster).",
              "User level test code for Quest Content Card launch on Deals Home, for tracking users who made eligible purchases and are eligible for the QCC.",
              "",
              "",
              "",
              "",
              "User level test code for Fop Steering Promotion in all user journeys; Users are tagged on unredeemed fop steering promotion impression.",
              "User level test code for Quest Platform Loyalty Stamp Card in Purchase flow.",
              "User level test code for users who have made any monetization behavior(sub, iap) before (controlled by fsUlyssesBuyerState), used for AH/GH monetization experiments.",
              "User level test code for users who have made any monetization behavior(sub, iap) for the last 180 days (controlled by ULYSSES_OOP_SPEND_PER_PURCHASE_180D), used for AH/GH monetization experiments.",
              "User level test code for users who have any purchase card abandon behavior in the last 28 day (controlled by LAST_28D_CART_ABANDONMENT_BACKEND), used for AH/GH monetization experiments.",
              "User level test code for users who have any purchase card abandon behavior in the last 7 day (controlled by LAST_7D_CART_ABANDONMENT_BACKEND), used for AH/GH monetization experiments.",
              "User level test code for post success add backup flow.",
              "User level test code for skipping ckechmark screen with backup flow.",
              "User level test code for users who are eligible for one-click backup fop.",
              "Test code for Loyalty Stamp Card, for tracking users who made eligible purchases and are eligible for the LSC in purchase flow.",
              "User level test code for eligible users for manage in-app details",
              "User level test code for Play Onboarding quest, tracking users who are eligible for Play Onboarding quest in Games Home",
              "User level test code for users who have been served GPP onboarding quest.",
              "User level test code for Play Onboarding quest, tracking users who are eligible for Play Onboarding quest in Games Home. This test code is logged on the server side.",
              "User level test code for tracking users who are being shown PersistentCartHeader through purchase flow. This test code is logged on the server side.",
              "User level test code for Merch user journey experiment. This test code is logged on the Growth Engine server side.",
              "User level test code for slicing different cohorts for Merch user journey experiments. This test code is logged on the Growth Engine server side. Testcode for cohort id 69660.",
              "Testcode for cohort id 69659.",
              "Testcode for cohort id 67267.",
              "Testcode for cohort id 67268.",
              "Testcode for cohort id 70703.",
              "Testcode for cohort id 70704.",
              "Testcode for cohort id 69661.",
              "Testcode for cohort id 69662.",
              "Testcode for cohort id 70706.",
              "Testcode for cohort id 70708.",
              "Testcode for cohort id 69738.",
              "User level test code for Non-Play Growth Events experiment (go/npge-prd). Logged on the server side and applied to users that visit Loyalty Home and are eligible to receive a quest with Play Games Achievement tasks, regardless of whether the quest was shown or held back.",
              "User level test code for reading progress tooltip.",
              "User level test code for tracking users who should see the IAP Sku Games Home liveops card.",
              "Post purchase offer test codes User level test code to track the user who sees the post purcahse offer redemption dialog for post purchase offer experiment.",
              "User level test code to track the user who sees the post purcahse offer saved dialog for post purchase offer experiment.",
              "User level test code to track the user who sees the value promotion dialog, including loyalty upsell, post purcahse offer and so on for post purchase offer experiment.",
              "MDP P13N reranking.",
              "",
              "",
              "",
              "",
              "User level test code for Play Onboarding quest, tracking users who are eligible in any serving flow via Quest Platform.",
              "User-level test code that indicates a user was served an Apps Launcher Cluster.",
              "",
              "User level test codes for pre-period user page visit frequency in past 28 days (v2).",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "User level test code for reinstall enablement. If user has any eligible reinstall passing the per user filtering logic, testcode will be logged. Note that the filtering logics are controlled by gcl flags. Ex. Play Games Home: http://shortn/_2aGCRQqToq. This test code only knows if any app passes the filtering but not which filtering params are applied.",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "trustedGenomeHierarchy": {
          "description": "The list of trusted genome hierarchy. One trusted_genome_hierarchy may contain one or multiple entities. This is required for TG 2.0 tags.",
          "items": {
            "$ref": "VendingConsumerProtoTrustedGenomeHierarchy"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VendingConsumerProtoTrustedGenomeEntity": {
      "description": "Proto message containing the id, localized title, score, and hierarchy level of a trusted genome entity. Next ID: 10",
      "id": "VendingConsumerProtoTrustedGenomeEntity",
      "properties": {
        "categoryId": {
          "description": "The category id matching this trusted genome entity. e.g. Action tag with id /m/025zzc matches category of id GAME_ACTION",
          "type": "string"
        },
        "id": {
          "description": "The identifier of a play trusted genome entity. Required.",
          "type": "string"
        },
        "level": {
          "description": "The level of the entity. E.g. in hierarchy like Action -> Platformer > Endless Runner. Action is level 1, Platformer is level 2 and Endless Runner is level 3. Currently, only APP_TAXONOMY and GAME_TAXONOMY type may have the levels. For entity that does not have hierarchy, its level is 1. Required.",
          "format": "int32",
          "type": "integer"
        },
        "predicateName": {
          "description": "The name of the relation between the app and the entity. Required.",
          "type": "string"
        },
        "queryText": {
          "description": "The localized query string for this trusted genome entity. This query will be used when we want to bring users to SERP on click.",
          "type": "string"
        },
        "score": {
          "description": "The confidence score of the entity to the app.",
          "format": "float",
          "type": "number"
        },
        "title": {
          "description": "The localized title. Required.",
          "type": "string"
        },
        "userVisible": {
          "description": "This boolean is used to decide whether this entity will be shown on user-facing features in the Store or not.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VendingConsumerProtoTrustedGenomeHierarchy": {
      "description": "Proto message containing one or multiple trusted genome entity. This is used to capture entities that belong to the same type and have parent-children relationship in the taxonomy. e.g. One hierarchy may include 3 entities with Game_Taxonomy Type: (1) Action (Level 1) (2) Platformer (Level 2 under Action) (3) Endless Runner (Level 3 under Platformer) e.g. One hierarchy may also include only 1 entity with Game_Graphic_Style: (1) Anime (No level information) Next ID: 5",
      "id": "VendingConsumerProtoTrustedGenomeHierarchy",
      "properties": {
        "entity": {
          "description": "List of entities (one or multiple) that belong in the same hierarchy. The entries will be ordered such that the first entry will be of level 1, and the second entry will be of level 2, and so on. Required",
          "items": {
            "$ref": "VendingConsumerProtoTrustedGenomeEntity"
          },
          "type": "array"
        },
        "hierarchyType": {
          "description": "The (hierarchy-level) type of this Trusted Genome hierarchy. Will only be populated when meeting certain criteria, e.g. 'GD2_Game_Main' means this hierarchy of entities can serve as the main game genre for Game Discovery 2.0.",
          "enum": [
            "UNKNOWN_HIERARCHY_TYPE",
            "GD2_GAME_MAIN",
            "GD2_GAME_SUB"
          ],
          "enumDescriptions": [
            "",
            "Indicates this can be used as the main genre in Game Discovery 2.0 (GD2). See http://shortn/_3Aj6GDRdxM for more info.",
            "Indicates this can be used as the sub genre in Game Discovery 2.0 (GD2). Specifically, sub genre tags are only limited to 'Casual' & 'Arcade' and their children genres. See http://shortn/_3Aj6GDRdxM for more info."
          ],
          "type": "string"
        },
        "source": {
          "description": "The source of this Trusted Genome hierarchy.",
          "enum": [
            "UNKNOWN_TRUSTED_GENOME_SOURCE",
            "TRUSTED_GENOME_2",
            "VALIDATED_DEVELOPER",
            "DEVELOPER_PROVIDED"
          ],
          "enumDescriptions": [
            "",
            "Source of truth for App KG annotations, a.k.a. TG2. See go/play-genome-g3doc for details.",
            "If the categories provided by rater platform and developers are matched.",
            "If there is no rater provided category or the categories provided by rater platform and developers are NOT matched."
          ],
          "type": "string"
        },
        "trustedGenomeType": {
          "description": "The (entity-level) type of trusted genome entities in this hierarchy. Required.",
          "enum": [
            "UNKNOWN_ENTITY_TYPE",
            "APP_TAXONOMY",
            "APP_ATTRIBUTE",
            "GAME_TAXONOMY",
            "GAMEPLAY_ELEMENT",
            "GAMEPLAY_MODE",
            "GAME_GRAPHIC_STYLE",
            "GAME_THEME_SETTING",
            "GAME_CONNECTIVITY",
            "GAME_DIMENSIONAL_PLANES",
            "GAME_MONETIZATION",
            "ACCESSIBLITY",
            "ASSISTANT",
            "CHROMEBOOK_COMPATIBILITY"
          ],
          "enumDescriptions": [
            "",
            "Apps taxonomy. e.g. Air travel.",
            "Apps attribute, it can be universal, e.g. VR, or it can be category specific, e.g. Beauty type makeup.",
            "Game taxonomy. e.g. Action.",
            "Gameplay element. e.g. Arcade.",
            "Gameplay mode. e.g. Single player",
            "Game graphic stype. e.g. Anime",
            "Game theme setting. e.g. Fantasy",
            "Game connectivity. e.g. Offline",
            "Game dimensional planes. e.g. 3D",
            "Game monetization. e.g. subscription, try before you buy.",
            "Accessiblity. e.g. Blind-Friendly",
            "Assistant tags, e.g. Assistant-Enabled",
            "Chrome OS compatibility tags. e.g. Optimized for Chromebooks"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VendingConsumerProtoTrustedGenomePolicy": {
      "description": "Proto message containing policy related information.",
      "id": "VendingConsumerProtoTrustedGenomePolicy",
      "properties": {
        "localizedRegionOverride": {
          "description": "Override text for region for special treatment. Override will be used in special cases for example regions are too long to show in UI, the override will be \"CA/NV/...\" to cut it short. By keeping a region override string we'll have more flexibility to adjust what we show on UI. Optional.",
          "type": "string"
        },
        "policyType": {
          "description": "Policy type. e.g. Government Endorsed, Apollo Required.",
          "items": {
            "enum": [
              "UNKNOWN_POLICY_TYPE",
              "GOVERNMENT_COMMISSIONED",
              "APOLLO_APPROVED",
              "APOLLO_EXPRESS"
            ],
            "enumDescriptions": [
              "",
              "Government Commissioned",
              "Apollo Approved",
              "Apollo ENX Approved"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "targetRegion": {
          "description": "Contains target region for the current policy. Optional",
          "items": {
            "$ref": "VendingConsumerProtoTrustedGenomePolicyTargetRegion"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VendingConsumerProtoTrustedGenomePolicyTargetRegion": {
      "id": "VendingConsumerProtoTrustedGenomePolicyTargetRegion",
      "properties": {
        "localizedRegion": {
          "description": "Localized name for targeted regions. e.g. San Francisco Bay Area Required.",
          "type": "string"
        },
        "mid": {
          "description": "Associated KG entity mid for region. e.g. /m/06pvr",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoAmbisonicsAmbisonicsMetadata": {
      "id": "VideoAmbisonicsAmbisonicsMetadata",
      "properties": {
        "channelMap": {
          "description": "Maps channel indexes of an audio stream to indexes corresponding to the specified ambisonics channel ordering scheme. For example: A 1st order pheriphonic ambisonics format is configured with 4 audio channels corresponding to ambisonic components W, X, Y, Z respectively. The channel_ordering scheme is specified as CHANNEL_ORDERING_ACN (which implies a W, Y, Z, X ordering). Therefore the channel_map is [0, 3, 1, 2].",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "channelOrdering": {
          "enum": [
            "CHANNEL_ORDERING_UNKNOWN",
            "CHANNEL_ORDERING_ACN"
          ],
          "enumDescriptions": [
            "",
            "Ambisonic Channel Number"
          ],
          "type": "string"
        },
        "nonDiegeticStereo": {
          "type": "boolean"
        },
        "normalization": {
          "enum": [
            "NORMALIZATION_UNKNOWN",
            "NORMALIZATION_SN3D"
          ],
          "enumDescriptions": [
            "",
            "Schmidt semi-normalisation"
          ],
          "type": "string"
        },
        "numChannels": {
          "format": "int32",
          "type": "integer"
        },
        "order": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "enum": [
            "TYPE_UNKNOWN",
            "TYPE_PERIPHONIC",
            "TYPE_HORIZONTAL"
          ],
          "enumDescriptions": [
            "",
            "Full 360 degree sphere (x,y,z)",
            "Planar horizontal-only plan (x,y)"
          ],
          "type": "string"
        },
        "version": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoAssetsVenomACL": {
      "description": "Valid fields in ACL are \"mdb/groupname\", or \"user/username\", e.g., \"mdb/youtube-prod\", or \"user/alice\".",
      "id": "VideoAssetsVenomACL",
      "properties": {
        "owner": {
          "description": "REQUIRED: the current owner of this video. Please note that owner does not get implicit reader/writer access. You must set them explicitly.",
          "type": "string"
        },
        "reader": {
          "description": "Allowed readers of this video.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "writer": {
          "description": "Allowed writers of this video.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoAssetsVenomSettings": {
      "description": "Describes ingredient level settings. Clients are authoritative in defining Settings. See go/venom-trustme for how Settings and ProcessingCharacteristics work together. If your Settings extension contains PII fields, please 1) Annotate them appropriately with DataPol, and 2) Add your BUILD target to google3/video/assets/venom/proto/settings/BUILD:pii See google3/video/assets/venom/proto/settings/ for extension messages.",
      "id": "VideoAssetsVenomSettings",
      "properties": {},
      "type": "object"
    },
    "VideoAssetsVenomTransition": {
      "description": "As video mutations are reconciled by Venom, we can tell if the ingredient did or did not reach certain objectives. When processing has completed, all objectives will have a corresponding transition. All transitions are reset for every mutation, but will take into account assets outside of that mutation. For example, if Asset X fails, and was part of \"OBJECTIVE_PRIMARY_ASSETS_DONE\", a rerun of Asset Y is destined to result in OUTCOME_FAILED, regardless of the fate of Asset Y. Some phenonema have effects on most or all Objectives. For example, a bad input file will result on OUTCOME_INFEASIBLE across the board (eventually, for now it's just GO_LIVE and DO_ALL, work in progress), and a failure to produce Format 18 will cause OUTCOME_FAILED across most Objectives.",
      "id": "VideoAssetsVenomTransition",
      "properties": {
        "objective": {
          "description": "The objective this transition is about. REQUIRED.",
          "enum": [
            "OBJECTIVE_UNKNOWN",
            "OBJECTIVE_INGREDIENT_DO_ALL",
            "OBJECTIVE_INGREDIENT_GO_LIVE",
            "OBJECTIVE_INGREDIENT_VALIDATED",
            "OBJECTIVE_PRIMARY_ASSETS_DONE",
            "OBJECTIVE_PREVIEW_DONE",
            "OBJECTIVE_TRANSMUXED_DONE",
            "OBJECTIVE_MEDIA_INFO_DONE",
            "OBJECTIVE_PRIMARY_720P_TRANSCODES_DONE",
            "OBJECTIVE_PRIMARY_1080P_TRANSCODES_DONE",
            "OBJECTIVE_PRIMARY_2K_TRANSCODES_DONE",
            "OBJECTIVE_PRIMARY_4K_TRANSCODES_DONE",
            "OBJECTIVE_PRIMARY_8K_TRANSCODES_DONE",
            "OBJECTIVE_FINGERPRINTS_DONE",
            "OBJECTIVE_CHECKSUMS_DONE",
            "OBJECTIVE_CLAIM_DONE",
            "OBJECTIVE_THUMBNAILS_DONE",
            "OBJECTIVE_LIVE_STITCHABLE_ASSETS_DONE",
            "OBJECTIVE_CRAWL_ASSETS_DONE",
            "OBJECTIVE_VITAL_ASSETS_DONE",
            "OBJECTIVE_SAM_FEATURES_DONE",
            "OBJECTIVE_SPEECH_RECOGNITION_DONE",
            "OBJECTIVE_MULTI_TRACK_AUDIO_DONE"
          ],
          "enumDescriptions": [
            "Should not happen.",
            "Put all the assets in a satisfactory state.",
            "Enough was done on the ingredient for the video to be playable.",
            "The validation asset is ready.",
            "The most important transcodes and other assets have been completed. Drives \"is_fully_processed\" in VAPI. Limited to UGC and Reels. Also used to atomically publish all latency-sensitive transcodes after an edit.",
            "A representation for the video in advance of all completed assets is ready.",
            "The transmuxed transcode for the video, used for faster playback in certain early GO_LIVE scenarios, is playable. This is currently limited to Photos.",
            "Basic media information is available -- a rare single-asset objective, to advertise a video's general information as quickly as possible.",
            "Subset of OBJECTIVE_PRIMARY_ASSETS_DONE for 720p resolution and below.",
            "Subset of OBJECTIVE_PRIMARY_ASSETS_DONE for 1080p resolution and below.",
            "Subset of OBJECTIVE_PRIMARY_ASSETS_DONE for 2K resolution and below.",
            "Subset of OBJECTIVE_PRIMARY_ASSETS_DONE for 4K resolution and below.",
            "Deprecated.",
            "Fingerprint assets are complete.",
            "ASSET_CHECKSUMS is complete. Only transmitted for SIGNIFICANCE_MAJOR_USER_INITATED changes.",
            "Deprecated.",
            "All thumbnails are complete.",
            "All live server stitchable ad assets are complete.",
            "All requested crawl assets for Amarna are complete. This is only needed for genus which is shared by Amarna and other clients. As of 10/2020, YT UGC is the only genus, and crawl assets include MOVING_THUMBNAIL_{8K, 30K, 90K, 300K_24FPS} and ASSET_TIMED_ANCHOR_THUMBNAIL_SPORTS_MOMENT.",
            "A super set of OBJECTIVE_PRIMARY_ASSETS_DONE and a few other assets that are important for tracking the health of a video. Note: This is for internal health tracking and *not* intended for clients.",
            "The set of features that Smart Auto Midrolls depends on for generating midroll ad breaks.",
            "",
            "All assets requested for multi-track audio content."
          ],
          "type": "string"
        },
        "outcome": {
          "description": "Whether the objective is reached or not. REQUIRED.",
          "enum": [
            "OUTCOME_UNKNOWN",
            "OUTCOME_SUCCESS",
            "OUTCOME_FAILED",
            "OUTCOME_INFEASIBLE",
            "OUTCOME_NOT_REQUESTED",
            "OUTCOME_PENDING"
          ],
          "enumDescriptions": [
            "Should not happen.",
            "We managed to put the video in the state described by the transition. All assets are in STATE_DONE or have a good reason not to be. No asset is stuck in STATE_MISSING or STATE_DIRTY, and Venom has determined that all assets in either STATE_NOT_APPLICABLE (common) or were not requested (less common) are acceptable (e.g. not marked \"must_succeed\" in TrustMe).",
            "Venom failed to put the video in the state described by the transition, due to failures in one or more assets. These are failures within video processing, rather than client issues. Venom won\u2019t try any further, until another mutation occurs. This almost always indicates that assets failed in Viper/Kronos, and ran out of retries. Failure of some consistency checks within Venom can also cause this Outcome, in theory. Both OUTCOME_INFEASIBLE and OUTCOME_NOT_REQUESTED dominate this value, when different assets have differing fates.",
            "* an asset marked as \"must_succeed\" in TrustMe is declared Not Applicable by Viper/Kronos. e.g.: a video so low-res we can't even make itag 18. The GENUS_DRIVE adapter has similar logic if *all* assets are somehow declared not applicable (http://google3/video/assets/venom/internal/genera/drive.cc?l=224&rcl=368933695). These scenarios are not common. We didn\u2019t put the video in the state described by the transition and won\u2019t try any further, until another mutation occurs. This happens if we discovered that the State can\u2019t possibly be reached for this specific video (for instance, it\u2019s not even a video, it\u2019s out of spec or it\u2019s a live stream that can\u2019t be archived,...)",
            "One of the following has occurred: 1) at least one \"must_succeed\" asset (as defined by TrustMe) was not requested by the client, or 2) no assets defined in the Objective were requested whatsoever. 3) no assets are associated with the Objective whatsoever Deleting assets is considered equivalent to never having requested them. For most genera, this a sign of a serious bug in asset declaration, either TrustMe data, client code, or backfill request. However, Photos and HVC have a few expected use cases.",
            "We are waiting to complete a transition. This is a temporary condition that should move to one of OUTCOME_SUCCESS, OUTCOME_FAILED, or OUTCOME_INFEASIBLE once processing on the video is able to complete. It's unlikely we will transition to OUTCOME_NOT_REQUESTED from here, because that outcome is determined immediately on first audit."
          ],
          "type": "string"
        },
        "reason": {
          "description": "An optional debug string indicating the reason for this transition. This is typically omitted for OUTCOME_SUCCESS. e.g. \"The video's content is invalid due to failed blobstore cloning.\"",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoAssetsVenomVideoId": {
      "description": "A VideoId is the unique identifier of a video. Privacy: VideoIds are visible in logs, notifications, etc and must not contain PII.",
      "id": "VideoAssetsVenomVideoId",
      "properties": {
        "id": {
          "description": "REQUIRED. IDs have some constraints: - 32 bytes max: this is enforced by the server - for the time being, must be parseable as a youtube ID (basically a base64-encoded string which maps to a 64-bit integer). This restriction will eventually be lifted.",
          "format": "byte",
          "type": "string"
        },
        "ns": {
          "description": "LINT.ThenChange( //depot/google3/googledata/production/playbooks/video-assets/clients.md, //depot/google3/video/assets/venom/proto/namespace.proto ) REQUIRED.",
          "enum": [
            "NS_UNKNOWN",
            "NS_YOUTUBE",
            "NS_YOUTUBE_MEDIA",
            "NS_KIDS_HUB",
            "NS_GMAIL",
            "NS_YOUTUBE_DIRECTOR",
            "NS_DCLK_VIDEO_ADS",
            "NS_TESTING",
            "NS_HVC_INGESTION",
            "NS_DRIVE",
            "NS_ASK_QNA",
            "NS_LOCAL_VIDEO",
            "NS_PLAY_AUDIOBOOKS",
            "NS_HANGOUTS_CHAT",
            "NS_VIDEO_INTEREST_FEED",
            "NS_RECORDER",
            "NS_STAMP",
            "NS_CRAWL",
            "NS_PHOTOS",
            "NS_MATERIAL_GALLERY",
            "NS_YT_REFERENCE",
            "NS_LENSLETS_VIDEOS",
            "NS_BLOGGER",
            "NS_OCEAN",
            "NS_OCEAN_DEV",
            "NS_ADORA",
            "NS_WEB_VIDEO_ADS",
            "NS_STUDIO",
            "NS_YT_TDSD_REFERENCE",
            "NS_WEB_STORY",
            "NS_NEST_CAMERA_CLOUD",
            "NS_AREA120_BLUEBIRD",
            "NS_ARTS_AND_CULTURE",
            "NS_DAI_PODCAST",
            "NS_DEMO",
            "NS_KARTO",
            "NS_CONTRIB_SERVICE_SHARED",
            "NS_CONTRIB_SERVICE_GEO_UGC",
            "NS_SEARCH_SPORTS",
            "NS_BUSINESSMESSAGING",
            "NS_AERIAL_VIEW"
          ],
          "enumDescriptions": [
            "Default (invalid) namespace if the field is not set.",
            "YouTube video ID. This is the public, encrypted, ID.",
            "YouTube media content: videos in this namespace are _NOT_ visible directly to users, but act as the primary video for video aliases in the NS_YOUTUBE namespace. IDs in this namespace are independent from regular YouTube IDs.",
            "",
            "",
            "",
            "Namespace for the Truman project.",
            "Used for Bandaid probe test videos.",
            "Namespace for Play Movies.",
            "",
            "Namespace for AskJoe Video Q&A.",
            "Namespace for local imagery aka Photo/Video On Maps.",
            "",
            "Namespace for Hangouts Chat (Dynamite)",
            "Namespace for Interest Feed Inline Video.",
            "Namespace for Recorder - User generated local News content.",
            "Namespace for STAMP - AMP Stories.",
            "Namespace for Non-YouTube videos processed through Amarna.",
            "",
            "",
            "Namespace for 'A-' References; audio or video references that are not playable on YouTube, and only used as references for ContentID claiming.",
            "",
            "",
            "",
            "Namespace for Ocean / Play Books dev/staging content. Needed because the Books staging server talks only to the prod video streaming environment.",
            "",
            "Namespace for Web Video Ads.",
            "Namespace for RichMedia Studio.",
            "Namespace for TDSD references. These are not playable on YouTube, and are only used for generating ContentID fingerprints.",
            "Namespace for Kahani Web Stories.",
            "Namespace for Nest Camera Cloud.",
            "Namespace for Area120 project Bluebird",
            "Namespace for Google Arts & Culture.",
            "Namespace for Dynamic Ad Insertion Podcasts.",
            "Namespace for the Demo tier used by new clients to try things out.",
            "Namespace for Karto videos.",
            "Namespace for shared ContribService UGC videos.",
            "Namespace for GEO UGC videos processed by ContribService.",
            "Namespace for Search Sports vertical videos.",
            "Namespace for Business Messaging videos.",
            "Namespace for Geo Aerial View Please receive approval via go/vp-newclients before adding a new namespace."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoAudioStream": {
      "description": "Next tag: 10",
      "id": "VideoAudioStream",
      "properties": {
        "bitrate": {
          "description": "Audio bitrate in bits/s.",
          "format": "int64",
          "type": "string"
        },
        "channels": {
          "description": "Number of audio channels.",
          "format": "int32",
          "type": "integer"
        },
        "codecId": {
          "description": "Audio codec ID. Uses the numeric value corresponding to the CodecId enum object, in order to avoid the dependency on vsi/videostreaminfo.proto. http://cs/symbol:CodecId%20f:google3/video/vidproc/vsi/videostreaminfo.proto",
          "format": "int32",
          "type": "integer"
        },
        "contentType": {
          "description": "Content type of the stream. Only populated with valid \"acont\" xtag values at the moment. Supported acont xtag values can be found in google3/video/storage/common/xtag_validation.cc. Examples: \"original\", \"dubbed\", \"descriptive\", \"commentary\", etc.",
          "type": "string"
        },
        "language": {
          "description": "Language, examples: \"eng\", \"en\", \"enG\", etc.",
          "type": "string"
        },
        "lengthSec": {
          "description": "Audio length, in seconds. This value is derived from metadata in the source video, and often differs from the actual duration of any given transcode. In videos without valid timestamps, this value is not calculable, and is reported as zero.",
          "format": "double",
          "type": "number"
        },
        "loudness1770Lkfs": {
          "format": "float",
          "type": "number"
        },
        "sampleRate": {
          "description": "Audio sample rate.",
          "format": "int64",
          "type": "string"
        },
        "streamIndex": {
          "description": "Index of the stream in the file, 0-based.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoClipInfo": {
      "description": "Generic clip information contains a key string and a value string.",
      "id": "VideoClipInfo",
      "properties": {
        "key": {
          "format": "byte",
          "type": "string"
        },
        "value": {
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoClosedCaptions": {
      "id": "VideoClosedCaptions",
      "properties": {
        "videoHasClosedCaptions": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAnchorCommonFeatureSet": {
      "description": "Contains anchor level features that apply to all anchor types. Next id: 22.",
      "id": "VideoContentSearchAnchorCommonFeatureSet",
      "properties": {
        "anchorQbstDistance": {
          "description": "QBST distance between the anchor and the top navboost query of the video if exists, or the video title otherwise.",
          "format": "float",
          "type": "number"
        },
        "asrAverageBabelSimilarityScore": {
          "description": "Average of babel similarity between the anchor and all asr sentences.",
          "format": "float",
          "type": "number"
        },
        "asrMaximumBabelSimilarityScore": {
          "description": "Maximum babel similarity between the anchor and the asr sentences.",
          "format": "float",
          "type": "number"
        },
        "bleurtFeatures": {
          "$ref": "VideoContentSearchBleurtFeatures",
          "description": "Features needed for Bleurt inference."
        },
        "bleurtScore": {
          "description": "The Bleurt inference score generated using the bleurt_features.",
          "format": "float",
          "type": "number"
        },
        "descartesScoreWithTitle": {
          "description": "Descartes similarity score between video title and anchor label.",
          "format": "float",
          "type": "number"
        },
        "descriptionAverageBabelSimilarityScore": {
          "description": "Average of babel similarity between the anchor and all description sentences.",
          "format": "float",
          "type": "number"
        },
        "descriptionMaximumBabelSimilarityScore": {
          "description": "Maximum babel similarity between the anchor and the description sentences.",
          "format": "float",
          "type": "number"
        },
        "dolphinDescriptivenessScore": {
          "description": "The predicted descriptiveness and usefulness rating scores generated by the Unified Dolphin model. Rating template: experimental/video/video_anchors_oneside_without_thumbnail/template.jhtml",
          "format": "float",
          "type": "number"
        },
        "dolphinEnsembleScore": {
          "description": "If the dolphin model is an ensemble model, this contains the scores associated to each individual ensemble model.",
          "items": {
            "$ref": "VideoContentSearchDolphinEnsembleScore"
          },
          "type": "array"
        },
        "dolphinFeatures": {
          "$ref": "VideoContentSearchDolphinFeatures",
          "description": "The features used to generate the Dolphin score."
        },
        "dolphinScore": {
          "description": "The score generated by the Dolphin callout model.",
          "format": "float",
          "type": "number"
        },
        "dolphinUsefulnessScore": {
          "format": "float",
          "type": "number"
        },
        "labelPhraseEmbedding": {
          "description": "A phrase embedding for the anchor label. The model used to generate the embedding can be found in VideoAnchorSets: video_score_info.common_features.label_phrase_embedding_model",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "mumDescriptivenessScore": {
          "description": "The predicted descriptiveness of the anchor using the MUM unified scoring model.",
          "format": "float",
          "type": "number"
        },
        "mumUsefulnessScore": {
          "description": "The predicted usefulness of the anchor using the MUM unified scoring model.",
          "format": "float",
          "type": "number"
        },
        "retentionScore": {
          "description": "A score that is correlated with retention probability of the interval associated with this anchor (start time to end time). Retention probability of an interval is 1 - (probability the user does not watch the interval all the way through, given they started watching it). This score may be predicted by a model, or calculated from actual retention data.",
          "format": "float",
          "type": "number"
        },
        "saftDocument": {
          "$ref": "NlpSaftDocument",
          "description": "A saft document generated from the anchor label."
        },
        "timedLabelFeatures": {
          "description": "For annotating labels and their timing and context info. For example, this is used for anchor labels within a passage.",
          "items": {
            "$ref": "VideoContentSearchCaptionLabelFeatures"
          },
          "type": "array"
        },
        "timestamp": {
          "items": {
            "$ref": "VideoContentSearchAnchorCommonFeatureSetLabelSpanTimestamp"
          },
          "type": "array"
        },
        "titleAnchorBabelMatchScore": {
          "description": "Babel similarity between the anchor and the video title.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAnchorCommonFeatureSetLabelSpanTimestamp": {
      "description": "When an anchor label has a long duration (for example, labels that contain multiple sentences), this field stores the mapping between label segments and the start time.",
      "id": "VideoContentSearchAnchorCommonFeatureSetLabelSpanTimestamp",
      "properties": {
        "asrConfidence": {
          "description": "The ASR confidence for the label span, if available.",
          "format": "float",
          "type": "number"
        },
        "isSentenceStart": {
          "description": "Whether or not this token is the first token in a sentence.",
          "type": "boolean"
        },
        "labelBeginCharIndex": {
          "description": "The character index range for the span. The end index is exclusive.",
          "format": "int64",
          "type": "string"
        },
        "labelEndCharIndex": {
          "format": "int64",
          "type": "string"
        },
        "timeMs": {
          "description": "The time of the span.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAnchorThumbnail": {
      "description": "Properties of the thumbnail image to show for an anchor.",
      "id": "VideoContentSearchAnchorThumbnail",
      "properties": {
        "imagesearchDocid": {
          "description": "Serving docid for the thumbnail in the images-tbn tables.",
          "format": "uint64",
          "type": "string"
        },
        "isThumbnailMissing": {
          "description": "Set to true when no thumbnail could be generated for this anchor.",
          "type": "boolean"
        },
        "servingMetadata": {
          "$ref": "ImageBaseThumbnailMetadata",
          "description": "Metadata about the anchor thumbnail computed by Amarna, including dimensions and the size in bytes."
        },
        "thumbnailInfo": {
          "$ref": "VideoContentSearchAnchorThumbnailInfo",
          "description": "Information about the thumbnail anchor."
        },
        "timestampMs": {
          "description": "Millisecond timestamp of the frame used for the thumbnail.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAnchorThumbnailInfo": {
      "id": "VideoContentSearchAnchorThumbnailInfo",
      "properties": {
        "colorEntropy": {
          "description": "Entropy of the clustered color distribution.",
          "format": "float",
          "type": "number"
        },
        "imageData": {
          "$ref": "ImageData",
          "description": "Thumbnail image data for SafeSearch classification."
        },
        "isUnsafe": {
          "description": "Convenience field that consolidates signals for whether this thumbnail is safe.",
          "type": "boolean"
        },
        "starburstV4Embedding": {
          "$ref": "DrishtiDenseFeatureData",
          "description": "64d float vector of starburst v4 embedings."
        },
        "thumbnailBytes": {
          "description": "The raw data for a thumbnail.",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAnchorsCommonFeatureSet": {
      "description": "Contains anchor set level features that apply to all anchor types.",
      "id": "VideoContentSearchAnchorsCommonFeatureSet",
      "properties": {
        "dolphinDescriptivenessStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the Dolphin descriptiveness scores of the anchors in the set."
        },
        "dolphinUsefulnessStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the Dolphin usefulness scores of the anchors in the set."
        },
        "mumDescriptivenessStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the MUM descriptiveness scores of the anchors in the set."
        },
        "mumUsefulnessStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the MUM usefulness scores of the anchors in the set."
        }
      },
      "type": "object"
    },
    "VideoContentSearchAnchorsThumbnailInfo": {
      "id": "VideoContentSearchAnchorsThumbnailInfo",
      "properties": {
        "hasMissingStarburst": {
          "description": "Whether or not any of the anchor thumbnails have missing Starburst embeddings.",
          "type": "boolean"
        },
        "hasMissingThumbnails": {
          "description": "Whether or not any of the anchors have missing thumbnails.",
          "type": "boolean"
        },
        "thumbnailDiversity": {
          "description": "A score representing how diverse a set of thumbnails is. This is currently defined as one minus the median pairwise cosine similarity between thumbnail Starburst embeddings.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAspect": {
      "description": "Product aspect.",
      "id": "VideoContentSearchAspect",
      "properties": {
        "fallbackAspect": {
          "description": "Product aspect to be used if non of the other aspects exist.",
          "type": "string"
        },
        "saftAspect": {
          "description": "Product aspect produced by running SAFT annotation.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchAsrCaption": {
      "description": "Contains token-level information about ASR captions.",
      "id": "VideoContentSearchAsrCaption",
      "properties": {
        "confidence": {
          "description": "The confidence score of the token: between 0 and 1.",
          "format": "float",
          "type": "number"
        },
        "durationMs": {
          "description": "The duration that the token is spoken for.",
          "format": "float",
          "type": "number"
        },
        "startTimeMs": {
          "description": "The time in the video at which the token starts being spoken.",
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "description": "The speech token.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchBleurtFeatures": {
      "description": "Contains features needed for Bleurt inference.",
      "id": "VideoContentSearchBleurtFeatures",
      "properties": {
        "candidate": {
          "type": "string"
        },
        "reference": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionEntityAnchorFeatures": {
      "description": "Features and debug info for individual caption entity video anchors.",
      "id": "VideoContentSearchCaptionEntityAnchorFeatures",
      "properties": {
        "asrMentionText": {
          "description": "If the description anchor has been recognized as an entity and that entity has also been mention in the ASR, this is the mention text from the ASR.",
          "type": "string"
        },
        "asrMentionTranscriptOffset": {
          "description": "The start index of the ASR entity mention from the beginning of the ASR transcript. The index is included so that individual mentions that share the same mid and time can be distinguished which happens when an entity is mentioned multiple times in an ASR sentence. Each mid/asr_mention_transcript_offset will be unique.",
          "format": "int32",
          "type": "integer"
        },
        "asrSentence": {
          "description": "The nearest ASR sentence.",
          "type": "string"
        },
        "asrStartTime": {
          "description": "The begin time in ms of the ASR sentence.",
          "format": "int32",
          "type": "integer"
        },
        "bertScores": {
          "description": "The result of the BERT inference using the title, ASR sentence and entity mention text.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "broadness": {
          "description": "A score to help determine how specific this entity is.",
          "format": "float",
          "type": "number"
        },
        "durationCoverage": {
          "description": "The percentage of the video covered by the span of the first mention to the last mention.",
          "format": "float",
          "type": "number"
        },
        "entityConnectedness": {
          "description": "The webref connectedness score of the entity.",
          "format": "float",
          "type": "number"
        },
        "entityDescription": {
          "description": "A short text describing the entity.",
          "type": "string"
        },
        "entityInfo": {
          "$ref": "VideoContentSearchCaptionEntityDocInfo",
          "description": "Information about how many documents the entity occurred in and how many total mentions the entity has across the entire video corpus."
        },
        "entityMentionInDescription": {
          "description": "Whether or not the entity mention text appears in the description of the video.",
          "type": "boolean"
        },
        "estimatedMentionTime": {
          "description": "The estimated begin time in ms of the entity mention using the text offset divided by the ASR duration.",
          "format": "int32",
          "type": "integer"
        },
        "groupCohesion": {
          "description": "Average similarity between this anchor and other anchors in the set.",
          "format": "float",
          "type": "number"
        },
        "hypernymConfidence": {
          "description": "The confidence of the hypernym used as the set label.",
          "format": "float",
          "type": "number"
        },
        "hypernymCount": {
          "description": "Number of hypernyms used for calculating similarity.",
          "format": "float",
          "type": "number"
        },
        "hyperpediaSalientTermsSimilarity": {
          "description": "The cosine similarity between the document salient terms and the hyperpedia hypernyms for a given entity.",
          "format": "float",
          "type": "number"
        },
        "inWebrefEntities": {
          "description": "Whether or not this entity is in the webref entities.",
          "type": "boolean"
        },
        "isOracleEntity": {
          "description": "True if the given entity appears as an Oracle followup query.",
          "type": "boolean"
        },
        "isProduct": {
          "description": "Whether this entity counts as a 'product' for the purpose of dividing entities between the 'related topics' and 'products in this video' features.",
          "type": "boolean"
        },
        "maxMentionConfidence": {
          "description": "The maximum confidence of all of the entity mentions in the transcript.",
          "format": "float",
          "type": "number"
        },
        "mentionConfidence": {
          "description": "The confidence that the ASR mention matches the given mid.",
          "format": "float",
          "type": "number"
        },
        "mentions": {
          "description": "Number of times an entity is mentioned in the ASR transcript.",
          "format": "int32",
          "type": "integer"
        },
        "msFromLastAnchor": {
          "description": "The duration in ms between this anchor and the previous anchor or the beginning of the video if this is the first anchor.",
          "format": "int32",
          "type": "integer"
        },
        "nextAsrSentence": {
          "description": "The ASR sentence after asr_sentence or \"\" if it is the last sentence.",
          "type": "string"
        },
        "otherAsrMentionText": {
          "description": "The ASR text of each mention of the entity.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "otherEstimatedMentionTimes": {
          "description": "Each time the entity was mentioned.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "previousAsrSentence": {
          "description": "The ASR sentence before asr_sentence or \"\" if it is the first sentence.",
          "type": "string"
        },
        "trustedNameConfidence": {
          "description": "The confidence that the ASR mention is a trusted name.",
          "format": "float",
          "type": "number"
        },
        "webrefEntityTopicality": {
          "description": "The webref entity topicality score if the entity is a webref entity and 0 if not.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionEntityAnchorSetFeatures": {
      "description": "Features and debug info for clusters of caption entity video anchors.",
      "id": "VideoContentSearchCaptionEntityAnchorSetFeatures",
      "properties": {
        "aggregateScore": {
          "description": "The total score used for filtering and selecting entity sets.",
          "format": "float",
          "type": "number"
        },
        "clusterSize": {
          "description": "The prefiltered size of the entity set.",
          "format": "int32",
          "type": "integer"
        },
        "entitiesInWebrefEntities": {
          "description": "The number of entities in the anchor set that are in the webref entities.",
          "format": "int32",
          "type": "integer"
        },
        "entityMentionInDescriptionCount": {
          "description": "The number of anchors where the entity mention text appears in the description of the video.",
          "type": "boolean"
        },
        "groupCohesion": {
          "description": "The average cosine similarity between hypernyms of members of the set.",
          "format": "float",
          "type": "number"
        },
        "hypernym": {
          "description": "The most prominent hypernym across the entities in the set.",
          "type": "string"
        },
        "hypernymSalience": {
          "description": "The salience of the best hypernym for the set.",
          "format": "float",
          "type": "number"
        },
        "medianMentions": {
          "description": "Median number of times any member of the set was mentioned in the ASR transcript.",
          "format": "int32",
          "type": "integer"
        },
        "mentionSalience": {
          "description": "Mentions divided by the total number of entity mentions in the video.",
          "format": "float",
          "type": "number"
        },
        "salience": {
          "description": "Salience of the set computed by aggregating the hypernyms from each member and calculating the cosine similarity with the salient terms.",
          "format": "float",
          "type": "number"
        },
        "topHypernym": {
          "description": "The top N hypernyms for the entities in the set.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "totalMentions": {
          "description": "Number of times any member of the group was mentioned in the ASR transcript.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionEntityDocInfo": {
      "description": "Contains information about document appearances of an entity.",
      "id": "VideoContentSearchCaptionEntityDocInfo",
      "properties": {
        "entityDocCount": {
          "description": "The number of documents where this entity was mentioned at least once.",
          "format": "int64",
          "type": "string"
        },
        "entityMentionCount": {
          "description": "The number of times the entity was mentioned across the entire corpus.",
          "format": "int64",
          "type": "string"
        },
        "mid": {
          "description": "The entity id.",
          "type": "string"
        },
        "totalDocCount": {
          "description": "The number of documents in the corpus.",
          "format": "int64",
          "type": "string"
        },
        "totalMentionCount": {
          "description": "The number of mentions of any entity across the entire corpus.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionInfo": {
      "description": "Contains transcript-level data about a video whether it comes from ASR or closed captions.",
      "id": "VideoContentSearchCaptionInfo",
      "properties": {
        "asrCaption": {
          "items": {
            "$ref": "VideoContentSearchAsrCaption"
          },
          "type": "array"
        },
        "saftDocument": {
          "$ref": "NlpSaftDocument"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionLabelFeatures": {
      "description": "Contains timing and text for a given label.",
      "id": "VideoContentSearchCaptionLabelFeatures",
      "properties": {
        "alignedOcrTexts": {
          "description": "OCR anchors with overlapping time-window with this anchor",
          "items": {
            "$ref": "VideoContentSearchOCRText"
          },
          "type": "array"
        },
        "alignedTime": {
          "description": "The time stamp in milliseconds for the reference text (e.g. description anchor time).",
          "format": "int64",
          "type": "string"
        },
        "contextText": {
          "description": "Text around the aligned_time of a long duration, say [-15 minutes, +15 minutes]",
          "type": "string"
        },
        "labelText": {
          "description": "The main label text for the feature.",
          "type": "string"
        },
        "textSimilarityFeatures": {
          "$ref": "VideoContentSearchTextSimilarityFeatures",
          "description": "Identified matching text by similarity."
        },
        "textSpanAtAlignedTime": {
          "description": "The text span in the passage starting from the aligned time.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionSpanAnchorFeatures": {
      "id": "VideoContentSearchCaptionSpanAnchorFeatures",
      "properties": {
        "dolphinFeatures": {
          "$ref": "VideoContentSearchSpanDolphinFeatures",
          "description": "The features used to construct the inference example."
        },
        "dolphinScores": {
          "$ref": "VideoContentSearchSpanDolphinScores",
          "description": "The inference result from the Dolphin span model."
        },
        "embeddingDistance": {
          "description": "Embedding distances (e.g. cosine distance) to the other anchors of the same video.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "postGapInMs": {
          "description": "Time gap in ms to the next anchor. Always positive number.",
          "format": "int32",
          "type": "integer"
        },
        "preGapInMs": {
          "description": "Time gap in ms to the previous anchor. Always a positive number.",
          "format": "int32",
          "type": "integer"
        },
        "saftBeginTokenIndex": {
          "description": "The range of tokens in video_info.saft_doc for the anchor label.",
          "format": "int32",
          "type": "integer"
        },
        "saftEndTokenIndex": {
          "format": "int32",
          "type": "integer"
        },
        "saftTranscriptEndCharOffset": {
          "format": "int32",
          "type": "integer"
        },
        "saftTranscriptStartCharOffset": {
          "description": "The range of characters in video_info.saft_transcript for the anchor label.",
          "format": "int32",
          "type": "integer"
        },
        "spanAsrConfidenceStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the ASR confidence for the selected candidate."
        },
        "spanDolphinScore": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the Dolphin span token scores for the selected candidate."
        },
        "wordCount": {
          "description": "Word count of the span text, tokenized with SAFT.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCaptionSpanAnchorSetFeatures": {
      "id": "VideoContentSearchCaptionSpanAnchorSetFeatures",
      "properties": {
        "anchorSetDolphinScoreStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the dolphin scores over the anchor set."
        }
      },
      "type": "object"
    },
    "VideoContentSearchCommentAnchorSetFeatures": {
      "description": "A message containing set-level comment anchor features. Next ID: 3",
      "id": "VideoContentSearchCommentAnchorSetFeatures",
      "properties": {
        "replies": {
          "items": {
            "$ref": "VideoContentSearchCommentAnchorSetFeaturesComment"
          },
          "type": "array"
        },
        "rootComment": {
          "$ref": "VideoContentSearchCommentAnchorSetFeaturesComment"
        }
      },
      "type": "object"
    },
    "VideoContentSearchCommentAnchorSetFeaturesComment": {
      "description": "A structure that represents a comment. Fields 1 through 6 are designed to store responses from the 3P YouTube Data API (see https://developers.google.com/youtube/v3/docs/comments). Field 7 is used to store the Google-internal representation of the comment; if it is populated, then all other fields may be empty. Next ID: 8",
      "id": "VideoContentSearchCommentAnchorSetFeaturesComment",
      "properties": {
        "commentId": {
          "description": "The ID that YouTube uses to uniquely identify the comment.",
          "type": "string"
        },
        "likeCount": {
          "description": "The total number of likes (positive ratings) the comment has received.",
          "format": "int32",
          "type": "integer"
        },
        "miniStanza": {
          "$ref": "YoutubeCommentsClusteringMiniStanza",
          "description": "The MiniStanza object that represents the comment. If populated, all other fields in this message may be empty."
        },
        "publishedAt": {
          "description": "The date and time when the comment was orignally published, specified in ISO 8601 format.",
          "type": "string"
        },
        "textDisplay": {
          "description": "The comment's text, in HTML.",
          "type": "string"
        },
        "textOriginal": {
          "description": "The original, raw text of the comment.",
          "type": "string"
        },
        "updatedAt": {
          "description": "The date and time when the comment was last updated, specified in ISO 8601 format.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchDescriptionAnchorFeatures": {
      "id": "VideoContentSearchDescriptionAnchorFeatures",
      "properties": {
        "entityTextCoverage": {
          "description": "When the description anchor text has been recognized as an entity, how much of the description anchor text is covered by the entity mention.",
          "format": "float",
          "type": "number"
        },
        "inAsr": {
          "description": "Whether or not a mention of the description anchor exists in the ASR.",
          "type": "boolean"
        },
        "isDescriptionAnchor": {
          "description": "Whether or not the anchor was created from the description for use in training data. This will be set to true for positive examples and false for negative examples.",
          "type": "boolean"
        },
        "spanToAsrTime": {
          "description": "The distance from the ASR sentence to the description anchor time in ms.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchDescriptionAnchorSetFeatures": {
      "id": "VideoContentSearchDescriptionAnchorSetFeatures",
      "properties": {
        "asrAnchorCount": {
          "description": "The number of description anchors that were matched to captions in the ASR.",
          "format": "int32",
          "type": "integer"
        },
        "asrAnchorFraction": {
          "description": "The fraction of anchors that were matched to captions in the ASR.",
          "format": "float",
          "type": "number"
        },
        "uniqueAsrMidCount": {
          "description": "The number of unique mids which where matched to description anchors.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchDescriptionSpanInfo": {
      "description": "Metadata about the span when the anchor source is description span.",
      "id": "VideoContentSearchDescriptionSpanInfo",
      "properties": {
        "contextTokenCount": {
          "description": "The number of tokens in the context (sentence) where the description span is extracted from.",
          "format": "int32",
          "type": "integer"
        },
        "dolphinScores": {
          "$ref": "VideoContentSearchSpanDolphinScores",
          "description": "The inference result from the Dolphin span model if the anchor's source is description span."
        },
        "spanDolphinScoreStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the Dolphin span token scores for the selected candidate. Currently, dolphin_scores in DescriptionSpanInfo would only contain a single span candidate so this field is essentially the copy of the score_stats for that span candidate."
        },
        "spanTokenCount": {
          "description": "The number of tokens in the description span. The description span is formed from non-contiguous segment spans of a sentence (context), where each segment span's score satifsies the min span thresholds.",
          "format": "int32",
          "type": "integer"
        },
        "spanTokenCountRatio": {
          "description": "The ratio of span_token_count / context_token_count.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchDolphinEnsembleScore": {
      "description": "Contains information about the scores from each individual dolphin ensemble model.",
      "id": "VideoContentSearchDolphinEnsembleScore",
      "properties": {
        "dolphinScore": {
          "description": "The score generated by the Dolphin callout model.",
          "format": "float",
          "type": "number"
        },
        "modelName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchDolphinFeatures": {
      "id": "VideoContentSearchDolphinFeatures",
      "properties": {
        "altQuery": {
          "description": "The alt query used for building the Dolphin example.",
          "type": "string"
        },
        "answer": {
          "description": "The answer used for building the Dolphin example.",
          "type": "string"
        },
        "query": {
          "description": "The query used for building the Dolphin example.",
          "type": "string"
        },
        "timeMs": {
          "description": "The time stamp of the video anchor in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "title": {
          "description": "The title used for building the Dolphin example.",
          "type": "string"
        },
        "url": {
          "description": "The url of the video.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchDolphinScoringConfig": {
      "id": "VideoContentSearchDolphinScoringConfig",
      "properties": {
        "descriptivenessOutputKey": {
          "description": "The output put keys for Dolphin PredictResponse",
          "type": "string"
        },
        "ensembleModelNames": {
          "description": "If the dolphin model is an ensemble model (e.g. Video QnA model which consists of 4 teacher models), stores each individual model name.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "inferenceBatchSize": {
          "description": "The inference batch size to use for inference methods that handle batching.",
          "format": "int32",
          "type": "integer"
        },
        "inferenceMethod": {
          "description": "The method to use for inference. This must be set or inference will fail.",
          "enum": [
            "NONE",
            "RPC",
            "IN_PROCESS"
          ],
          "enumDescriptions": [
            "",
            "Use a remote model server (for example, TPU server) to run inference. If this mode is used, service_bns should be set.",
            "Run inference in the flume workers. If this is used, model_path should be set."
          ],
          "type": "string"
        },
        "maxRpcRetries": {
          "description": "Holds value of flag --max_rpc_retries.",
          "format": "int32",
          "type": "integer"
        },
        "modelName": {
          "description": "Model name used for ModelSpec in PredictRequest used in the PredictionService API.",
          "type": "string"
        },
        "modelPath": {
          "description": "Only used when using the bulk_inference API. See go/dolphin-models to learn about the different dolphin models.",
          "type": "string"
        },
        "outputKey": {
          "description": "TODO(alexiaxu) To deprecate this field in the future Output key for Dolphin PredictResponse.",
          "type": "string"
        },
        "rpcDeadlineSeconds": {
          "description": "Holds value of flag --rpc_deadline (converted to seconds).",
          "format": "double",
          "type": "number"
        },
        "serviceBns": {
          "description": "Tensorflow inference BNS address when using PredictionService API.",
          "type": "string"
        },
        "usefulnessOutputKey": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchEntityAnnotations": {
      "description": "Entity annotations for one of the mids representing an anchor label or a query text.",
      "id": "VideoContentSearchEntityAnnotations",
      "properties": {
        "category": {
          "description": "The Webref category that this entity belongs to e.g. \"/moka/software\".",
          "type": "string"
        },
        "confidence": {
          "description": "The overall confidence that this entity is annotated somewhere in the label.",
          "format": "float",
          "type": "number"
        },
        "isRestricted": {
          "description": "Whether or not this entity belongs to a set of blocklisted categories.",
          "type": "boolean"
        },
        "mid": {
          "description": "The Webref entity mid.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchEntityGroupInfo": {
      "id": "VideoContentSearchEntityGroupInfo",
      "properties": {
        "collectionId": {
          "description": "Collection id.",
          "type": "string"
        },
        "label": {
          "description": "Label for this anchor group.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchFrameSimilarityInterval": {
      "description": "Frame-level similarities info for each topic for an interval of frames.",
      "id": "VideoContentSearchFrameSimilarityInterval",
      "properties": {
        "frameSimilarity": {
          "description": "The similarity between this topic and starburst features for frames in [frames[frame_level_starburst_start_index], frames[frame_level_starburst_start_index + len(frame_similarity)].",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "framesEndTimestampMs": {
          "description": "Timestamp in milliseconds for the last frame in this frame interval.",
          "format": "int64",
          "type": "string"
        },
        "framesStarburstStartIndex": {
          "description": "The index of the first frame within this interval of similar frames. VideoMultimodalTopicFeatures.frame_starburst_data.",
          "format": "int32",
          "type": "integer"
        },
        "framesStartTimestampMs": {
          "description": "Timestamp in milliseconds for the first frame in this frame interval.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchFrameStarburstData": {
      "description": "Starburst frame-level dense data.",
      "id": "VideoContentSearchFrameStarburstData",
      "properties": {
        "denseVector": {
          "description": "Raw float feature vector of the starburst representation.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "sbVersion": {
          "description": "Starburst version. Possible values are: STARBURST_TEXT_V4 STARBURST_TEXT_V4_5 STARBURST_TEXT_V4_PLC STARBURST_TEXT_V5",
          "enum": [
            "SIGNAL_VERSION_UNSPECIFIED",
            "RAID_V1",
            "RAID_V2",
            "RAID_V2_2",
            "RAID_V2_NEST",
            "RAID_V3",
            "RAID_FOREGROUND_SEGMENTER_V1",
            "RAID_FOREGROUND_SEGMENTER_V2",
            "RAID_PRODUCT_SEGMENTER_V1",
            "RAID_PRODUCT_SEGMENTER_V2",
            "BARCODE_V1",
            "BARCODE_V2",
            "BARCODE_V3",
            "LOGO_DEEPLOGO",
            "LOGO_V1",
            "LOGO_V2",
            "LOGO_V2_PLUS",
            "LOGO_MNET_V2",
            "LOGO_MNET_V2_HATE_SYMBOLS",
            "ICA_HNET",
            "ICA_INET",
            "ICA_KNET",
            "ICA_LNET",
            "ICA_OIDV6_GNET",
            "ICA_ONET",
            "ICA_PNET",
            "ICA_PNET_SENSITIVE",
            "ICA_RNET",
            "NIMA_VQ_V1",
            "NIMA_AVA_V1",
            "NIMA_VQ_V2",
            "NIMA_AVA_V2",
            "ATT_GMAIL",
            "ATT_MS",
            "IM2SHOP_LOCAL_V1",
            "IM2SHOP_LOCAL_V2",
            "NIMBY_RAW_V0",
            "NIMBY_RAW_V1",
            "NIMBY_TOKENIZER_V0",
            "NIMBY_TOKENIZER_V1",
            "IM2QUERY_LABELED_PRODUCTS_V1",
            "IM2QUERY_LABELED_PRODUCTS_V2",
            "PLACE_EMB_V1",
            "PLACE_EMB_V2",
            "STARBURST_V3",
            "STARBURST_V4",
            "STARBURST_V4_01",
            "STARBURST_VISUAL_V4",
            "STARBURST_V5",
            "STARBURST_V5_5",
            "ATTRIBUTE_EMBEDDING_V1",
            "PHOTOCAT_V1",
            "PHOTOCAT_V3",
            "PHOTOCAT_V4",
            "PHOTOCAT_V5",
            "STARBURST_TEXT_V4",
            "STARBURST_TEXT_V4_5",
            "STARBURST_TEXT_V4_PLC",
            "STARBURST_TEXT_V5",
            "STARBURST_TEXT_V5_PLC",
            "COLLAGE_V1",
            "SHOPPING_COLOR_INFO_V1_V2",
            "SHOPPING_COLOR_INFO_V3",
            "SHOPPING_COLOR_INFO_V3_WITHOUT_PER_DOMAIN_OUTPUTS",
            "SHOPPING_COLOR_SAMPLING_V1",
            "FOODNET_WIC_V1",
            "FOODNET_WIC_V2",
            "SINGLE_IMAGE_HOLISTIC_STABLE",
            "SINGLE_IMAGE_HOLISTIC_EXP",
            "MOKA_ATTRIBUTES_V1",
            "MOKA_ATTRIBUTES_V1_1",
            "MOKA_ATTRIBUTES_V1_2",
            "MOKA_ATTRIBUTES_V2",
            "GNN_OCR_EMB_V1",
            "AKSARA_RPN_LAYOUT",
            "GCN_LAYOUT",
            "FACE_DETECTION_V1",
            "FACE_DETECTION_LANDMARKLESS_V2",
            "FACE_DETECTION_V2",
            "PRODUCT_POSE_SHOE_V1",
            "GOCR_LATEST",
            "GOCR_STABLE",
            "PAGEBURST_V1",
            "PAGEBURST_V2",
            "ADSBURST_V09",
            "ADSBURST_COMP_V09",
            "ADSBURST_V1_COMP",
            "ADSBURST_V1_CONCAT",
            "ADSBURST_BASIC_COAT4_V0",
            "ADSBURST_HUBBLE_V1_COMP",
            "ADSBURST_HUBBLE_V1_CONCAT",
            "ADSBURST_DISCOVERY_UNCOMFORTABLE_V1",
            "ADSBURST_DISCOVERY_NERV_SUBS_V1",
            "ADSBURST_BASIC_TEXT_TOWER_V0",
            "SHOPPING_IMAGE_TRANSFORMATION_UNCROP",
            "SHOPPING_IMAGE_TRANSFORMATION_V2",
            "SCREENAI_V1",
            "SCREENAI_V2",
            "SCREENAI_V2_MOBILE",
            "SCREENAI_CLASSIFIER_V1",
            "PERSONNET_V4",
            "PERSONNET_V5",
            "DEEP_IMAGE_ENGAGINGNESS_V1"
          ],
          "enumDescriptions": [
            "UNSPECIFIED case for default value 0.",
            "Raid versions.",
            "",
            "",
            "Trained on RAID + Nest combined data, which improved detector performance on surveillance video frames.",
            "",
            "",
            "",
            "",
            "",
            "Barcode versions.",
            "",
            "",
            "Logo versions.",
            "DeepLogo",
            "LogoMNet V1",
            "LogoMNet V1 model with V2 index.",
            "LogoMNet V2",
            "LogoMNet V2 with hate symbol recognition.",
            "ICA versions.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Nima versions.",
            "",
            "",
            "",
            "Attachment icon versions.",
            "",
            "Im2Shop local feature versions.",
            "",
            "NIMBY versions. The original version of the NIMBY raw feature from Q3 2019.",
            "\"Mobile NIMBY\": A lightweight NIMBY model that take grayscale inputs. The output dimension is the same as NIMBY_V0, but the embeddings are different. Significant latency wins over NIMBY_V0 and also some quality wins.",
            "The original version of NIMBY Tokens from Q3 2019.",
            "\"Mobile NIMBY Tokens\": A lightweight NIMBY model that take grayscale inputs. The output dimension is the same as NIMBY_V0, but the embeddings are different. Significant latency wins over NIMBY_V0 and also some quality wins.",
            "Im2Query labeled products versions.",
            "",
            "Place embedding versions.",
            "",
            "Starburst versions. LINT.IfChange",
            "",
            "Starburstv4 with stretch resize.",
            "",
            "",
            "LINT.ThenChange(//depot/google3/image/content/proto/image_content.proto)",
            "Attribute embedding versions.",
            "PhotoCat versions. The photocat v1 signal is based on the photocat qic v1 model trained from the Starburst v3 embeddings and the ICA labels.",
            "The photocat v3 signal is based on the photocat qic v3 model trained from the Starburst v4.5 embeddings.",
            "The photocat v4 signal is based on the photocat qic v4 model trained from the Starburst v5 embeddings.",
            "The photocat v5 signal is based on the photocat qic v5 model trained from the Starburst v5.5 embeddings.",
            "Starburst text co-embedding versions.",
            "",
            "",
            "",
            "",
            "Image collage model versions.",
            "ColorInfo versions",
            "When both SHOPPING_COLOR_INFO_V3_WITHOUT_PER_DOMAIN_OUTPUTS and SHOPPING_COLOR_INFO_V3 are in the request, SHOPPING_COLOR_INFO_V3's response is returned.",
            "",
            "",
            "FoodNet whole image classifier versions.",
            "",
            "Single Image Holistic versions.",
            "",
            "Moka attributes.",
            "",
            "",
            "",
            "GNN OCR embedding.",
            "OCR Page layout analysis versions.",
            "",
            "Face Detection versions. These versions are only used with module_wanted: \"face_detection\", with the intent of deprecating module_wanted: \"face_detection_nextgen\". When using FACE_DETECTION_V1, models with and without landmarks are specified by setting the \"Source\" value in VisualSearchRequestContext.face_detection_options to either FACESSD or FACESSD_LANDMARKLESS. Going forward, all new versions of face detectors will use the following enums to indicate whether the model produces landmarks, with a version numbering specifying how recent that model is. E.g. FACE_DETECTION_V3 will use a newer face detection model than FACE_DETECTION_V2, while FACE_DETECTION_LANDMARKLESS_V3 will use a newer landmarkless face detection model than FACE_DETECTION_LANDMARKLESS_V2.",
            "",
            "",
            "Pursuit product pose versions.",
            "GOCR versions.",
            "",
            "Pageburst versions.",
            "",
            "Adsburst versions.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Shopping image transformation versions.",
            "",
            "ScreenAI versions. IconNet.",
            "IconNet, any image size.",
            "IconNet, mobile image size.",
            "ScreenAI classifier versions.",
            "PersonNet versions.",
            "",
            "Deep image engagingness versions."
          ],
          "type": "string"
        },
        "timestampMs": {
          "description": "Timestamp in milliseconds for this frame.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchGenerativePredictionFeatures": {
      "id": "VideoContentSearchGenerativePredictionFeatures",
      "properties": {
        "passage": {
          "description": "Features for inferences from generative models.",
          "type": "string"
        },
        "predictions": {
          "description": "Inference results.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "target": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchGenerativeTopicPredictionFeatures": {
      "description": "The inference result features coming from the prediction service that generates the topics.",
      "id": "VideoContentSearchGenerativeTopicPredictionFeatures",
      "properties": {
        "groundTruthTopic": {
          "description": "This field is present if we already have a ground truth topic from the training data.",
          "type": "string"
        },
        "modelName": {
          "description": "The name of the model where the predictions come from.",
          "type": "string"
        },
        "predictions": {
          "description": "Inference results from the prediction service. Since we generally use beam search with beam_size > 1, this field is repeated to capture all the generated topic beams.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchInstructionAnchorFeatures": {
      "description": "Anchor-level Metadata about Instruction anchors. TODO(keyvana) Update this proto.",
      "id": "VideoContentSearchInstructionAnchorFeatures",
      "properties": {},
      "type": "object"
    },
    "VideoContentSearchInstructionTrainingDataAnchorFeatures": {
      "description": "Anchor-level metadata about the instruction anchors. Each instruction passage anchor can contain multiple instruction steps and multiple description anchors and thus the following fields are defined as repeated.",
      "id": "VideoContentSearchInstructionTrainingDataAnchorFeatures",
      "properties": {
        "bestAsrAndDescriptionAnchorsMatchInfo": {
          "description": "The match info about the description anchor matches with the ASR n-grams in the instruction passage. Each element represents the best match between a given description anchor and all qualified n-grams within the passage.",
          "items": {
            "$ref": "VideoContentSearchSimilarityMatchInfo"
          },
          "type": "array"
        },
        "bestDescriptionAndInstructionAnchorsMatchInfo": {
          "description": "The match info about the description anchor matches with the instruction anchors in a instruction passage. Each element represents the best match between a given description anchor and all the instruction anchors in the passage.",
          "items": {
            "$ref": "VideoContentSearchSimilarityMatchInfo"
          },
          "type": "array"
        },
        "instructionAnchorsMatchInfo": {
          "description": "The match info about the instruction steps matches with the ASR. Each instruction step corresponds to a step extracted from a web doc. Each instruction passage can contain multiple instruction step matches thus the repeated field.",
          "items": {
            "$ref": "VideoContentSearchSimilarityMatchInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchListAnchorFeatures": {
      "description": "Anchor-level Metadata about list description anchors.",
      "id": "VideoContentSearchListAnchorFeatures",
      "properties": {
        "babelMatch": {
          "$ref": "VideoContentSearchTextMatchInfo",
          "description": "The babel match info of the list anchor with its matched ASR text."
        },
        "descriptionSpanInfo": {
          "$ref": "VideoContentSearchDescriptionSpanInfo",
          "description": "The description span metadata about list anchor when the anchor source is DESCRIPTION_SPANS."
        },
        "listItemIndex": {
          "description": "The list item index of this anchor in the video description.",
          "format": "int32",
          "type": "integer"
        },
        "matchScores": {
          "description": "The metadata about this list item's matches with different ASR snippets. This is currently used in the base model (DTW) to generate candidate anchors.",
          "items": {
            "$ref": "VideoContentSearchMatchScores"
          },
          "type": "array"
        },
        "pretriggerScore": {
          "description": "The score from the pretrigger model.",
          "format": "float",
          "type": "number"
        },
        "titleAnchorBabelMatchScore": {
          "description": "Babel similarity between the anchor and the video title.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchListAnchorSetFeatures": {
      "description": "Cluster-level Metadata about list anchors. Next id: 15.",
      "id": "VideoContentSearchListAnchorSetFeatures",
      "properties": {
        "aggregatedSpanText": {
          "description": "The following fields are used for description span anchors, The aggregated span token texts over all the span candidates of the anchor set.",
          "type": "string"
        },
        "anchorSetSpanScoreStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the span scores over the anchor set. This summary is calculated over the aggregation of the individual token spans belonging to the span candidates of anchors."
        },
        "babelMatchScoreStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of babel_match_score among anchors in the same VideoAnchors cluster."
        },
        "contextTokenCountStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the context token counts over the anchor set."
        },
        "durationSpanRatio": {
          "description": "The ratio of anchors timespan duration over the total duration of the video. Anchors timespan duration is defined as the time span from the first anchor to the last anchor in VideoAnchors.",
          "format": "float",
          "type": "number"
        },
        "durationToPredictedTimeMsStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of duration_to_predicted_time_ms among anchors in the same VideoAnchors cluster."
        },
        "listAnchorSource": {
          "description": "The source of anchors extracted from the video descriptions.",
          "enum": [
            "UNKNOWN_SOURCE",
            "ORDERED_LIST_PARSER",
            "DESCRIPTION_SPANS",
            "STEPS_PARSER",
            "DESCRIPTION_LIST_EXTRACTION"
          ],
          "enumDescriptions": [
            "",
            "Anchors that are generated from ordered list parser of webanswers.",
            "Anchors that are generated from applying the span model to the video description.",
            "Anchors that are generated from the steps parser that extracts certain template list patterns for a video description.",
            "Anchors generated by extracting ordered list elements from video description."
          ],
          "type": "string"
        },
        "listDescriptionItemsSize": {
          "description": "The total number of list items mentioned in the video description. Not all these list items are necessarily found as list anchors.",
          "format": "int32",
          "type": "integer"
        },
        "matchedListDescriptionAnchorsRatio": {
          "description": "The number of matched anchors in the list anchors over the total number of post-filtering list items in the video description, i.e. matched_list_description_anchors_ratio = matched_list_description_anchors_size / post_filtering_list_description_items_size.",
          "format": "float",
          "type": "number"
        },
        "matchedListDescriptionAnchorsSize": {
          "description": "The number of matched list anchors found in the ASR. The matched list anchors are a subset of the post-filtering list items in the video description, and as such matched_list_description_anchors_size <= post_filtering_list_description_items_size.",
          "format": "int32",
          "type": "integer"
        },
        "postFilteringListDescriptionItemsSize": {
          "description": "The total number of list items in the video description that are actually considered for matching. This is a subset of list items in the video description that passed filterings such as language filtering, i.e. post_filtering_list_description_items_size <= list_description_items_size",
          "format": "int32",
          "type": "integer"
        },
        "pretriggerScoreStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of pretrigger_score among anchors in the same cluster."
        },
        "spanTokenCountRatioStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the span token count ratios over the anchor set."
        },
        "spanTokenCountStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the span token counts over the anchor set."
        }
      },
      "type": "object"
    },
    "VideoContentSearchListTrainingDataAnchorFeatures": {
      "description": "Anchor-level metadata about the description anchors used as list items to build training data for list anchors.",
      "id": "VideoContentSearchListTrainingDataAnchorFeatures",
      "properties": {
        "descriptionAnchorTimeMs": {
          "description": "The timestamp of when the description anchor is annotated to appear in the video in ms.",
          "format": "int32",
          "type": "integer"
        },
        "descriptionAnchorTimeToMatchedTimeMs": {
          "description": "The time gap of when the description anchor is annotated to appear in the video (description_anchor_time_ms) from when it's matched in the ASR as the list anchor.",
          "format": "int64",
          "type": "string"
        },
        "editDistance": {
          "description": "Closest edit distance between the anchor generated by description span and the description anchor where the span anchor must be within small threshold time difference of the description anchor timestamp.",
          "format": "int32",
          "type": "integer"
        },
        "editDistanceRatio": {
          "description": "edit_distance over the description anchor's label length.",
          "format": "float",
          "type": "number"
        },
        "matchedDescriptionText": {
          "description": "The description anchor text used for matching to Span anchor text.",
          "type": "string"
        },
        "matchedSpanText": {
          "description": "The description span anchor text that was the best match for the nearby description anchor.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchListTrainingDataSetFeatures": {
      "description": "Cluster-level metadata about the description anchors used as list items to build training data for list anchors.",
      "id": "VideoContentSearchListTrainingDataSetFeatures",
      "properties": {
        "editDistanceRatioStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Summary of the edit_distance_ratios of the description spans from their best matched description anchor texts."
        },
        "editDistanceStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Summary of the edit_distances of the description spans from their best matched description anchor texts."
        },
        "matchedDescriptionAnchorsTimegapStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of time gaps of when the description anchors is annotated to appear in the video (description_anchor_time_ms) from when they are matched in the ASR as the list description anchors."
        },
        "numDescriptionAnchors": {
          "description": "Number of description anchors in the description of this video.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchMatchScores": {
      "id": "VideoContentSearchMatchScores",
      "properties": {
        "matchInfo": {
          "items": {
            "$ref": "VideoContentSearchTextMatchInfo"
          },
          "type": "array"
        },
        "method": {
          "description": "The method used for matching, e.g. 'babel', 'nlp', 'neon', \u00df\u00df'phonetic'.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchMetricStats": {
      "description": "Median, mean and standard deviation of a feature value.",
      "id": "VideoContentSearchMetricStats",
      "properties": {
        "max": {
          "format": "float",
          "type": "number"
        },
        "mean": {
          "format": "float",
          "type": "number"
        },
        "median": {
          "format": "float",
          "type": "number"
        },
        "min": {
          "format": "float",
          "type": "number"
        },
        "stddev": {
          "format": "float",
          "type": "number"
        },
        "sum": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchMultimodalTopicFeatures": {
      "description": "Multimodal features for a single generated topic. Next ID: 8",
      "id": "VideoContentSearchMultimodalTopicFeatures",
      "properties": {
        "frameSimilarityInterval": {
          "description": "The list of frame sequence similarities to this topic. The list of frames are picked to be around the topic timestamp. The set of frames selected are thresholded at a value to ensure the selected frame intervals are similar to the query.",
          "items": {
            "$ref": "VideoContentSearchFrameSimilarityInterval"
          },
          "type": "array"
        },
        "generativeTopicPredictionFeatures": {
          "description": "The inference results from the prediction services that generate the topics.",
          "items": {
            "$ref": "VideoContentSearchGenerativeTopicPredictionFeatures"
          },
          "type": "array"
        },
        "navboostAnchorFeatures": {
          "$ref": "VideoContentSearchNavboostAnchorFeatures",
          "description": "Features related to queries generated using document navboost data with timed anchors. Only populated if the query was generated using this approach."
        },
        "topic": {
          "description": "The text of the generated topic.",
          "type": "string"
        },
        "topicEndMs": {
          "description": "End time of the topic.",
          "format": "int64",
          "type": "string"
        },
        "topicStartMs": {
          "description": "Start time of the topic.",
          "format": "int64",
          "type": "string"
        },
        "videoQuerySource": {
          "description": "How the query was generated.",
          "enum": [
            "UNKNOWN_QUERY_SOURCE",
            "NAVBOOST_ANCHOR",
            "ORACLE",
            "GENERATED_NAVBOOST_ANCHOR",
            "GENERATED_AQUARIUM_RETRIEVAL",
            "ORACLE_PER_RESULT",
            "ENTITY_ANCHOR",
            "PRODUCT_ANCHOR",
            "ANCHOR",
            "RANKEMBED_GENERATED_NAVBOOST_ANCHOR"
          ],
          "enumDescriptions": [
            "",
            "Queries generated from a combination of video anchors and navboost queries.",
            "Queries from Oracle result-set followups.",
            "Queries generated with a generative model using Navboost-anchors as training data.",
            "Queries generated with a generative model with training data from a retrieval model fetching queries with Aquarium and scoring them against video passages.",
            "Queries from Oracle per-result followups.",
            "Queries from entities extracted by Webref from the video transcript.",
            "Queries extracted from different data sources for the Related Products feature.",
            "Queries from the anchor text directly.",
            "Queries generated from the rankembed nearest neighbor candidates of the Navboost-anchors."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchMultimodalTopicTrainingFeatures": {
      "description": "Multimodal features for a single generated topic used to build training data.",
      "id": "VideoContentSearchMultimodalTopicTrainingFeatures",
      "properties": {
        "maxFrameSimilarityInterval": {
          "$ref": "VideoContentSearchFrameSimilarityInterval",
          "description": "The similarity info for the frame with maximum similarity to the topic in its visual interval. The repeated similarity field in this proto has a single value corresponding to the maximum similarity. This similarity score is used to filter and pick the training data examples."
        },
        "normalizedTopic": {
          "description": "The topic/query normalized for Navboost and QBST lookups as well as fetching of the Rankembed nearest neighbors.",
          "type": "string"
        },
        "qbstTermsOverlapFeatures": {
          "$ref": "VideoContentSearchQbstTermsOverlapFeatures",
          "description": "QBST terms overlap features for a candidate query."
        },
        "rankembedNearestNeighborsFeatures": {
          "$ref": "VideoContentSearchRankEmbedNearestNeighborsFeatures",
          "description": "Rankembed similarity features for a candidate nearest neighbor rankembed query."
        },
        "saftEntityInfo": {
          "$ref": "VideoContentSearchSaftEntityInfo",
          "description": "The information about the saft entity annotation for this topic."
        },
        "topicDenseVector": {
          "description": "Raw float feature vector of the topic's co-text embedding representation in the Starburst space.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchNamedEntity": {
      "description": "Message for SAFT named entities.",
      "id": "VideoContentSearchNamedEntity",
      "properties": {
        "entityType": {
          "description": "Type name: e.g. /saft/person for a person's name.",
          "type": "string"
        },
        "text": {
          "description": "Text referring to an entity of type entity_type;",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchNavboostAnchorFeatures": {
      "description": "Features for queries generated using document navboost data with timed anchors.",
      "id": "VideoContentSearchNavboostAnchorFeatures",
      "properties": {
        "anchorText": {
          "description": "The anchor text used in the generated query.",
          "type": "string"
        },
        "navboostText": {
          "description": "The navboost query used in the generated query.",
          "type": "string"
        },
        "source": {
          "description": "How the navboost-anchor query was constructed.",
          "enum": [
            "UNKNOWN_NAVBOOST_ANCHOR_SOURCE",
            "ANCHOR_TEXT",
            "NAVBOOST_AND_ANCHOR_TEXT",
            "ANCHOR_SIMILAR_QUERY",
            "NAVBOOST_AND_ANCHOR_SIMILAR_QUERY"
          ],
          "enumDescriptions": [
            "",
            "The cleaned anchor text.",
            "The cleaned anchor text concatenated with a navboost query for the video.",
            "A similar query to the cleaned anchor text.",
            "A similar query to the navboost-anchor concatenation."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOCRText": {
      "description": "Contains OCR text, its start time and additional details about position/fonts",
      "id": "VideoContentSearchOCRText",
      "properties": {
        "ocrFeature": {
          "$ref": "VideoContentSearchOnScreenTextFeature",
          "description": "Additional details about position/font/color etc. for the OCR text"
        },
        "ocrText": {
          "description": "The OCR recognized text label",
          "type": "string"
        },
        "timeMs": {
          "description": "The time in ms at which the OCR text appears on the frame",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOcrAsrFeature": {
      "id": "VideoContentSearchOcrAsrFeature",
      "properties": {
        "minCharEditDistance": {
          "description": "The minimum char edit distance between the normalized OCR text and candidate word strings taken from a time window around the OCR appearance.",
          "format": "int32",
          "type": "integer"
        },
        "minCharEditDistanceAsrText": {
          "description": "The matched ASR candidate for minimum char edit distance.",
          "type": "string"
        },
        "minCharEditDistancePercent": {
          "description": "The min_char_edit_distance divided by the length of the OCR string.",
          "format": "float",
          "type": "number"
        },
        "ocrTextNormalizedForCharMatch": {
          "description": "The normalized OCR text which was used to match the candidate.",
          "type": "string"
        },
        "ocrTextNormalizedForCharMatchLength": {
          "description": "The length of the normalized OCR text.",
          "format": "int32",
          "type": "integer"
        },
        "pretriggerScore": {
          "description": "The score from the pretrigger model.",
          "format": "float",
          "type": "number"
        },
        "wordOverlapAsrText": {
          "description": "The ASR text that was used for the word overlap calculation.",
          "type": "string"
        },
        "wordOverlapCount": {
          "description": "The number of words found both in the OCR text and the ASR in a time window around OCR appearance.",
          "format": "int32",
          "type": "integer"
        },
        "wordOverlapPercent": {
          "description": "The word_overlap_count divided by the number of words in the OCR text.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOcrAsrSetFeature": {
      "id": "VideoContentSearchOcrAsrSetFeature",
      "properties": {
        "normalizedWordOverlapScore": {
          "description": "The word_overlap_score divided by the greatest word_overlap_score for any cluster in the VideoAnchorSets.",
          "format": "float",
          "type": "number"
        },
        "wordOverlapScore": {
          "description": "A score based on the number of overlapped words between the OCR and ASR for anchors in the cluster.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOcrDescriptionTrainingDataAnchorFeatures": {
      "description": "Metadata about the join of description anchors and OCR data which is used to build training data.",
      "id": "VideoContentSearchOcrDescriptionTrainingDataAnchorFeatures",
      "properties": {
        "editDistance": {
          "description": "The string edit distance from the anchor label to the nearest OCR text.",
          "format": "int32",
          "type": "integer"
        },
        "editDistanceRatio": {
          "description": "edit_distance over the description anchor's label length.",
          "format": "float",
          "type": "number"
        },
        "matchedDescriptionText": {
          "description": "The description anchor text used for matching to OCR text.",
          "type": "string"
        },
        "matchedFrameTimeMs": {
          "description": "The time of the selected OCR frame in ms. The best frame in a window around the target description anchor will be selected.",
          "format": "int32",
          "type": "integer"
        },
        "matchedOcrText": {
          "description": "The OCR text that was the best match for the nearby description anchor.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOcrDescriptionTrainingDataSetFeatures": {
      "description": "Metadata about the join of description anchors and OCR data for a set of description anchors.",
      "id": "VideoContentSearchOcrDescriptionTrainingDataSetFeatures",
      "properties": {
        "maxEditDistance": {
          "description": "The max edit distance of any description anchor to its closest OCR text.",
          "format": "int32",
          "type": "integer"
        },
        "maxEditDistanceRatio": {
          "description": "The maximum of (edit distance of any description anchor to its closest OCR text over description anchor label length).",
          "format": "float",
          "type": "number"
        },
        "medianEditDistance": {
          "description": "The median edit distance of any description anchor to its closest OCR text.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOcrVideoFeature": {
      "description": "Features for video level info.",
      "id": "VideoContentSearchOcrVideoFeature",
      "properties": {
        "averageTextAreaRatio": {
          "description": "Average text area ratio throughout video frames. Text area ratio for a frame is defined by sum(text area) / image area.",
          "format": "float",
          "type": "number"
        },
        "clusterIdToFrameSize": {
          "additionalProperties": {
            "format": "int32",
            "type": "integer"
          },
          "description": "Cluster id to the num of frames in each cluster.",
          "type": "object"
        },
        "durationInMs": {
          "description": "Total time of this video in milliseconds.",
          "format": "int32",
          "type": "integer"
        },
        "langIdDetectedLanguage": {
          "description": "Video level detected language by lang id, aggregated from each frame.",
          "type": "string"
        },
        "numClusters": {
          "description": "The number of ShotInfo clusters.",
          "format": "int32",
          "type": "integer"
        },
        "numFrames": {
          "description": "The number of video frames contained in ShotInfo cluster.",
          "format": "int32",
          "type": "integer"
        },
        "ocrDetectedLanguage": {
          "description": "Video level detected language, aggregated from each frame.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchOnScreenTextClusterFeature": {
      "description": "Features for the set of OnScreenText.",
      "id": "VideoContentSearchOnScreenTextClusterFeature",
      "properties": {
        "averageConfidence": {
          "description": "Average confidence.",
          "format": "float",
          "type": "number"
        },
        "averageDurationRatio": {
          "format": "float",
          "type": "number"
        },
        "averageHorizontalPosition": {
          "format": "float",
          "type": "number"
        },
        "averageOcrTextLength": {
          "description": "Deprecated. Please use ocr_text_length_stats.median instead. The average length of anchor labels. average_ocr_text_length is deprecated, because now ocr_text_length_stats has a field for holding the same value.",
          "format": "float",
          "type": "number"
        },
        "averageOfAverageTextHeightRatio": {
          "description": "Deprecated. Please use text_height_ratio_stats.mean instead. Average value of text height ratio (over image height), which is taken average over the same text. average_of_average_text_height_ratio is deprecated, because now text_height_ratio_stats has a field for keeping the same value.",
          "format": "float",
          "type": "number"
        },
        "averageVerticalPosition": {
          "description": "Average of label center position.",
          "format": "float",
          "type": "number"
        },
        "clusterRatio": {
          "description": "The number of anchors in the cluster over the number of anchors in the video.",
          "format": "float",
          "type": "number"
        },
        "clusterSize": {
          "description": "The number of anchors in the cluster.",
          "format": "int32",
          "type": "integer"
        },
        "countingNumberRatio": {
          "description": "The number of anchors that had a counting number over the number of anchors in total.",
          "format": "float",
          "type": "number"
        },
        "durationMsStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of duration_ms among anchors in the same cluster."
        },
        "frameSizeRatio": {
          "description": "Frame size ratio over total frames in video.",
          "format": "float",
          "type": "number"
        },
        "logOcrTextLengthStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Average and standard deviation of logarithm of the length of labels among anchors in the same cluster."
        },
        "logTextHeightRatioStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Average and standard deviation of log(average_text_height_ratio) among anchors in the same cluster."
        },
        "logp1000DurationMsStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Average and standard deviation of log(1000 + duration_ms) among anchors in the same cluster. Since duration_ms can be zero, 1000 is added before applying logarithm."
        },
        "maxVideoDurationRatioBetweenAnchors": {
          "description": "The maximum ratio of duration between two consecutive anchors to video duration. This is calculated after all anchor filtering has been completed.",
          "format": "float",
          "type": "number"
        },
        "maximumDurationRatio": {
          "description": "Stats for ratio of frame time intervals, over total video time.",
          "format": "float",
          "type": "number"
        },
        "medianClusteringDistance": {
          "description": "The median cluster distance for the anchors in the cluster. The way the distance is calculated will vary depending on the clustering method.",
          "format": "float",
          "type": "number"
        },
        "medianDurationRatio": {
          "format": "float",
          "type": "number"
        },
        "medianOfAverageTextHeightRatio": {
          "description": "Deprecated. Please use text_height_ratio_stats.median instead. Median value of text height ratio (over image height), which is taken average over the same text. median_of_average_text_height_ratio is deprecated, because now text_height_ratio_stats has a field for keeping the same value.",
          "format": "float",
          "type": "number"
        },
        "ocrAsrFeature": {
          "$ref": "VideoContentSearchOcrAsrSetFeature",
          "description": "Features for the overlap between OCR and ASR."
        },
        "ocrTextLengthStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of the length of labels among anchors in the same cluster."
        },
        "stddevDurationRatio": {
          "format": "float",
          "type": "number"
        },
        "textHeightRatioStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "Median, average and standard deviation of average_text_height_ratio among anchors in the same cluster."
        }
      },
      "type": "object"
    },
    "VideoContentSearchOnScreenTextFeature": {
      "description": "Keep feature values which are useful to filter titles, labels.",
      "id": "VideoContentSearchOnScreenTextFeature",
      "properties": {
        "averageAngle": {
          "description": "The average of rotation angles (degree) of texts.",
          "format": "float",
          "type": "number"
        },
        "averageConfidence": {
          "description": "Average value of confidence.",
          "format": "float",
          "type": "number"
        },
        "averageFontsize": {
          "description": "Font size or weight information. This is extracted from internal message, so may not be available in future.",
          "format": "float",
          "type": "number"
        },
        "averageFontweight": {
          "format": "float",
          "type": "number"
        },
        "averageHeightRatio": {
          "format": "float",
          "type": "number"
        },
        "backgroundBlue": {
          "format": "float",
          "type": "number"
        },
        "backgroundGray": {
          "format": "float",
          "type": "number"
        },
        "backgroundGreen": {
          "format": "float",
          "type": "number"
        },
        "backgroundRed": {
          "format": "float",
          "type": "number"
        },
        "boxHeightRatio": {
          "format": "float",
          "type": "number"
        },
        "boxWidthRatio": {
          "description": "Box width and height ratio, against to the frame size, so the value range is [0, 1]. If this text feature consists of multiple text boxes, the box width / height is a union of each text box.",
          "format": "float",
          "type": "number"
        },
        "centerHorizontalPositionRatio": {
          "description": "Horizontal position of the center of this text, by ratio [0.0, 1.0].",
          "format": "float",
          "type": "number"
        },
        "centerVerticalPositionRatio": {
          "description": "Vertical position of the center of this text, by ratio [0.0, 1.0].",
          "format": "float",
          "type": "number"
        },
        "countingNumber": {
          "description": "Counting number in this anchor's original label.",
          "format": "int32",
          "type": "integer"
        },
        "countingNumberOooRatio": {
          "description": "# of numbered anchors that are not out-of-order / # of all the numbered anchors. If no counting number is detected, this will be empty.",
          "format": "float",
          "type": "number"
        },
        "countingNumberPrefix": {
          "description": "Prefix for counting number in this anchor's label. If no counting number is detected, this will be empty.",
          "type": "string"
        },
        "countingNumberSuffix": {
          "description": "Suffix for counting number in this anchor's label. If no counting number is detected, this will be empty.",
          "type": "string"
        },
        "durationMs": {
          "description": "Duration time in millisec.",
          "format": "int32",
          "type": "integer"
        },
        "foregroundBlue": {
          "format": "float",
          "type": "number"
        },
        "foregroundGray": {
          "description": "Color information, normalized to [0-1]. This color information is extracted from the largest word in the line entities of PageLayout message. See goodoc::PageLayoutEntity::Colors for details.",
          "format": "float",
          "type": "number"
        },
        "foregroundGreen": {
          "format": "float",
          "type": "number"
        },
        "foregroundRed": {
          "format": "float",
          "type": "number"
        },
        "hadUrlInLabel": {
          "description": "Whether or not this anchor had URL in its label before the label fixing step.",
          "type": "boolean"
        },
        "handwrittenTextRatio": {
          "description": "# of LINE entities that are recognized as handwritten texts over # of merged LINE entities.",
          "format": "float",
          "type": "number"
        },
        "isCountingNumberOoo": {
          "description": "Whether or not the counting number in this anchor's label is out-of-order. If no counting number is detected, this will be empty.",
          "type": "boolean"
        },
        "languages": {
          "description": "Languages predicted by OCR. \"repeated\" is employed for this field because LINE entities of PageLayout message are sometimes annotated with multiple languages, and also two VideoAnchor that are annotated with different languages can be merged into one VideoAnchor. When two VideoAnchor are merged into one, the weight field values of the new VideoAnchor will be the average of weight field values weighted by merged_line_count.",
          "items": {
            "$ref": "GoodocLanguageCombinationLanguage"
          },
          "type": "array"
        },
        "leftPositionRatio": {
          "description": "Left position of this text, by ratio [0, 1].",
          "format": "float",
          "type": "number"
        },
        "medianClusteringDistance": {
          "description": "The median distance between this anchor and other anchors in the cluster. The way the distance is calculated will vary depending on the clustering method.",
          "format": "float",
          "type": "number"
        },
        "mergedLineCount": {
          "description": "The number of LINE entities used for this text.",
          "format": "int32",
          "type": "integer"
        },
        "nTextsInSameFrame": {
          "description": "# of OCR texts that appear in the same frame. If duration of this OCR text is not zero, the maximum number among multiple frames where this OCR text appears is set to this field.",
          "format": "int32",
          "type": "integer"
        },
        "occurrenceCount": {
          "description": "The number of OCR texts that have the same text among temporally-merged OCR texts.",
          "format": "float",
          "type": "number"
        },
        "occurrenceRatio": {
          "description": "occurrence_count over the number of anchors merged to this anchor.",
          "format": "float",
          "type": "number"
        },
        "ocrAsrFeature": {
          "$ref": "VideoContentSearchOcrAsrFeature",
          "description": "Features for the overlap between OCR and ASR."
        },
        "originalLabel": {
          "description": "The label this VideoAnchor originally had before label clearning steps.",
          "type": "string"
        },
        "relativeShotTimeMsPosteriorToEndTime": {
          "format": "int32",
          "type": "integer"
        },
        "relativeShotTimeMsPosteriorToStartTime": {
          "format": "int32",
          "type": "integer"
        },
        "relativeShotTimeMsPriorToEndTime": {
          "format": "int32",
          "type": "integer"
        },
        "relativeShotTimeMsPriorToStartTime": {
          "description": "Shot boundary time nearest to OnScreenText's start and end time. The time is relative to each OnScreenText's start / end time (ex. -1 means shot time exists prior to the start / end time). If shot time and start/end time is the same, 0 is set in 'prior' field. If no shot info is available, the below fields are not set.",
          "format": "int32",
          "type": "integer"
        },
        "shotInfoCountDuringText": {
          "format": "int32",
          "type": "integer"
        },
        "topOcrLanguage": {
          "description": "OCR language that has the highest weight.",
          "type": "string"
        },
        "topPositionRatio": {
          "description": "Note that top-left position is (0, 0) for position values. Top position of this text, by ratio [0, 1].",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchQbstTermsOverlapFeatures": {
      "description": "QBST terms overlap features for the candidate query.",
      "id": "VideoContentSearchQbstTermsOverlapFeatures",
      "properties": {
        "qbstAnchorOverlap": {
          "description": "Fraction of salient terms of original query covered by anchor text.",
          "format": "float",
          "type": "number"
        },
        "qbstNavboostOverlap": {
          "description": "Fraction of salient terms of original query covered by top navboost query of the video.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchQnaAnchorFeatures": {
      "description": "Features for individual Q&A anchors. Next ID: 23",
      "id": "VideoContentSearchQnaAnchorFeatures",
      "properties": {
        "answer": {
          "description": "Segment of text from the ASR.",
          "type": "string"
        },
        "descartesDotScore": {
          "format": "float",
          "type": "number"
        },
        "descartesRankingScore": {
          "format": "float",
          "type": "number"
        },
        "dolphinModelType": {
          "enum": [
            "DOLPHIN_MODEL_TYPE_UNKNOWN",
            "VIDEO_QA_TEACHER_V2",
            "VIDEO_QA_V11"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "dolphinScore": {
          "description": "Dolphin score calculated using the question as the query, the ASR passage as the answer. See go/dolphin-models to learn more.",
          "format": "float",
          "type": "number"
        },
        "editDistance": {
          "description": "Edit distance of the question and the title from 0 to 1 where 1 is most similar.",
          "format": "float",
          "type": "number"
        },
        "endMs": {
          "description": "End time in milliseconds relative to the beginning of the video.",
          "format": "int64",
          "type": "string"
        },
        "ensembleScore": {
          "format": "float",
          "type": "number"
        },
        "isDuplicateOfTitle": {
          "description": "True if question_title_similarity is less than 0.2.",
          "type": "boolean"
        },
        "neonScore": {
          "description": "Neon similarity of question and title.",
          "format": "float",
          "type": "number"
        },
        "pointwiseNormalizedGapScore": {
          "description": "Pointwise GAP normalized score. Score ranges from 0 to 1 and corresponds to GAP precision. See go/wa-cgap-to-pgap-migration to learn more.",
          "format": "float",
          "type": "number"
        },
        "qbstScore": {
          "description": "QBST similarity of question and title.",
          "format": "float",
          "type": "number"
        },
        "queryCount": {
          "description": "NavBoostFeature f_query_count for questions that are NavBoost queries.",
          "format": "float",
          "type": "number"
        },
        "queryDocCount": {
          "description": "NavBoostFeature f_query_doc_count for questions that are NavBoost queries.",
          "format": "float",
          "type": "number"
        },
        "question": {
          "description": "Question from Related Questions SSTable or NavBoost.",
          "type": "string"
        },
        "questionTitleSimilarity": {
          "format": "float",
          "type": "number"
        },
        "questionType": {
          "enum": [
            "UNKNOWN",
            "ENTITY",
            "NAVBOOST",
            "GLUE_WEBANS",
            "INSTANT_NAVBOOST"
          ],
          "enumDescriptions": [
            "",
            "Questions sourced from joining WebRef entities in CDocs with the Related Question's E2Q table.",
            "Questions sourced from the CDoc's NavBoost queries.",
            "Questions from WebAnswer queries that bypass D2Q filtering.",
            "Questions sourced from the CDoc's Instant NavBoost queries."
          ],
          "type": "string"
        },
        "startMs": {
          "description": "Start time in milliseconds relative to the beginning of the video.",
          "format": "int64",
          "type": "string"
        },
        "videoDurationMs": {
          "description": "Duration of the video.",
          "format": "int64",
          "type": "string"
        },
        "videoTitle": {
          "description": "Video title.",
          "type": "string"
        },
        "webrefMid": {
          "description": "Mid corresponding to the WebRef entity from the CDoc that was used to source the question.",
          "type": "string"
        },
        "webrefTopicalityScore": {
          "description": "The WebRef entity topicality score. Learn more about this score at: http://go/topicality-score",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchQnaAnchorSetFeatures": {
      "description": "Debug info for Q&A anchors. Next ID: 15",
      "id": "VideoContentSearchQnaAnchorSetFeatures",
      "properties": {
        "backgroundEncodingPath": {
          "description": "Path to Descartes background encoding in the form of a serialized drishti.DenseFeatureData proto. This is generated by the flume_generate_background_encoding binary.",
          "type": "string"
        },
        "descartesModelVersion": {
          "description": "This field is used for debugging which model the decartes_model_score is generated from. You can learn more about the Descartes model at go/descartes-qa.",
          "type": "string"
        },
        "descartesScoreThreshold": {
          "description": "Descartes score threshold for determining whether to output a QA pair as an anchor. This currently effects only the Descartes ranking score.",
          "format": "float",
          "type": "number"
        },
        "dolphinConfig": {
          "$ref": "VideoContentSearchDolphinScoringConfig",
          "description": "The configuration used for fetching Dolphin scores."
        },
        "ensembleModelPath": {
          "description": "Path to Ranklab ensemble model used in post-trigger step.",
          "type": "string"
        },
        "ensembleModelScoreThreshold": {
          "description": "Minimum score for video anchor to pass the post-trigger step. Calculated by training a logisitic regression model with 95% precision. Training colab can be found at go/video-qa-ensemble.",
          "format": "float",
          "type": "number"
        },
        "minEntityTopicalityScore": {
          "description": "Threshold for determining whether to consider an entity from a CDoc for sourcing questions on that topic. Learn more about this score at: http://go/topicality-score",
          "format": "float",
          "type": "number"
        },
        "minQuestionDistance": {
          "description": "Threshold for determining whether questions belong in the same cluster.",
          "format": "float",
          "type": "number"
        },
        "relatedQuestionsSstablePath": {
          "description": "Path to the Related Questions SSTable that maps entities to questions.",
          "type": "string"
        },
        "spanDurationSecs": {
          "description": "The duration threshold for merging captions.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchRankEmbedNearestNeighborsFeatures": {
      "description": "Rankembed neighbor neighbor features for the candidate query.",
      "id": "VideoContentSearchRankEmbedNearestNeighborsFeatures",
      "properties": {
        "anchorReSimilarity": {
          "description": "Rankembed similarity between the rankembed neighbor and the video anchor.",
          "format": "float",
          "type": "number"
        },
        "navQueryReSimilarity": {
          "description": "Rankembed similarity between the rankembed neighbor and the top navboost query of the video.",
          "format": "float",
          "type": "number"
        },
        "reSimilarity": {
          "description": "Rankembed similarity between the rankembed neighbor and the original query candidate.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSaftEntityInfo": {
      "description": "Saft named-entities info for a given topic.",
      "id": "VideoContentSearchSaftEntityInfo",
      "properties": {
        "canonicalEntityName": {
          "description": "Representative canonical name for the entity.",
          "type": "string"
        },
        "entitySalience": {
          "description": "Score indicating the saliency (centrality) of this entity to the original_text.",
          "format": "double",
          "type": "number"
        },
        "entityTypeName": {
          "description": "The type name, like \"/saft/person\", \"/saft/art\". See README.entity-types for the inventory of SAFT type tags.",
          "type": "string"
        },
        "mentionText": {
          "description": "Representative entity name mention extracted from original_text.",
          "type": "string"
        },
        "mentionType": {
          "description": "SAFT Mention type.",
          "enum": [
            "NAM",
            "NOM",
            "PRE",
            "PRO",
            "CMC",
            "NRP",
            "VRB",
            "IMP"
          ],
          "enumDescriptions": [
            "name mention (proper noun)",
            "nominal mention (common noun)",
            "pre-nominal mention",
            "pronominal mention",
            "conjoined mention construction",
            "mention of a non-referential pronoun",
            "Verbal mention (head of verb phrase antecedents in discourse deixis).",
            "Implicit mention (e.g., elliptical subjects in pro-drop languages). The facet in the phrase indicates its role with respect to the phrase token."
          ],
          "type": "string"
        },
        "mid": {
          "description": "Freebase MID for entity if this the saft entity corresponds to a Webref KG mid. This field is not always populated and is taken from FREEBASE_MID mid in EntityProfile in the saft entity annotation.",
          "type": "string"
        },
        "originalText": {
          "description": "The original input text (e.g. the anchor text) where the saft entity annotation was run on.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchShoppingOpinionsAnchorFeatures": {
      "description": "Features for an individual Shopping Opinions Anchor. This file is used for video anchor use case. Next Id: 34",
      "id": "VideoContentSearchShoppingOpinionsAnchorFeatures",
      "properties": {
        "anchorLabel": {
          "description": "The anchor label.",
          "type": "string"
        },
        "anchorLabelFirstMentionPos": {
          "description": "The first anchor_label mention position (word index, 0-based). It is computed from the snippet_sub_segment if exists. Otherwise it is computed from the snippet. It is not populated if there is no such mention.",
          "format": "int32",
          "type": "integer"
        },
        "anchorLabelSentiment": {
          "description": "The sentiment score of the anchor label, with range: [-1, 1]. If using Lumin Pro/Con tags as the anchor labels, the \"Pro\" Lumin tag will have a score of 1 and Con Lumin tag will have a score of -1.",
          "format": "float",
          "type": "number"
        },
        "anchorLabelWordsMentions": {
          "description": "The number of times words in anchor label (that is not a stopword) being mentioned in the snippet.",
          "format": "int32",
          "type": "integer"
        },
        "anchorOrAspectFirstMentionPos": {
          "description": "The smaller number of anchor_label_first_mention_pos and lumin_aspect_first_mention_pos.",
          "format": "int32",
          "type": "integer"
        },
        "anchorOrAspectWordsMentions": {
          "description": "The number of times words in anchor label or Lumin aspect (that is not a stopword) being mentioned in the snippet. If a word exists in both anchor label and Lumin aspect, it shall be only counted once for a mention in the snippet.",
          "format": "int32",
          "type": "integer"
        },
        "aspect": {
          "$ref": "VideoContentSearchAspect",
          "description": "Product aspect being discussed by this Shopping Opinions."
        },
        "asrForProConExtraction": {
          "description": "The asr with sentence break that was used for pro/con extraction.",
          "type": "string"
        },
        "babelSimilarityScore": {
          "description": "The Babel similarity score between the snippet and the anchor label.",
          "format": "float",
          "type": "number"
        },
        "conScore": {
          "description": "The classification score of the anchor being a con opinion.",
          "format": "float",
          "type": "number"
        },
        "grampusScore": {
          "description": "The score from the Grampus model if the pro/con is extracted by Grampus.",
          "format": "float",
          "type": "number"
        },
        "isCon": {
          "description": "Whether the anchor is classified as a con opinion.",
          "type": "boolean"
        },
        "isPro": {
          "description": "Whether the anchor is classified as a pro opinion.",
          "type": "boolean"
        },
        "isProConWhenExtractedFromMum": {
          "description": "True if the anchor is considered as pro or con when extracted from MUM.",
          "type": "boolean"
        },
        "luminAspect": {
          "description": "The lumin aspect of the Pro/Con Lumin tag. e.g. \"weight\".",
          "type": "string"
        },
        "luminAspectFirstMentionPos": {
          "description": "The first Lumin aspect mention position (word index, 0-based). It is computed from the snippet_sub_segment if exists. Otherwise it is computed from the snippet. It is not populated if there is no such mention.",
          "format": "int32",
          "type": "integer"
        },
        "luminAspectWordsMentions": {
          "description": "The number of times words in Lumin aspect (that is not a stopword) being mentioned in the snippet.",
          "format": "int32",
          "type": "integer"
        },
        "luminScore": {
          "description": "The Lumin model score for the anchor label against the segment.",
          "format": "float",
          "type": "number"
        },
        "mumProductAspect": {
          "description": "The product aspect of the pro/con generated using the MUM model.",
          "type": "string"
        },
        "mumScore": {
          "description": "The score from the MUM model if the pro/con anchor is extracted by MUM.",
          "format": "float",
          "type": "number"
        },
        "opinionsDolphinDescriptivenessScore": {
          "description": "Scores from Opinions Dolphin scorer. Opinions Dolphin scorer is built by finetuning the Dolphin-based Video Anchor Unified Scorer V2 on the Opinions anchors ratings. It outputs two scores, which are optimized for descriptiveness and usefulness ratings respectively. 'descriptiveness_score' measures how well the anchor label describes the video section. 'usefulness_score' measures how useful the anchor label is for jumping to an important section in the video. go/vs-opinions-migration-report",
          "format": "float",
          "type": "number"
        },
        "opinionsDolphinUsefulnessScore": {
          "format": "float",
          "type": "number"
        },
        "proScore": {
          "description": "The classification score of the anchor being a pro opinion.",
          "format": "float",
          "type": "number"
        },
        "productNameFromTitle": {
          "description": "The product name from title extracted by the grampus model.",
          "type": "string"
        },
        "question": {
          "description": "The question used to score this video segment.",
          "type": "string"
        },
        "snippet": {
          "description": "The ASR for the selected segment window.",
          "type": "string"
        },
        "snippetQaScore": {
          "description": "The QA model score for the selected segment window against the question.",
          "format": "float",
          "type": "number"
        },
        "snippetSentimentScore": {
          "description": "The go/scarlett sentiment score of the selected segment window. Positive score represents positive sentiment. Negative score represents negative sentiment.",
          "format": "float",
          "type": "number"
        },
        "snippetSubSegment": {
          "description": "The ASR for the best matched sub segment inside the selected segment.",
          "type": "string"
        },
        "snippetSubSegmentQaScore": {
          "description": "The QA model score for the best sub segment against the question.",
          "format": "float",
          "type": "number"
        },
        "snippetSubSegmentSentimentScore": {
          "description": "The go/scarlett sentiment score of the best matched sub segment. Positive score represents positive sentiment. Negative score represents negative sentiment.",
          "format": "float",
          "type": "number"
        },
        "snippetSubSegmentWordCount": {
          "description": "The number of words in the ASR for the best matched sub segment.",
          "format": "int32",
          "type": "integer"
        },
        "snippetWordCount": {
          "description": "The number of words in the ASR for the selected segment window.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSimilarityMatchInfo": {
      "id": "VideoContentSearchSimilarityMatchInfo",
      "properties": {
        "instructionStartMs": {
          "description": "The timestamp of when the first token in the token sequence is spoken in the video.",
          "format": "int32",
          "type": "integer"
        },
        "instructionText": {
          "description": "The instruction step text coming from the web document. Currently only populated for best_description_and_instruction_anchors_match_info.",
          "type": "string"
        },
        "referenceText": {
          "description": "The reference text used for matching against token_sequence (e.g. description anchor text or instruction step text).",
          "type": "string"
        },
        "referenceTextTimeMs": {
          "description": "The timestamp of when the reference text is pointing in the video (e.g. this is the description anchor timestamp when reference_text is description anchor. For instruction step used as the reference, no timestamps exists and thus this field is not populated).",
          "format": "int32",
          "type": "integer"
        },
        "scoringMethodName": {
          "description": "Similarity scorer name.",
          "type": "string"
        },
        "similarityScore": {
          "description": "The similarity score given by the scoring method specified by the message scoring_method_name.",
          "format": "float",
          "type": "number"
        },
        "stepIndex": {
          "description": "The index of the step in HowToInstructions that this token_sequence corresponds to.",
          "format": "int32",
          "type": "integer"
        },
        "tokenSequence": {
          "description": "The matched token sequence text in ASR.",
          "type": "string"
        },
        "tokenSequenceLength": {
          "description": "The length of the tokens in the token sequence.",
          "format": "int32",
          "type": "integer"
        },
        "tokenStartPos": {
          "description": "The token offset of the matched token sequence from the beginning of the document.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSpanDolphinFeatures": {
      "id": "VideoContentSearchSpanDolphinFeatures",
      "properties": {
        "passage": {
          "description": "The text passage from ASR.",
          "type": "string"
        },
        "title": {
          "description": "The title of the video.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSpanDolphinScores": {
      "id": "VideoContentSearchSpanDolphinScores",
      "properties": {
        "spanCandidate": {
          "description": "The span candidates extracted from the list of span tokens. Each token is added to a span if its score is above a certain threshold.",
          "items": {
            "$ref": "VideoContentSearchSpanDolphinScoresSpanCandidate"
          },
          "type": "array"
        },
        "spanToken": {
          "description": "The token-score pairs for the passage.",
          "items": {
            "$ref": "VideoContentSearchSpanDolphinScoresSpanToken"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSpanDolphinScoresSpanCandidate": {
      "id": "VideoContentSearchSpanDolphinScoresSpanCandidate",
      "properties": {
        "asrConfidenceStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the token asr_confidence scores that make up the candidate."
        },
        "scoreStats": {
          "$ref": "VideoContentSearchMetricStats",
          "description": "A summary of the token scores that make up the candidate."
        },
        "sourcePassage": {
          "description": "The passage text from which this span candidate belongs to. In case of description spans, this field stores the sentence containing the span candidate where the sentence is a subset of the passage used for generating the span candidate.",
          "type": "string"
        },
        "text": {
          "description": "The span candidate text.",
          "type": "string"
        },
        "timeMs": {
          "description": "The start time for the span candidate.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSpanDolphinScoresSpanToken": {
      "id": "VideoContentSearchSpanDolphinScoresSpanToken",
      "properties": {
        "asrConfidence": {
          "description": "The ASR confidence for the token, if available.",
          "format": "float",
          "type": "number"
        },
        "isSentenceStart": {
          "description": "Whether or not this token is the first token in a sentence.",
          "type": "boolean"
        },
        "score": {
          "description": "A score correlated with the probability that the token is part of a span candidate.",
          "format": "float",
          "type": "number"
        },
        "text": {
          "description": "The token text.",
          "type": "string"
        },
        "timeMs": {
          "description": "The start time of the passage with this token.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchSportsKeyMomentsAnchorSetFeatures": {
      "description": "Features for a set of Sports Key Moments (SKM) Anchors. Each instance of this object should be associated with a VideoAnchorSets object. Next ID: 3",
      "id": "VideoContentSearchSportsKeyMomentsAnchorSetFeatures",
      "properties": {
        "prefilterClassificationLabel": {
          "description": "The Prefilter classification label associated with the video that contains the VideoAnchorSets this object is asociated with. E.g. \"basketball\".",
          "type": "string"
        },
        "tensorflowModelVersion": {
          "description": "Version of the underlying TensorFlow model.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchTextMatchInfo": {
      "id": "VideoContentSearchTextMatchInfo",
      "properties": {
        "durationToPredictedTimeMs": {
          "description": "The time gap of the matched_time_ms from the predicted timestamp of when this anchor should appear in the video.",
          "format": "int64",
          "type": "string"
        },
        "matchScore": {
          "description": "The float similarty score from the anchor label to matched_asr_text.",
          "format": "float",
          "type": "number"
        },
        "matchedAsrStartPos": {
          "description": "The start token offset from the beginning of ASR where matched_asr_text starts.",
          "format": "int32",
          "type": "integer"
        },
        "matchedAsrText": {
          "description": "The ASR text that was a candidate match for the list anchor.",
          "type": "string"
        },
        "matchedAsrTimeMs": {
          "description": "The timestamp of the matched ASR in the video in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "matchedAsrTimeRatio": {
          "description": "The ratio of the matched_asr_time_ms over the total duration of the video.",
          "format": "float",
          "type": "number"
        },
        "matchedAsrTokenCount": {
          "description": "The number of tokens in matched_asr_text",
          "format": "int32",
          "type": "integer"
        },
        "matchedDescriptionItemIndexRatio": {
          "description": "The ratio of the video description item index this match corresponds to over the total number of list description items for the video.",
          "format": "float",
          "type": "number"
        },
        "matchedDescriptionText": {
          "description": "The video description text matched with the ASR that's used as the anchor label.",
          "type": "string"
        },
        "matchedDescriptionTokenCount": {
          "description": "The number of tokens in matched_description_text.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchTextSimilarityFeatures": {
      "id": "VideoContentSearchTextSimilarityFeatures",
      "properties": {
        "hypothesisText": {
          "description": "The hypothesis text that was used for the token overlap calculation.",
          "type": "string"
        },
        "hypothesisTextTime": {
          "description": "The time in ms for the hypothesis_text.",
          "format": "int64",
          "type": "string"
        },
        "referenceText": {
          "type": "string"
        },
        "scoringMethodName": {
          "description": "Similarity scorer name.",
          "type": "string"
        },
        "similarityScore": {
          "description": "The similarity score given by the scoring method specified by the message scoring_method_name.",
          "format": "float",
          "type": "number"
        },
        "tokenMatchCount": {
          "description": "Token by token matching stats. Exact matched token count.",
          "format": "int32",
          "type": "integer"
        },
        "tokenMatchPercent": {
          "description": "The token_overlap_count divided by the number of tokens in the hypothesis text.",
          "format": "float",
          "type": "number"
        },
        "wordAlignment": {
          "description": "Word by word alignment.",
          "items": {
            "$ref": "VideoContentSearchTokenAlignment"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchTokenAlignment": {
      "description": "Token by token mapping between hypothesis text and reference text.",
      "id": "VideoContentSearchTokenAlignment",
      "properties": {
        "hypothesisIndex": {
          "description": "Index of the token in hypothesis text.",
          "format": "int32",
          "type": "integer"
        },
        "hypothesisToken": {
          "description": "Token in hypothesis.",
          "type": "string"
        },
        "referenceIndex": {
          "description": "Index of the word in reference.",
          "format": "int32",
          "type": "integer"
        },
        "referenceToken": {
          "description": "Token in label.",
          "type": "string"
        },
        "tokenIsMatched": {
          "description": "Whether it's a perfect match.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoContentSearchTokenTimingInfo": {
      "description": "Token level timing information for ASR spans. This is expected to be extracted from PseudoVideoData in the CDoc. Next ID: 5",
      "id": "VideoContentSearchTokenTimingInfo",
      "properties": {
        "confidence": {
          "description": "Generated from th PseudoVideoData Timestamp Confidence field, which is quantized values in range 0-127. To convert to range 0-1 this field divides the PseudoVideoData Timestamp Confidence field by 127.",
          "format": "float",
          "type": "number"
        },
        "durationMs": {
          "format": "int64",
          "type": "string"
        },
        "startMs": {
          "format": "int64",
          "type": "string"
        },
        "text": {
          "description": "Should be a single token.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoActions": {
      "description": "Video level info for online pipeline usage. For example: skip pattern as defined in https://schema.org/SeekToAction.",
      "id": "VideoContentSearchVideoActions",
      "properties": {
        "skipPatternStartOffsetInput": {
          "description": "startOffset_input name as defined in https://schema.org/SeekToAction",
          "type": "string"
        },
        "skipToTimePattern": {
          "description": "Skip to time pattern as defined in https://schema.org/SeekToAction",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchor": {
      "description": "Next ID: 23",
      "id": "VideoContentSearchVideoAnchor",
      "properties": {
        "anchorScore": {
          "description": "The score indicating anchor confidence.",
          "format": "float",
          "type": "number"
        },
        "anchorType": {
          "description": "Specifies the type of the anchor.",
          "enum": [
            "UNKNOWN",
            "DESCRIPTION_ANCHOR",
            "LIST",
            "OCR",
            "LIST_ENTITY",
            "CAPTION_ENTITY",
            "KEY_MOMENT",
            "QUESTION_AND_ANSWER",
            "MARKUP",
            "OCR_ASR",
            "ASR_SPAN",
            "INSTRUCTION",
            "DESCRIPTION_SPAN",
            "EXPERIMENTAL_MORE_VIDEO_ANSWERS",
            "SHOPPING_OPINIONS",
            "GENERATED_QUERY",
            "HIGHLIGHTED_SNIPPET",
            "SHORT_TOPIC_HEADING_GROUP",
            "SHOPPING_ASR_SPAN",
            "RADISH_QA",
            "GENERATIVE_ASR",
            "ASR_TRANSCRIPT",
            "COMMENT",
            "GENERATIVE_ASR_V2",
            "SUMMARY_SEGMENT",
            "OCR_EDU",
            "ASR_SPAN_EDU",
            "GENERATIVE_ASR_I18N",
            "YT_AUTO_CHAPTERS"
          ],
          "enumDescriptions": [
            "",
            "Anchors with the time stamps in the video description.",
            "The lists of text items in the video description.",
            "The OCR text items in the video content.",
            "The entity mids from Oraclemania or Lisztomania.",
            "The entity mids from the captions.",
            "Sports Key Moments (go/skm-dd) anchors.",
            "Anchors where the labels are questions that are answered in the video segment.",
            "Anchors generated from the schema.org markup: https://schema.org/Clip",
            "Anchors created with a combination of OCR and ASR from the video content.",
            "Anchors created from ASR spans.",
            "Anchors created from Instruction steps in the video.",
            "Anchors created from Description spans.",
            "Anchors created from MoreVideoAnswers. This is used for MVA experiment, will be deprecated after its LE.",
            "Anchors created for shopping opinions (pros/cons).",
            "Anchors from queries generated from video content.",
            "Anchor that is created from highlighting matching metadata against the query.",
            "Merged anchors where the labels are short topic heading. This can be used as AnchorTypeVersionSpec.merging_group_type.",
            "Anchors created from shopping asr span model. This may be merged with ASR span anchor online.",
            "QUESTION_AND_ANSWER anchors that are generated via Radish in Goldmine.",
            "Generative ASR anchors.",
            "Anchors where each timed anchor represents one sentence in the ASR transcript.",
            "Anchors extracted from a YouTube comment.",
            "Generative ASR anchors V2.",
            "Anchors pointing to the conclusion/summary part of the video. (go/vs-find-summary-segment)",
            "OCR and ASR anchors generated for educational videos in edu Raffia Overlay.",
            "",
            "Anchors for i18n languages",
            "Anchors derived from Youtube chapters that were auto-generated."
          ],
          "type": "string"
        },
        "contextText": {
          "description": "Context text from ASR of long duration, used for longT5 models.",
          "type": "string"
        },
        "destinationUrl": {
          "description": "When set, this is the link that should be used when clicking on a video anchor. This should jump to the given time in the video.",
          "type": "string"
        },
        "duration": {
          "description": "The duration of the video anchor in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "entityScore": {
          "description": "The score indicating the usefulness of the entity identified by 'mid'.",
          "format": "float",
          "type": "number"
        },
        "filterReason": {
          "description": "If is_filtered is true, this field illustrates the reasons.",
          "items": {
            "enum": [
              "UNKNOWN_REASON",
              "DISPLAY_SIZE_LIMIT",
              "THUMBNAIL_MISSING",
              "THUMBNAIL_UNSAFE",
              "LABEL_UNSAFE",
              "TITLE_DUPLICATE_AND_CLOSE_TO_START",
              "POLICY",
              "INVALID_TIMESTAMP",
              "NO_ANCHOR_DESTINATION_URL",
              "LABEL_WITH_RESTRICTED_ENTITIES",
              "LABEL_WITH_PERSON_NAMES",
              "LABEL_IN_VIDEO_WITH_RESTRICTED_PETACATS",
              "LABEL_REMOVED_BY_GENERAL_SAFE_SEARCH",
              "LABEL_REMOVED_BY_FRINGE_SAFE_SEARCH",
              "LABEL_REMOVED_BY_OFFENSIVE_SAFE_SEARCH",
              "LABEL_IN_VIDEO_GENERAL_SAFE_SEARCH"
            ],
            "enumDescriptions": [
              "",
              "Only limited number of video anchors are shown. Anchors could be filtered to reduce the number. Or the anchors are too few to be shown.",
              "Anchors are filtered because their thumbnails are missing.",
              "Anchors are filtered because their thumbnails are unsafe.",
              "Anchors are filtered because their labels are unsafe.",
              "This is specific to video Q&A anchors. Anchors are filtered when their labels are similar to the video titles and located close to the starts of the videos.",
              "Anchors are filtered due to policy violation (e.g. EUCD).",
              "Timestamps that are invalid, e.g. negative timestamps or timestamps that are past the video duration.",
              "No destination_url is set.",
              "Anchors are filtered because their labels contain restricted entities.",
              "Anchors are filtered because their labels contain person names",
              "Anchors are filtered because the video has restricted petacat items.",
              "Anchors are filtered because the label has violations by safe search.",
              "Anchors are filtered because the label is fringe (more restricted than the general safe search threshold).",
              "Anchors are filtered because the label is offsive (more restricted than the general safe search threshold).",
              "Anchors are filtered bacause the video title has violations by safe search."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "isFiltered": {
          "description": "If true, the anchor is filtered and not served online.",
          "type": "boolean"
        },
        "isSafe": {
          "description": "Convenience field that consolidates signals for whether this label is safe.",
          "type": "boolean"
        },
        "isScutiBad": {
          "description": "whether this label is bad by go/scuti",
          "type": "boolean"
        },
        "label": {
          "description": "The text label of the video anchor.",
          "type": "string"
        },
        "labelScore": {
          "description": "The score indicating label confidence.",
          "format": "float",
          "type": "number"
        },
        "mid": {
          "description": "The mid of the video anchor.",
          "type": "string"
        },
        "namedEntity": {
          "description": "Specifies named enitities the label has.",
          "items": {
            "$ref": "VideoContentSearchNamedEntity"
          },
          "type": "array"
        },
        "precisionScore": {
          "description": "The precision for which the anchor should trigger. For example, if the desired precision is 95%, anchors with precision_score < 0.95 should be removed.",
          "format": "float",
          "type": "number"
        },
        "scoreInfo": {
          "$ref": "VideoContentSearchVideoAnchorScoreInfo",
          "description": "Additional scoring info used for debugging."
        },
        "starburstFeatures": {
          "$ref": "VideoContentSearchVisualFeatures",
          "description": "Visual tokens for the anchor. Eg. starbust feature vectors for several frames concatenated together."
        },
        "thumbnail": {
          "$ref": "VideoContentSearchAnchorThumbnail",
          "description": "Data about the thumbnail to display for this anchor."
        },
        "thumbnailUrl": {
          "description": "The url for a frame to display for this anchor.",
          "type": "string"
        },
        "time": {
          "description": "The time stamp of the video anchor in milliseconds.",
          "format": "int64",
          "type": "string"
        },
        "tokenTimingInfo": {
          "description": "Timing info for each token in the anchor label.",
          "items": {
            "$ref": "VideoContentSearchTokenTimingInfo"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchorRatingScore": {
      "description": "Aggregated rating score, used in training pipeline, etc.",
      "id": "VideoContentSearchVideoAnchorRatingScore",
      "properties": {
        "averageBookmarkUsefulness": {
          "description": "Average score of bookmark usefulness.",
          "format": "float",
          "type": "number"
        },
        "averageDescriptionQuality": {
          "description": "Average score of description quality.",
          "format": "float",
          "type": "number"
        },
        "furballUrl": {
          "description": "Furball URL(s) of the rating score (may have been rated more than once)",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchorScoreInfo": {
      "description": "Message to contain scoring / debugging information. If you want to add information which is not directly used in the final VideoAnchor data, it should be put here. Next ID: 27",
      "id": "VideoContentSearchVideoAnchorScoreInfo",
      "properties": {
        "anchorCommonFeatureSet": {
          "$ref": "VideoContentSearchAnchorCommonFeatureSet",
          "description": "Common features for any anchor types."
        },
        "attachments": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Additional attachments which extend MessageSet."
        },
        "babelCheckpointPath": {
          "description": "The path to the particular babel checkpoint",
          "type": "string"
        },
        "captionEntityAnchorFeatures": {
          "$ref": "VideoContentSearchCaptionEntityAnchorFeatures",
          "description": "Training features and debug info for caption entity anchors."
        },
        "captionSpanAnchorFeatures": {
          "$ref": "VideoContentSearchCaptionSpanAnchorFeatures",
          "description": "Features for caption span anchors for use in training."
        },
        "descriptionAnchorFeatures": {
          "$ref": "VideoContentSearchDescriptionAnchorFeatures",
          "description": "Description anchor features for use in training."
        },
        "filterReason": {
          "description": "A description of why the anchor was removed. This is intended for debugging anchor sets which use multiple heuristics to filter anchors.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "filtered": {
          "description": "Whether or not the anchor will be removed in the final proto.",
          "type": "boolean"
        },
        "generativeFeatures": {
          "description": "Generated predictions from generative models",
          "items": {
            "$ref": "VideoContentSearchGenerativePredictionFeatures"
          },
          "type": "array"
        },
        "instructionAnchorFeatures": {
          "$ref": "VideoContentSearchInstructionAnchorFeatures",
          "description": "Anchor level features for Instruction anchors."
        },
        "instructionTrainingDataAnchorFeatures": {
          "$ref": "VideoContentSearchInstructionTrainingDataAnchorFeatures",
          "description": "Training data features for Instruction anchors."
        },
        "labelLanguage": {
          "description": "Detected language of label",
          "type": "string"
        },
        "labelTransformation": {
          "items": {
            "$ref": "VideoContentSearchVideoAnchorScoreInfoLabelTransformation"
          },
          "type": "array"
        },
        "listAnchorFeatures": {
          "$ref": "VideoContentSearchListAnchorFeatures",
          "description": "List anchor features."
        },
        "listTrainingDataAnchorFeatures": {
          "$ref": "VideoContentSearchListTrainingDataAnchorFeatures",
          "description": "Anchor level metadata about the description anchors used to build training data for list anchors."
        },
        "multimodalTopicFeatures": {
          "$ref": "VideoContentSearchMultimodalTopicFeatures",
          "description": "Multimodal features for a generated topic."
        },
        "multimodalTopicTrainingFeatures": {
          "$ref": "VideoContentSearchMultimodalTopicTrainingFeatures",
          "description": "Features for a generated topic used to build training data for multimodal topics."
        },
        "normalizedBabelEmbedding": {
          "description": "Normalized babel embedding of anchor.label(). If the label has more than one sentences, the embedding will be the averaged normalized embedding of each sentence.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "ocrAnchorFeature": {
          "$ref": "VideoContentSearchOnScreenTextFeature",
          "description": "OCR anchor features."
        },
        "ocrDescriptionTrainingDataAnchorFeatures": {
          "$ref": "VideoContentSearchOcrDescriptionTrainingDataAnchorFeatures",
          "description": "Anchor level metadata about the join of description anchors and OCR data which is used to build training data."
        },
        "opinionsAnchorFeatures": {
          "$ref": "VideoContentSearchShoppingOpinionsAnchorFeatures",
          "description": "Shopping Opinions anchor features."
        },
        "qnaAnchorFeatures": {
          "$ref": "VideoContentSearchQnaAnchorFeatures",
          "description": "Q&A anchor features for use in training."
        },
        "ratingScore": {
          "$ref": "VideoContentSearchVideoAnchorRatingScore",
          "description": "Human rating score, used for training."
        },
        "safeSearchClassifierOutput": {
          "$ref": "ClassifierPornQueryMultiLabelClassifierOutput",
          "description": "The output of Safe Search's MultiLabelClassifier."
        },
        "textSimilarityFeatures": {
          "description": "ASR matching feature for any anchor types.",
          "items": {
            "$ref": "VideoContentSearchTextSimilarityFeatures"
          },
          "type": "array"
        },
        "thumbnailInfo": {
          "$ref": "VideoContentSearchAnchorThumbnailInfo",
          "description": "Information about the thumbnail anchor."
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchorScoreInfoLabelTransformation": {
      "description": "Used to store the label before label cleaning or other transformations. If the label goes through multiple transformations, the original_label vector will include the transformations in chronological order.",
      "id": "VideoContentSearchVideoAnchorScoreInfoLabelTransformation",
      "properties": {
        "description": {
          "description": "A label for the transformation.",
          "type": "string"
        },
        "sourceLabel": {
          "description": "The label that was transformated from.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchorSetRatingScore": {
      "description": "Aggregated set level rating score, used in training pipeline, etc.",
      "id": "VideoContentSearchVideoAnchorSetRatingScore",
      "properties": {
        "averageSetDescriptionQuality": {
          "description": "Average score of set level description quality.",
          "format": "float",
          "type": "number"
        },
        "averageSetNavigationUsefulness": {
          "description": "Average score of how useful the set is for navigation.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchorSets": {
      "description": "One video can have multiple types of text anchors. For example, https://www.youtube.com/watch?v=Rtk0I5PVOIc has both list anchors and OCR anchors.",
      "id": "VideoContentSearchVideoAnchorSets",
      "properties": {
        "videoActions": {
          "$ref": "VideoContentSearchVideoActions"
        },
        "videoAnchors": {
          "items": {
            "$ref": "VideoContentSearchVideoAnchors"
          },
          "type": "array"
        },
        "videoInfo": {
          "$ref": "VideoContentSearchVideoInfo"
        },
        "videoScoreInfo": {
          "$ref": "VideoContentSearchVideoScoreInfo"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchors": {
      "description": "A video can have a list of text anchors, which have different anchor types. Next ID: 15",
      "id": "VideoContentSearchVideoAnchors",
      "properties": {
        "anchorType": {
          "enum": [
            "UNKNOWN",
            "DESCRIPTION_ANCHOR",
            "LIST",
            "OCR",
            "LIST_ENTITY",
            "CAPTION_ENTITY",
            "KEY_MOMENT",
            "QUESTION_AND_ANSWER",
            "MARKUP",
            "OCR_ASR",
            "ASR_SPAN",
            "INSTRUCTION",
            "DESCRIPTION_SPAN",
            "EXPERIMENTAL_MORE_VIDEO_ANSWERS",
            "SHOPPING_OPINIONS",
            "GENERATED_QUERY",
            "HIGHLIGHTED_SNIPPET",
            "SHORT_TOPIC_HEADING_GROUP",
            "SHOPPING_ASR_SPAN",
            "RADISH_QA",
            "GENERATIVE_ASR",
            "ASR_TRANSCRIPT",
            "COMMENT",
            "GENERATIVE_ASR_V2",
            "SUMMARY_SEGMENT",
            "OCR_EDU",
            "ASR_SPAN_EDU",
            "GENERATIVE_ASR_I18N",
            "YT_AUTO_CHAPTERS"
          ],
          "enumDescriptions": [
            "",
            "Anchors with the time stamps in the video description.",
            "The lists of text items in the video description.",
            "The OCR text items in the video content.",
            "The entity mids from Oraclemania or Lisztomania.",
            "The entity mids from the captions.",
            "Sports Key Moments (go/skm-dd) anchors.",
            "Anchors where the labels are questions that are answered in the video segment.",
            "Anchors generated from the schema.org markup: https://schema.org/Clip",
            "Anchors created with a combination of OCR and ASR from the video content.",
            "Anchors created from ASR spans.",
            "Anchors created from Instruction steps in the video.",
            "Anchors created from Description spans.",
            "Anchors created from MoreVideoAnswers. This is used for MVA experiment, will be deprecated after its LE.",
            "Anchors created for shopping opinions (pros/cons).",
            "Anchors from queries generated from video content.",
            "Anchor that is created from highlighting matching metadata against the query.",
            "Merged anchors where the labels are short topic heading. This can be used as AnchorTypeVersionSpec.merging_group_type.",
            "Anchors created from shopping asr span model. This may be merged with ASR span anchor online.",
            "QUESTION_AND_ANSWER anchors that are generated via Radish in Goldmine.",
            "Generative ASR anchors.",
            "Anchors where each timed anchor represents one sentence in the ASR transcript.",
            "Anchors extracted from a YouTube comment.",
            "Generative ASR anchors V2.",
            "Anchors pointing to the conclusion/summary part of the video. (go/vs-find-summary-segment)",
            "OCR and ASR anchors generated for educational videos in edu Raffia Overlay.",
            "",
            "Anchors for i18n languages",
            "Anchors derived from Youtube chapters that were auto-generated."
          ],
          "type": "string"
        },
        "entityGroupInfo": {
          "$ref": "VideoContentSearchEntityGroupInfo",
          "description": "The list of entity groups derived from the caption entities."
        },
        "experimentalPredictedQuerylessTocUsefulness": {
          "description": "Same as above, but used for experimenting with new models.",
          "format": "float",
          "type": "number"
        },
        "filterReason": {
          "description": "If is_filtered is true, this field illustrates the reasons.",
          "items": {
            "enum": [
              "UNKNOWN_REASON",
              "DISPLAY_SIZE_LIMIT",
              "THUMBNAIL_MISSING",
              "THUMBNAIL_UNSAFE",
              "LABEL_UNSAFE",
              "TITLE_DUPLICATE_AND_CLOSE_TO_START",
              "POLICY",
              "INVALID_TIMESTAMP",
              "NO_ANCHOR_DESTINATION_URL",
              "LABEL_WITH_RESTRICTED_ENTITIES",
              "LABEL_WITH_PERSON_NAMES",
              "LABEL_IN_VIDEO_WITH_RESTRICTED_PETACATS",
              "LABEL_REMOVED_BY_GENERAL_SAFE_SEARCH",
              "LABEL_REMOVED_BY_FRINGE_SAFE_SEARCH",
              "LABEL_REMOVED_BY_OFFENSIVE_SAFE_SEARCH",
              "LABEL_IN_VIDEO_GENERAL_SAFE_SEARCH"
            ],
            "enumDescriptions": [
              "",
              "Only limited number of video anchors are shown. Anchors could be filtered to reduce the number. Or the anchors are too few to be shown.",
              "Anchors are filtered because their thumbnails are missing.",
              "Anchors are filtered because their thumbnails are unsafe.",
              "Anchors are filtered because their labels are unsafe.",
              "This is specific to video Q&A anchors. Anchors are filtered when their labels are similar to the video titles and located close to the starts of the videos.",
              "Anchors are filtered due to policy violation (e.g. EUCD).",
              "Timestamps that are invalid, e.g. negative timestamps or timestamps that are past the video duration.",
              "No destination_url is set.",
              "Anchors are filtered because their labels contain restricted entities.",
              "Anchors are filtered because their labels contain person names",
              "Anchors are filtered because the video has restricted petacat items.",
              "Anchors are filtered because the label has violations by safe search.",
              "Anchors are filtered because the label is fringe (more restricted than the general safe search threshold).",
              "Anchors are filtered because the label is offsive (more restricted than the general safe search threshold).",
              "Anchors are filtered bacause the video title has violations by safe search."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "isFiltered": {
          "description": "If true, the anchor set is filtered and not served online.",
          "type": "boolean"
        },
        "mergedAnchorsSources": {
          "description": "The anchor sources being used to generate this merged anchors. This field is filled only when this is a merged anchor.",
          "items": {
            "enum": [
              "UNKNOWN",
              "DESCRIPTION_ANCHOR",
              "LIST",
              "OCR",
              "LIST_ENTITY",
              "CAPTION_ENTITY",
              "KEY_MOMENT",
              "QUESTION_AND_ANSWER",
              "MARKUP",
              "OCR_ASR",
              "ASR_SPAN",
              "INSTRUCTION",
              "DESCRIPTION_SPAN",
              "EXPERIMENTAL_MORE_VIDEO_ANSWERS",
              "SHOPPING_OPINIONS",
              "GENERATED_QUERY",
              "HIGHLIGHTED_SNIPPET",
              "SHORT_TOPIC_HEADING_GROUP",
              "SHOPPING_ASR_SPAN",
              "RADISH_QA",
              "GENERATIVE_ASR",
              "ASR_TRANSCRIPT",
              "COMMENT",
              "GENERATIVE_ASR_V2",
              "SUMMARY_SEGMENT",
              "OCR_EDU",
              "ASR_SPAN_EDU",
              "GENERATIVE_ASR_I18N",
              "YT_AUTO_CHAPTERS"
            ],
            "enumDescriptions": [
              "",
              "Anchors with the time stamps in the video description.",
              "The lists of text items in the video description.",
              "The OCR text items in the video content.",
              "The entity mids from Oraclemania or Lisztomania.",
              "The entity mids from the captions.",
              "Sports Key Moments (go/skm-dd) anchors.",
              "Anchors where the labels are questions that are answered in the video segment.",
              "Anchors generated from the schema.org markup: https://schema.org/Clip",
              "Anchors created with a combination of OCR and ASR from the video content.",
              "Anchors created from ASR spans.",
              "Anchors created from Instruction steps in the video.",
              "Anchors created from Description spans.",
              "Anchors created from MoreVideoAnswers. This is used for MVA experiment, will be deprecated after its LE.",
              "Anchors created for shopping opinions (pros/cons).",
              "Anchors from queries generated from video content.",
              "Anchor that is created from highlighting matching metadata against the query.",
              "Merged anchors where the labels are short topic heading. This can be used as AnchorTypeVersionSpec.merging_group_type.",
              "Anchors created from shopping asr span model. This may be merged with ASR span anchor online.",
              "QUESTION_AND_ANSWER anchors that are generated via Radish in Goldmine.",
              "Generative ASR anchors.",
              "Anchors where each timed anchor represents one sentence in the ASR transcript.",
              "Anchors extracted from a YouTube comment.",
              "Generative ASR anchors V2.",
              "Anchors pointing to the conclusion/summary part of the video. (go/vs-find-summary-segment)",
              "OCR and ASR anchors generated for educational videos in edu Raffia Overlay.",
              "",
              "Anchors for i18n languages",
              "Anchors derived from Youtube chapters that were auto-generated."
            ],
            "type": "string"
          },
          "type": "array"
        },
        "predictedQuerylessTocUsefulness": {
          "description": "The score that predicts the usefulness of this anchor set on the Huh table of contents eval without considering the query.",
          "format": "float",
          "type": "number"
        },
        "score": {
          "description": "The quality of the anchor set.",
          "format": "float",
          "type": "number"
        },
        "scoreInfo": {
          "$ref": "VideoContentSearchVideoAnchorsScoreInfo",
          "description": "Additional scoring info used for debugging."
        },
        "shouldServeThumbnails": {
          "description": "Whether or not thumbnails should be displayed when serving anchors.",
          "type": "boolean"
        },
        "thumbnailForced": {
          "description": "This field indicates that the thumbnail should be hidden but is forced to show.",
          "type": "boolean"
        },
        "thumbnailSetInfo": {
          "$ref": "VideoContentSearchAnchorsThumbnailInfo",
          "description": "Information about the set of thumbnails."
        },
        "videoAnchor": {
          "items": {
            "$ref": "VideoContentSearchVideoAnchor"
          },
          "type": "array"
        },
        "videoIntroduction": {
          "$ref": "VideoContentSearchVideoIntroduction",
          "description": "Information about the video's introduction segment."
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoAnchorsScoreInfo": {
      "description": "Message to contain scoring / debugging information. If you want to add information which is not directly used in the final VideoAnchors data, it should be put here. Next ID: 14",
      "id": "VideoContentSearchVideoAnchorsScoreInfo",
      "properties": {
        "anchorsCommonFeatureSet": {
          "$ref": "VideoContentSearchAnchorsCommonFeatureSet",
          "description": "Common set-level features for any anchor types."
        },
        "captionEntityAnchorSetFeatures": {
          "$ref": "VideoContentSearchCaptionEntityAnchorSetFeatures",
          "description": "Training features and debug info for caption entity anchors."
        },
        "captionSpanAnchorSetFeatures": {
          "$ref": "VideoContentSearchCaptionSpanAnchorSetFeatures"
        },
        "commentAnchorSetFeatures": {
          "$ref": "VideoContentSearchCommentAnchorSetFeatures",
          "description": "Set-level features for comment anchors."
        },
        "descriptionAnchorSetFeatures": {
          "$ref": "VideoContentSearchDescriptionAnchorSetFeatures",
          "description": "Description anchor features for use in training."
        },
        "filtered": {
          "description": "Whether or not the anchors will be removed in the final proto.",
          "type": "boolean"
        },
        "listAnchorSetFeatures": {
          "$ref": "VideoContentSearchListAnchorSetFeatures",
          "description": "Set-level features for list anchors."
        },
        "listTrainingDataSetFeatures": {
          "$ref": "VideoContentSearchListTrainingDataSetFeatures",
          "description": "Set level metadata about the description anchors used to build training data for List Description anchors."
        },
        "ocrAnchorClusterFeature": {
          "$ref": "VideoContentSearchOnScreenTextClusterFeature",
          "description": "OCR anchor cluster features."
        },
        "ocrDescriptionTrainingDataSetFeatures": {
          "$ref": "VideoContentSearchOcrDescriptionTrainingDataSetFeatures",
          "description": "Set level metadata about the join of description anchors and OCR data which is used to build training data."
        },
        "qnaAnchorSetFeatures": {
          "$ref": "VideoContentSearchQnaAnchorSetFeatures",
          "description": "Metadata such as model versions for Q&A anchors."
        },
        "ratingScore": {
          "$ref": "VideoContentSearchVideoAnchorSetRatingScore",
          "description": "Human rating score, used for training."
        },
        "sportsKeyMomentsAnchorSetFeatures": {
          "$ref": "VideoContentSearchSportsKeyMomentsAnchorSetFeatures"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoCommonFeatures": {
      "description": "Contains video level features that apply to all anchor types.",
      "id": "VideoContentSearchVideoCommonFeatures",
      "properties": {
        "anchorCount": {
          "description": "The total number of anchors in all video anchor sets.",
          "format": "int32",
          "type": "integer"
        },
        "captionInfo": {
          "$ref": "VideoContentSearchCaptionInfo",
          "description": "The caption data for the video transcript. The models used for unified scorer. Should be a filepath that contains saved_model.pb and a variables/ folder"
        },
        "labelPhraseEmbeddingModel": {
          "description": "The model used for generating label_phrase_embedding.",
          "type": "string"
        },
        "unifiedScoringBertModels": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoGeneratedQueryFeatures": {
      "description": "Contains video level features for generated queries that are applied at the video level.",
      "id": "VideoContentSearchVideoGeneratedQueryFeatures",
      "properties": {
        "filterReason": {
          "description": "A description of why the video was removed. This is intended for debugging generated queries that are filtered at the video level.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "prefilteredPassageCount": {
          "description": "The total number of passages that were input to generating queries for this video. This count might be bigger than the total number of anchors in the video as some of the anchors might have been filtered by the pipeline.",
          "format": "int32",
          "type": "integer"
        },
        "titleEntityAnnotations": {
          "$ref": "VideoContentSearchEntityAnnotations",
          "description": "Entity annotations for one of the mids representing the video title. This entity is either one of the blocklisted entities if at least of the mentioned entities in the title belongs to the blocklisted categories, or is the highest confidence entity for the title."
        },
        "totalRestrictedQueries": {
          "description": "The total number of queries that belong to the blocklisted categories for this video.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoInfo": {
      "description": "This message holds metadata and signals of one video. It is typically used for holding debug data in tables produced by offline pipelines related to video anchors. Please never populate this message into the search serving stack. Next ID: 31",
      "id": "VideoContentSearchVideoInfo",
      "properties": {
        "amarnaDocid": {
          "description": "A hash of the video bytes used as a key to Amarna's video_metadata table.",
          "type": "string"
        },
        "asrLanguage": {
          "description": "Language information, extracted from content_based_metadata.speech_properties.",
          "type": "string"
        },
        "crapsData": {
          "$ref": "QualityNavboostCrapsCrapsData",
          "description": "Craps data from the video cdoc."
        },
        "description": {
          "description": "Video description.",
          "type": "string"
        },
        "docLanguage": {
          "description": "Language information, extracted from DocProperties.",
          "type": "string"
        },
        "durationMs": {
          "description": "Video duration in ms.",
          "format": "float",
          "type": "number"
        },
        "hasAsr": {
          "description": "Whether or not automatic speech recognition has been generated for this video.",
          "type": "boolean"
        },
        "hasDescriptionAnchors": {
          "description": "Whether or not the video has description anchors.",
          "type": "boolean"
        },
        "isSafe": {
          "description": "Convenience field that is false if any of the video's anchors have their is_safe field set to false.",
          "type": "boolean"
        },
        "isWatchpage": {
          "description": "Whether or not this is watchpage.",
          "type": "boolean"
        },
        "navqueries": {
          "description": "Navqueries for the video.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "nsr": {
          "description": "NSR for the video page document.",
          "format": "float",
          "type": "number"
        },
        "numViews": {
          "description": "Number of views.",
          "format": "int64",
          "type": "string"
        },
        "pseudoVideoData": {
          "$ref": "PseudoVideoData",
          "description": "ASR with timing info for each token copied from doc_videos.content_based_metadata.transcript_asr."
        },
        "saftDoc": {
          "$ref": "NlpSaftDocument",
          "description": "The Saft document generated from the anchor labels."
        },
        "saftTranscript": {
          "description": "The transcript used to generate the Saft doc.",
          "type": "string"
        },
        "salientTermSet": {
          "$ref": "QualitySalientTermsSalientTermSet",
          "description": "Salient term set from the document. This message contains a lot of data and dependencies, so sub-messages are disabled in model evaluation in scorer."
        },
        "subindexid": {
          "description": "The subindexid from the cdoc. Stored as an int to avoid a cyclical dependency. Should be convertible to CompositeDoc.SubIndexType.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "title": {
          "description": "Video title.",
          "type": "string"
        },
        "titleLanguage": {
          "description": "Video title language Language information, set automatically by the SAFT LangID.",
          "type": "string"
        },
        "transcriptAnnotations": {
          "$ref": "QualityWebanswersTranscriptAnnotations",
          "description": "Transcript annotations that include information about the ASR including timing and entity mentions."
        },
        "uniqueChromeViews": {
          "description": "Number of unique visits in Chrome.",
          "format": "int32",
          "type": "integer"
        },
        "url": {
          "description": "Document url.",
          "type": "string"
        },
        "verticalItem": {
          "description": "Top petacat verticals of the video produced by indexing/ml/vertical, sorted in descending order by vertical confidence.",
          "items": {
            "$ref": "IndexingMlVerticalVerticalItem"
          },
          "type": "array"
        },
        "videoGenre": {
          "description": "Genre of the video from the page metadata. Concatenate all with a comma separator if there are multiple genres.",
          "type": "string"
        },
        "videoType": {
          "enum": [
            "UNKNOWN",
            "LISTICLE",
            "INSTRUCTION",
            "SPORTS",
            "SINGLE_PRODUCT_RESEARCH",
            "EDU"
          ],
          "enumDescriptions": [
            "",
            "The video shows a list of things (e.g. top 10 disney movies, etc.).",
            "How-to or other educational video.",
            "Video containing sports footage.",
            "Shopping video that reviews a single product.",
            "Educational video from /raffia/educational-videos."
          ],
          "type": "string"
        },
        "videoUrl": {
          "description": "Video url. Note that VideoInfo::url is a page url that has this video, while this is a video file url.",
          "type": "string"
        },
        "webrefEntities": {
          "$ref": "RepositoryWebrefWebrefEntities",
          "description": "Represents a collection of entities returned by the WebRef service. This message contains a lot of data and dependencies, so sub-messages are disabled in model evaluation in scorer."
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoIntroduction": {
      "description": "Specifies whether a video has an introduction part that can be skipped. An introduction is the beginning part of a video that can be safely skipped without impacting user's understanding of the overall video content.",
      "id": "VideoContentSearchVideoIntroduction",
      "properties": {
        "hasIntro": {
          "description": "If set to true, it means the video has an introduction spanning from intro_start_ms to intro_end_ms.",
          "type": "boolean"
        },
        "introEndMs": {
          "description": "Timestamp of the end of an introduction. Will only be set if has_intro is true. Indicates video may be skipped to this timestamp with minimal impact on understanding the overall video contents.",
          "format": "int64",
          "type": "string"
        },
        "introStartMs": {
          "description": "Timestamp of the beginning of an introduction. Will only be set if has_intro is true. This value may be nonzero.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoMultimodalTopicFeatures": {
      "description": "Video-level Multimodal features for generated topics. Next ID: 2",
      "id": "VideoContentSearchVideoMultimodalTopicFeatures",
      "properties": {
        "frameStarburstData": {
          "description": "Starburst vectors. Sorted by timestamp.",
          "items": {
            "$ref": "VideoContentSearchFrameStarburstData"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoContentSearchVideoScoreInfo": {
      "description": "Video level scoring info.",
      "id": "VideoContentSearchVideoScoreInfo",
      "properties": {
        "commonFeatures": {
          "$ref": "VideoContentSearchVideoCommonFeatures",
          "description": "Anchor scoring features that apply to all anchor types."
        },
        "ocrVideoFeature": {
          "$ref": "VideoContentSearchOcrVideoFeature",
          "description": "OCR specific video level feature."
        },
        "safeSearchClassifierOutput": {
          "$ref": "ClassifierPornQueryMultiLabelClassifierOutput",
          "description": "The output of Safe Search's MultiLabelClassifier for video title."
        },
        "version": {
          "description": "The version of this VideoAnchorSets in spanner.",
          "type": "string"
        },
        "videoGeneratedQueryFeatures": {
          "$ref": "VideoContentSearchVideoGeneratedQueryFeatures",
          "description": "Video-level features that apply to all the generated queries within this VideoAnchorSets."
        },
        "videoMultimodalTopicFeatures": {
          "$ref": "VideoContentSearchVideoMultimodalTopicFeatures",
          "description": "Video-level features for Multimodal topics."
        }
      },
      "type": "object"
    },
    "VideoContentSearchVisualFeatures": {
      "description": "Startburst visual tokens or features, more details in go/starburst-mum-user-guide",
      "id": "VideoContentSearchVisualFeatures",
      "properties": {
        "features": {
          "description": "Starburst features semantic or visual/",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "starbustVersion": {
          "enum": [
            "UNKNOWN_VERSION",
            "STARBURST_V1",
            "STARBURST_V2",
            "STARBURST_V3",
            "STARBURST_V4",
            "STARBURST_VISUAL_V4",
            "STARBURST_V5",
            "STARBURST_V5_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "tokens": {
          "description": "Starburst visual tokens",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoCrawlVideoInlinePlaybackMetadata": {
      "description": "This message is used to store information about Inline Playback in the VideoWebAttachment portion of the websearch index. LINT.IfChange",
      "id": "VideoCrawlVideoInlinePlaybackMetadata",
      "properties": {
        "expirationTimestampSec": {
          "description": "Timestamp (measured in seconds since epoch) when a video may not be used for inline playback in the interest feed.",
          "format": "int64",
          "type": "string"
        },
        "googleAnalyticsId": {
          "description": "Publisher's Google Analytics Id to which we can report view metrics.",
          "type": "string"
        },
        "playbackCountryBlacklist": {
          "description": "All two-letter codes for countries where this video may NOT be played.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "playbackCountryWhitelist": {
          "description": "All two-letter codes for countries where this video may be played. If empty, then all countries not on the blacklist are allowed for playback.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "transcodeItags": {
          "description": "Set of transcodes which are available for the video.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "vastTag": {
          "description": "VAST tag for ads to be played along with this video. Currently, we only support VAST tags from Doubleclick and FreeWheel.",
          "type": "string"
        },
        "videoId": {
          "description": "Identifier video is known by in the video infrastructure. The format given here is the YoutubeId format (base-64) used in Venom; for Viper/Bandaid/ StreamingURLService, convert to ContentIdHex.",
          "type": "string"
        },
        "videoUrlOnExternalCdn": {
          "description": "Set if the video is hosted on an external CDN, in which case it is not to be transcoded and hosted at Google for the Interest Feed.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoDoViDecoderConfiguration": {
      "description": "Decoder configuration for Dolby Vision encoded by any codec. Dolby Vision defines a separate profile & level hierarchy regardless of the base codec. See Dolby Vision profiles, levels and compatibility: https://dolby.my.salesforce.com/sfc/p/#700000009YuG/a/4u000000l6G4/4R18riPaaW3gxpVx7XwyQLdEITLFjB.w.Si0LoQR5j8 Dolby Vision DASH streaming: https://professional.dolby.com/siteassets/content-creation/dolby-vision-for-content-creators/dolbyvisioninmpegdashspecification_v2_0_public_20190107.pdf HTTP Live Streaming: https://professional.dolby.com/siteassets/content-creation/dolby-vision-for-content-creators/dolby-vision-streams-within-the-http-live-streaming-format-v2.0-13-november-2018.pdf Dolby Vision bitstreams: https://professional.dolby.com/siteassets/pdfs/dolbyvisionstreamsinisobmffspecification-v2.1.2.pdf",
      "id": "VideoDoViDecoderConfiguration",
      "properties": {
        "blPresentFlag": {
          "description": "If a track contains the base layer substream.",
          "type": "boolean"
        },
        "dvBlSignalCompatibilityId": {
          "description": "Whether the stream is compatible with other sets of standard.",
          "format": "uint32",
          "type": "integer"
        },
        "dvLevel": {
          "format": "uint32",
          "type": "integer"
        },
        "dvProfile": {
          "format": "uint32",
          "type": "integer"
        },
        "dvVersionMajor": {
          "description": "Specifies the major version number of the Dolby Vision specification that the stream complies with.",
          "format": "uint32",
          "type": "integer"
        },
        "dvVersionMinor": {
          "description": "Specifies the minor version number of the Dolby Vision specification that the stream complies with.",
          "format": "uint32",
          "type": "integer"
        },
        "elPresentFlag": {
          "description": "If a track contains the enhancement layer substream.",
          "type": "boolean"
        },
        "fourccTag": {
          "description": "dvhe, dvh1, dvav, dva1: https://screenshot.googleplex.com/ipMGXFqLX9E",
          "type": "string"
        },
        "rpuPresentFlag": {
          "description": "If a track contains the reference picture unit substream.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoFileColorInfo": {
      "description": "A message holding all of the color information about a signal: -Color primaries identify the meaning of red, green, and blue ( and the white point). -The transfer characteristic identifies the mapping used to go between linear and coded values of light. -The matrix coefficients identifies, e.g., the conversion between Ycbcr to RGB (in the space of the primaries) -And the color range defines the min/max of the levels used.",
      "id": "VideoFileColorInfo",
      "properties": {
        "matrixCoefficients": {
          "enum": [
            "COLOR_MATRIX_COEFFICIENTS_RGB",
            "COLOR_MATRIX_COEFFICIENTS_BT709",
            "COLOR_MATRIX_COEFFICIENTS_UNSPECIFIED",
            "COLOR_MATRIX_COEFFICIENTS_FCC",
            "COLOR_MATRIX_COEFFICIENTS_BT470BG",
            "COLOR_MATRIX_COEFFICIENTS_SMPTE170M",
            "COLOR_MATRIX_COEFFICIENTS_SMPTE240M",
            "COLOR_MATRIX_COEFFICIENTS_YCOCG",
            "COLOR_MATRIX_COEFFICIENTS_BT2020_NCL",
            "COLOR_MATRIX_COEFFICIENTS_BT2020_CL",
            "COLOR_MATRIX_COEFFICIENTS_SMPTE2085",
            "COLOR_MATRIX_COEFFICIENTS_CHROMA_DERIVED_NCL",
            "COLOR_MATRIX_COEFFICIENTS_CHROMA_DERIVED_CL",
            "COLOR_MATRIX_COEFFICIENTS_ICTCP"
          ],
          "enumDescriptions": [
            "",
            "Also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B.",
            "",
            "",
            "Also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & / SECAM / IEC 61966-2-4 xvYCC601.",
            "Also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / / functionally identical to above.",
            "",
            "Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16.",
            "ITU-R BT2020 non-constant luminance system.",
            "ITU-R BT2020 constant luminance system.",
            "SMPTE 2085, Y'D'zD'x",
            "Chromaticity-derived non-constant luminance.",
            "Chromaticity-derived constant luminance.",
            "ITU-R BT.[HDR-TV] ICtCp"
          ],
          "type": "string"
        },
        "primaries": {
          "enum": [
            "COLOR_PRIMARIES_BT709",
            "COLOR_PRIMARIES_UNSPECIFIED",
            "COLOR_PRIMARIES_BT470M",
            "COLOR_PRIMARIES_BT470BG",
            "COLOR_PRIMARIES_SMPTE170M",
            "COLOR_PRIMARIES_SMPTE240M",
            "COLOR_PRIMARIES_FILM",
            "COLOR_PRIMARIES_BT2020",
            "COLOR_PRIMARIES_SMPTEST428_1",
            "COLOR_PRIMARIES_SMPTE431",
            "COLOR_PRIMARIES_SMPTE432",
            "COLOR_PRIMARIES_JEDEC_P22"
          ],
          "enumDescriptions": [
            "Also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B.",
            "",
            "",
            "Also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM.",
            "Also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC.",
            "Functionally identical to above.",
            "Color filters using Illuminant C.",
            "ITU-R BT2020.",
            "SMPTE ST428-1.",
            "SMPTE ST431-2",
            "SMPTE ST432-1",
            "JEDEC P22 phosphors"
          ],
          "type": "string"
        },
        "range": {
          "enum": [
            "COLOR_RANGE_UNSPECIFIED",
            "COLOR_RANGE_MPEG",
            "COLOR_RANGE_JPEG"
          ],
          "enumDescriptions": [
            "",
            "The normal 219*2^(n-8) \"MPEG\" YUV ranges.",
            "The normal 2^n-1 \"JPEG\" YUV ranges."
          ],
          "type": "string"
        },
        "transferCharacteristics": {
          "enum": [
            "COLOR_TRANSFER_CHARACTERISTICS_BT709",
            "COLOR_TRANSFER_CHARACTERISTICS_UNSPECIFIED",
            "COLOR_TRANSFER_CHARACTERISTICS_GAMMA22",
            "COLOR_TRANSFER_CHARACTERISTICS_GAMMA28",
            "COLOR_TRANSFER_CHARACTERISTICS_SMPTE170M",
            "COLOR_TRANSFER_CHARACTERISTICS_SMPTE240M",
            "COLOR_TRANSFER_CHARACTERISTICS_LINEAR",
            "COLOR_TRANSFER_CHARACTERISTICS_LOG",
            "COLOR_TRANSFER_CHARACTERISTICS_LOG_SQRT",
            "COLOR_TRANSFER_CHARACTERISTICS_IEC61966_2_4",
            "COLOR_TRANSFER_CHARACTERISTICS_BT1361_ECG",
            "COLOR_TRANSFER_CHARACTERISTICS_IEC61966_2_1",
            "COLOR_TRANSFER_CHARACTERISTICS_BT2020_10",
            "COLOR_TRANSFER_CHARACTERISTICS_BT2020_12",
            "COLOR_TRANSFER_CHARACTERISTICS_SMPTEST2084",
            "COLOR_TRANSFER_CHARACTERISTICS_SMPTEST428_1",
            "COLOR_TRANSFER_CHARACTERISTICS_ARIB_STD_B67"
          ],
          "enumDescriptions": [
            "Also ITU-R BT1361.",
            "",
            "Also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM.",
            "Also ITU-R BT470BG.",
            "Also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC.",
            "",
            "Linear transfer characteristics.",
            "Logarithmic transfer characteristic (100:1 range).",
            "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range).",
            "IEC 61966-2-4.",
            "ITU-R BT1361 Extended Colour Gamut.",
            "IEC 61966-2-1 (sRGB or sYCC).",
            "ITU-R BT2020 for 10 bit system.",
            "ITU-R BT2020 for 12 bit system.",
            "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems.",
            "SMPTE ST 428-1.",
            "ARIB STD-B67, known as \"Hybrid log-gamma\"."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoFileContentLightLevel": {
      "description": "A message holding the equivalent of the content light level information in HEVC or its representation in matroska/webm. This gives coarse stats on the luminance levels in the content and may be used as a hint by algorithms & displays to tone map.",
      "id": "VideoFileContentLightLevel",
      "properties": {
        "maxContentLightLevel": {
          "description": "Defines the maximum content light level (in cd/m^2) over the entire video.",
          "format": "int32",
          "type": "integer"
        },
        "maxFrameAverageLightLevel": {
          "description": "The maximum (over entire video) of the frame average light level.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoFileFramePackingArrangement": {
      "description": "Information on Frame Packing arrangement",
      "id": "VideoFileFramePackingArrangement",
      "properties": {
        "gridOffset0Horizontal": {
          "description": "Grid positions",
          "format": "int32",
          "type": "integer"
        },
        "gridOffset0Vertical": {
          "format": "int32",
          "type": "integer"
        },
        "gridOffset1Horizontal": {
          "format": "int32",
          "type": "integer"
        },
        "gridOffset1Vertical": {
          "format": "int32",
          "type": "integer"
        },
        "interpretation": {
          "description": "Content interpretation",
          "enum": [
            "FPA_INTERPRET_UNKNOWN",
            "FPA_INTERPRET_LEFT_FIRST",
            "FPA_INTERPRET_RIGHT_FIRST"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "quincunxSampling": {
          "description": "Quincunx sampling flag indicating if quincunx sampling is used",
          "type": "boolean"
        },
        "type": {
          "description": "Arrangement type",
          "enum": [
            "FPA_NONE",
            "FPA_CHECKERBOARD",
            "FPA_COL_ALTERNATION",
            "FPA_ROW_ALTERNATION",
            "FPA_SIDE_BY_SIDE",
            "FPA_TOP_TO_BOTTOM",
            "FPA_FRAME_ALTERNATION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoFileHDR10PlusStats": {
      "description": "Stats on HDR10+ (SMPTE 2094-40:2016 standard) over video frames.",
      "id": "VideoFileHDR10PlusStats",
      "properties": {
        "applicationVersion": {
          "description": "Application version is set to max version over all frames.",
          "format": "int32",
          "type": "integer"
        },
        "averageTargetedSystemDisplayMaximumLuminance": {
          "description": "The average of the nominal maximum display luminance of the targeted system display over all frames.",
          "format": "double",
          "type": "number"
        },
        "masteringDisplayActualPeakLuminanceFlag": {
          "description": "This flag is set if any frame has it.",
          "type": "boolean"
        },
        "maxNumWindows": {
          "format": "int32",
          "type": "integer"
        },
        "targetedSystemDisplayActualPeakLuminanceFlag": {
          "description": "This flag is set if any frame has it.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoFileMasteringDisplayMetadata": {
      "description": "A message holding information about the mastering display color volume. This metadata can be used when tone mapping an HDR signal to a display with a different gamut or brightness characteristics than the mastering display. This message is capable of containing SMPTE 2086 metadata.",
      "id": "VideoFileMasteringDisplayMetadata",
      "properties": {
        "blue": {
          "$ref": "VideoFileMasteringDisplayMetadataCIE1931Coordinate",
          "description": "Coordinates of the blue primary of the mastering display."
        },
        "green": {
          "$ref": "VideoFileMasteringDisplayMetadataCIE1931Coordinate",
          "description": "Coordinates of the green primary of the mastering display."
        },
        "maxLuminance": {
          "description": "Maximum luminance of the display (in cd/m^2).",
          "format": "float",
          "type": "number"
        },
        "minLuminance": {
          "description": "Minimum luminance of the display (in cd/m^2).",
          "format": "float",
          "type": "number"
        },
        "red": {
          "$ref": "VideoFileMasteringDisplayMetadataCIE1931Coordinate",
          "description": "Coordinates of the red primary of the mastering display."
        },
        "whitePoint": {
          "$ref": "VideoFileMasteringDisplayMetadataCIE1931Coordinate",
          "description": "Coordinates of the white point of the mastering display."
        }
      },
      "type": "object"
    },
    "VideoFileMasteringDisplayMetadataCIE1931Coordinate": {
      "description": "Representation of a color coordinate in CIE1931 color space.",
      "id": "VideoFileMasteringDisplayMetadataCIE1931Coordinate",
      "properties": {
        "x": {
          "format": "float",
          "type": "number"
        },
        "y": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadata": {
      "description": "Globally allowed spherical meta data.",
      "id": "VideoFileSphericalMetadata",
      "properties": {
        "clampedOptimalFovBounds": {
          "$ref": "VideoFileSphericalMetadataFOVBounds",
          "description": "Like above, but with high-pass motion filtering applied and yaw rotation limited to +/- 15-degrees"
        },
        "cubemap": {
          "$ref": "VideoFileSphericalMetadataCubemapProjection"
        },
        "deprecatedCroppedArea": {
          "$ref": "VideoFileSphericalMetadataCroppedArea"
        },
        "deprecatedInitialView": {
          "$ref": "VideoFileSphericalMetadataViewDirection",
          "description": "InitialView is from v1 spec, and is more or less equivalent to Pose from v2 spec. Therefore, InitialView found in xml metadata would populate the pose field in this proto."
        },
        "equirect": {
          "$ref": "VideoFileSphericalMetadataEquirectProjection"
        },
        "fullPanoHeightPixels": {
          "format": "int32",
          "type": "integer"
        },
        "fullPanoWidthPixels": {
          "description": "Dimensions of the full video frame.",
          "format": "int32",
          "type": "integer"
        },
        "mesh": {
          "$ref": "VideoFileSphericalMetadataMeshProjection"
        },
        "metadataSource": {
          "description": "Metadata source v2(svhd)",
          "type": "string"
        },
        "optimalFovBounds": {
          "$ref": "VideoFileSphericalMetadataFOVBounds",
          "description": "If video contains Wally-sanitized mesh and camera motion metadata (see go/wally-format ), this contains the optimal FOV (smallest FOV that encompass all combinations of input mesh FOV and rotations). This field will only be present if full FfmpegAnalyze is performed."
        },
        "pose": {
          "$ref": "VideoFileSphericalMetadataPose"
        },
        "projectionType": {
          "description": "Mapping type used to map the sphere to the rectangular video E.g., \"equirectangular\", http://en.wikipedia.org/wiki/Equirectangular_projection This is kept as string so that we can retain values that are unknown to us.",
          "type": "string"
        },
        "sourceCount": {
          "description": "The number of camera sources used to generate this video.",
          "format": "int32",
          "type": "integer"
        },
        "spherical": {
          "description": "Whether the video is spherical or not.",
          "type": "boolean"
        },
        "stereoMode": {
          "description": "The stereo mode.",
          "enum": [
            "STEREO_MODE_UNKNOWN",
            "STEREO_MODE_MONO",
            "STEREO_MODE_LEFT_RIGHT",
            "STEREO_MODE_TOP_BOTTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "stitched": {
          "description": "Whether the video has already been stitched.",
          "type": "boolean"
        },
        "stitchingSoftware": {
          "description": "The stitching software.",
          "type": "string"
        },
        "timestamp": {
          "description": "Epoch Timestamp of when the first frame in the video was recorded",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataCroppedArea": {
      "description": "The cropping coordinates, in pixels.",
      "id": "VideoFileSphericalMetadataCroppedArea",
      "properties": {
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "left": {
          "format": "int32",
          "type": "integer"
        },
        "top": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataCubemapProjection": {
      "description": "Specifies usage of cubemap projection.",
      "id": "VideoFileSphericalMetadataCubemapProjection",
      "properties": {
        "layout": {
          "description": "Values 0 to 255 are reserved for current and future layouts. Value of 0 corresponds to a grid with 3 columns and 2 rows as follows: | right face | left face | up face | | down face | front face | back face |",
          "format": "uint32",
          "type": "integer"
        },
        "padding": {
          "description": "Number of pixels to pad from the edge of each cube face",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataEquirectProjection": {
      "description": "Specifies usage of equirectangular projection. More specifically, these are the proportion of projection cropped from each edge not covered by the video frame. For uncropped frame, all values are 0. For v1 metadata, this contains CroppedArea information (CroppedAreaLeftPixels, CroppedAreaTopPixels, CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels)",
      "id": "VideoFileSphericalMetadataEquirectProjection",
      "properties": {
        "projectionBoundsBottom": {
          "format": "uint32",
          "type": "integer"
        },
        "projectionBoundsLeft": {
          "format": "uint32",
          "type": "integer"
        },
        "projectionBoundsRight": {
          "format": "uint32",
          "type": "integer"
        },
        "projectionBoundsTop": {
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataFOVBounds": {
      "id": "VideoFileSphericalMetadataFOVBounds",
      "properties": {
        "endTiltInDegrees": {
          "format": "double",
          "type": "number"
        },
        "endYawInDegrees": {
          "format": "double",
          "type": "number"
        },
        "startTiltInDegrees": {
          "format": "double",
          "type": "number"
        },
        "startYawInDegrees": {
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataMeshProjection": {
      "description": "Specifies usage of mesh projection. \"content\" contains the mshp atom: version/flags, CRC, compression method, description of the mesh(es) (vertices, coordinates corresponding to each vertex, and vertex lists to describe the projection). See go/pir-spec for mshp atom data layout.",
      "id": "VideoFileSphericalMetadataMeshProjection",
      "properties": {
        "bounds": {
          "$ref": "VideoFileSphericalMetadataFOVBounds",
          "description": "Once mesh is analyzed, this field contains the bounds of the mesh(es) In case of stereo mesh, this will be the aggregate of both eye meshes"
        },
        "content": {
          "format": "byte",
          "type": "string"
        },
        "type": {
          "description": "The mesh type field will only be populated when we have done analysis on the mesh. If this field is missing, mesh analysis has not been done.",
          "enum": [
            "MESH_TYPE_UNKNOWN",
            "MESH_TYPE_WALLY_FISHEYE",
            "MESH_TYPE_WALLY_CROPPED_EQUIRECT",
            "MESH_TYPE_WALLY_FOVEATED"
          ],
          "enumDescriptions": [
            "",
            "Wally mesh: see go/wally-format and go/wallymesh.",
            "",
            "go/wally-foveated-mesh-dd"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataPose": {
      "description": "Specifies the compass heading, pitch & roll for the origin of the projection. The origin for the \"equirectangular\" projection is the center of the image. The origin for the other projection types is defined as the location in the image that corresponds to the origin of an \"equirectangular\" projection.",
      "id": "VideoFileSphericalMetadataPose",
      "properties": {
        "headingDegrees": {
          "format": "float",
          "type": "number"
        },
        "pitchDegrees": {
          "format": "float",
          "type": "number"
        },
        "rollDegrees": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoFileSphericalMetadataViewDirection": {
      "id": "VideoFileSphericalMetadataViewDirection",
      "properties": {
        "headingDegrees": {
          "format": "int32",
          "type": "integer"
        },
        "pitchDegrees": {
          "format": "int32",
          "type": "integer"
        },
        "rollDegrees": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoLegosLegosAnnotationsSet": {
      "id": "VideoLegosLegosAnnotationsSet",
      "properties": {
        "featureSetName": {
          "type": "string"
        },
        "legosAnnotations": {
          "$ref": "YoutubeDiscoveryLegosLegosAnnotations"
        }
      },
      "type": "object"
    },
    "VideoLegosLegosAnnotationsSets": {
      "id": "VideoLegosLegosAnnotationsSets",
      "properties": {
        "annotationsSet": {
          "items": {
            "$ref": "VideoLegosLegosAnnotationsSet"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoMediaInfo": {
      "description": "Feel free to ignore this lint warning if only the trivia (e.g., comments) is is changed. LINT.IfChange",
      "id": "VideoMediaInfo",
      "properties": {
        "audioStream": {
          "description": "Each entry corresponds to one audio stream in the original media file.",
          "items": {
            "$ref": "VideoAudioStream"
          },
          "type": "array"
        },
        "containerId": {
          "description": "Container type of the file, e.g. FLV, H264, MP3. Uses the numeric value corresponding to the ContainerId enum objects, in order to avoid the dependency on vsi/videostreaminfo.proto. http://cs/symbol:ContainerId%20f:google3/video/vidproc/vsi/videostreaminfo.proto",
          "format": "int32",
          "type": "integer"
        },
        "fileSize": {
          "description": "Media file size in bytes.",
          "format": "int64",
          "type": "string"
        },
        "overview": {
          "$ref": "VideoMediaOverview",
          "description": "This is a high-level description of the media. It does not contain PII."
        },
        "videoStream": {
          "description": "Each entry corresponds to one video stream (usually just one) in the original media file.",
          "items": {
            "$ref": "VideoVideoStream"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoMediaOverview": {
      "description": "Next ID: 19 IMPORTANT: This file is used in scattered directories, such that it is risky to add values to any enumerated type. (First of all, compilation breaks on switch statements without default clauses.) Run a global tap presubmit: tap_presubmit -p all --train -c before submitting. Also check out the blame layer of previous updates for hints on what other files to changes.",
      "id": "VideoMediaOverview",
      "properties": {
        "aspectRatio": {
          "enum": [
            "ASPECT_RATIO_UNKNOWN",
            "ASPECT_RATIO_1_1",
            "ASPECT_RATIO_3_2",
            "ASPECT_RATIO_4_3",
            "ASPECT_RATIO_16_9"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "audioOverview": {
          "items": {
            "$ref": "VideoMediaOverviewAudioOverview"
          },
          "type": "array"
        },
        "authoringTool": {
          "enum": [
            "AUTHORING_TOOL_UNKNOWN",
            "AUTHORING_TOOL_GWD"
          ],
          "enumDescriptions": [
            "",
            "Google Web Designer"
          ],
          "type": "string"
        },
        "colorDynamicRange": {
          "enum": [
            "COLOR_DYNAMIC_RANGE_UNKNOWN",
            "COLOR_DYNAMIC_RANGE_STANDARD",
            "COLOR_DYNAMIC_RANGE_HIGH"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "creationTimeStampUsec": {
          "description": "Creation timestamp of this media_info, in Unix timestamp since epoch.",
          "format": "int64",
          "type": "string"
        },
        "dataOverview": {
          "items": {
            "$ref": "VideoMediaOverviewDataOverview"
          },
          "type": "array"
        },
        "frameRate": {
          "enum": [
            "FRAME_RATE_UNKNOWN",
            "FRAME_RATE_STANDARD",
            "FRAME_RATE_HIGH",
            "FRAME_RATE_ULTRA_HIGH"
          ],
          "enumDescriptions": [
            "",
            "less than 40 fps.",
            "40 <= fps < 80",
            "80 <= fps"
          ],
          "type": "string"
        },
        "hasChapters": {
          "description": "Currently used by originals replacement pipeline to exclude all videos containing chapter info.",
          "type": "boolean"
        },
        "mediaClipInfoOverview": {
          "$ref": "VideoMediaOverviewMediaClipInfoOverview"
        },
        "orientation": {
          "enum": [
            "ORIENTATION_UNKNOWN",
            "ORIENTATION_PORTRAIT",
            "ORIENTATION_LANDSCAPE"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "origin": {
          "enum": [
            "ORIGIN_UNKNOWN",
            "ORIGIN_CLIENT",
            "ORIGIN_UPLOAD",
            "ORIGIN_PROCESSING"
          ],
          "enumDescriptions": [
            "",
            "Provided by the client.",
            "Assessed during upload before all bytes are available.",
            "Assessed during processing."
          ],
          "type": "string"
        },
        "projection": {
          "enum": [
            "PROJECTION_UNKNOWN",
            "PROJECTION_RECTANGULAR",
            "PROJECTION_SPHERICAL",
            "PROJECTION_PARTIALLY_SPHERICAL"
          ],
          "enumDescriptions": [
            "",
            "a regular, non projected video",
            "360 content",
            "go/3d180"
          ],
          "type": "string"
        },
        "resolution": {
          "enum": [
            "RESOLUTION_UNKNOWN",
            "RESOLUTION_ULTRA_LOW",
            "RESOLUTION_LOW",
            "RESOLUTION_SD",
            "RESOLUTION_720P",
            "RESOLUTION_1080P",
            "RESOLUTION_2K",
            "RESOLUTION_4K",
            "RESOLUTION_8K"
          ],
          "enumDescriptions": [
            "",
            "Common Interchange Format or smaller.",
            "Below standard definition, larger than CIF.",
            "Ever-larger levels of resolution. Check multiple values to check \"1080p or higher\", for example.",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "spatialAudioMode": {
          "enum": [
            "SPATIAL_AUDIO_MODE_UNKNOWN",
            "SPATIAL_AUDIO_MODE_NON_SPATIAL",
            "SPATIAL_AUDIO_MODE_SPATIAL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "stereoMode": {
          "enum": [
            "STEREO_MODE_UNKNOWN",
            "STEREO_MODE_TWO_D",
            "STEREO_MODE_SIDE_BY_SIDE",
            "STEREO_MODE_TOP_BOTTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            "3-D. Always left-to-right.",
            "3-D. Bottom-to-top not supported."
          ],
          "type": "string"
        },
        "timedtextOverview": {
          "items": {
            "$ref": "VideoMediaOverviewTimedTextOverview"
          },
          "type": "array"
        },
        "videoOverview": {
          "items": {
            "$ref": "VideoMediaOverviewVideoOverview"
          },
          "type": "array"
        },
        "wallyMeshType": {
          "description": "This only applies when: projection = PROJECTION_PARTIALLY_SPHERICAL",
          "enum": [
            "MESH_TYPE_UNKNOWN",
            "MESH_TYPE_WALLY_FISHEYE",
            "MESH_TYPE_WALLY_CROPPED_EQUIRECT"
          ],
          "enumDescriptions": [
            "",
            "Wally mesh: see go/wally-format and go/wallymesh.",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoMediaOverviewAudioOverview": {
      "description": "Audio stream description with no PII.",
      "id": "VideoMediaOverviewAudioOverview",
      "properties": {
        "channels": {
          "description": "Number of audio channels.",
          "format": "int32",
          "type": "integer"
        },
        "contentType": {
          "description": "Content type of the audio track extracted from VSI. This is only populated with valid \"acont\" xtag values at the moment, i.e., if VSI reports an invalid string, we ignore it. Supported acont xtag values can be found in google3/video/storage/common/xtag_validation.cc. Examples: \"original\", \"dubbed\", \"descriptive\", \"commentary\", etc.",
          "type": "string"
        },
        "language": {
          "description": "Language of the audio track extracted from VSI. Populated if it's deemed a valid code by ISO639-2b, ISO639-2t or III library.",
          "type": "string"
        },
        "loudness1770Lkfs": {
          "format": "double",
          "type": "number"
        },
        "roundedUpOriginalDurationSec": {
          "description": "Approximate audio length, has the same caveats as its video equivalent.",
          "format": "int32",
          "type": "integer"
        },
        "spatialAudioMode": {
          "enum": [
            "SPATIAL_AUDIO_MODE_UNKNOWN",
            "SPATIAL_AUDIO_MODE_NON_SPATIAL",
            "SPATIAL_AUDIO_MODE_SPATIAL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoMediaOverviewDataOverview": {
      "description": "Data stream description with no PII. Currently used by originals replacement pipeline to exclude all clips that have data streams. Fields in proto are used to exclude clips with certain types of data streams.",
      "id": "VideoMediaOverviewDataOverview",
      "properties": {
        "hasCameraMotionMetadata": {
          "description": "Whether the data stream has camera motion metadata (dynamic) or not (static). Some Wally/VR180 videos do.",
          "type": "boolean"
        },
        "hasOzoAudio": {
          "description": "If true, source contains metadata for OZO spatial audio support. See b/62393568 for more information about the OZO spatial audio format. Note that SpatialAudioMode is independent of this format.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoMediaOverviewMediaClipInfoOverview": {
      "description": "Video clip info description with no PII.",
      "id": "VideoMediaOverviewMediaClipInfoOverview",
      "properties": {
        "hasGeolocation": {
          "description": "Corresponds to vsi.video_clip_info().has_geolocation()",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoMediaOverviewTimedTextOverview": {
      "description": "Timed text stream description with no PII. Currently used by originals replacement pipeline to exclude all clips that have timed text streams. Add fields to proto if we want to only exclude clips with certain types of timed text streams in the future.",
      "id": "VideoMediaOverviewTimedTextOverview",
      "properties": {},
      "type": "object"
    },
    "VideoMediaOverviewVideoOverview": {
      "description": "Video stream description with no PII.",
      "id": "VideoMediaOverviewVideoOverview",
      "properties": {
        "aspectRatio": {
          "enum": [
            "ASPECT_RATIO_UNKNOWN",
            "ASPECT_RATIO_1_1",
            "ASPECT_RATIO_3_2",
            "ASPECT_RATIO_4_3",
            "ASPECT_RATIO_16_9"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "averageFps": {
          "description": "Prefer average_fps to match the logic used in transcoder for format profile frame rate checks. First added for Photos, see b/165839654.",
          "format": "double",
          "type": "number"
        },
        "codecId": {
          "format": "int32",
          "type": "integer"
        },
        "colorDynamicRange": {
          "enum": [
            "COLOR_DYNAMIC_RANGE_UNKNOWN",
            "COLOR_DYNAMIC_RANGE_STANDARD",
            "COLOR_DYNAMIC_RANGE_HIGH"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "fps": {
          "format": "double",
          "type": "number"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "resolution": {
          "enum": [
            "RESOLUTION_UNKNOWN",
            "RESOLUTION_ULTRA_LOW",
            "RESOLUTION_LOW",
            "RESOLUTION_SD",
            "RESOLUTION_720P",
            "RESOLUTION_1080P",
            "RESOLUTION_2K",
            "RESOLUTION_4K",
            "RESOLUTION_8K"
          ],
          "enumDescriptions": [
            "",
            "Common Interchange Format or smaller.",
            "Below standard definition, larger than CIF.",
            "Ever-larger levels of resolution. Check multiple values to check \"1080p or higher\", for example.",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "roundedUpOriginalDurationSec": {
          "description": "Approximate video length. Data is rounded up to the next second, to avoid being PII. (Long ago, YTFE set a precedent of rounding up durations, rather than rounding to the closest second.) This value is derived from metadata in the source video, and often differs from the actual duration of any given transcode. In videos without valid timestamps, this value is not calculable, and is reported as zero. Prefer the value from MediaInfo::VideoStream over this value, which was added to resolve b/202864365.",
          "format": "int32",
          "type": "integer"
        },
        "videoHasClosedCaptions": {
          "type": "boolean"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoPerDocData": {
      "id": "VideoPerDocData",
      "properties": {
        "coreSignals": {
          "$ref": "MediaIndexVideoCoreSignals"
        },
        "frames": {
          "$ref": "MediaIndexVideoFrames"
        }
      },
      "type": "object"
    },
    "VideoPipelineViperThumbnailerColumnData": {
      "id": "VideoPipelineViperThumbnailerColumnData",
      "properties": {
        "frameBlobRefs": {
          "description": "The blobRef where the representative frame is stored. This is repeated in order to support multiple thumbnails in the future.",
          "items": {
            "$ref": "BlobstoreBlobRef"
          },
          "type": "array"
        },
        "frameFileList": {
          "$ref": "VideoThumbnailsFrameFileList",
          "description": "Video frame files (based on file_dir_to_save_frames parameter)"
        },
        "frameTypeGenerated": {
          "description": "Frame type generated (VR/360/3D/default).",
          "enum": [
            "FRAME_TYPE_DEFAULT",
            "FRAME_TYPE_VR",
            "FRAME_TYPE_360",
            "FRAME_TYPE_3D",
            "FRAME_TYPE_VR180_LEFT_RIGHT",
            "FRAME_TYPE_VR180_TOP_BOTTOM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "generatedFromDrishtiThumbnailer": {
          "description": "True if the thumbnails are generated from drishti_thumbnailer.",
          "type": "boolean"
        },
        "highResPreviewThumbnailGenerated": {
          "type": "boolean"
        },
        "hq720Generated": {
          "description": "hq720.jpg is a 1280x720 pixel image generated only when the input video resolution is 1280x720 or higher.",
          "type": "boolean"
        },
        "hqdefaultGenerated": {
          "description": "The flags below indicate whether certain optional thumbnail images were generated. hqdefault.jpg is a 480x360 pixel high quality image which should normally be always generated.",
          "type": "boolean"
        },
        "hvcBackupGenerated": {
          "description": "True if a set of backup HVC thumbnails is generated.",
          "type": "boolean"
        },
        "improvedVerticalGenerated": {
          "description": "True if the thumbnails are generated with background crop and scrim.",
          "type": "boolean"
        },
        "maxresdefaultGenerated": {
          "description": "maxresdefault.jpg is an image of the same resolution as the input video. It is generated only when the input video is significantly higher-resolution than 640x480.",
          "type": "boolean"
        },
        "maxresdefaultHeight": {
          "description": "Height of the generated maxresdefault thumbnail.",
          "format": "int32",
          "type": "integer"
        },
        "maxresdefaultWidth": {
          "description": "Width of the generated maxresdefault thumbnail.",
          "format": "int32",
          "type": "integer"
        },
        "movingThumbnailGenerated": {
          "description": "True if moving thumbnails are generated.",
          "type": "boolean"
        },
        "privateThumbnailsGenerated": {
          "description": "True if private thumbnails were generated and stored in the thumbnail database.",
          "type": "boolean"
        },
        "publicThumbnailsGenerated": {
          "description": "True if public thumbnails were generated and stored in the thumbnail database.",
          "type": "boolean"
        },
        "rerunStatus": {
          "description": "Analysis result of running the rerun thumbnailer",
          "enum": [
            "RERUN_FAILED",
            "RERUN_NO_ACTION_CUSTOM_THUMB",
            "RERUN_NO_ACTION_ALREADY_EXISTS",
            "RERUN_NO_ACTION_RECOMPUTE_DISABLED",
            "RERUN_NO_ACTION_DEFAULT_THUMBNAILS_MISSING",
            "RERUN_NO_ACTION_DEFAULT_THUMBNAILS_TIMESTAMP_MISSING",
            "RERUN_NO_ACTION_THUMBNAIL_SERVICE_FAILURE",
            "RERUN_NO_ACTION_UNUSUAL_THUMBNAIL_DATA",
            "RERUN_PERFORM_EXTRACTION"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "sddefaultGenerated": {
          "description": "sddefault.jpg is a 640x480 pixel image generated only when the input video resolution is 640x480 or higher.",
          "type": "boolean"
        },
        "storyboardGenerated": {
          "description": "This flag indicates if storyboard mosaic images were generated and stored in the thumbnail database.",
          "type": "boolean"
        },
        "storyboardNumLevels": {
          "description": "Number of levels of storyboard generated (0 if policy default).",
          "format": "int32",
          "type": "integer"
        },
        "storyboardPolicy": {
          "description": "Policy number that governed the storyboard generation. If zero, no policy was used and the storyboard format is not fully specified by the parameters contained in this message.",
          "format": "int32",
          "type": "integer"
        },
        "storyboardVersion": {
          "description": "Version of the storyboard.",
          "format": "int32",
          "type": "integer"
        },
        "storyboardVideoDurationMs": {
          "description": "Video duration of the video.",
          "format": "int32",
          "type": "integer"
        },
        "storyboardVideoHeight": {
          "description": "Height of the video that was storyboarded.",
          "format": "int32",
          "type": "integer"
        },
        "storyboardVideoWidth": {
          "description": "Width of the video that was storyboarded.",
          "format": "int32",
          "type": "integer"
        },
        "webpGenerated": {
          "description": "This flag indicates if images in WebP format were created and stored in the thumbnail database.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "VideoPipelineViperVSIColumnData": {
      "id": "VideoPipelineViperVSIColumnData",
      "properties": {
        "info": {
          "$ref": "VideoVideoStreamInfo"
        },
        "inputReadTime": {
          "description": "Total time taken in seconds to read the input",
          "format": "double",
          "type": "number"
        },
        "partialFile": {
          "description": "Was the VSI computed on a partial file ?",
          "type": "boolean"
        },
        "totalVsiTime": {
          "description": "Total time (of all attempts) taken in seconds to compute VSI",
          "format": "double",
          "type": "number"
        },
        "vsiStats": {
          "items": {
            "$ref": "VideoPipelineViperVSIColumnDataVsiStats"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoPipelineViperVSIColumnDataVsiStats": {
      "description": "The stats of each output vsi.",
      "id": "VideoPipelineViperVSIColumnDataVsiStats",
      "properties": {
        "partialVsi": {
          "description": "True if the output vsi is a partial vsi.",
          "type": "boolean"
        },
        "vsiTime": {
          "description": "The time (in secondes) from vsi_engine init to vsi written to output buffer.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoRational32": {
      "id": "VideoRational32",
      "properties": {
        "denominator": {
          "format": "int32",
          "type": "integer"
        },
        "numerator": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoSEIMessage": {
      "description": "This SEI message only takes the payload type and the sum of the payload sizes for all SEI messages of this type. More informations, such as timestamp, payload, may be added in the future.",
      "id": "VideoSEIMessage",
      "properties": {
        "count": {
          "description": "message count of each payloadtype",
          "format": "int32",
          "type": "integer"
        },
        "cumulativeSize": {
          "description": "If the video stream has multiple SEI messages with the same payload type, this is the sum of all these payloads' sizes.",
          "format": "int64",
          "type": "string"
        },
        "payloadtype": {
          "description": "use int type in case there are payload types that are not included in the SEIPayloadType enum below. The enum can be used for lookup",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoStorageLoudnessData": {
      "description": "Measurement of loudness. Next tag = 3",
      "id": "VideoStorageLoudnessData",
      "properties": {
        "itu1770LoudnessDb": {
          "description": "Loudness measured using ITU-R BS. 1770",
          "format": "float",
          "type": "number"
        },
        "perceptualLoudnessDb": {
          "description": "Perceived loudness of audio measured using replaygain.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoThumbnailsFrameFile": {
      "description": "Individual video frame saved in an image file.",
      "id": "VideoThumbnailsFrameFile",
      "properties": {
        "filename": {
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "msOffset": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoThumbnailsFrameFileList": {
      "description": "List of individual video frames, each saved as an image file",
      "id": "VideoThumbnailsFrameFileList",
      "properties": {
        "frameFiles": {
          "items": {
            "$ref": "VideoThumbnailsFrameFile"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoThumbnailsThumbnailScore": {
      "description": "LINT.IfChange Score calculated from a thumbnail. NextID: 15",
      "id": "VideoThumbnailsThumbnailScore",
      "properties": {
        "checksum": {
          "description": "Checksum of the thumbnail bytes used to identify which image the score belongs to. Only filled when thumbnail version is 0.",
          "format": "uint64",
          "type": "string"
        },
        "colorSampling": {
          "description": "Color sampling score encoded as uint32. Encode/Decode using youtube::color::RgbToUint / UIntToRgb. Field is only relevant for TYPE_COLOR_SAMPLING.",
          "format": "uint32",
          "type": "integer"
        },
        "denseFeatures": {
          "description": "Thumbnail dense features.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "denseGeneralExtraFeatures": {
          "$ref": "DrishtiFeatureExtra",
          "description": "FeatureExtra extension for dense features."
        },
        "isAssigned": {
          "description": "If true, score is manually assigned.",
          "type": "boolean"
        },
        "isInstant": {
          "description": "If true, score will be instantly indexed by YouTube search indexer.",
          "type": "boolean"
        },
        "modelVersion": {
          "enum": [
            "MODEL_VERSION_UNKNOWN",
            "MODEL_VERSION_ONE",
            "MODEL_VERSION_TWO",
            "MODEL_VERSION_THREE",
            "MODEL_VERSION_FOUR",
            "MODEL_RACY_WATCHPAGE_2018_01_15",
            "MODEL_RACY_WATCHPAGE_2020_04_20",
            "MODEL_RACY_WATCHPAGE_2020_04_20A",
            "MODEL_RACY_WATCHPAGE_2020_04_20_FLAGGED",
            "MODEL_RACY_WATCHPAGE_2021_05_04",
            "MODEL_RACY_WATCHPAGE_2021_05_04_FLAGGED",
            "MODEL_RACY_WATCHPAGE_2021_05_04_FLAGGED_SHORTS",
            "MODEL_RACY_WATCHPAGE_2021_05_04_FLAGGED_HOME",
            "MODEL_RACY_WATCHPAGE_2021_05_04_FLAGGED_WATCHNEXT",
            "MODEL_RACY_WATCHPAGE_V4",
            "MODEL_RACY_WATCHPAGE_RELEASE",
            "MODEL_RACY_SHORTS_WATCHPAGE_V1",
            "MODEL_RACY_SHORTS_WATCHPAGE_V1_FLAGGED",
            "MODEL_RACY_SHORTS_WATCHPAGE_V2",
            "MODEL_RACY_SHORTS_WATCHPAGE_V2_FLAGGED",
            "MODEL_RACY_SHORTS_WATCHPAGE_RELEASE",
            "MODEL_RACY_THUMB_2019_04_02",
            "MODEL_RACY_THUMB_2019_08_12",
            "MODEL_RACY_THUMB_2019_08_12A",
            "MODEL_RACY_THUMB_2019_08_12B",
            "MODEL_RACY_THUMB_2019_08_12C",
            "MODEL_RACY_THUMB_2019_08_12D",
            "MODEL_RACY_THUMB_2019_08_12E",
            "MODEL_RACY_THUMB_2019_08_12_CALIBRATED",
            "MODEL_RACY_THUMB_2019_08_12_FLAGGED",
            "MODEL_RACY_THUMB_RELEASE",
            "MODEL_QUALITY_2019_09_24",
            "MODEL_QUALITY_2019_11_11",
            "MODEL_QUALITY_2020_11_12",
            "MODEL_RACY_THUMB_2019_08_12_4A",
            "MODEL_RACY_THUMB_2019_08_12_4B",
            "MODEL_RACY_THUMB_2019_08_12_4C",
            "MODEL_RACY_THUMB_2019_08_12_UPDATEDSS",
            "MODEL_RACY_THUMB_2019_04_02_ABLATE_ALL",
            "MODEL_RACY_THUMB_2019_04_02_ABLATE_V3",
            "MODEL_RACY_THUMB_2019_08_12_ABLATE_HUMAN_RATING",
            "MODEL_RACY_THUMB_2019_08_12_ABLATE_USER_FLAGGING",
            "MODEL_RACY_THUMB_2020_02_24",
            "MODEL_RACY_THUMB_2020_02_24_CALIBRATED",
            "MODEL_RACY_THUMB_2020_02_24_FLAGGED",
            "MODEL_RACY_THUMB_2020_02_24_EFF",
            "MODEL_RACY_THUMB_V5",
            "MODEL_THUMB_EMBEDDING_20201201",
            "MODEL_PQC_20210816_0",
            "MODEL_VERSION_TEST"
          ],
          "enumDescriptions": [
            "",
            "First version for each score type (except racy_watchpage). Score is calibrated to between [0, 1] (go/improve-yt-thumb-racy-scorer).",
            "Second version for golden thumbnail features.",
            "Third version for golden thumbnail features.",
            "Fourth version for golden thumbnail features.",
            "Model described here: https://g3doc.corp.google.com/company/teams/safesearch/signals/web/racy_watchpage/index.md",
            "Racy watchpage score v5 using racy watchpage model v2 (go/racy-watchpage-v2).",
            "Historical: Used before 07/01/2020. Racy watchpage model v2, experimenting calibration to precision.",
            "Flagged racy watchpage score v5 using racy watchpage model v2.",
            "Racy watchpage score v6 using racy watchpage model v3 (go/racy-watchpage-v3).",
            "Flagged racy watchpage score v6 using racy watchpage model v3.",
            "Flagged racy watchpage score v6 using racy watchpage model v3 and shorts video reports.",
            "Flagged racy watchpage score v6 using racy watchpage model v3 calibrated for home.",
            "Flagged racy watchpage score v6 using racy watchpage model v3 calibrated for watchnext.",
            "Racy watchpage model v4 (go/racy-watchpage-v4).",
            "Racy watchpage release version.",
            "LINT.IfChange Racy shorts watchpage model v1.",
            "",
            "Racy shorts watchpage model v2.",
            "",
            "Racy shorts watchpage release version.",
            "LINT.ThenChange(//depot/google3/video/thumbnails/features/util/consts.h) Racy thumb model which corresponds to https://mldash.corp.google.com/experiments/156747527161891342",
            "Racy thumb model V3 based on cotraining. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 1. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 2. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 3. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 4. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 5. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Racy thumb model V3 after calibration.",
            "Flagged racy watchpage model using racy thumbnail V3 score.",
            "Racy thumbnail release version.",
            "Quality thumb model V2 trained using search page quality ratings.",
            "",
            "Quality thumb model V3.",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 4A. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 4B. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant 4C. https://mldash.corp.google.com/experiments/2626243069925683800",
            "Historical: Used before 05/06/2020. Racy thumb model V3 based on cotraining. Variant for Safesearch Update.",
            "Historical: Used before 03/11/2020.",
            "Historical: Used before 03/11/2020.",
            "Historical: Used before 03/11/2020.",
            "Historical: Used before 03/11/2020.",
            "Racy thumb model V4 based on unified training.",
            "Racy thumb model V4 based on unified training after calibration with MODEL_VERSION_ONE.",
            "Flagged racy watchpage model using racy thumbnail V4 score.",
            "Historical: Used before 03/25/2020.",
            "Racy thumb model V5 (go/racy-thumb-v5)",
            "First thumbnail-Query embedding ready for SxS.",
            "Porn Query Classifier (go/pqc).",
            "Model version for test data that shouldn't be used in production."
          ],
          "type": "string"
        },
        "overwriteReason": {
          "enum": [
            "REASON_NO_OVERWRITE",
            "REASON_UNKNOWN",
            "REASON_RACY_WARTCHPAGE_RATING",
            "REASON_RACY_THUMBNAIL_RATING",
            "REASON_THUMBNAIL_REPORT",
            "REASON_VIDEO_REPORT",
            "REASON_CLUSTER_HEURISTIC"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "Overwrite using CorpusTable::kDefaultThumbnailRacyRatingScoreCol.",
            "Overwrite using thumbnail user reports and elmo score.",
            "Overwrite using video user reports and elmo score.",
            "Overwrite using cluster heuristics"
          ],
          "type": "string"
        },
        "quantizedFeatures": {
          "description": "Thumbnail quantized dense features, available in TYPE_STARBURST_COMPRESSED",
          "format": "byte",
          "type": "string"
        },
        "score": {
          "format": "double",
          "type": "number"
        },
        "sparseFeatures": {
          "$ref": "DrishtiSparseFeatureData",
          "description": "Thumbnail sparse features, available in TYPE_STARBURST"
        },
        "thumbnailSet": {
          "enum": [
            "SET_UNKNOWN",
            "SET_ONE",
            "SET_TWO",
            "SET_THREE",
            "SET_DEFAULT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "thumbnailVersion": {
          "description": "Version number of the thumbnail. Should be consistent with the version number in the ytimg_content column family.",
          "format": "uint64",
          "type": "string"
        },
        "type": {
          "enum": [
            "TYPE_UNKNOWN",
            "TYPE_RACY",
            "TYPE_QUALITY",
            "TYPE_JOY_FACE",
            "TYPE_EYE_OPEN",
            "TYPE_FACE_RATIO",
            "TYPE_SHARPNESS",
            "TYPE_COLORFULNESS",
            "TYPE_NIMA",
            "TYPE_STARBURST",
            "TYPE_RACY_RATING",
            "TYPE_RACY_WATCHPAGE",
            "TYPE_RACY_LOCKUP",
            "TYPE_RACY_WATCHPAGE_FLAGGED",
            "TYPE_STARBURST_EMBEDDING",
            "TYPE_FACE",
            "TYPE_FDENSE_PCA",
            "TYPE_FDENSE_PCA_MOE",
            "TYPE_FNET_LOGREG",
            "TYPE_FNET_TOPICALITY",
            "TYPE_LOGO",
            "TYPE_NEAR_DUP",
            "TYPE_OCR",
            "TYPE_OCR_UNIGRAMS",
            "TYPE_OCR_UNIGRAMS_NON_TRIVIAL",
            "TYPE_PINKY_FRAMING",
            "TYPE_PQC_PORN_CHANNEL_DISPLAY_NAME",
            "TYPE_PQC_PORN_DESCRIPTION",
            "TYPE_PQC_PORN_TITLE",
            "TYPE_PQC_VIOLENCE_CHANNEL_DISPLAY_NAME",
            "TYPE_PQC_VIOLENCE_DESCRIPTION",
            "TYPE_PQC_VIOLENCE_TITLE",
            "TYPE_SAFESEARCH",
            "TYPE_SAFESEARCH_PINKY",
            "TYPE_STARBURST_COMPRESSED",
            "TYPE_STARBURST_TOKENS",
            "TYPE_MACRO_MARKERS",
            "TYPE_THUMB_QUERY_EMBEDDING",
            "TYPE_COLOR_SAMPLING",
            "TYPE_ENGAGINESS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "go/nima.",
            "",
            "go/thumb-safety-continuous-racy-model (\"Signal Export\").",
            "",
            "",
            "Historical: Used before 05/08/2020.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Porn Query Classifier (go/pqc) scores.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoTimedtextS4ALIResults": {
      "id": "VideoTimedtextS4ALIResults",
      "properties": {
        "langResults": {
          "description": "The complete list of language scores, sorted from high score to low.",
          "items": {
            "$ref": "VideoTimedtextS4LangScore"
          },
          "type": "array"
        },
        "speechClass": {
          "description": "What kind of speech (if any) was detected.",
          "enum": [
            "UNKNOWN",
            "NO_SPEECH",
            "HAS_SPEECH_FOR_ASR"
          ],
          "enumDescriptions": [
            "Unspecified, or string label not recognized.",
            "",
            "Currently corresponds to simple speech"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoTimedtextS4LangScore": {
      "id": "VideoTimedtextS4LangScore",
      "properties": {
        "confidence": {
          "description": "A score between 0.0 and 1.0; the relative probability that this is the language of the video. This should not be interpreted as an absolute probability. For instance, scores may be calculated for all languages even for videos for which no speech was detected.",
          "format": "float",
          "type": "number"
        },
        "langCode": {
          "description": "The language code for one of the languages supported by automatic language identification.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoUserDataRegisteredItuTT35": {
      "description": "This message contains user data registered itu-t t.35 data",
      "id": "VideoUserDataRegisteredItuTT35",
      "properties": {
        "count": {
          "description": "Counts itu-t t.35 message with the same country code and provider code",
          "format": "int32",
          "type": "integer"
        },
        "countryCode": {
          "format": "int32",
          "type": "integer"
        },
        "providerCode": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoUserDataUnregistered": {
      "description": "This message contains unregistered user data identified by a UUID",
      "id": "VideoUserDataUnregistered",
      "properties": {
        "count": {
          "description": "Counts user data with the same uuid and payload If payload size is larger than limit, the payload will be 'Payload size is larger than limit: ' + limit size Count will be for user data with same uuid and payload exceeds limit in this case",
          "format": "int32",
          "type": "integer"
        },
        "payload": {
          "description": "Payload may not be filled in Payload may contain user data",
          "format": "byte",
          "type": "string"
        },
        "uuid": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoVideoClipInfo": {
      "description": "VideoClipInfo : meta information extracted from video file Next id: 26",
      "id": "VideoVideoClipInfo",
      "properties": {
        "artist": {
          "description": "Lists the artist of the original subject of the file.",
          "format": "byte",
          "type": "string"
        },
        "audioVendorId": {
          "description": "Audio vendor ID",
          "format": "byte",
          "type": "string"
        },
        "author": {
          "description": "Different containers use different video clip info. The following fields include info from popular formats: AVI, MOV, and WMV.",
          "format": "byte",
          "type": "string"
        },
        "comment": {
          "format": "byte",
          "type": "string"
        },
        "commissioned": {
          "description": "Lists the name of the person or organization that commissioned the subject of the file.",
          "format": "byte",
          "type": "string"
        },
        "copyright": {
          "description": "Records the copyright information for the file.",
          "format": "byte",
          "type": "string"
        },
        "digitizationTime": {
          "format": "byte",
          "type": "string"
        },
        "director": {
          "format": "byte",
          "type": "string"
        },
        "engineer": {
          "description": "The engineer who worked on the file.",
          "format": "byte",
          "type": "string"
        },
        "geolocation": {
          "$ref": "VideoVideoGeoLocation",
          "description": "Optional geo-location information in WGS 84."
        },
        "info": {
          "format": "byte",
          "type": "string"
        },
        "keywords": {
          "description": "Provides a list of keywords that refer to the file or subject of the file.",
          "format": "byte",
          "type": "string"
        },
        "make": {
          "description": "The camera make such as Apple, Samsung etc.",
          "format": "byte",
          "type": "string"
        },
        "medium": {
          "description": "Describes the original subject of the file.",
          "format": "byte",
          "type": "string"
        },
        "metadata": {
          "description": "Container level metadata",
          "items": {
            "$ref": "VideoClipInfo"
          },
          "type": "array"
        },
        "model": {
          "description": "The camera model such as iPhone7 or Pixel, etc.",
          "format": "byte",
          "type": "string"
        },
        "performer": {
          "format": "byte",
          "type": "string"
        },
        "producer": {
          "format": "byte",
          "type": "string"
        },
        "requirements": {
          "format": "byte",
          "type": "string"
        },
        "software": {
          "description": "Identifies the name of the software packages used to create the file.",
          "format": "byte",
          "type": "string"
        },
        "sourceProvider": {
          "description": "Identifies the name of the person or organization who supplied the original subject of the file.",
          "format": "byte",
          "type": "string"
        },
        "subject": {
          "description": "Describes the contents of the file.",
          "format": "byte",
          "type": "string"
        },
        "technician": {
          "description": "Identifies the technician who digitized the subject file.",
          "format": "byte",
          "type": "string"
        },
        "title": {
          "format": "byte",
          "type": "string"
        },
        "videoVendorId": {
          "description": "Video vendor ID",
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoVideoGeoLocation": {
      "description": "Generic geo-location information. This is error-prone due to the fact that is uses signed integer fields, which are not supported by proto1 API and are cast to unsigned integers. Consider using the metadata_util function directly, which fills out a version 2 API proto.",
      "id": "VideoVideoGeoLocation",
      "properties": {
        "altitudeE2": {
          "description": "Altitude is in meters and multiplied by 100 (i.e., in centimeters). Up till 10 km this fits in 3 bytes.",
          "format": "int32",
          "type": "integer"
        },
        "latitudeE7": {
          "description": "Latitude and longitude are in degrees and multiplied by 10^7. This gives the worst precision of about 1 cm at the equator.",
          "format": "int32",
          "type": "integer"
        },
        "longitudeE7": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoVideoStream": {
      "id": "VideoVideoStream",
      "properties": {
        "bitrate": {
          "description": "Video bitrate in bits/s.",
          "format": "int64",
          "type": "string"
        },
        "codecId": {
          "description": "Video codec ID. Uses the numeric value corresponding to the CodecId enum object, in order to avoid the dependency on vsi/videostreaminfo.proto. http://cs/symbol:CodecId%20f:google3/video/vidproc/vsi/videostreaminfo.proto",
          "format": "int32",
          "type": "integer"
        },
        "fps": {
          "description": "Video frame per second, obtained by parsing video header information. The value can be inaccurate for some types of codecs. See comments at http://cs/symbol:video_fps%20f:google3/video/vidproc/vsi/videostreaminfo.proto",
          "format": "double",
          "type": "number"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "lengthSec": {
          "description": "Video length, in seconds. This value is derived from metadata in the source video, and often differs from the actual duration of any given transcode. In videos without valid timestamps, this value is not calculable, and is reported as zero.",
          "format": "double",
          "type": "number"
        },
        "streamIndex": {
          "description": "Index of the stream in the file, 0-based.",
          "format": "int64",
          "type": "string"
        },
        "width": {
          "description": "video width and height.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfo": {
      "description": "Note that when a VSI is from a user video, the information reflects the info in that source. Fields like lengths, fps, etc. are not guaranteed to be the same as those of transcodes. If the relevant info in source is too broken, the corresponding fields (e.g., lengths) could be unset or with the default value, meaning VSI cannot compute them from the given info. Next id: 82",
      "id": "VideoVideoStreamInfo",
      "properties": {
        "audioBitrate": {
          "description": "audio bitrate in bits/s",
          "format": "double",
          "type": "number"
        },
        "audioChannels": {
          "description": "audio channels",
          "format": "int32",
          "type": "integer"
        },
        "audioCodecId": {
          "description": "Primary audio codec information Fields 15-20, 41-42, 48, 52-53 for audio will be obsolete soon. Please start using the new repeated audio_stream and video_stream. For now, audio_stream(0) will match these fields. Primary audio codec information starts:",
          "enum": [
            "CODEC_ID_NONE",
            "CODEC_ID_MPEG1VIDEO",
            "CODEC_ID_MPEG2VIDEO",
            "CODEC_ID_MPEG2VIDEO_XVMC",
            "CODEC_ID_H261",
            "CODEC_ID_H263",
            "CODEC_ID_RV10",
            "CODEC_ID_RV20",
            "CODEC_ID_MJPEG",
            "CODEC_ID_MJPEGB",
            "CODEC_ID_LJPEG",
            "CODEC_ID_SP5X",
            "CODEC_ID_JPEGLS",
            "CODEC_ID_MPEG4",
            "CODEC_ID_RAWVIDEO",
            "CODEC_ID_MSMPEG4V1",
            "CODEC_ID_MSMPEG4V2",
            "CODEC_ID_MSMPEG4V3",
            "CODEC_ID_WMV1",
            "CODEC_ID_WMV2",
            "CODEC_ID_H263P",
            "CODEC_ID_H263I",
            "CODEC_ID_FLV1",
            "CODEC_ID_SVQ1",
            "CODEC_ID_SVQ3",
            "CODEC_ID_DVVIDEO",
            "CODEC_ID_HUFFYUV",
            "CODEC_ID_CYUV",
            "CODEC_ID_H264",
            "CODEC_ID_INDEO3",
            "CODEC_ID_VP3",
            "CODEC_ID_THEORA",
            "CODEC_ID_ASV1",
            "CODEC_ID_ASV2",
            "CODEC_ID_FFV1",
            "CODEC_ID_4XM",
            "CODEC_ID_VCR1",
            "CODEC_ID_CLJR",
            "CODEC_ID_MDEC",
            "CODEC_ID_ROQ",
            "CODEC_ID_INTERPLAY_VIDEO",
            "CODEC_ID_XAN_WC3",
            "CODEC_ID_XAN_WC4",
            "CODEC_ID_RPZA",
            "CODEC_ID_CINEPAK",
            "CODEC_ID_WS_VQA",
            "CODEC_ID_MSRLE",
            "CODEC_ID_MSVIDEO1",
            "CODEC_ID_IDCIN",
            "CODEC_ID_8BPS",
            "CODEC_ID_SMC",
            "CODEC_ID_FLIC",
            "CODEC_ID_TRUEMOTION1",
            "CODEC_ID_VMDVIDEO",
            "CODEC_ID_MSZH",
            "CODEC_ID_ZLIB",
            "CODEC_ID_QTRLE",
            "CODEC_ID_SNOW",
            "CODEC_ID_TSCC",
            "CODEC_ID_ULTI",
            "CODEC_ID_QDRAW",
            "CODEC_ID_VIXL",
            "CODEC_ID_QPEG",
            "CODEC_ID_XVID",
            "CODEC_ID_PNG",
            "CODEC_ID_PPM",
            "CODEC_ID_PBM",
            "CODEC_ID_PGM",
            "CODEC_ID_PGMYUV",
            "CODEC_ID_PAM",
            "CODEC_ID_FFVHUFF",
            "CODEC_ID_RV30",
            "CODEC_ID_RV40",
            "CODEC_ID_VC1",
            "CODEC_ID_WMV3",
            "CODEC_ID_LOCO",
            "CODEC_ID_WNV1",
            "CODEC_ID_AASC",
            "CODEC_ID_INDEO2",
            "CODEC_ID_FRAPS",
            "CODEC_ID_TRUEMOTION2",
            "CODEC_ID_BMP",
            "CODEC_ID_CSCD",
            "CODEC_ID_MMVIDEO",
            "CODEC_ID_ZMBV",
            "CODEC_ID_AVS",
            "CODEC_ID_SMACKVIDEO",
            "CODEC_ID_NUV",
            "CODEC_ID_KMVC",
            "CODEC_ID_FLASHSV",
            "CODEC_ID_CAVS",
            "CODEC_ID_JPEG2000",
            "CODEC_ID_VMNC",
            "CODEC_ID_VP5",
            "CODEC_ID_VP6",
            "CODEC_ID_VP6F",
            "CODEC_ID_TARGA",
            "CODEC_ID_DSICINVIDEO",
            "CODEC_ID_TIERTEXSEQVIDEO",
            "CODEC_ID_TIFF",
            "CODEC_ID_GIF",
            "CODEC_ID_FFH264",
            "CODEC_ID_DXA",
            "CODEC_ID_DNXHD",
            "CODEC_ID_THP",
            "CODEC_ID_SGI",
            "CODEC_ID_C93",
            "CODEC_ID_BETHSOFTVID",
            "CODEC_ID_PTX",
            "CODEC_ID_TXD",
            "CODEC_ID_VP6A",
            "CODEC_ID_AMV",
            "CODEC_ID_VB",
            "CODEC_ID_PCX",
            "CODEC_ID_SUNRAST",
            "CODEC_ID_INDEO4",
            "CODEC_ID_INDEO5",
            "CODEC_ID_MIMIC",
            "CODEC_ID_RL2",
            "CODEC_ID_8SVX_EXP",
            "CODEC_ID_8SVX_FIB",
            "CODEC_ID_ESCAPE124",
            "CODEC_ID_DIRAC",
            "CODEC_ID_BFI",
            "CODEC_ID_CMV",
            "CODEC_ID_MOTIONPIXELS",
            "CODEC_ID_TGV",
            "CODEC_ID_TGQ",
            "CODEC_ID_TQI",
            "CODEC_ID_AURA",
            "CODEC_ID_AURA2",
            "CODEC_ID_V210X",
            "CODEC_ID_TMV",
            "CODEC_ID_V210",
            "CODEC_ID_DPX",
            "CODEC_ID_MAD",
            "CODEC_ID_FRWU",
            "CODEC_ID_VP8",
            "CODEC_ID_APPLE_PRORES_NQ",
            "CODEC_ID_APPLE_PRORES_HQ",
            "CODEC_ID_FLASHSV2",
            "CODEC_ID_CDGRAPHICS",
            "CODEC_ID_R210",
            "CODEC_ID_ANM",
            "CODEC_ID_BINKVIDEO",
            "CODEC_ID_IFF_ILBM",
            "CODEC_ID_IFF_BYTERUN1",
            "CODEC_ID_KGV1",
            "CODEC_ID_YOP",
            "CODEC_ID_PICTOR",
            "CODEC_ID_APPLE_PRORES_LT",
            "CODEC_ID_APPLE_PRORES_PROXY",
            "CODEC_ID_APPLE_PRORES_4444",
            "CODEC_ID_APPLE_PIXLET",
            "CODEC_ID_G2M",
            "CODEC_ID_PRORES",
            "CODEC_ID_ANSI",
            "CODEC_ID_A64_MULTI",
            "CODEC_ID_A64_MULTI5",
            "CODEC_ID_R10K",
            "CODEC_ID_MXPEG",
            "CODEC_ID_LAGARITH",
            "CODEC_ID_JV",
            "CODEC_ID_DFA",
            "CODEC_ID_WMV3IMAGE",
            "CODEC_ID_VC1IMAGE",
            "CODEC_ID_UTVIDEO",
            "CODEC_ID_BMV_VIDEO",
            "CODEC_ID_VBLE",
            "CODEC_ID_DXTORY",
            "CODEC_ID_V410",
            "CODEC_ID_XWD",
            "CODEC_ID_CDXL",
            "CODEC_ID_XBM",
            "CODEC_ID_ZEROCODEC",
            "CODEC_ID_MSS1",
            "CODEC_ID_MSA1",
            "CODEC_ID_TSCC2",
            "CODEC_ID_MTS2",
            "CODEC_ID_CLLC",
            "CODEC_ID_MSS2",
            "CODEC_ID_Y41P",
            "CODEC_ID_ESCAPE130",
            "CODEC_ID_EXR",
            "CODEC_ID_AVRP",
            "CODEC_ID_AVUI",
            "CODEC_ID_AYUV",
            "CODEC_ID_V308",
            "CODEC_ID_V408",
            "CODEC_ID_YUV4",
            "CODEC_ID_SANM",
            "CODEC_ID_PAF_VIDEO",
            "CODEC_ID_AVRN",
            "CODEC_ID_CPIA",
            "CODEC_ID_VP9",
            "CODEC_ID_H265",
            "CODEC_ID_CFHD",
            "CODEC_ID_AV1",
            "CODEC_ID_AIC",
            "CODEC_ID_ALIAS_PIX",
            "CODEC_ID_APNG",
            "CODEC_ID_BRENDER_PIX",
            "CODEC_ID_CLEARVIDEO",
            "CODEC_ID_DDS",
            "CODEC_ID_DXV",
            "CODEC_ID_FIC",
            "CODEC_ID_FITS",
            "CODEC_ID_FMVC",
            "CODEC_ID_GDV",
            "CODEC_ID_HAP",
            "CODEC_ID_HNM4_VIDEO",
            "CODEC_ID_HQ_HQA",
            "CODEC_ID_HQX",
            "CODEC_ID_M101",
            "CODEC_ID_MAGICYUV",
            "CODEC_ID_MSCC",
            "CODEC_ID_MVC1",
            "CODEC_ID_MVC2",
            "CODEC_ID_PIXLET",
            "CODEC_ID_PSD",
            "CODEC_ID_RSCC",
            "CODEC_ID_SCPR",
            "CODEC_ID_SCREENPRESSO",
            "CODEC_ID_SGIRLE",
            "CODEC_ID_SHEERVIDEO",
            "CODEC_ID_SMVJPEG",
            "CODEC_ID_SPEEDHQ",
            "CODEC_ID_SRGC",
            "CODEC_ID_TARGA_Y216",
            "CODEC_ID_TDSC",
            "CODEC_ID_TRUEMOTION2RT",
            "CODEC_ID_VP7",
            "CODEC_ID_BITPACKED",
            "CODEC_ID_WEBP",
            "CODEC_ID_XFACE",
            "CODEC_ID_XPM",
            "CODEC_ID_YLC",
            "CODEC_ID_012V",
            "CODEC_ID_AVS2",
            "CODEC_ID_IMM4",
            "CODEC_ID_MWSC",
            "CODEC_ID_PROSUMER",
            "CODEC_ID_RASC",
            "CODEC_ID_WCMV",
            "CODEC_ID_UNKNOWN",
            "CODEC_ID_PCM_S16LE",
            "CODEC_ID_PCM_S16BE",
            "CODEC_ID_PCM_U16LE",
            "CODEC_ID_PCM_U16BE",
            "CODEC_ID_PCM_S8",
            "CODEC_ID_PCM_U8",
            "CODEC_ID_PCM_MULAW",
            "CODEC_ID_PCM_ALAW",
            "CODEC_ID_PCM_S32LE",
            "CODEC_ID_PCM_S32BE",
            "CODEC_ID_PCM_U32LE",
            "CODEC_ID_PCM_U32BE",
            "CODEC_ID_PCM_S24LE",
            "CODEC_ID_PCM_S24BE",
            "CODEC_ID_PCM_U24LE",
            "CODEC_ID_PCM_U24BE",
            "CODEC_ID_PCM_S24DAUD",
            "CODEC_ID_PCM_ZORK",
            "CODEC_ID_PCM_S16LE_PLANAR",
            "CODEC_ID_PCM_DVD",
            "CODEC_ID_PCM_F32BE",
            "CODEC_ID_PCM_F32LE",
            "CODEC_ID_PCM_F64BE",
            "CODEC_ID_PCM_F64LE",
            "CODEC_ID_PCM_BLURAY",
            "CODEC_ID_PCM_LXF",
            "CODEC_ID_S302M",
            "CODEC_ID_PCM_S8_PLANAR",
            "CODEC_ID_PCM_S24LE_PLANAR",
            "CODEC_ID_PCM_S32LE_PLANAR",
            "CODEC_ID_PCM_S16BE_PLANAR",
            "CODEC_ID_PCM_S64LE",
            "CODEC_ID_PCM_S64BE",
            "CODEC_ID_PCM_F16LE",
            "CODEC_ID_PCM_F24LE",
            "CODEC_ID_ADPCM_IMA_QT",
            "CODEC_ID_ADPCM_IMA_WAV",
            "CODEC_ID_ADPCM_IMA_DK3",
            "CODEC_ID_ADPCM_IMA_DK4",
            "CODEC_ID_ADPCM_IMA_WS",
            "CODEC_ID_ADPCM_IMA_SMJPEG",
            "CODEC_ID_ADPCM_MS",
            "CODEC_ID_ADPCM_4XM",
            "CODEC_ID_ADPCM_XA",
            "CODEC_ID_ADPCM_ADX",
            "CODEC_ID_ADPCM_EA",
            "CODEC_ID_ADPCM_G726",
            "CODEC_ID_ADPCM_CT",
            "CODEC_ID_ADPCM_SWF",
            "CODEC_ID_ADPCM_YAMAHA",
            "CODEC_ID_ADPCM_SBPRO_4",
            "CODEC_ID_ADPCM_SBPRO_3",
            "CODEC_ID_ADPCM_SBPRO_2",
            "CODEC_ID_ADPCM_THP",
            "CODEC_ID_ADPCM_IMA_AMV",
            "CODEC_ID_ADPCM_EA_R1",
            "CODEC_ID_ADPCM_EA_R3",
            "CODEC_ID_ADPCM_EA_R2",
            "CODEC_ID_ADPCM_IMA_EA_SEAD",
            "CODEC_ID_ADPCM_IMA_EA_EACS",
            "CODEC_ID_ADPCM_EA_XAS",
            "CODEC_ID_ADPCM_EA_MAXIS_XA",
            "CODEC_ID_ADPCM_IMA_ISS",
            "CODEC_ID_ADPCM_G722",
            "CODEC_ID_ADPCM_IMA_APC",
            "CODEC_ID_VIMA",
            "CODEC_ID_ADPCM_AFC",
            "CODEC_ID_ADPCM_IMA_OKI",
            "CODEC_ID_ADPCM_DTK",
            "CODEC_ID_ADPCM_IMA_RAD",
            "CODEC_ID_ADPCM_G726LE",
            "CODEC_ID_ADPCM_THP_LE",
            "CODEC_ID_ADPCM_PSX",
            "CODEC_ID_ADPCM_AICA",
            "CODEC_ID_ADPCM_IMA_DAT4",
            "CODEC_ID_ADPCM_MTAF",
            "CODEC_ID_ADPCM_VIMA",
            "CODEC_ID_AMR_NB",
            "CODEC_ID_AMR_WB",
            "CODEC_ID_RA_144",
            "CODEC_ID_RA_288",
            "CODEC_ID_ROQ_DPCM",
            "CODEC_ID_INTERPLAY_DPCM",
            "CODEC_ID_XAN_DPCM",
            "CODEC_ID_SOL_DPCM",
            "CODEC_ID_GREMLIN_DPCM",
            "CODEC_ID_SDX2_DPCM",
            "CODEC_ID_MP2",
            "CODEC_ID_MP3",
            "CODEC_ID_AAC",
            "CODEC_ID_MPEG4AAC_DEPRECATED",
            "CODEC_ID_AC3",
            "CODEC_ID_DTS",
            "CODEC_ID_VORBIS",
            "CODEC_ID_DVAUDIO",
            "CODEC_ID_WMAV1",
            "CODEC_ID_WMAV2",
            "CODEC_ID_MACE3",
            "CODEC_ID_MACE6",
            "CODEC_ID_VMDAUDIO",
            "CODEC_ID_SONIC",
            "CODEC_ID_SONIC_LS",
            "CODEC_ID_FLAC",
            "CODEC_ID_MP3ADU",
            "CODEC_ID_MP3ON4",
            "CODEC_ID_SHORTEN",
            "CODEC_ID_ALAC",
            "CODEC_ID_WESTWOOD_SND1",
            "CODEC_ID_GSM",
            "CODEC_ID_QDM2",
            "CODEC_ID_COOK",
            "CODEC_ID_TRUESPEECH",
            "CODEC_ID_TTA",
            "CODEC_ID_SMACKAUDIO",
            "CODEC_ID_QCELP",
            "CODEC_ID_WAVPACK",
            "CODEC_ID_DSICINAUDIO",
            "CODEC_ID_ASAO",
            "CODEC_ID_NELLYMOSER",
            "CODEC_ID_WMAVOICE",
            "CODEC_ID_WMAPRO",
            "CODEC_ID_WMALOSSLESS",
            "CODEC_ID_IMC",
            "CODEC_ID_MUSEPACK7",
            "CODEC_ID_MLP",
            "CODEC_ID_GSM_MS",
            "CODEC_ID_ATRAC3",
            "CODEC_ID_VOXWARE",
            "CODEC_ID_APE",
            "CODEC_ID_MUSEPACK8",
            "CODEC_ID_SPEEX",
            "CODEC_ID_ATRAC3P",
            "CODEC_ID_EAC3",
            "CODEC_ID_SIPR",
            "CODEC_ID_MP1",
            "CODEC_ID_TWINVQ",
            "CODEC_ID_TRUEHD",
            "CODEC_ID_MP4ALS",
            "CODEC_ID_ATRAC1",
            "CODEC_ID_BINKAUDIO_RDFT",
            "CODEC_ID_BINKAUDIO_DCT",
            "CODEC_ID_AAC_LATM",
            "CODEC_ID_QDMC",
            "CODEC_ID_CELT",
            "CODEC_ID_G723_1",
            "CODEC_ID_G729",
            "CODEC_ID_BMV_AUDIO",
            "CODEC_ID_RALF",
            "CODEC_ID_IAC",
            "CODEC_ID_ILBC",
            "CODEC_ID_FFWAVESYNTH",
            "CODEC_ID_8SVX_RAW",
            "CODEC_ID_PAF_AUDIO",
            "CODEC_ID_OPUS",
            "CODEC_ID_ATRAC3AL",
            "CODEC_ID_ATRAC3PAL",
            "CODEC_ID_DOLBY_E",
            "CODEC_ID_DSD_LSBF",
            "CODEC_ID_DSD_MSBF",
            "CODEC_ID_DSD_LSBF_PLANAR",
            "CODEC_ID_DSD_MSBF_PLANAR",
            "CODEC_ID_DSS_SP",
            "CODEC_ID_DST",
            "CODEC_ID_EVRC",
            "CODEC_ID_INTERPLAY_ACM",
            "CODEC_ID_METASOUND",
            "CODEC_ID_ON2AVC",
            "CODEC_ID_TAK",
            "CODEC_ID_XMA1",
            "CODEC_ID_XMA2",
            "CODEC_ID_COMFORT_NOISE",
            "CODEC_ID_APTX",
            "CODEC_ID_APTX_HD",
            "CODEC_ID_SBC",
            "CODEC_ID_ATRAC9",
            "CODEC_ID_CODEC2",
            "CODEC_ID_OGGTHEORA_DEPRECATED",
            "CODEC_ID_DVD_SUBTITLE",
            "CODEC_ID_DVB_SUBTITLE",
            "CODEC_ID_TEXT",
            "CODEC_ID_XSUB",
            "CODEC_ID_SSA",
            "CODEC_ID_MOV_TEXT",
            "CODEC_ID_HDMV_PGS_SUBTITLE",
            "CODEC_ID_DVB_TELETEXT",
            "CODEC_ID_SRT",
            "CODEC_ID_MICRODVD",
            "CODEC_ID_EIA_608",
            "CODEC_ID_JACOSUB",
            "CODEC_ID_SAMI",
            "CODEC_ID_REALTEXT",
            "CODEC_ID_SUBVIEWER",
            "CODEC_ID_SUBRIP",
            "CODEC_ID_WEBVTT",
            "CODEC_ID_ASS",
            "CODEC_ID_MPL2",
            "CODEC_ID_PJS",
            "CODEC_ID_STL",
            "CODEC_ID_SUBVIEWER1",
            "CODEC_ID_VPLAYER",
            "CODEC_ID_TTML",
            "CODEC_ID_TTF",
            "CODEC_ID_BINTEXT",
            "CODEC_ID_XBIN",
            "CODEC_ID_IDF",
            "CODEC_ID_OTF",
            "CODEC_ID_PROBE",
            "CODEC_ID_MPEG2TS",
            "CODEC_ID_MPEG4SYSTEMS",
            "CODEC_ID_FFMETADATA",
            "CODEC_ID_FFMPEG_OUT_OF_SYNC",
            "CODEC_ID_WRAPPED_AVFRAME",
            "CODEC_ID_CAMM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_MPEG4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "moved to audio codecs section in upstream",
            "moved to audio codecs section in upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various pcm \"codecs\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various adpcm codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AMR",
            "",
            "RealAudio codecs",
            "",
            "various DPCM codecs",
            "",
            "",
            "",
            "",
            "",
            "audio codecs",
            "preferred ID for MPEG Audio layer 1, 2 or 3",
            "",
            "Use CODEC_ID_AAC instead",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Not in ffmpeg as of rev 20544.",
            "Start of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Removed in ffmpeg rev 5877.",
            "subtitle codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "other specific kind of codecs (generally used for attachments)",
            "",
            "",
            "",
            "",
            "< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it",
            "_FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat)",
            "_FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat)",
            "Dummy codec for streams containing only metadata information.",
            "this one indicates an error in the mapping between this enum and libavcodec's",
            "AVFrames wrapped in AVPacket",
            "Camera motion metadata (http://go/wally-format)"
          ],
          "type": "string"
        },
        "audioEndTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "audioFrameSize": {
          "description": "audio frame size",
          "format": "int64",
          "type": "string"
        },
        "audioLength": {
          "description": "audio length in seconds Note that when the VSI is from users videos, it is not guaranteed to be the same as transcode lengths and it could be 0 when the full VSI cannot compute the length from the source header and timestamps (for example when header and timestamps are too broken).",
          "format": "double",
          "type": "number"
        },
        "audioNumberOfFrames": {
          "description": "Number of audio frames. Ffmpeg does not report the number of frames accurately. video::TranscodedVideoFileInformation calls Google's analyzer to get information of both audio and video frame numbers.",
          "format": "int64",
          "type": "string"
        },
        "audioSampleRate": {
          "description": "audio sample rate",
          "format": "int64",
          "type": "string"
        },
        "audioSampleSize": {
          "description": "Number of meaningful bits per decoded audio sample. This is an implicit conceptual meaning. This is *NOT* the same as ffmpeg's internal sample format that is used when actually decoding with ffmpeg.",
          "format": "int32",
          "type": "integer"
        },
        "audioStartTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "audioStream": {
          "items": {
            "$ref": "VideoVideoStreamInfoAudioStream"
          },
          "type": "array"
        },
        "audioStreamCodecTag": {
          "format": "int64",
          "type": "string"
        },
        "avDistance": {
          "description": "Audio-Video interleaving distance between packets (in bytes)",
          "format": "int32",
          "type": "integer"
        },
        "avLength": {
          "description": "Audio and video length in seconds. It's the max of the audio and video length. Note that when the VSI is from users videos, it is not guaranteed to be the same as transcode lengths and it could be 0 when the full VSI cannot compute the length from the source header and timestamps (for example when header and timestamps are too broken).",
          "format": "double",
          "type": "number"
        },
        "averageVideoFps": {
          "description": "Average video fps from analyzing entire file.",
          "format": "double",
          "type": "number"
        },
        "buildLabel": {
          "description": "Build label of the VSI mpm.",
          "type": "string"
        },
        "containerId": {
          "description": "Container Id.",
          "enum": [
            "CONTAINER_ID_NONE",
            "CONTAINER_ID_FOURXM",
            "CONTAINER_ID_AIFF",
            "CONTAINER_ID_AMR",
            "CONTAINER_ID_ASF",
            "CONTAINER_ID_AU",
            "CONTAINER_ID_AUDIO",
            "CONTAINER_ID_AVI",
            "CONTAINER_ID_AVISYNTH",
            "CONTAINER_ID_AVS",
            "CONTAINER_ID_DAUD",
            "CONTAINER_ID_DC1394",
            "CONTAINER_ID_DSICIN",
            "CONTAINER_ID_DV1394",
            "CONTAINER_ID_DV",
            "CONTAINER_ID_EA",
            "CONTAINER_ID_FFM",
            "CONTAINER_ID_FLIC",
            "CONTAINER_ID_FLV",
            "CONTAINER_ID_GIF",
            "CONTAINER_ID_VIDEO_GRAB_DEVICE",
            "CONTAINER_ID_GXF",
            "CONTAINER_ID_IDCIN",
            "CONTAINER_ID_ROQ",
            "CONTAINER_ID_IMAGE2",
            "CONTAINER_ID_IMAGE2PIPE",
            "CONTAINER_ID_IMAGE",
            "CONTAINER_ID_IMAGEPIPE",
            "CONTAINER_ID_IPMOVIE",
            "CONTAINER_ID_MATROSKA",
            "CONTAINER_ID_MM",
            "CONTAINER_ID_MMF",
            "CONTAINER_ID_MOV",
            "CONTAINER_ID_MP3",
            "CONTAINER_ID_MPEGPS",
            "CONTAINER_ID_MPEGTS",
            "CONTAINER_ID_MTV",
            "CONTAINER_ID_MXF",
            "CONTAINER_ID_NSV",
            "CONTAINER_ID_NUT",
            "CONTAINER_ID_NUV",
            "CONTAINER_ID_OGG",
            "CONTAINER_ID_STR",
            "CONTAINER_ID_SHORTEN",
            "CONTAINER_ID_FLAC",
            "CONTAINER_ID_AC3",
            "CONTAINER_ID_DTS",
            "CONTAINER_ID_AAC",
            "CONTAINER_ID_H261",
            "CONTAINER_ID_H263",
            "CONTAINER_ID_M4V",
            "CONTAINER_ID_H264",
            "CONTAINER_ID_MPEGVIDEO",
            "CONTAINER_ID_MJPEG",
            "CONTAINER_ID_INGENIENT",
            "CONTAINER_ID_PCM_S16LE",
            "CONTAINER_ID_PCM_S16BE",
            "CONTAINER_ID_PCM_U16LE",
            "CONTAINER_ID_PCM_U16BE",
            "CONTAINER_ID_PCM_S8",
            "CONTAINER_ID_PCM_U8",
            "CONTAINER_ID_PCM_MULAW",
            "CONTAINER_ID_PCM_ALAW",
            "CONTAINER_ID_RAWVIDEO",
            "CONTAINER_ID_RM",
            "CONTAINER_ID_SDP",
            "CONTAINER_ID_REDIR",
            "CONTAINER_ID_SEGAFILM",
            "CONTAINER_ID_VMD",
            "CONTAINER_ID_SMACKER",
            "CONTAINER_ID_SOL",
            "CONTAINER_ID_SWF",
            "CONTAINER_ID_TTA",
            "CONTAINER_ID_V4L2",
            "CONTAINER_ID_VOC",
            "CONTAINER_ID_WAV",
            "CONTAINER_ID_WC3",
            "CONTAINER_ID_WSAUD",
            "CONTAINER_ID_WSVQA",
            "CONTAINER_ID_WV",
            "CONTAINER_ID_YUV4MPEGPIPE",
            "CONTAINER_ID_TIERTEXSEQ",
            "CONTAINER_ID_WEBM",
            "CONTAINER_ID_EAC3",
            "CONTAINER_ID_AA",
            "CONTAINER_ID_ACM",
            "CONTAINER_ID_ACT",
            "CONTAINER_ID_ADF",
            "CONTAINER_ID_ADP",
            "CONTAINER_ID_ADS",
            "CONTAINER_ID_ADX",
            "CONTAINER_ID_AEA",
            "CONTAINER_ID_AFC",
            "CONTAINER_ID_AIX",
            "CONTAINER_ID_ANM",
            "CONTAINER_ID_APC",
            "CONTAINER_ID_APE",
            "CONTAINER_ID_APNG",
            "CONTAINER_ID_AQTITLE",
            "CONTAINER_ID_ASF_O",
            "CONTAINER_ID_ASS",
            "CONTAINER_ID_AST",
            "CONTAINER_ID_AVR",
            "CONTAINER_ID_BETHSOFTVID",
            "CONTAINER_ID_BFI",
            "CONTAINER_ID_BIN",
            "CONTAINER_ID_BINK",
            "CONTAINER_ID_BIT",
            "CONTAINER_ID_BMV",
            "CONTAINER_ID_BFSTM",
            "CONTAINER_ID_BRSTM",
            "CONTAINER_ID_BOA",
            "CONTAINER_ID_C93",
            "CONTAINER_ID_CAF",
            "CONTAINER_ID_CAVSVIDEO",
            "CONTAINER_ID_CDG",
            "CONTAINER_ID_CDXL",
            "CONTAINER_ID_CINE",
            "CONTAINER_ID_CONCAT",
            "CONTAINER_ID_DATA",
            "CONTAINER_ID_DCSTR",
            "CONTAINER_ID_DFA",
            "CONTAINER_ID_DIRAC",
            "CONTAINER_ID_DNXHD",
            "CONTAINER_ID_DSF",
            "CONTAINER_ID_DSS",
            "CONTAINER_ID_DTSHD",
            "CONTAINER_ID_DVBSUB",
            "CONTAINER_ID_DVBTXT",
            "CONTAINER_ID_DXA",
            "CONTAINER_ID_EA_CDATA",
            "CONTAINER_ID_EPAF",
            "CONTAINER_ID_FFMETADATA",
            "CONTAINER_ID_FILMSTRIP",
            "CONTAINER_ID_FITS",
            "CONTAINER_ID_FRM",
            "CONTAINER_ID_FSB",
            "CONTAINER_ID_G722",
            "CONTAINER_ID_G723_1",
            "CONTAINER_ID_G726",
            "CONTAINER_ID_G726LE",
            "CONTAINER_ID_G729",
            "CONTAINER_ID_GDV",
            "CONTAINER_ID_GENH",
            "CONTAINER_ID_GSM",
            "CONTAINER_ID_HEVC",
            "CONTAINER_ID_HNM",
            "CONTAINER_ID_ICO",
            "CONTAINER_ID_IDF",
            "CONTAINER_ID_IFF",
            "CONTAINER_ID_ILBC",
            "CONTAINER_ID_ALIAS_PIX",
            "CONTAINER_ID_BRENDER_PIX",
            "CONTAINER_ID_IRCAM",
            "CONTAINER_ID_ISS",
            "CONTAINER_ID_IV8",
            "CONTAINER_ID_IVF",
            "CONTAINER_ID_IVR",
            "CONTAINER_ID_JACOSUB",
            "CONTAINER_ID_JV",
            "CONTAINER_ID_LMLM4",
            "CONTAINER_ID_LOAS",
            "CONTAINER_ID_LRC",
            "CONTAINER_ID_LVF",
            "CONTAINER_ID_LXF",
            "CONTAINER_ID_MGSTS",
            "CONTAINER_ID_MICRODVD",
            "CONTAINER_ID_MJPEG_2000",
            "CONTAINER_ID_MLP",
            "CONTAINER_ID_MLV",
            "CONTAINER_ID_MPC",
            "CONTAINER_ID_MPC8",
            "CONTAINER_ID_MPEGTSRAW",
            "CONTAINER_ID_MPJPEG",
            "CONTAINER_ID_MPL2",
            "CONTAINER_ID_MPSUB",
            "CONTAINER_ID_MSF",
            "CONTAINER_ID_MSNWCTCP",
            "CONTAINER_ID_MTAF",
            "CONTAINER_ID_MUSX",
            "CONTAINER_ID_MV",
            "CONTAINER_ID_MVI",
            "CONTAINER_ID_MXG",
            "CONTAINER_ID_NC",
            "CONTAINER_ID_NISTSPHERE",
            "CONTAINER_ID_OMA",
            "CONTAINER_ID_PAF",
            "CONTAINER_ID_ALAW",
            "CONTAINER_ID_MULAW",
            "CONTAINER_ID_F64BE",
            "CONTAINER_ID_F64LE",
            "CONTAINER_ID_F32BE",
            "CONTAINER_ID_F32LE",
            "CONTAINER_ID_S32BE",
            "CONTAINER_ID_S32LE",
            "CONTAINER_ID_S24BE",
            "CONTAINER_ID_S24LE",
            "CONTAINER_ID_S16BE",
            "CONTAINER_ID_S16LE",
            "CONTAINER_ID_S8",
            "CONTAINER_ID_U32BE",
            "CONTAINER_ID_U32LE",
            "CONTAINER_ID_U24BE",
            "CONTAINER_ID_U24LE",
            "CONTAINER_ID_U16BE",
            "CONTAINER_ID_U16LE",
            "CONTAINER_ID_U8",
            "CONTAINER_ID_PJS",
            "CONTAINER_ID_PMP",
            "CONTAINER_ID_PVA",
            "CONTAINER_ID_PVF",
            "CONTAINER_ID_QCP",
            "CONTAINER_ID_R3D",
            "CONTAINER_ID_REALTEXT",
            "CONTAINER_ID_REDSPARK",
            "CONTAINER_ID_RL2",
            "CONTAINER_ID_RPL",
            "CONTAINER_ID_RSD",
            "CONTAINER_ID_RSO",
            "CONTAINER_ID_RTP",
            "CONTAINER_ID_RTSP",
            "CONTAINER_ID_S337M",
            "CONTAINER_ID_SAMI",
            "CONTAINER_ID_SAP",
            "CONTAINER_ID_SBG",
            "CONTAINER_ID_SCC",
            "CONTAINER_ID_SDR2",
            "CONTAINER_ID_SDS",
            "CONTAINER_ID_SDX",
            "CONTAINER_ID_FILM_CPK",
            "CONTAINER_ID_SHN",
            "CONTAINER_ID_SIFF",
            "CONTAINER_ID_SLN",
            "CONTAINER_ID_SMJPEG",
            "CONTAINER_ID_SMUSH",
            "CONTAINER_ID_SOX",
            "CONTAINER_ID_SPDIF",
            "CONTAINER_ID_SRT",
            "CONTAINER_ID_STL",
            "CONTAINER_ID_SUBVIEWER1",
            "CONTAINER_ID_SUBVIEWER",
            "CONTAINER_ID_SUP",
            "CONTAINER_ID_SVAG",
            "CONTAINER_ID_TAK",
            "CONTAINER_ID_TEDCAPTIONS",
            "CONTAINER_ID_THP",
            "CONTAINER_ID_3DOSTR",
            "CONTAINER_ID_TMV",
            "CONTAINER_ID_TRUEHD",
            "CONTAINER_ID_TXD",
            "CONTAINER_ID_V210",
            "CONTAINER_ID_V210X",
            "CONTAINER_ID_VAG",
            "CONTAINER_ID_VC1",
            "CONTAINER_ID_VC1TEST",
            "CONTAINER_ID_VIVO",
            "CONTAINER_ID_VOBSUB",
            "CONTAINER_ID_VPK",
            "CONTAINER_ID_VPLAYER",
            "CONTAINER_ID_VQF",
            "CONTAINER_ID_W64",
            "CONTAINER_ID_WC3MOVIE",
            "CONTAINER_ID_WEBM_DASH_MANIFEST",
            "CONTAINER_ID_WEBVTT",
            "CONTAINER_ID_WSD",
            "CONTAINER_ID_WTV",
            "CONTAINER_ID_WVE",
            "CONTAINER_ID_XA",
            "CONTAINER_ID_XBIN",
            "CONTAINER_ID_XMV",
            "CONTAINER_ID_XVAG",
            "CONTAINER_ID_XWMA",
            "CONTAINER_ID_YOP",
            "CONTAINER_ID_AMRNB",
            "CONTAINER_ID_AMRWB",
            "CONTAINER_ID_APTX",
            "CONTAINER_ID_NSP",
            "CONTAINER_ID_TY",
            "CONTAINER_ID_APTX_HD",
            "CONTAINER_ID_AVS2",
            "CONTAINER_ID_CODEC2",
            "CONTAINER_ID_CODEC2RAW",
            "CONTAINER_ID_SBC",
            "CONTAINER_ID_SER",
            "CONTAINER_ID_GOOGLE_INDEX",
            "CONTAINER_ID_MEDIASAMPLE",
            "CONTAINER_ID_TOOTHLESS",
            "CONTAINER_ID_MEDIASAMPLE_DEPRECATED"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: CONTAINER_ID_MOV refers to any MPEG 4 variant. Currently VideoStreamInfo does not have enough information to distinguish between the variants.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Note: CONTAINER_ID_DTS refers to the format for DTS audio codec. It does NOT refer to ADTS container for AAC codec.",
            "Note: CONTAINER_ID_AAC refers to the ADTS format for AAC codec.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Google Proto types Detects ASCII Proto of video_pipeline::MediaProcessingFfmpegInput",
            "A stream of video_file::Mediasamples. google3/video/vidproc/ffmpeg/formats/streaming_mediasample_format.h",
            "Binary proto of video::toothless::ToothlessStreamManifest format currently has no probe in ffmpeg and cannot be detected by VSI. google3/video/vidproc/ffmpeg/formats/toothless_demuxer.proto",
            ""
          ],
          "type": "string"
        },
        "containerType": {
          "description": "Name of the container format guessed by ffmpeg.",
          "type": "string"
        },
        "containsChapters": {
          "description": "If the video contains chapters info.",
          "type": "boolean"
        },
        "dataStream": {
          "items": {
            "$ref": "VideoVideoStreamInfoDataStream"
          },
          "type": "array"
        },
        "displayHeight": {
          "format": "int32",
          "type": "integer"
        },
        "displayWidth": {
          "description": "final display video width and height if explicitly set in the video otherwise this can be calculated from source width/height and video_pixel_aspect_ratio",
          "format": "int32",
          "type": "integer"
        },
        "fileHeaderFingerprint": {
          "description": "Input file header fingerprint",
          "format": "uint64",
          "type": "string"
        },
        "fileMagic": {
          "description": "The file type string returned by libmagic, a third party library. It might accidentally include some user content. Some normal file_magic examples: -- RIFF (little-endian) data, AVI, 1016 x 696, 30.00 fps, video: XviD, audio: (stereo, 48000 Hz) -- MPEG sequence, v2, program multiplex -- ISO Media, MPEG v4 system, iTunes AVC-LC -- Microsoft Windows Movie Maker project file",
          "type": "string"
        },
        "fileModifiedTime": {
          "description": "Input file modification time",
          "format": "int64",
          "type": "string"
        },
        "fileName": {
          "description": "Input file name. DEPRECATED; don't expect the file name to be correct.",
          "type": "string"
        },
        "fileSize": {
          "description": "Input file size in bytes",
          "format": "int64",
          "type": "string"
        },
        "fileType": {
          "description": "High-level file type guessed by looking at the file headers and libmagic.",
          "format": "int32",
          "type": "integer"
        },
        "imageStream": {
          "items": {
            "$ref": "VideoVideoStreamInfoVideoStream"
          },
          "type": "array"
        },
        "isAsf": {
          "description": "True if the video is likely to be an ASF file.",
          "type": "boolean"
        },
        "isImageFile": {
          "description": "True if the video is actually an image file (JPEG, PNG, GIF, etc) and not a video file.",
          "type": "boolean"
        },
        "isVideoInsaneSize": {
          "description": "Check if a video size insane or not. It is set if the input file is an MOV file.",
          "type": "boolean"
        },
        "level": {
          "format": "int32",
          "type": "integer"
        },
        "metadata": {
          "$ref": "VideoVideoStreamInfoMetadata"
        },
        "numAudioStreams": {
          "description": "Total number of audio streams in the file",
          "format": "int32",
          "type": "integer"
        },
        "numDataStreams": {
          "description": "Total number of data streams in the file",
          "format": "int32",
          "type": "integer"
        },
        "numImageStreams": {
          "description": "Total number of image streams in the file",
          "format": "int32",
          "type": "integer"
        },
        "numTimedtextStreams": {
          "description": "Total number of timedtext streams in the file",
          "format": "int32",
          "type": "integer"
        },
        "numVideoStreams": {
          "description": "Total number of video streams in the file",
          "format": "int32",
          "type": "integer"
        },
        "parsedByFfmpeg": {
          "description": "If this field is not set, then only base video file information has been generated (and ffmpeg parsing hasn't yet been done). If this is set to 'false', then ffmpeg failed to parse the file - otherwise it will set to 'true'",
          "type": "boolean"
        },
        "partialFile": {
          "description": "By default we assume that the entire file was given computing the VSI - if that is not true this flag should be set to true.",
          "type": "boolean"
        },
        "pixFmt": {
          "description": "Pixel format for the video stream.",
          "enum": [
            "PIX_FMT_NONE",
            "PIX_FMT_YUV420P",
            "PIX_FMT_YUYV422",
            "PIX_FMT_RGB24",
            "PIX_FMT_BGR24",
            "PIX_FMT_YUV422P",
            "PIX_FMT_YUV444P",
            "PIX_FMT_RGB32",
            "PIX_FMT_YUV410P",
            "PIX_FMT_YUV411P",
            "PIX_FMT_RGB565",
            "PIX_FMT_RGB555",
            "PIX_FMT_GRAY8",
            "PIX_FMT_MONOWHITE",
            "PIX_FMT_MONOBLACK",
            "PIX_FMT_PAL8",
            "PIX_FMT_YUVJ420P",
            "PIX_FMT_YUVJ422P",
            "PIX_FMT_YUVJ444P",
            "PIX_FMT_XVMC_MPEG2_MC",
            "PIX_FMT_XVMC_MPEG2_IDCT",
            "PIX_FMT_UYVY422",
            "PIX_FMT_UYYVYY411",
            "PIX_FMT_BGR32",
            "PIX_FMT_BGR565",
            "PIX_FMT_BGR555",
            "PIX_FMT_BGR8",
            "PIX_FMT_BGR4",
            "PIX_FMT_BGR4_BYTE",
            "PIX_FMT_RGB8",
            "PIX_FMT_RGB4",
            "PIX_FMT_RGB4_BYTE",
            "PIX_FMT_NV12",
            "PIX_FMT_NV21",
            "PIX_FMT_RGB32_1",
            "PIX_FMT_BGR32_1",
            "PIX_FMT_GRAY16BE",
            "PIX_FMT_GRAY16LE",
            "PIX_FMT_YUV440P",
            "PIX_FMT_YUVJ440P",
            "PIX_FMT_YUVA420P",
            "PIX_FMT_VDPAU_H264",
            "PIX_FMT_VDPAU_MPEG1",
            "PIX_FMT_VDPAU_MPEG2",
            "PIX_FMT_VDPAU_WMV3",
            "PIX_FMT_VDPAU_VC1",
            "PIX_FMT_RGB48BE",
            "PIX_FMT_RGB48LE",
            "PIX_FMT_RGB565BE",
            "PIX_FMT_RGB555BE",
            "PIX_FMT_BGR565BE",
            "PIX_FMT_BGR555BE",
            "PIX_FMT_VAAPI_MOCO",
            "PIX_FMT_VAAPI_IDCT",
            "PIX_FMT_VAAPI_VLD",
            "PIX_FMT_YUV420P16LE",
            "PIX_FMT_YUV420P16BE",
            "PIX_FMT_YUV422P16LE",
            "PIX_FMT_YUV422P16BE",
            "PIX_FMT_YUV444P16LE",
            "PIX_FMT_YUV444P16BE",
            "PIX_FMT_VDPAU_MPEG4",
            "PIX_FMT_DXVA2_VLD",
            "PIX_FMT_RGB444LE",
            "PIX_FMT_RGB444BE",
            "PIX_FMT_BGR444LE",
            "PIX_FMT_BGR444BE",
            "PIX_FMT_GRAY8A",
            "PIX_FMT_BGR48BE",
            "PIX_FMT_BGR48LE",
            "PIX_FMT_YUV420P9BE",
            "PIX_FMT_YUV420P9LE",
            "PIX_FMT_YUV420P10BE",
            "PIX_FMT_YUV420P10LE",
            "PIX_FMT_YUV422P10BE",
            "PIX_FMT_YUV422P10LE",
            "PIX_FMT_YUV444P9BE",
            "PIX_FMT_YUV444P9LE",
            "PIX_FMT_YUV444P10BE",
            "PIX_FMT_YUV444P10LE",
            "PIX_FMT_YUV422P9BE",
            "PIX_FMT_YUV422P9LE",
            "PIX_FMT_VDA_VLD",
            "PIX_FMT_RGBA64BE",
            "PIX_FMT_RGBA64LE",
            "PIX_FMT_BGRA64BE",
            "PIX_FMT_BGRA64LE",
            "PIX_FMT_GBRP",
            "PIX_FMT_GBRP9BE",
            "PIX_FMT_GBRP9LE",
            "PIX_FMT_GBRP10BE",
            "PIX_FMT_GBRP10LE",
            "PIX_FMT_GBRP16BE",
            "PIX_FMT_GBRP16LE",
            "PIX_FMT_0RGB",
            "PIX_FMT_RGB0",
            "PIX_FMT_0BGR",
            "PIX_FMT_BGR0",
            "PIX_FMT_YUVA444P",
            "PIX_FMT_YUVA422P",
            "PIX_FMT_YUV420P12BE",
            "PIX_FMT_YUV420P12LE",
            "PIX_FMT_YUV420P14BE",
            "PIX_FMT_YUV420P14LE",
            "PIX_FMT_YUV422P12BE",
            "PIX_FMT_YUV422P12LE",
            "PIX_FMT_YUV422P14BE",
            "PIX_FMT_YUV422P14LE",
            "PIX_FMT_YUV444P12BE",
            "PIX_FMT_YUV444P12LE",
            "PIX_FMT_YUV444P14BE",
            "PIX_FMT_YUV444P14LE",
            "PIX_FMT_GBRP12BE",
            "PIX_FMT_GBRP12LE",
            "PIX_FMT_GBRP14BE",
            "PIX_FMT_GBRP14LE",
            "PIX_FMT_ARGB",
            "PIX_FMT_RGBA",
            "PIX_FMT_ABGR",
            "PIX_FMT_BGRA",
            "PIX_FMT_RGB565LE",
            "PIX_FMT_RGB555LE",
            "PIX_FMT_BGR565LE",
            "PIX_FMT_BGR555LE",
            "PIX_FMT_VAAPI",
            "PIX_FMT_YA8",
            "PIX_FMT_Y400A",
            "PIX_FMT_YUVA420P9BE",
            "PIX_FMT_YUVA420P9LE",
            "PIX_FMT_YUVA422P9BE",
            "PIX_FMT_YUVA422P9LE",
            "PIX_FMT_YUVA444P9BE",
            "PIX_FMT_YUVA444P9LE",
            "PIX_FMT_YUVA420P10BE",
            "PIX_FMT_YUVA420P10LE",
            "PIX_FMT_YUVA422P10BE",
            "PIX_FMT_YUVA422P10LE",
            "PIX_FMT_YUVA444P10BE",
            "PIX_FMT_YUVA444P10LE",
            "PIX_FMT_YUVA420P16BE",
            "PIX_FMT_YUVA420P16LE",
            "PIX_FMT_YUVA422P16BE",
            "PIX_FMT_YUVA422P16LE",
            "PIX_FMT_YUVA444P16BE",
            "PIX_FMT_YUVA444P16LE",
            "PIX_FMT_VDPAU",
            "PIX_FMT_XYZ12LE",
            "PIX_FMT_XYZ12BE",
            "PIX_FMT_NV16",
            "PIX_FMT_NV20LE",
            "PIX_FMT_NV20BE",
            "PIX_FMT_YVYU422",
            "PIX_FMT_VDA",
            "PIX_FMT_YA16BE",
            "PIX_FMT_YA16LE",
            "PIX_FMT_GBRAP",
            "PIX_FMT_GBRAP16BE",
            "PIX_FMT_GBRAP16LE",
            "PIX_FMT_QSV",
            "PIX_FMT_MMAL",
            "PIX_FMT_D3D11VA_VLD",
            "PIX_FMT_CUDA",
            "PIX_FMT_YUVJ411P",
            "PIX_FMT_BAYER_BGGR8",
            "PIX_FMT_BAYER_RGGB8",
            "PIX_FMT_BAYER_GBRG8",
            "PIX_FMT_BAYER_GRBG8",
            "PIX_FMT_BAYER_BGGR16LE",
            "PIX_FMT_BAYER_BGGR16BE",
            "PIX_FMT_BAYER_RGGB16LE",
            "PIX_FMT_BAYER_RGGB16BE",
            "PIX_FMT_BAYER_GBRG16LE",
            "PIX_FMT_BAYER_GBRG16BE",
            "PIX_FMT_BAYER_GRBG16LE",
            "PIX_FMT_BAYER_GRBG16BE",
            "PIX_FMT_XVMC",
            "PIX_FMT_YUV440P10LE",
            "PIX_FMT_YUV440P10BE",
            "PIX_FMT_YUV440P12LE",
            "PIX_FMT_YUV440P12BE",
            "PIX_FMT_AYUV64LE",
            "PIX_FMT_AYUV64BE",
            "PIX_FMT_VIDEOTOOLBOX",
            "PIX_FMT_P010LE",
            "PIX_FMT_P010BE",
            "PIX_FMT_GBRAP12BE",
            "PIX_FMT_GBRAP12LE",
            "PIX_FMT_GBRAP10BE",
            "PIX_FMT_GBRAP10LE",
            "PIX_FMT_MEDIACODEC",
            "PIX_FMT_GRAY12BE",
            "PIX_FMT_GRAY12LE",
            "PIX_FMT_GRAY10BE",
            "PIX_FMT_GRAY10LE",
            "PIX_FMT_P016LE",
            "PIX_FMT_P016BE",
            "PIX_FMT_D3D11",
            "PIX_FMT_GRAY9BE",
            "PIX_FMT_GRAY9LE",
            "PIX_FMT_GBRPF32BE",
            "PIX_FMT_GBRPF32LE",
            "PIX_FMT_GBRAPF32BE",
            "PIX_FMT_GBRAPF32LE",
            "PIX_FMT_DRM_PRIME",
            "PIX_FMT_GACCEL",
            "PIX_FMT_OPENCL",
            "PIX_FMT_GRAY14BE",
            "PIX_FMT_GRAY14LE",
            "PIX_FMT_GRAYF32BE",
            "PIX_FMT_GRAYF32LE",
            "PIX_FMT_VULKAN",
            "PIX_FMT_ID_FFMPEG_OUT_OF_SYNC"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "this one indicates an error in the mapping between this enum and libavcodec's"
          ],
          "type": "string"
        },
        "profile": {
          "description": "video profile",
          "enum": [
            "PROFILE_UNKNOWN",
            "PROFILE_AAC_MAIN",
            "PROFILE_AAC_LOW",
            "PROFILE_AAC_SSR",
            "PROFILE_AAC_LTP",
            "PROFILE_AAC_HE",
            "PROFILE_AAC_HE_V2",
            "PROFILE_AAC_LD",
            "PROFILE_AAC_ELD",
            "PROFILE_AVC_CONSTRAINED",
            "PROFILE_AVC_INTRA",
            "PROFILE_AVC_BASELINE",
            "PROFILE_AVC_CONSTRAINED_BASELINE",
            "PROFILE_AVC_MAIN",
            "PROFILE_AVC_EXTENDED",
            "PROFILE_AVC_HIGH",
            "PROFILE_AVC_HIGH10",
            "PROFILE_AVC_HIGH10_INTRA",
            "PROFILE_AVC_HIGH422",
            "PROFILE_AVC_HIGH422_INTRA",
            "PROFILE_AVC_HIGH444",
            "PROFILE_HIGH444_PREDICTIVE",
            "PROFILE_AVC_HIGH444_INTRA",
            "PROFILE_AVC_CAVLC444",
            "PROFILE_VP9_0",
            "PROFILE_VP9_1",
            "PROFILE_VP9_2",
            "PROFILE_VP9_3",
            "PROFILE_HEVC_MAIN",
            "PROFILE_HEVC_MAIN_10",
            "PROFILE_HEVC_MAIN_STILL_PICTURE",
            "PROFILE_HEVC_REXT",
            "PROFILE_DOVI_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "(1 << 8) constrained mode set bit",
            "(1 << 11) intra mode set bit",
            "",
            "PROFILE_AVC_CONSTRAINED_BASELINE = PROFILE_AVC_BASELINE | PROFILE_AVC_CONSTRAINED",
            "",
            "",
            "",
            "",
            "PROFILE_AVC_HIGH10_INTRA = PROFILE_AVC_HIGH10 | PROFILE_AVC_INTRA",
            "",
            "PROFILE_AVC_HIGH422_INTRA = PROFILE_AVC_HIGH422 | PROFILE_AVC_INTRA",
            "",
            "",
            "PROFILE_AVC_HIGH444_INTRA = PROFILE_AVC_HIGH444 | PROFILE_AVC_INTRA",
            "",
            "Since profile IDs might collide from different codecs, the profile IDs listed below are not identical to the numeric numbers defined in the spec due to collision. Next Profile ID: 10008 PROFILES for VP9. 0",
            "1",
            "2",
            "3",
            "1",
            "2",
            "3",
            "4",
            "DOVI Profile 5 can only be played as Dolby Vision so it has its own Profile."
          ],
          "type": "string"
        },
        "timedtextStream": {
          "items": {
            "$ref": "VideoVideoStreamInfoTimedTextStream"
          },
          "type": "array"
        },
        "videoBitrate": {
          "description": "video bitrate in bits/s",
          "format": "double",
          "type": "number"
        },
        "videoClipInfo": {
          "$ref": "VideoVideoClipInfo",
          "description": "Video clip information, such as copyright, title, and author."
        },
        "videoCodecId": {
          "description": "Primary video codec information Fields 1-2, 4-10, 28, 37, 44, 49, 51, 54-55, 57-62, 69 will be obsolete soon. Please start using the new repeated video_stream. For now, video_stream(0) will match these fields. Note however that some of the fields in VideoStream are not populated correctly yet in videostreaminfo.cc, but that will be handled gradually.",
          "enum": [
            "CODEC_ID_NONE",
            "CODEC_ID_MPEG1VIDEO",
            "CODEC_ID_MPEG2VIDEO",
            "CODEC_ID_MPEG2VIDEO_XVMC",
            "CODEC_ID_H261",
            "CODEC_ID_H263",
            "CODEC_ID_RV10",
            "CODEC_ID_RV20",
            "CODEC_ID_MJPEG",
            "CODEC_ID_MJPEGB",
            "CODEC_ID_LJPEG",
            "CODEC_ID_SP5X",
            "CODEC_ID_JPEGLS",
            "CODEC_ID_MPEG4",
            "CODEC_ID_RAWVIDEO",
            "CODEC_ID_MSMPEG4V1",
            "CODEC_ID_MSMPEG4V2",
            "CODEC_ID_MSMPEG4V3",
            "CODEC_ID_WMV1",
            "CODEC_ID_WMV2",
            "CODEC_ID_H263P",
            "CODEC_ID_H263I",
            "CODEC_ID_FLV1",
            "CODEC_ID_SVQ1",
            "CODEC_ID_SVQ3",
            "CODEC_ID_DVVIDEO",
            "CODEC_ID_HUFFYUV",
            "CODEC_ID_CYUV",
            "CODEC_ID_H264",
            "CODEC_ID_INDEO3",
            "CODEC_ID_VP3",
            "CODEC_ID_THEORA",
            "CODEC_ID_ASV1",
            "CODEC_ID_ASV2",
            "CODEC_ID_FFV1",
            "CODEC_ID_4XM",
            "CODEC_ID_VCR1",
            "CODEC_ID_CLJR",
            "CODEC_ID_MDEC",
            "CODEC_ID_ROQ",
            "CODEC_ID_INTERPLAY_VIDEO",
            "CODEC_ID_XAN_WC3",
            "CODEC_ID_XAN_WC4",
            "CODEC_ID_RPZA",
            "CODEC_ID_CINEPAK",
            "CODEC_ID_WS_VQA",
            "CODEC_ID_MSRLE",
            "CODEC_ID_MSVIDEO1",
            "CODEC_ID_IDCIN",
            "CODEC_ID_8BPS",
            "CODEC_ID_SMC",
            "CODEC_ID_FLIC",
            "CODEC_ID_TRUEMOTION1",
            "CODEC_ID_VMDVIDEO",
            "CODEC_ID_MSZH",
            "CODEC_ID_ZLIB",
            "CODEC_ID_QTRLE",
            "CODEC_ID_SNOW",
            "CODEC_ID_TSCC",
            "CODEC_ID_ULTI",
            "CODEC_ID_QDRAW",
            "CODEC_ID_VIXL",
            "CODEC_ID_QPEG",
            "CODEC_ID_XVID",
            "CODEC_ID_PNG",
            "CODEC_ID_PPM",
            "CODEC_ID_PBM",
            "CODEC_ID_PGM",
            "CODEC_ID_PGMYUV",
            "CODEC_ID_PAM",
            "CODEC_ID_FFVHUFF",
            "CODEC_ID_RV30",
            "CODEC_ID_RV40",
            "CODEC_ID_VC1",
            "CODEC_ID_WMV3",
            "CODEC_ID_LOCO",
            "CODEC_ID_WNV1",
            "CODEC_ID_AASC",
            "CODEC_ID_INDEO2",
            "CODEC_ID_FRAPS",
            "CODEC_ID_TRUEMOTION2",
            "CODEC_ID_BMP",
            "CODEC_ID_CSCD",
            "CODEC_ID_MMVIDEO",
            "CODEC_ID_ZMBV",
            "CODEC_ID_AVS",
            "CODEC_ID_SMACKVIDEO",
            "CODEC_ID_NUV",
            "CODEC_ID_KMVC",
            "CODEC_ID_FLASHSV",
            "CODEC_ID_CAVS",
            "CODEC_ID_JPEG2000",
            "CODEC_ID_VMNC",
            "CODEC_ID_VP5",
            "CODEC_ID_VP6",
            "CODEC_ID_VP6F",
            "CODEC_ID_TARGA",
            "CODEC_ID_DSICINVIDEO",
            "CODEC_ID_TIERTEXSEQVIDEO",
            "CODEC_ID_TIFF",
            "CODEC_ID_GIF",
            "CODEC_ID_FFH264",
            "CODEC_ID_DXA",
            "CODEC_ID_DNXHD",
            "CODEC_ID_THP",
            "CODEC_ID_SGI",
            "CODEC_ID_C93",
            "CODEC_ID_BETHSOFTVID",
            "CODEC_ID_PTX",
            "CODEC_ID_TXD",
            "CODEC_ID_VP6A",
            "CODEC_ID_AMV",
            "CODEC_ID_VB",
            "CODEC_ID_PCX",
            "CODEC_ID_SUNRAST",
            "CODEC_ID_INDEO4",
            "CODEC_ID_INDEO5",
            "CODEC_ID_MIMIC",
            "CODEC_ID_RL2",
            "CODEC_ID_8SVX_EXP",
            "CODEC_ID_8SVX_FIB",
            "CODEC_ID_ESCAPE124",
            "CODEC_ID_DIRAC",
            "CODEC_ID_BFI",
            "CODEC_ID_CMV",
            "CODEC_ID_MOTIONPIXELS",
            "CODEC_ID_TGV",
            "CODEC_ID_TGQ",
            "CODEC_ID_TQI",
            "CODEC_ID_AURA",
            "CODEC_ID_AURA2",
            "CODEC_ID_V210X",
            "CODEC_ID_TMV",
            "CODEC_ID_V210",
            "CODEC_ID_DPX",
            "CODEC_ID_MAD",
            "CODEC_ID_FRWU",
            "CODEC_ID_VP8",
            "CODEC_ID_APPLE_PRORES_NQ",
            "CODEC_ID_APPLE_PRORES_HQ",
            "CODEC_ID_FLASHSV2",
            "CODEC_ID_CDGRAPHICS",
            "CODEC_ID_R210",
            "CODEC_ID_ANM",
            "CODEC_ID_BINKVIDEO",
            "CODEC_ID_IFF_ILBM",
            "CODEC_ID_IFF_BYTERUN1",
            "CODEC_ID_KGV1",
            "CODEC_ID_YOP",
            "CODEC_ID_PICTOR",
            "CODEC_ID_APPLE_PRORES_LT",
            "CODEC_ID_APPLE_PRORES_PROXY",
            "CODEC_ID_APPLE_PRORES_4444",
            "CODEC_ID_APPLE_PIXLET",
            "CODEC_ID_G2M",
            "CODEC_ID_PRORES",
            "CODEC_ID_ANSI",
            "CODEC_ID_A64_MULTI",
            "CODEC_ID_A64_MULTI5",
            "CODEC_ID_R10K",
            "CODEC_ID_MXPEG",
            "CODEC_ID_LAGARITH",
            "CODEC_ID_JV",
            "CODEC_ID_DFA",
            "CODEC_ID_WMV3IMAGE",
            "CODEC_ID_VC1IMAGE",
            "CODEC_ID_UTVIDEO",
            "CODEC_ID_BMV_VIDEO",
            "CODEC_ID_VBLE",
            "CODEC_ID_DXTORY",
            "CODEC_ID_V410",
            "CODEC_ID_XWD",
            "CODEC_ID_CDXL",
            "CODEC_ID_XBM",
            "CODEC_ID_ZEROCODEC",
            "CODEC_ID_MSS1",
            "CODEC_ID_MSA1",
            "CODEC_ID_TSCC2",
            "CODEC_ID_MTS2",
            "CODEC_ID_CLLC",
            "CODEC_ID_MSS2",
            "CODEC_ID_Y41P",
            "CODEC_ID_ESCAPE130",
            "CODEC_ID_EXR",
            "CODEC_ID_AVRP",
            "CODEC_ID_AVUI",
            "CODEC_ID_AYUV",
            "CODEC_ID_V308",
            "CODEC_ID_V408",
            "CODEC_ID_YUV4",
            "CODEC_ID_SANM",
            "CODEC_ID_PAF_VIDEO",
            "CODEC_ID_AVRN",
            "CODEC_ID_CPIA",
            "CODEC_ID_VP9",
            "CODEC_ID_H265",
            "CODEC_ID_CFHD",
            "CODEC_ID_AV1",
            "CODEC_ID_AIC",
            "CODEC_ID_ALIAS_PIX",
            "CODEC_ID_APNG",
            "CODEC_ID_BRENDER_PIX",
            "CODEC_ID_CLEARVIDEO",
            "CODEC_ID_DDS",
            "CODEC_ID_DXV",
            "CODEC_ID_FIC",
            "CODEC_ID_FITS",
            "CODEC_ID_FMVC",
            "CODEC_ID_GDV",
            "CODEC_ID_HAP",
            "CODEC_ID_HNM4_VIDEO",
            "CODEC_ID_HQ_HQA",
            "CODEC_ID_HQX",
            "CODEC_ID_M101",
            "CODEC_ID_MAGICYUV",
            "CODEC_ID_MSCC",
            "CODEC_ID_MVC1",
            "CODEC_ID_MVC2",
            "CODEC_ID_PIXLET",
            "CODEC_ID_PSD",
            "CODEC_ID_RSCC",
            "CODEC_ID_SCPR",
            "CODEC_ID_SCREENPRESSO",
            "CODEC_ID_SGIRLE",
            "CODEC_ID_SHEERVIDEO",
            "CODEC_ID_SMVJPEG",
            "CODEC_ID_SPEEDHQ",
            "CODEC_ID_SRGC",
            "CODEC_ID_TARGA_Y216",
            "CODEC_ID_TDSC",
            "CODEC_ID_TRUEMOTION2RT",
            "CODEC_ID_VP7",
            "CODEC_ID_BITPACKED",
            "CODEC_ID_WEBP",
            "CODEC_ID_XFACE",
            "CODEC_ID_XPM",
            "CODEC_ID_YLC",
            "CODEC_ID_012V",
            "CODEC_ID_AVS2",
            "CODEC_ID_IMM4",
            "CODEC_ID_MWSC",
            "CODEC_ID_PROSUMER",
            "CODEC_ID_RASC",
            "CODEC_ID_WCMV",
            "CODEC_ID_UNKNOWN",
            "CODEC_ID_PCM_S16LE",
            "CODEC_ID_PCM_S16BE",
            "CODEC_ID_PCM_U16LE",
            "CODEC_ID_PCM_U16BE",
            "CODEC_ID_PCM_S8",
            "CODEC_ID_PCM_U8",
            "CODEC_ID_PCM_MULAW",
            "CODEC_ID_PCM_ALAW",
            "CODEC_ID_PCM_S32LE",
            "CODEC_ID_PCM_S32BE",
            "CODEC_ID_PCM_U32LE",
            "CODEC_ID_PCM_U32BE",
            "CODEC_ID_PCM_S24LE",
            "CODEC_ID_PCM_S24BE",
            "CODEC_ID_PCM_U24LE",
            "CODEC_ID_PCM_U24BE",
            "CODEC_ID_PCM_S24DAUD",
            "CODEC_ID_PCM_ZORK",
            "CODEC_ID_PCM_S16LE_PLANAR",
            "CODEC_ID_PCM_DVD",
            "CODEC_ID_PCM_F32BE",
            "CODEC_ID_PCM_F32LE",
            "CODEC_ID_PCM_F64BE",
            "CODEC_ID_PCM_F64LE",
            "CODEC_ID_PCM_BLURAY",
            "CODEC_ID_PCM_LXF",
            "CODEC_ID_S302M",
            "CODEC_ID_PCM_S8_PLANAR",
            "CODEC_ID_PCM_S24LE_PLANAR",
            "CODEC_ID_PCM_S32LE_PLANAR",
            "CODEC_ID_PCM_S16BE_PLANAR",
            "CODEC_ID_PCM_S64LE",
            "CODEC_ID_PCM_S64BE",
            "CODEC_ID_PCM_F16LE",
            "CODEC_ID_PCM_F24LE",
            "CODEC_ID_ADPCM_IMA_QT",
            "CODEC_ID_ADPCM_IMA_WAV",
            "CODEC_ID_ADPCM_IMA_DK3",
            "CODEC_ID_ADPCM_IMA_DK4",
            "CODEC_ID_ADPCM_IMA_WS",
            "CODEC_ID_ADPCM_IMA_SMJPEG",
            "CODEC_ID_ADPCM_MS",
            "CODEC_ID_ADPCM_4XM",
            "CODEC_ID_ADPCM_XA",
            "CODEC_ID_ADPCM_ADX",
            "CODEC_ID_ADPCM_EA",
            "CODEC_ID_ADPCM_G726",
            "CODEC_ID_ADPCM_CT",
            "CODEC_ID_ADPCM_SWF",
            "CODEC_ID_ADPCM_YAMAHA",
            "CODEC_ID_ADPCM_SBPRO_4",
            "CODEC_ID_ADPCM_SBPRO_3",
            "CODEC_ID_ADPCM_SBPRO_2",
            "CODEC_ID_ADPCM_THP",
            "CODEC_ID_ADPCM_IMA_AMV",
            "CODEC_ID_ADPCM_EA_R1",
            "CODEC_ID_ADPCM_EA_R3",
            "CODEC_ID_ADPCM_EA_R2",
            "CODEC_ID_ADPCM_IMA_EA_SEAD",
            "CODEC_ID_ADPCM_IMA_EA_EACS",
            "CODEC_ID_ADPCM_EA_XAS",
            "CODEC_ID_ADPCM_EA_MAXIS_XA",
            "CODEC_ID_ADPCM_IMA_ISS",
            "CODEC_ID_ADPCM_G722",
            "CODEC_ID_ADPCM_IMA_APC",
            "CODEC_ID_VIMA",
            "CODEC_ID_ADPCM_AFC",
            "CODEC_ID_ADPCM_IMA_OKI",
            "CODEC_ID_ADPCM_DTK",
            "CODEC_ID_ADPCM_IMA_RAD",
            "CODEC_ID_ADPCM_G726LE",
            "CODEC_ID_ADPCM_THP_LE",
            "CODEC_ID_ADPCM_PSX",
            "CODEC_ID_ADPCM_AICA",
            "CODEC_ID_ADPCM_IMA_DAT4",
            "CODEC_ID_ADPCM_MTAF",
            "CODEC_ID_ADPCM_VIMA",
            "CODEC_ID_AMR_NB",
            "CODEC_ID_AMR_WB",
            "CODEC_ID_RA_144",
            "CODEC_ID_RA_288",
            "CODEC_ID_ROQ_DPCM",
            "CODEC_ID_INTERPLAY_DPCM",
            "CODEC_ID_XAN_DPCM",
            "CODEC_ID_SOL_DPCM",
            "CODEC_ID_GREMLIN_DPCM",
            "CODEC_ID_SDX2_DPCM",
            "CODEC_ID_MP2",
            "CODEC_ID_MP3",
            "CODEC_ID_AAC",
            "CODEC_ID_MPEG4AAC_DEPRECATED",
            "CODEC_ID_AC3",
            "CODEC_ID_DTS",
            "CODEC_ID_VORBIS",
            "CODEC_ID_DVAUDIO",
            "CODEC_ID_WMAV1",
            "CODEC_ID_WMAV2",
            "CODEC_ID_MACE3",
            "CODEC_ID_MACE6",
            "CODEC_ID_VMDAUDIO",
            "CODEC_ID_SONIC",
            "CODEC_ID_SONIC_LS",
            "CODEC_ID_FLAC",
            "CODEC_ID_MP3ADU",
            "CODEC_ID_MP3ON4",
            "CODEC_ID_SHORTEN",
            "CODEC_ID_ALAC",
            "CODEC_ID_WESTWOOD_SND1",
            "CODEC_ID_GSM",
            "CODEC_ID_QDM2",
            "CODEC_ID_COOK",
            "CODEC_ID_TRUESPEECH",
            "CODEC_ID_TTA",
            "CODEC_ID_SMACKAUDIO",
            "CODEC_ID_QCELP",
            "CODEC_ID_WAVPACK",
            "CODEC_ID_DSICINAUDIO",
            "CODEC_ID_ASAO",
            "CODEC_ID_NELLYMOSER",
            "CODEC_ID_WMAVOICE",
            "CODEC_ID_WMAPRO",
            "CODEC_ID_WMALOSSLESS",
            "CODEC_ID_IMC",
            "CODEC_ID_MUSEPACK7",
            "CODEC_ID_MLP",
            "CODEC_ID_GSM_MS",
            "CODEC_ID_ATRAC3",
            "CODEC_ID_VOXWARE",
            "CODEC_ID_APE",
            "CODEC_ID_MUSEPACK8",
            "CODEC_ID_SPEEX",
            "CODEC_ID_ATRAC3P",
            "CODEC_ID_EAC3",
            "CODEC_ID_SIPR",
            "CODEC_ID_MP1",
            "CODEC_ID_TWINVQ",
            "CODEC_ID_TRUEHD",
            "CODEC_ID_MP4ALS",
            "CODEC_ID_ATRAC1",
            "CODEC_ID_BINKAUDIO_RDFT",
            "CODEC_ID_BINKAUDIO_DCT",
            "CODEC_ID_AAC_LATM",
            "CODEC_ID_QDMC",
            "CODEC_ID_CELT",
            "CODEC_ID_G723_1",
            "CODEC_ID_G729",
            "CODEC_ID_BMV_AUDIO",
            "CODEC_ID_RALF",
            "CODEC_ID_IAC",
            "CODEC_ID_ILBC",
            "CODEC_ID_FFWAVESYNTH",
            "CODEC_ID_8SVX_RAW",
            "CODEC_ID_PAF_AUDIO",
            "CODEC_ID_OPUS",
            "CODEC_ID_ATRAC3AL",
            "CODEC_ID_ATRAC3PAL",
            "CODEC_ID_DOLBY_E",
            "CODEC_ID_DSD_LSBF",
            "CODEC_ID_DSD_MSBF",
            "CODEC_ID_DSD_LSBF_PLANAR",
            "CODEC_ID_DSD_MSBF_PLANAR",
            "CODEC_ID_DSS_SP",
            "CODEC_ID_DST",
            "CODEC_ID_EVRC",
            "CODEC_ID_INTERPLAY_ACM",
            "CODEC_ID_METASOUND",
            "CODEC_ID_ON2AVC",
            "CODEC_ID_TAK",
            "CODEC_ID_XMA1",
            "CODEC_ID_XMA2",
            "CODEC_ID_COMFORT_NOISE",
            "CODEC_ID_APTX",
            "CODEC_ID_APTX_HD",
            "CODEC_ID_SBC",
            "CODEC_ID_ATRAC9",
            "CODEC_ID_CODEC2",
            "CODEC_ID_OGGTHEORA_DEPRECATED",
            "CODEC_ID_DVD_SUBTITLE",
            "CODEC_ID_DVB_SUBTITLE",
            "CODEC_ID_TEXT",
            "CODEC_ID_XSUB",
            "CODEC_ID_SSA",
            "CODEC_ID_MOV_TEXT",
            "CODEC_ID_HDMV_PGS_SUBTITLE",
            "CODEC_ID_DVB_TELETEXT",
            "CODEC_ID_SRT",
            "CODEC_ID_MICRODVD",
            "CODEC_ID_EIA_608",
            "CODEC_ID_JACOSUB",
            "CODEC_ID_SAMI",
            "CODEC_ID_REALTEXT",
            "CODEC_ID_SUBVIEWER",
            "CODEC_ID_SUBRIP",
            "CODEC_ID_WEBVTT",
            "CODEC_ID_ASS",
            "CODEC_ID_MPL2",
            "CODEC_ID_PJS",
            "CODEC_ID_STL",
            "CODEC_ID_SUBVIEWER1",
            "CODEC_ID_VPLAYER",
            "CODEC_ID_TTML",
            "CODEC_ID_TTF",
            "CODEC_ID_BINTEXT",
            "CODEC_ID_XBIN",
            "CODEC_ID_IDF",
            "CODEC_ID_OTF",
            "CODEC_ID_PROBE",
            "CODEC_ID_MPEG2TS",
            "CODEC_ID_MPEG4SYSTEMS",
            "CODEC_ID_FFMETADATA",
            "CODEC_ID_FFMPEG_OUT_OF_SYNC",
            "CODEC_ID_WRAPPED_AVFRAME",
            "CODEC_ID_CAMM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_MPEG4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "moved to audio codecs section in upstream",
            "moved to audio codecs section in upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various pcm \"codecs\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various adpcm codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AMR",
            "",
            "RealAudio codecs",
            "",
            "various DPCM codecs",
            "",
            "",
            "",
            "",
            "",
            "audio codecs",
            "preferred ID for MPEG Audio layer 1, 2 or 3",
            "",
            "Use CODEC_ID_AAC instead",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Not in ffmpeg as of rev 20544.",
            "Start of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Removed in ffmpeg rev 5877.",
            "subtitle codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "other specific kind of codecs (generally used for attachments)",
            "",
            "",
            "",
            "",
            "< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it",
            "_FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat)",
            "_FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat)",
            "Dummy codec for streams containing only metadata information.",
            "this one indicates an error in the mapping between this enum and libavcodec's",
            "AVFrames wrapped in AVPacket",
            "Camera motion metadata (http://go/wally-format)"
          ],
          "type": "string"
        },
        "videoEndTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "videoFps": {
          "description": "video frame per second, obtained by parsing video header information. It could be inaccurate for some types of codecs, notably, WMV, ASF, and FLV. It will be inaccurate for videos that does not have constant frame rate since it is the smallest framerate that can accurately represent all timestamps (see ffmpeg doc for AVStream.r_frame_rate). Also frame rate can be parsed from headers and can be wrong if it is not available there since ffmpeg uses a heuristic for determining it.",
          "format": "double",
          "type": "number"
        },
        "videoFrameSize": {
          "description": "video frame size",
          "format": "int64",
          "type": "string"
        },
        "videoHasBFrames": {
          "description": "video has b frames",
          "type": "boolean"
        },
        "videoHasFragments": {
          "description": "video (MOV) has fragments",
          "type": "boolean"
        },
        "videoHasLeadingMoovAtom": {
          "description": "video (MOV) has moov atom before mdat atom allowing streaming transcoding",
          "type": "boolean"
        },
        "videoHasNonMonotonicDts": {
          "description": "video has non-monotonic DTS (potential problem)",
          "type": "boolean"
        },
        "videoHasNonMonotonicPts": {
          "description": "video has non-monotonic PTS.",
          "type": "boolean"
        },
        "videoHasNonZeroStartEditList": {
          "description": "video (MOV) has a possibly av desync issue due to edit lists not starting at 0",
          "type": "boolean"
        },
        "videoHasPossibleOpenGop": {
          "description": "video has possible open GOP",
          "type": "boolean"
        },
        "videoHasVariableAspectRatio": {
          "description": "video has frames with different aspect ratios.",
          "type": "boolean"
        },
        "videoHeight": {
          "format": "int32",
          "type": "integer"
        },
        "videoInterlace": {
          "description": "Information on interlaced video.",
          "enum": [
            "INTERLACE_NONE",
            "INTERLACE_PIC_AFF",
            "INTERLACE_MB_AFF"
          ],
          "enumDescriptions": [
            "No interlace",
            "Adaptive frame-field coding in picture level",
            "Adaptive frame-field coding in macroblock level"
          ],
          "type": "string"
        },
        "videoLength": {
          "description": "video length in seconds Note that when the VSI is from users videos, it is not guaranteed to be the same as transcode lengths and it could be 0 when the full VSI cannot compute the length from the source header and timestamps (for example when header and timestamps are too broken).",
          "format": "double",
          "type": "number"
        },
        "videoNumberOfFrames": {
          "description": "Number of Video frames Warning: running video::FfmpegVideoFileInformation() won't set this info Ffmpeg tool does not report the number of frames accurately. We can't rely on fps and video length. So we will set this after we processed every frame using the filter framework",
          "format": "int64",
          "type": "string"
        },
        "videoNumberOfInvisibleFrames": {
          "description": "Invisible frame count Keep a count of frames that are not displayed should the full frame count be needed for the video stream. The only codec currently reporting this value is VP8 with alternate reference frames enabled",
          "format": "int32",
          "type": "integer"
        },
        "videoPixelAspectRatio": {
          "description": "video pixel aspect ratio",
          "format": "double",
          "type": "number"
        },
        "videoRotation": {
          "description": "Is the video rotated ?",
          "enum": [
            "ROTATION_NONE",
            "ROTATION_OTHER",
            "ROTATION_CW_90",
            "ROTATION_CCW_90",
            "ROTATION_180"
          ],
          "enumDescriptions": [
            "No rotation",
            "Unspecified non-identity rotation",
            "Rotate clockwise by 90 degrees",
            "Rotate counter-clockwise by 90 degrees",
            "Rotate 180 degrees"
          ],
          "type": "string"
        },
        "videoStartTimestamp": {
          "description": "Start/end timestamps of audio/video in ms.",
          "format": "int64",
          "type": "string"
        },
        "videoStream": {
          "items": {
            "$ref": "VideoVideoStreamInfoVideoStream"
          },
          "type": "array"
        },
        "videoStreamCodecTag": {
          "format": "int32",
          "type": "integer"
        },
        "videoWidth": {
          "description": "source video width and height",
          "format": "int32",
          "type": "integer"
        },
        "videostreaminfoVersion": {
          "description": "Version number of the videostreaminfo application that generated this protobuf.",
          "format": "int32",
          "type": "integer"
        },
        "yPsnr": {
          "description": "Luma PSNR of the transcoded file.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoAudioStream": {
      "description": "Next id: 25",
      "id": "VideoVideoStreamInfoAudioStream",
      "properties": {
        "ambisonics": {
          "$ref": "VideoAmbisonicsAmbisonicsMetadata",
          "description": "Optional ambisonics metadata."
        },
        "bitrate": {
          "description": "audio bitrate in bits/s",
          "format": "int64",
          "type": "string"
        },
        "channelPosition": {
          "items": {
            "enum": [
              "CHANNEL_UNKNOWN",
              "CHANNEL_FRONT_LEFT",
              "CHANNEL_FRONT_RIGHT",
              "CHANNEL_FRONT_CENTER",
              "CHANNEL_LOW_FREQUENCY",
              "CHANNEL_BACK_LEFT",
              "CHANNEL_BACK_RIGHT",
              "CHANNEL_FRONT_LEFT_OF_CENTER",
              "CHANNEL_FRONT_RIGHT_OF_CENTER",
              "CHANNEL_BACK_CENTER",
              "CHANNEL_SIDE_LEFT",
              "CHANNEL_SIDE_RIGHT",
              "CHANNEL_TOP_CENTER",
              "CHANNEL_TOP_FRONT_LEFT",
              "CHANNEL_TOP_FRONT_CENTER",
              "CHANNEL_TOP_FRONT_RIGHT",
              "CHANNEL_TOP_BACK_LEFT",
              "CHANNEL_TOP_BACK_CENTER",
              "CHANNEL_TOP_BACK_RIGHT",
              "CHANNEL_STEREO_LEFT",
              "CHANNEL_STEREO_RIGHT",
              "CHANNEL_WIDE_LEFT",
              "CHANNEL_WIDE_RIGHT",
              "CHANNEL_SURROUND_DIRECT_LEFT",
              "CHANNEL_SURROUND_DIRECT_RIGHT",
              "CHANNEL_LOW_FREQUENCY_2"
            ],
            "enumDescriptions": [
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ],
            "type": "string"
          },
          "type": "array"
        },
        "channels": {
          "description": "number of audio channels",
          "format": "int32",
          "type": "integer"
        },
        "clockDiscontinuityUs": {
          "description": "some container allows for a clock discontinuity. In this case, the end_timestamp may not be the correct DTS of the stream.",
          "format": "int64",
          "type": "string"
        },
        "codecFourcc": {
          "type": "string"
        },
        "codecId": {
          "description": "Primary audio codec information",
          "enum": [
            "CODEC_ID_NONE",
            "CODEC_ID_MPEG1VIDEO",
            "CODEC_ID_MPEG2VIDEO",
            "CODEC_ID_MPEG2VIDEO_XVMC",
            "CODEC_ID_H261",
            "CODEC_ID_H263",
            "CODEC_ID_RV10",
            "CODEC_ID_RV20",
            "CODEC_ID_MJPEG",
            "CODEC_ID_MJPEGB",
            "CODEC_ID_LJPEG",
            "CODEC_ID_SP5X",
            "CODEC_ID_JPEGLS",
            "CODEC_ID_MPEG4",
            "CODEC_ID_RAWVIDEO",
            "CODEC_ID_MSMPEG4V1",
            "CODEC_ID_MSMPEG4V2",
            "CODEC_ID_MSMPEG4V3",
            "CODEC_ID_WMV1",
            "CODEC_ID_WMV2",
            "CODEC_ID_H263P",
            "CODEC_ID_H263I",
            "CODEC_ID_FLV1",
            "CODEC_ID_SVQ1",
            "CODEC_ID_SVQ3",
            "CODEC_ID_DVVIDEO",
            "CODEC_ID_HUFFYUV",
            "CODEC_ID_CYUV",
            "CODEC_ID_H264",
            "CODEC_ID_INDEO3",
            "CODEC_ID_VP3",
            "CODEC_ID_THEORA",
            "CODEC_ID_ASV1",
            "CODEC_ID_ASV2",
            "CODEC_ID_FFV1",
            "CODEC_ID_4XM",
            "CODEC_ID_VCR1",
            "CODEC_ID_CLJR",
            "CODEC_ID_MDEC",
            "CODEC_ID_ROQ",
            "CODEC_ID_INTERPLAY_VIDEO",
            "CODEC_ID_XAN_WC3",
            "CODEC_ID_XAN_WC4",
            "CODEC_ID_RPZA",
            "CODEC_ID_CINEPAK",
            "CODEC_ID_WS_VQA",
            "CODEC_ID_MSRLE",
            "CODEC_ID_MSVIDEO1",
            "CODEC_ID_IDCIN",
            "CODEC_ID_8BPS",
            "CODEC_ID_SMC",
            "CODEC_ID_FLIC",
            "CODEC_ID_TRUEMOTION1",
            "CODEC_ID_VMDVIDEO",
            "CODEC_ID_MSZH",
            "CODEC_ID_ZLIB",
            "CODEC_ID_QTRLE",
            "CODEC_ID_SNOW",
            "CODEC_ID_TSCC",
            "CODEC_ID_ULTI",
            "CODEC_ID_QDRAW",
            "CODEC_ID_VIXL",
            "CODEC_ID_QPEG",
            "CODEC_ID_XVID",
            "CODEC_ID_PNG",
            "CODEC_ID_PPM",
            "CODEC_ID_PBM",
            "CODEC_ID_PGM",
            "CODEC_ID_PGMYUV",
            "CODEC_ID_PAM",
            "CODEC_ID_FFVHUFF",
            "CODEC_ID_RV30",
            "CODEC_ID_RV40",
            "CODEC_ID_VC1",
            "CODEC_ID_WMV3",
            "CODEC_ID_LOCO",
            "CODEC_ID_WNV1",
            "CODEC_ID_AASC",
            "CODEC_ID_INDEO2",
            "CODEC_ID_FRAPS",
            "CODEC_ID_TRUEMOTION2",
            "CODEC_ID_BMP",
            "CODEC_ID_CSCD",
            "CODEC_ID_MMVIDEO",
            "CODEC_ID_ZMBV",
            "CODEC_ID_AVS",
            "CODEC_ID_SMACKVIDEO",
            "CODEC_ID_NUV",
            "CODEC_ID_KMVC",
            "CODEC_ID_FLASHSV",
            "CODEC_ID_CAVS",
            "CODEC_ID_JPEG2000",
            "CODEC_ID_VMNC",
            "CODEC_ID_VP5",
            "CODEC_ID_VP6",
            "CODEC_ID_VP6F",
            "CODEC_ID_TARGA",
            "CODEC_ID_DSICINVIDEO",
            "CODEC_ID_TIERTEXSEQVIDEO",
            "CODEC_ID_TIFF",
            "CODEC_ID_GIF",
            "CODEC_ID_FFH264",
            "CODEC_ID_DXA",
            "CODEC_ID_DNXHD",
            "CODEC_ID_THP",
            "CODEC_ID_SGI",
            "CODEC_ID_C93",
            "CODEC_ID_BETHSOFTVID",
            "CODEC_ID_PTX",
            "CODEC_ID_TXD",
            "CODEC_ID_VP6A",
            "CODEC_ID_AMV",
            "CODEC_ID_VB",
            "CODEC_ID_PCX",
            "CODEC_ID_SUNRAST",
            "CODEC_ID_INDEO4",
            "CODEC_ID_INDEO5",
            "CODEC_ID_MIMIC",
            "CODEC_ID_RL2",
            "CODEC_ID_8SVX_EXP",
            "CODEC_ID_8SVX_FIB",
            "CODEC_ID_ESCAPE124",
            "CODEC_ID_DIRAC",
            "CODEC_ID_BFI",
            "CODEC_ID_CMV",
            "CODEC_ID_MOTIONPIXELS",
            "CODEC_ID_TGV",
            "CODEC_ID_TGQ",
            "CODEC_ID_TQI",
            "CODEC_ID_AURA",
            "CODEC_ID_AURA2",
            "CODEC_ID_V210X",
            "CODEC_ID_TMV",
            "CODEC_ID_V210",
            "CODEC_ID_DPX",
            "CODEC_ID_MAD",
            "CODEC_ID_FRWU",
            "CODEC_ID_VP8",
            "CODEC_ID_APPLE_PRORES_NQ",
            "CODEC_ID_APPLE_PRORES_HQ",
            "CODEC_ID_FLASHSV2",
            "CODEC_ID_CDGRAPHICS",
            "CODEC_ID_R210",
            "CODEC_ID_ANM",
            "CODEC_ID_BINKVIDEO",
            "CODEC_ID_IFF_ILBM",
            "CODEC_ID_IFF_BYTERUN1",
            "CODEC_ID_KGV1",
            "CODEC_ID_YOP",
            "CODEC_ID_PICTOR",
            "CODEC_ID_APPLE_PRORES_LT",
            "CODEC_ID_APPLE_PRORES_PROXY",
            "CODEC_ID_APPLE_PRORES_4444",
            "CODEC_ID_APPLE_PIXLET",
            "CODEC_ID_G2M",
            "CODEC_ID_PRORES",
            "CODEC_ID_ANSI",
            "CODEC_ID_A64_MULTI",
            "CODEC_ID_A64_MULTI5",
            "CODEC_ID_R10K",
            "CODEC_ID_MXPEG",
            "CODEC_ID_LAGARITH",
            "CODEC_ID_JV",
            "CODEC_ID_DFA",
            "CODEC_ID_WMV3IMAGE",
            "CODEC_ID_VC1IMAGE",
            "CODEC_ID_UTVIDEO",
            "CODEC_ID_BMV_VIDEO",
            "CODEC_ID_VBLE",
            "CODEC_ID_DXTORY",
            "CODEC_ID_V410",
            "CODEC_ID_XWD",
            "CODEC_ID_CDXL",
            "CODEC_ID_XBM",
            "CODEC_ID_ZEROCODEC",
            "CODEC_ID_MSS1",
            "CODEC_ID_MSA1",
            "CODEC_ID_TSCC2",
            "CODEC_ID_MTS2",
            "CODEC_ID_CLLC",
            "CODEC_ID_MSS2",
            "CODEC_ID_Y41P",
            "CODEC_ID_ESCAPE130",
            "CODEC_ID_EXR",
            "CODEC_ID_AVRP",
            "CODEC_ID_AVUI",
            "CODEC_ID_AYUV",
            "CODEC_ID_V308",
            "CODEC_ID_V408",
            "CODEC_ID_YUV4",
            "CODEC_ID_SANM",
            "CODEC_ID_PAF_VIDEO",
            "CODEC_ID_AVRN",
            "CODEC_ID_CPIA",
            "CODEC_ID_VP9",
            "CODEC_ID_H265",
            "CODEC_ID_CFHD",
            "CODEC_ID_AV1",
            "CODEC_ID_AIC",
            "CODEC_ID_ALIAS_PIX",
            "CODEC_ID_APNG",
            "CODEC_ID_BRENDER_PIX",
            "CODEC_ID_CLEARVIDEO",
            "CODEC_ID_DDS",
            "CODEC_ID_DXV",
            "CODEC_ID_FIC",
            "CODEC_ID_FITS",
            "CODEC_ID_FMVC",
            "CODEC_ID_GDV",
            "CODEC_ID_HAP",
            "CODEC_ID_HNM4_VIDEO",
            "CODEC_ID_HQ_HQA",
            "CODEC_ID_HQX",
            "CODEC_ID_M101",
            "CODEC_ID_MAGICYUV",
            "CODEC_ID_MSCC",
            "CODEC_ID_MVC1",
            "CODEC_ID_MVC2",
            "CODEC_ID_PIXLET",
            "CODEC_ID_PSD",
            "CODEC_ID_RSCC",
            "CODEC_ID_SCPR",
            "CODEC_ID_SCREENPRESSO",
            "CODEC_ID_SGIRLE",
            "CODEC_ID_SHEERVIDEO",
            "CODEC_ID_SMVJPEG",
            "CODEC_ID_SPEEDHQ",
            "CODEC_ID_SRGC",
            "CODEC_ID_TARGA_Y216",
            "CODEC_ID_TDSC",
            "CODEC_ID_TRUEMOTION2RT",
            "CODEC_ID_VP7",
            "CODEC_ID_BITPACKED",
            "CODEC_ID_WEBP",
            "CODEC_ID_XFACE",
            "CODEC_ID_XPM",
            "CODEC_ID_YLC",
            "CODEC_ID_012V",
            "CODEC_ID_AVS2",
            "CODEC_ID_IMM4",
            "CODEC_ID_MWSC",
            "CODEC_ID_PROSUMER",
            "CODEC_ID_RASC",
            "CODEC_ID_WCMV",
            "CODEC_ID_UNKNOWN",
            "CODEC_ID_PCM_S16LE",
            "CODEC_ID_PCM_S16BE",
            "CODEC_ID_PCM_U16LE",
            "CODEC_ID_PCM_U16BE",
            "CODEC_ID_PCM_S8",
            "CODEC_ID_PCM_U8",
            "CODEC_ID_PCM_MULAW",
            "CODEC_ID_PCM_ALAW",
            "CODEC_ID_PCM_S32LE",
            "CODEC_ID_PCM_S32BE",
            "CODEC_ID_PCM_U32LE",
            "CODEC_ID_PCM_U32BE",
            "CODEC_ID_PCM_S24LE",
            "CODEC_ID_PCM_S24BE",
            "CODEC_ID_PCM_U24LE",
            "CODEC_ID_PCM_U24BE",
            "CODEC_ID_PCM_S24DAUD",
            "CODEC_ID_PCM_ZORK",
            "CODEC_ID_PCM_S16LE_PLANAR",
            "CODEC_ID_PCM_DVD",
            "CODEC_ID_PCM_F32BE",
            "CODEC_ID_PCM_F32LE",
            "CODEC_ID_PCM_F64BE",
            "CODEC_ID_PCM_F64LE",
            "CODEC_ID_PCM_BLURAY",
            "CODEC_ID_PCM_LXF",
            "CODEC_ID_S302M",
            "CODEC_ID_PCM_S8_PLANAR",
            "CODEC_ID_PCM_S24LE_PLANAR",
            "CODEC_ID_PCM_S32LE_PLANAR",
            "CODEC_ID_PCM_S16BE_PLANAR",
            "CODEC_ID_PCM_S64LE",
            "CODEC_ID_PCM_S64BE",
            "CODEC_ID_PCM_F16LE",
            "CODEC_ID_PCM_F24LE",
            "CODEC_ID_ADPCM_IMA_QT",
            "CODEC_ID_ADPCM_IMA_WAV",
            "CODEC_ID_ADPCM_IMA_DK3",
            "CODEC_ID_ADPCM_IMA_DK4",
            "CODEC_ID_ADPCM_IMA_WS",
            "CODEC_ID_ADPCM_IMA_SMJPEG",
            "CODEC_ID_ADPCM_MS",
            "CODEC_ID_ADPCM_4XM",
            "CODEC_ID_ADPCM_XA",
            "CODEC_ID_ADPCM_ADX",
            "CODEC_ID_ADPCM_EA",
            "CODEC_ID_ADPCM_G726",
            "CODEC_ID_ADPCM_CT",
            "CODEC_ID_ADPCM_SWF",
            "CODEC_ID_ADPCM_YAMAHA",
            "CODEC_ID_ADPCM_SBPRO_4",
            "CODEC_ID_ADPCM_SBPRO_3",
            "CODEC_ID_ADPCM_SBPRO_2",
            "CODEC_ID_ADPCM_THP",
            "CODEC_ID_ADPCM_IMA_AMV",
            "CODEC_ID_ADPCM_EA_R1",
            "CODEC_ID_ADPCM_EA_R3",
            "CODEC_ID_ADPCM_EA_R2",
            "CODEC_ID_ADPCM_IMA_EA_SEAD",
            "CODEC_ID_ADPCM_IMA_EA_EACS",
            "CODEC_ID_ADPCM_EA_XAS",
            "CODEC_ID_ADPCM_EA_MAXIS_XA",
            "CODEC_ID_ADPCM_IMA_ISS",
            "CODEC_ID_ADPCM_G722",
            "CODEC_ID_ADPCM_IMA_APC",
            "CODEC_ID_VIMA",
            "CODEC_ID_ADPCM_AFC",
            "CODEC_ID_ADPCM_IMA_OKI",
            "CODEC_ID_ADPCM_DTK",
            "CODEC_ID_ADPCM_IMA_RAD",
            "CODEC_ID_ADPCM_G726LE",
            "CODEC_ID_ADPCM_THP_LE",
            "CODEC_ID_ADPCM_PSX",
            "CODEC_ID_ADPCM_AICA",
            "CODEC_ID_ADPCM_IMA_DAT4",
            "CODEC_ID_ADPCM_MTAF",
            "CODEC_ID_ADPCM_VIMA",
            "CODEC_ID_AMR_NB",
            "CODEC_ID_AMR_WB",
            "CODEC_ID_RA_144",
            "CODEC_ID_RA_288",
            "CODEC_ID_ROQ_DPCM",
            "CODEC_ID_INTERPLAY_DPCM",
            "CODEC_ID_XAN_DPCM",
            "CODEC_ID_SOL_DPCM",
            "CODEC_ID_GREMLIN_DPCM",
            "CODEC_ID_SDX2_DPCM",
            "CODEC_ID_MP2",
            "CODEC_ID_MP3",
            "CODEC_ID_AAC",
            "CODEC_ID_MPEG4AAC_DEPRECATED",
            "CODEC_ID_AC3",
            "CODEC_ID_DTS",
            "CODEC_ID_VORBIS",
            "CODEC_ID_DVAUDIO",
            "CODEC_ID_WMAV1",
            "CODEC_ID_WMAV2",
            "CODEC_ID_MACE3",
            "CODEC_ID_MACE6",
            "CODEC_ID_VMDAUDIO",
            "CODEC_ID_SONIC",
            "CODEC_ID_SONIC_LS",
            "CODEC_ID_FLAC",
            "CODEC_ID_MP3ADU",
            "CODEC_ID_MP3ON4",
            "CODEC_ID_SHORTEN",
            "CODEC_ID_ALAC",
            "CODEC_ID_WESTWOOD_SND1",
            "CODEC_ID_GSM",
            "CODEC_ID_QDM2",
            "CODEC_ID_COOK",
            "CODEC_ID_TRUESPEECH",
            "CODEC_ID_TTA",
            "CODEC_ID_SMACKAUDIO",
            "CODEC_ID_QCELP",
            "CODEC_ID_WAVPACK",
            "CODEC_ID_DSICINAUDIO",
            "CODEC_ID_ASAO",
            "CODEC_ID_NELLYMOSER",
            "CODEC_ID_WMAVOICE",
            "CODEC_ID_WMAPRO",
            "CODEC_ID_WMALOSSLESS",
            "CODEC_ID_IMC",
            "CODEC_ID_MUSEPACK7",
            "CODEC_ID_MLP",
            "CODEC_ID_GSM_MS",
            "CODEC_ID_ATRAC3",
            "CODEC_ID_VOXWARE",
            "CODEC_ID_APE",
            "CODEC_ID_MUSEPACK8",
            "CODEC_ID_SPEEX",
            "CODEC_ID_ATRAC3P",
            "CODEC_ID_EAC3",
            "CODEC_ID_SIPR",
            "CODEC_ID_MP1",
            "CODEC_ID_TWINVQ",
            "CODEC_ID_TRUEHD",
            "CODEC_ID_MP4ALS",
            "CODEC_ID_ATRAC1",
            "CODEC_ID_BINKAUDIO_RDFT",
            "CODEC_ID_BINKAUDIO_DCT",
            "CODEC_ID_AAC_LATM",
            "CODEC_ID_QDMC",
            "CODEC_ID_CELT",
            "CODEC_ID_G723_1",
            "CODEC_ID_G729",
            "CODEC_ID_BMV_AUDIO",
            "CODEC_ID_RALF",
            "CODEC_ID_IAC",
            "CODEC_ID_ILBC",
            "CODEC_ID_FFWAVESYNTH",
            "CODEC_ID_8SVX_RAW",
            "CODEC_ID_PAF_AUDIO",
            "CODEC_ID_OPUS",
            "CODEC_ID_ATRAC3AL",
            "CODEC_ID_ATRAC3PAL",
            "CODEC_ID_DOLBY_E",
            "CODEC_ID_DSD_LSBF",
            "CODEC_ID_DSD_MSBF",
            "CODEC_ID_DSD_LSBF_PLANAR",
            "CODEC_ID_DSD_MSBF_PLANAR",
            "CODEC_ID_DSS_SP",
            "CODEC_ID_DST",
            "CODEC_ID_EVRC",
            "CODEC_ID_INTERPLAY_ACM",
            "CODEC_ID_METASOUND",
            "CODEC_ID_ON2AVC",
            "CODEC_ID_TAK",
            "CODEC_ID_XMA1",
            "CODEC_ID_XMA2",
            "CODEC_ID_COMFORT_NOISE",
            "CODEC_ID_APTX",
            "CODEC_ID_APTX_HD",
            "CODEC_ID_SBC",
            "CODEC_ID_ATRAC9",
            "CODEC_ID_CODEC2",
            "CODEC_ID_OGGTHEORA_DEPRECATED",
            "CODEC_ID_DVD_SUBTITLE",
            "CODEC_ID_DVB_SUBTITLE",
            "CODEC_ID_TEXT",
            "CODEC_ID_XSUB",
            "CODEC_ID_SSA",
            "CODEC_ID_MOV_TEXT",
            "CODEC_ID_HDMV_PGS_SUBTITLE",
            "CODEC_ID_DVB_TELETEXT",
            "CODEC_ID_SRT",
            "CODEC_ID_MICRODVD",
            "CODEC_ID_EIA_608",
            "CODEC_ID_JACOSUB",
            "CODEC_ID_SAMI",
            "CODEC_ID_REALTEXT",
            "CODEC_ID_SUBVIEWER",
            "CODEC_ID_SUBRIP",
            "CODEC_ID_WEBVTT",
            "CODEC_ID_ASS",
            "CODEC_ID_MPL2",
            "CODEC_ID_PJS",
            "CODEC_ID_STL",
            "CODEC_ID_SUBVIEWER1",
            "CODEC_ID_VPLAYER",
            "CODEC_ID_TTML",
            "CODEC_ID_TTF",
            "CODEC_ID_BINTEXT",
            "CODEC_ID_XBIN",
            "CODEC_ID_IDF",
            "CODEC_ID_OTF",
            "CODEC_ID_PROBE",
            "CODEC_ID_MPEG2TS",
            "CODEC_ID_MPEG4SYSTEMS",
            "CODEC_ID_FFMETADATA",
            "CODEC_ID_FFMPEG_OUT_OF_SYNC",
            "CODEC_ID_WRAPPED_AVFRAME",
            "CODEC_ID_CAMM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_MPEG4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "moved to audio codecs section in upstream",
            "moved to audio codecs section in upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various pcm \"codecs\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various adpcm codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AMR",
            "",
            "RealAudio codecs",
            "",
            "various DPCM codecs",
            "",
            "",
            "",
            "",
            "",
            "audio codecs",
            "preferred ID for MPEG Audio layer 1, 2 or 3",
            "",
            "Use CODEC_ID_AAC instead",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Not in ffmpeg as of rev 20544.",
            "Start of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Removed in ffmpeg rev 5877.",
            "subtitle codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "other specific kind of codecs (generally used for attachments)",
            "",
            "",
            "",
            "",
            "< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it",
            "_FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat)",
            "_FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat)",
            "Dummy codec for streams containing only metadata information.",
            "this one indicates an error in the mapping between this enum and libavcodec's",
            "AVFrames wrapped in AVPacket",
            "Camera motion metadata (http://go/wally-format)"
          ],
          "type": "string"
        },
        "codecString": {
          "description": "RFC6381 Codec string.",
          "type": "string"
        },
        "contentType": {
          "description": "Specifies the content_type of the audio stream as given in the metadata.",
          "type": "string"
        },
        "decodeOffset": {
          "description": "The bytes offset of the end of the first decodable packet.",
          "format": "int64",
          "type": "string"
        },
        "endTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "frameSize": {
          "description": "audio frame size",
          "format": "int64",
          "type": "string"
        },
        "language": {
          "description": "Specifies the language of the audio stream as given in the metadata.",
          "type": "string"
        },
        "length": {
          "description": "audio length in seconds Note that when the VSI is from users videos, it is not guaranteed to be the same as transcode lengths and it could be 0 when the full VSI cannot compute the length from the source header and timestamps (for example when header and timestamps are too broken).",
          "format": "double",
          "type": "number"
        },
        "metadata": {
          "description": "Metadata for audio elementary stream;",
          "items": {
            "$ref": "VideoClipInfo"
          },
          "type": "array"
        },
        "numberOfFrames": {
          "description": "Number of audio frames.",
          "format": "int64",
          "type": "string"
        },
        "profile": {
          "enum": [
            "PROFILE_UNKNOWN",
            "PROFILE_AAC_MAIN",
            "PROFILE_AAC_LOW",
            "PROFILE_AAC_SSR",
            "PROFILE_AAC_LTP",
            "PROFILE_AAC_HE",
            "PROFILE_AAC_HE_V2",
            "PROFILE_AAC_LD",
            "PROFILE_AAC_ELD",
            "PROFILE_AVC_CONSTRAINED",
            "PROFILE_AVC_INTRA",
            "PROFILE_AVC_BASELINE",
            "PROFILE_AVC_CONSTRAINED_BASELINE",
            "PROFILE_AVC_MAIN",
            "PROFILE_AVC_EXTENDED",
            "PROFILE_AVC_HIGH",
            "PROFILE_AVC_HIGH10",
            "PROFILE_AVC_HIGH10_INTRA",
            "PROFILE_AVC_HIGH422",
            "PROFILE_AVC_HIGH422_INTRA",
            "PROFILE_AVC_HIGH444",
            "PROFILE_HIGH444_PREDICTIVE",
            "PROFILE_AVC_HIGH444_INTRA",
            "PROFILE_AVC_CAVLC444",
            "PROFILE_VP9_0",
            "PROFILE_VP9_1",
            "PROFILE_VP9_2",
            "PROFILE_VP9_3",
            "PROFILE_HEVC_MAIN",
            "PROFILE_HEVC_MAIN_10",
            "PROFILE_HEVC_MAIN_STILL_PICTURE",
            "PROFILE_HEVC_REXT",
            "PROFILE_DOVI_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "(1 << 8) constrained mode set bit",
            "(1 << 11) intra mode set bit",
            "",
            "PROFILE_AVC_CONSTRAINED_BASELINE = PROFILE_AVC_BASELINE | PROFILE_AVC_CONSTRAINED",
            "",
            "",
            "",
            "",
            "PROFILE_AVC_HIGH10_INTRA = PROFILE_AVC_HIGH10 | PROFILE_AVC_INTRA",
            "",
            "PROFILE_AVC_HIGH422_INTRA = PROFILE_AVC_HIGH422 | PROFILE_AVC_INTRA",
            "",
            "",
            "PROFILE_AVC_HIGH444_INTRA = PROFILE_AVC_HIGH444 | PROFILE_AVC_INTRA",
            "",
            "Since profile IDs might collide from different codecs, the profile IDs listed below are not identical to the numeric numbers defined in the spec due to collision. Next Profile ID: 10008 PROFILES for VP9. 0",
            "1",
            "2",
            "3",
            "1",
            "2",
            "3",
            "4",
            "DOVI Profile 5 can only be played as Dolby Vision so it has its own Profile."
          ],
          "type": "string"
        },
        "sampleRate": {
          "description": "audio sample rate",
          "format": "int64",
          "type": "string"
        },
        "sampleSize": {
          "description": "Number of meaningful bits per decoded audio sample. This is an implicit conceptual meaning. This is *NOT* the same as ffmpeg's internal sample format that is used when actually decoding with ffmpeg.",
          "format": "int32",
          "type": "integer"
        },
        "startTimestamp": {
          "description": "Start/end timestamps of audio in ms.",
          "format": "int64",
          "type": "string"
        },
        "streamCodecTag": {
          "format": "int64",
          "type": "string"
        },
        "streamIndex": {
          "description": "Index of the stream in the file. it is 0 based.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoDataStream": {
      "description": "Data streams refer to additional data separate from audio and video streams For example: camera motion metadata (see http://go/wally-format) Available tags: 4+",
      "id": "VideoVideoStreamInfoDataStream",
      "properties": {
        "codecFourcc": {
          "type": "string"
        },
        "codecId": {
          "description": "Codec information",
          "enum": [
            "CODEC_ID_NONE",
            "CODEC_ID_MPEG1VIDEO",
            "CODEC_ID_MPEG2VIDEO",
            "CODEC_ID_MPEG2VIDEO_XVMC",
            "CODEC_ID_H261",
            "CODEC_ID_H263",
            "CODEC_ID_RV10",
            "CODEC_ID_RV20",
            "CODEC_ID_MJPEG",
            "CODEC_ID_MJPEGB",
            "CODEC_ID_LJPEG",
            "CODEC_ID_SP5X",
            "CODEC_ID_JPEGLS",
            "CODEC_ID_MPEG4",
            "CODEC_ID_RAWVIDEO",
            "CODEC_ID_MSMPEG4V1",
            "CODEC_ID_MSMPEG4V2",
            "CODEC_ID_MSMPEG4V3",
            "CODEC_ID_WMV1",
            "CODEC_ID_WMV2",
            "CODEC_ID_H263P",
            "CODEC_ID_H263I",
            "CODEC_ID_FLV1",
            "CODEC_ID_SVQ1",
            "CODEC_ID_SVQ3",
            "CODEC_ID_DVVIDEO",
            "CODEC_ID_HUFFYUV",
            "CODEC_ID_CYUV",
            "CODEC_ID_H264",
            "CODEC_ID_INDEO3",
            "CODEC_ID_VP3",
            "CODEC_ID_THEORA",
            "CODEC_ID_ASV1",
            "CODEC_ID_ASV2",
            "CODEC_ID_FFV1",
            "CODEC_ID_4XM",
            "CODEC_ID_VCR1",
            "CODEC_ID_CLJR",
            "CODEC_ID_MDEC",
            "CODEC_ID_ROQ",
            "CODEC_ID_INTERPLAY_VIDEO",
            "CODEC_ID_XAN_WC3",
            "CODEC_ID_XAN_WC4",
            "CODEC_ID_RPZA",
            "CODEC_ID_CINEPAK",
            "CODEC_ID_WS_VQA",
            "CODEC_ID_MSRLE",
            "CODEC_ID_MSVIDEO1",
            "CODEC_ID_IDCIN",
            "CODEC_ID_8BPS",
            "CODEC_ID_SMC",
            "CODEC_ID_FLIC",
            "CODEC_ID_TRUEMOTION1",
            "CODEC_ID_VMDVIDEO",
            "CODEC_ID_MSZH",
            "CODEC_ID_ZLIB",
            "CODEC_ID_QTRLE",
            "CODEC_ID_SNOW",
            "CODEC_ID_TSCC",
            "CODEC_ID_ULTI",
            "CODEC_ID_QDRAW",
            "CODEC_ID_VIXL",
            "CODEC_ID_QPEG",
            "CODEC_ID_XVID",
            "CODEC_ID_PNG",
            "CODEC_ID_PPM",
            "CODEC_ID_PBM",
            "CODEC_ID_PGM",
            "CODEC_ID_PGMYUV",
            "CODEC_ID_PAM",
            "CODEC_ID_FFVHUFF",
            "CODEC_ID_RV30",
            "CODEC_ID_RV40",
            "CODEC_ID_VC1",
            "CODEC_ID_WMV3",
            "CODEC_ID_LOCO",
            "CODEC_ID_WNV1",
            "CODEC_ID_AASC",
            "CODEC_ID_INDEO2",
            "CODEC_ID_FRAPS",
            "CODEC_ID_TRUEMOTION2",
            "CODEC_ID_BMP",
            "CODEC_ID_CSCD",
            "CODEC_ID_MMVIDEO",
            "CODEC_ID_ZMBV",
            "CODEC_ID_AVS",
            "CODEC_ID_SMACKVIDEO",
            "CODEC_ID_NUV",
            "CODEC_ID_KMVC",
            "CODEC_ID_FLASHSV",
            "CODEC_ID_CAVS",
            "CODEC_ID_JPEG2000",
            "CODEC_ID_VMNC",
            "CODEC_ID_VP5",
            "CODEC_ID_VP6",
            "CODEC_ID_VP6F",
            "CODEC_ID_TARGA",
            "CODEC_ID_DSICINVIDEO",
            "CODEC_ID_TIERTEXSEQVIDEO",
            "CODEC_ID_TIFF",
            "CODEC_ID_GIF",
            "CODEC_ID_FFH264",
            "CODEC_ID_DXA",
            "CODEC_ID_DNXHD",
            "CODEC_ID_THP",
            "CODEC_ID_SGI",
            "CODEC_ID_C93",
            "CODEC_ID_BETHSOFTVID",
            "CODEC_ID_PTX",
            "CODEC_ID_TXD",
            "CODEC_ID_VP6A",
            "CODEC_ID_AMV",
            "CODEC_ID_VB",
            "CODEC_ID_PCX",
            "CODEC_ID_SUNRAST",
            "CODEC_ID_INDEO4",
            "CODEC_ID_INDEO5",
            "CODEC_ID_MIMIC",
            "CODEC_ID_RL2",
            "CODEC_ID_8SVX_EXP",
            "CODEC_ID_8SVX_FIB",
            "CODEC_ID_ESCAPE124",
            "CODEC_ID_DIRAC",
            "CODEC_ID_BFI",
            "CODEC_ID_CMV",
            "CODEC_ID_MOTIONPIXELS",
            "CODEC_ID_TGV",
            "CODEC_ID_TGQ",
            "CODEC_ID_TQI",
            "CODEC_ID_AURA",
            "CODEC_ID_AURA2",
            "CODEC_ID_V210X",
            "CODEC_ID_TMV",
            "CODEC_ID_V210",
            "CODEC_ID_DPX",
            "CODEC_ID_MAD",
            "CODEC_ID_FRWU",
            "CODEC_ID_VP8",
            "CODEC_ID_APPLE_PRORES_NQ",
            "CODEC_ID_APPLE_PRORES_HQ",
            "CODEC_ID_FLASHSV2",
            "CODEC_ID_CDGRAPHICS",
            "CODEC_ID_R210",
            "CODEC_ID_ANM",
            "CODEC_ID_BINKVIDEO",
            "CODEC_ID_IFF_ILBM",
            "CODEC_ID_IFF_BYTERUN1",
            "CODEC_ID_KGV1",
            "CODEC_ID_YOP",
            "CODEC_ID_PICTOR",
            "CODEC_ID_APPLE_PRORES_LT",
            "CODEC_ID_APPLE_PRORES_PROXY",
            "CODEC_ID_APPLE_PRORES_4444",
            "CODEC_ID_APPLE_PIXLET",
            "CODEC_ID_G2M",
            "CODEC_ID_PRORES",
            "CODEC_ID_ANSI",
            "CODEC_ID_A64_MULTI",
            "CODEC_ID_A64_MULTI5",
            "CODEC_ID_R10K",
            "CODEC_ID_MXPEG",
            "CODEC_ID_LAGARITH",
            "CODEC_ID_JV",
            "CODEC_ID_DFA",
            "CODEC_ID_WMV3IMAGE",
            "CODEC_ID_VC1IMAGE",
            "CODEC_ID_UTVIDEO",
            "CODEC_ID_BMV_VIDEO",
            "CODEC_ID_VBLE",
            "CODEC_ID_DXTORY",
            "CODEC_ID_V410",
            "CODEC_ID_XWD",
            "CODEC_ID_CDXL",
            "CODEC_ID_XBM",
            "CODEC_ID_ZEROCODEC",
            "CODEC_ID_MSS1",
            "CODEC_ID_MSA1",
            "CODEC_ID_TSCC2",
            "CODEC_ID_MTS2",
            "CODEC_ID_CLLC",
            "CODEC_ID_MSS2",
            "CODEC_ID_Y41P",
            "CODEC_ID_ESCAPE130",
            "CODEC_ID_EXR",
            "CODEC_ID_AVRP",
            "CODEC_ID_AVUI",
            "CODEC_ID_AYUV",
            "CODEC_ID_V308",
            "CODEC_ID_V408",
            "CODEC_ID_YUV4",
            "CODEC_ID_SANM",
            "CODEC_ID_PAF_VIDEO",
            "CODEC_ID_AVRN",
            "CODEC_ID_CPIA",
            "CODEC_ID_VP9",
            "CODEC_ID_H265",
            "CODEC_ID_CFHD",
            "CODEC_ID_AV1",
            "CODEC_ID_AIC",
            "CODEC_ID_ALIAS_PIX",
            "CODEC_ID_APNG",
            "CODEC_ID_BRENDER_PIX",
            "CODEC_ID_CLEARVIDEO",
            "CODEC_ID_DDS",
            "CODEC_ID_DXV",
            "CODEC_ID_FIC",
            "CODEC_ID_FITS",
            "CODEC_ID_FMVC",
            "CODEC_ID_GDV",
            "CODEC_ID_HAP",
            "CODEC_ID_HNM4_VIDEO",
            "CODEC_ID_HQ_HQA",
            "CODEC_ID_HQX",
            "CODEC_ID_M101",
            "CODEC_ID_MAGICYUV",
            "CODEC_ID_MSCC",
            "CODEC_ID_MVC1",
            "CODEC_ID_MVC2",
            "CODEC_ID_PIXLET",
            "CODEC_ID_PSD",
            "CODEC_ID_RSCC",
            "CODEC_ID_SCPR",
            "CODEC_ID_SCREENPRESSO",
            "CODEC_ID_SGIRLE",
            "CODEC_ID_SHEERVIDEO",
            "CODEC_ID_SMVJPEG",
            "CODEC_ID_SPEEDHQ",
            "CODEC_ID_SRGC",
            "CODEC_ID_TARGA_Y216",
            "CODEC_ID_TDSC",
            "CODEC_ID_TRUEMOTION2RT",
            "CODEC_ID_VP7",
            "CODEC_ID_BITPACKED",
            "CODEC_ID_WEBP",
            "CODEC_ID_XFACE",
            "CODEC_ID_XPM",
            "CODEC_ID_YLC",
            "CODEC_ID_012V",
            "CODEC_ID_AVS2",
            "CODEC_ID_IMM4",
            "CODEC_ID_MWSC",
            "CODEC_ID_PROSUMER",
            "CODEC_ID_RASC",
            "CODEC_ID_WCMV",
            "CODEC_ID_UNKNOWN",
            "CODEC_ID_PCM_S16LE",
            "CODEC_ID_PCM_S16BE",
            "CODEC_ID_PCM_U16LE",
            "CODEC_ID_PCM_U16BE",
            "CODEC_ID_PCM_S8",
            "CODEC_ID_PCM_U8",
            "CODEC_ID_PCM_MULAW",
            "CODEC_ID_PCM_ALAW",
            "CODEC_ID_PCM_S32LE",
            "CODEC_ID_PCM_S32BE",
            "CODEC_ID_PCM_U32LE",
            "CODEC_ID_PCM_U32BE",
            "CODEC_ID_PCM_S24LE",
            "CODEC_ID_PCM_S24BE",
            "CODEC_ID_PCM_U24LE",
            "CODEC_ID_PCM_U24BE",
            "CODEC_ID_PCM_S24DAUD",
            "CODEC_ID_PCM_ZORK",
            "CODEC_ID_PCM_S16LE_PLANAR",
            "CODEC_ID_PCM_DVD",
            "CODEC_ID_PCM_F32BE",
            "CODEC_ID_PCM_F32LE",
            "CODEC_ID_PCM_F64BE",
            "CODEC_ID_PCM_F64LE",
            "CODEC_ID_PCM_BLURAY",
            "CODEC_ID_PCM_LXF",
            "CODEC_ID_S302M",
            "CODEC_ID_PCM_S8_PLANAR",
            "CODEC_ID_PCM_S24LE_PLANAR",
            "CODEC_ID_PCM_S32LE_PLANAR",
            "CODEC_ID_PCM_S16BE_PLANAR",
            "CODEC_ID_PCM_S64LE",
            "CODEC_ID_PCM_S64BE",
            "CODEC_ID_PCM_F16LE",
            "CODEC_ID_PCM_F24LE",
            "CODEC_ID_ADPCM_IMA_QT",
            "CODEC_ID_ADPCM_IMA_WAV",
            "CODEC_ID_ADPCM_IMA_DK3",
            "CODEC_ID_ADPCM_IMA_DK4",
            "CODEC_ID_ADPCM_IMA_WS",
            "CODEC_ID_ADPCM_IMA_SMJPEG",
            "CODEC_ID_ADPCM_MS",
            "CODEC_ID_ADPCM_4XM",
            "CODEC_ID_ADPCM_XA",
            "CODEC_ID_ADPCM_ADX",
            "CODEC_ID_ADPCM_EA",
            "CODEC_ID_ADPCM_G726",
            "CODEC_ID_ADPCM_CT",
            "CODEC_ID_ADPCM_SWF",
            "CODEC_ID_ADPCM_YAMAHA",
            "CODEC_ID_ADPCM_SBPRO_4",
            "CODEC_ID_ADPCM_SBPRO_3",
            "CODEC_ID_ADPCM_SBPRO_2",
            "CODEC_ID_ADPCM_THP",
            "CODEC_ID_ADPCM_IMA_AMV",
            "CODEC_ID_ADPCM_EA_R1",
            "CODEC_ID_ADPCM_EA_R3",
            "CODEC_ID_ADPCM_EA_R2",
            "CODEC_ID_ADPCM_IMA_EA_SEAD",
            "CODEC_ID_ADPCM_IMA_EA_EACS",
            "CODEC_ID_ADPCM_EA_XAS",
            "CODEC_ID_ADPCM_EA_MAXIS_XA",
            "CODEC_ID_ADPCM_IMA_ISS",
            "CODEC_ID_ADPCM_G722",
            "CODEC_ID_ADPCM_IMA_APC",
            "CODEC_ID_VIMA",
            "CODEC_ID_ADPCM_AFC",
            "CODEC_ID_ADPCM_IMA_OKI",
            "CODEC_ID_ADPCM_DTK",
            "CODEC_ID_ADPCM_IMA_RAD",
            "CODEC_ID_ADPCM_G726LE",
            "CODEC_ID_ADPCM_THP_LE",
            "CODEC_ID_ADPCM_PSX",
            "CODEC_ID_ADPCM_AICA",
            "CODEC_ID_ADPCM_IMA_DAT4",
            "CODEC_ID_ADPCM_MTAF",
            "CODEC_ID_ADPCM_VIMA",
            "CODEC_ID_AMR_NB",
            "CODEC_ID_AMR_WB",
            "CODEC_ID_RA_144",
            "CODEC_ID_RA_288",
            "CODEC_ID_ROQ_DPCM",
            "CODEC_ID_INTERPLAY_DPCM",
            "CODEC_ID_XAN_DPCM",
            "CODEC_ID_SOL_DPCM",
            "CODEC_ID_GREMLIN_DPCM",
            "CODEC_ID_SDX2_DPCM",
            "CODEC_ID_MP2",
            "CODEC_ID_MP3",
            "CODEC_ID_AAC",
            "CODEC_ID_MPEG4AAC_DEPRECATED",
            "CODEC_ID_AC3",
            "CODEC_ID_DTS",
            "CODEC_ID_VORBIS",
            "CODEC_ID_DVAUDIO",
            "CODEC_ID_WMAV1",
            "CODEC_ID_WMAV2",
            "CODEC_ID_MACE3",
            "CODEC_ID_MACE6",
            "CODEC_ID_VMDAUDIO",
            "CODEC_ID_SONIC",
            "CODEC_ID_SONIC_LS",
            "CODEC_ID_FLAC",
            "CODEC_ID_MP3ADU",
            "CODEC_ID_MP3ON4",
            "CODEC_ID_SHORTEN",
            "CODEC_ID_ALAC",
            "CODEC_ID_WESTWOOD_SND1",
            "CODEC_ID_GSM",
            "CODEC_ID_QDM2",
            "CODEC_ID_COOK",
            "CODEC_ID_TRUESPEECH",
            "CODEC_ID_TTA",
            "CODEC_ID_SMACKAUDIO",
            "CODEC_ID_QCELP",
            "CODEC_ID_WAVPACK",
            "CODEC_ID_DSICINAUDIO",
            "CODEC_ID_ASAO",
            "CODEC_ID_NELLYMOSER",
            "CODEC_ID_WMAVOICE",
            "CODEC_ID_WMAPRO",
            "CODEC_ID_WMALOSSLESS",
            "CODEC_ID_IMC",
            "CODEC_ID_MUSEPACK7",
            "CODEC_ID_MLP",
            "CODEC_ID_GSM_MS",
            "CODEC_ID_ATRAC3",
            "CODEC_ID_VOXWARE",
            "CODEC_ID_APE",
            "CODEC_ID_MUSEPACK8",
            "CODEC_ID_SPEEX",
            "CODEC_ID_ATRAC3P",
            "CODEC_ID_EAC3",
            "CODEC_ID_SIPR",
            "CODEC_ID_MP1",
            "CODEC_ID_TWINVQ",
            "CODEC_ID_TRUEHD",
            "CODEC_ID_MP4ALS",
            "CODEC_ID_ATRAC1",
            "CODEC_ID_BINKAUDIO_RDFT",
            "CODEC_ID_BINKAUDIO_DCT",
            "CODEC_ID_AAC_LATM",
            "CODEC_ID_QDMC",
            "CODEC_ID_CELT",
            "CODEC_ID_G723_1",
            "CODEC_ID_G729",
            "CODEC_ID_BMV_AUDIO",
            "CODEC_ID_RALF",
            "CODEC_ID_IAC",
            "CODEC_ID_ILBC",
            "CODEC_ID_FFWAVESYNTH",
            "CODEC_ID_8SVX_RAW",
            "CODEC_ID_PAF_AUDIO",
            "CODEC_ID_OPUS",
            "CODEC_ID_ATRAC3AL",
            "CODEC_ID_ATRAC3PAL",
            "CODEC_ID_DOLBY_E",
            "CODEC_ID_DSD_LSBF",
            "CODEC_ID_DSD_MSBF",
            "CODEC_ID_DSD_LSBF_PLANAR",
            "CODEC_ID_DSD_MSBF_PLANAR",
            "CODEC_ID_DSS_SP",
            "CODEC_ID_DST",
            "CODEC_ID_EVRC",
            "CODEC_ID_INTERPLAY_ACM",
            "CODEC_ID_METASOUND",
            "CODEC_ID_ON2AVC",
            "CODEC_ID_TAK",
            "CODEC_ID_XMA1",
            "CODEC_ID_XMA2",
            "CODEC_ID_COMFORT_NOISE",
            "CODEC_ID_APTX",
            "CODEC_ID_APTX_HD",
            "CODEC_ID_SBC",
            "CODEC_ID_ATRAC9",
            "CODEC_ID_CODEC2",
            "CODEC_ID_OGGTHEORA_DEPRECATED",
            "CODEC_ID_DVD_SUBTITLE",
            "CODEC_ID_DVB_SUBTITLE",
            "CODEC_ID_TEXT",
            "CODEC_ID_XSUB",
            "CODEC_ID_SSA",
            "CODEC_ID_MOV_TEXT",
            "CODEC_ID_HDMV_PGS_SUBTITLE",
            "CODEC_ID_DVB_TELETEXT",
            "CODEC_ID_SRT",
            "CODEC_ID_MICRODVD",
            "CODEC_ID_EIA_608",
            "CODEC_ID_JACOSUB",
            "CODEC_ID_SAMI",
            "CODEC_ID_REALTEXT",
            "CODEC_ID_SUBVIEWER",
            "CODEC_ID_SUBRIP",
            "CODEC_ID_WEBVTT",
            "CODEC_ID_ASS",
            "CODEC_ID_MPL2",
            "CODEC_ID_PJS",
            "CODEC_ID_STL",
            "CODEC_ID_SUBVIEWER1",
            "CODEC_ID_VPLAYER",
            "CODEC_ID_TTML",
            "CODEC_ID_TTF",
            "CODEC_ID_BINTEXT",
            "CODEC_ID_XBIN",
            "CODEC_ID_IDF",
            "CODEC_ID_OTF",
            "CODEC_ID_PROBE",
            "CODEC_ID_MPEG2TS",
            "CODEC_ID_MPEG4SYSTEMS",
            "CODEC_ID_FFMETADATA",
            "CODEC_ID_FFMPEG_OUT_OF_SYNC",
            "CODEC_ID_WRAPPED_AVFRAME",
            "CODEC_ID_CAMM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_MPEG4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "moved to audio codecs section in upstream",
            "moved to audio codecs section in upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various pcm \"codecs\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various adpcm codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AMR",
            "",
            "RealAudio codecs",
            "",
            "various DPCM codecs",
            "",
            "",
            "",
            "",
            "",
            "audio codecs",
            "preferred ID for MPEG Audio layer 1, 2 or 3",
            "",
            "Use CODEC_ID_AAC instead",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Not in ffmpeg as of rev 20544.",
            "Start of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Removed in ffmpeg rev 5877.",
            "subtitle codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "other specific kind of codecs (generally used for attachments)",
            "",
            "",
            "",
            "",
            "< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it",
            "_FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat)",
            "_FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat)",
            "Dummy codec for streams containing only metadata information.",
            "this one indicates an error in the mapping between this enum and libavcodec's",
            "AVFrames wrapped in AVPacket",
            "Camera motion metadata (http://go/wally-format)"
          ],
          "type": "string"
        },
        "streamCodecTag": {
          "format": "int64",
          "type": "string"
        },
        "streamIndex": {
          "description": "Index of the stream in the file",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoMetadata": {
      "id": "VideoVideoStreamInfoMetadata",
      "properties": {
        "luts": {
          "$ref": "VideoVideoStreamInfoMetadataLutAttachments"
        },
        "videoFpa": {
          "$ref": "VideoFileFramePackingArrangement",
          "description": "Information on Frame Packing arrangement"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoMetadataLutAttachments": {
      "description": "An attached 3D look up table",
      "id": "VideoVideoStreamInfoMetadataLutAttachments",
      "properties": {
        "lut": {
          "items": {
            "$ref": "VideoVideoStreamInfoMetadataLutAttachmentsLut3D"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoMetadataLutAttachmentsLut3D": {
      "description": "Description and encoding of a 3d lut.",
      "id": "VideoVideoStreamInfoMetadataLutAttachmentsLut3D",
      "properties": {
        "data": {
          "description": "Lut data, sanitized and encoded in google's binary coded form of 3D look-up tables.",
          "format": "byte",
          "type": "string"
        },
        "fileName": {
          "description": "Original file name of the lut (present in the original file)",
          "type": "string"
        },
        "size": {
          "description": "The size (in each dimension) of the lut. For a 3D cube of size NxNxN, this will be N. If the value is -1, then the file was determined to be invalid. This is useful for logging files where the input could not be parsed, and is useful for to indicate info of the 3D lut without having to decode/inspect the binary data.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoTimedTextStream": {
      "description": "Timed text streams refer to the streams that are separated from audio and video streams. Closed caption streams embedded in video streams (e.g. MPEG-2 - Line 21) do not belong here.",
      "id": "VideoVideoStreamInfoTimedTextStream",
      "properties": {
        "codecId": {
          "description": "Codec information.",
          "enum": [
            "CODEC_ID_NONE",
            "CODEC_ID_MPEG1VIDEO",
            "CODEC_ID_MPEG2VIDEO",
            "CODEC_ID_MPEG2VIDEO_XVMC",
            "CODEC_ID_H261",
            "CODEC_ID_H263",
            "CODEC_ID_RV10",
            "CODEC_ID_RV20",
            "CODEC_ID_MJPEG",
            "CODEC_ID_MJPEGB",
            "CODEC_ID_LJPEG",
            "CODEC_ID_SP5X",
            "CODEC_ID_JPEGLS",
            "CODEC_ID_MPEG4",
            "CODEC_ID_RAWVIDEO",
            "CODEC_ID_MSMPEG4V1",
            "CODEC_ID_MSMPEG4V2",
            "CODEC_ID_MSMPEG4V3",
            "CODEC_ID_WMV1",
            "CODEC_ID_WMV2",
            "CODEC_ID_H263P",
            "CODEC_ID_H263I",
            "CODEC_ID_FLV1",
            "CODEC_ID_SVQ1",
            "CODEC_ID_SVQ3",
            "CODEC_ID_DVVIDEO",
            "CODEC_ID_HUFFYUV",
            "CODEC_ID_CYUV",
            "CODEC_ID_H264",
            "CODEC_ID_INDEO3",
            "CODEC_ID_VP3",
            "CODEC_ID_THEORA",
            "CODEC_ID_ASV1",
            "CODEC_ID_ASV2",
            "CODEC_ID_FFV1",
            "CODEC_ID_4XM",
            "CODEC_ID_VCR1",
            "CODEC_ID_CLJR",
            "CODEC_ID_MDEC",
            "CODEC_ID_ROQ",
            "CODEC_ID_INTERPLAY_VIDEO",
            "CODEC_ID_XAN_WC3",
            "CODEC_ID_XAN_WC4",
            "CODEC_ID_RPZA",
            "CODEC_ID_CINEPAK",
            "CODEC_ID_WS_VQA",
            "CODEC_ID_MSRLE",
            "CODEC_ID_MSVIDEO1",
            "CODEC_ID_IDCIN",
            "CODEC_ID_8BPS",
            "CODEC_ID_SMC",
            "CODEC_ID_FLIC",
            "CODEC_ID_TRUEMOTION1",
            "CODEC_ID_VMDVIDEO",
            "CODEC_ID_MSZH",
            "CODEC_ID_ZLIB",
            "CODEC_ID_QTRLE",
            "CODEC_ID_SNOW",
            "CODEC_ID_TSCC",
            "CODEC_ID_ULTI",
            "CODEC_ID_QDRAW",
            "CODEC_ID_VIXL",
            "CODEC_ID_QPEG",
            "CODEC_ID_XVID",
            "CODEC_ID_PNG",
            "CODEC_ID_PPM",
            "CODEC_ID_PBM",
            "CODEC_ID_PGM",
            "CODEC_ID_PGMYUV",
            "CODEC_ID_PAM",
            "CODEC_ID_FFVHUFF",
            "CODEC_ID_RV30",
            "CODEC_ID_RV40",
            "CODEC_ID_VC1",
            "CODEC_ID_WMV3",
            "CODEC_ID_LOCO",
            "CODEC_ID_WNV1",
            "CODEC_ID_AASC",
            "CODEC_ID_INDEO2",
            "CODEC_ID_FRAPS",
            "CODEC_ID_TRUEMOTION2",
            "CODEC_ID_BMP",
            "CODEC_ID_CSCD",
            "CODEC_ID_MMVIDEO",
            "CODEC_ID_ZMBV",
            "CODEC_ID_AVS",
            "CODEC_ID_SMACKVIDEO",
            "CODEC_ID_NUV",
            "CODEC_ID_KMVC",
            "CODEC_ID_FLASHSV",
            "CODEC_ID_CAVS",
            "CODEC_ID_JPEG2000",
            "CODEC_ID_VMNC",
            "CODEC_ID_VP5",
            "CODEC_ID_VP6",
            "CODEC_ID_VP6F",
            "CODEC_ID_TARGA",
            "CODEC_ID_DSICINVIDEO",
            "CODEC_ID_TIERTEXSEQVIDEO",
            "CODEC_ID_TIFF",
            "CODEC_ID_GIF",
            "CODEC_ID_FFH264",
            "CODEC_ID_DXA",
            "CODEC_ID_DNXHD",
            "CODEC_ID_THP",
            "CODEC_ID_SGI",
            "CODEC_ID_C93",
            "CODEC_ID_BETHSOFTVID",
            "CODEC_ID_PTX",
            "CODEC_ID_TXD",
            "CODEC_ID_VP6A",
            "CODEC_ID_AMV",
            "CODEC_ID_VB",
            "CODEC_ID_PCX",
            "CODEC_ID_SUNRAST",
            "CODEC_ID_INDEO4",
            "CODEC_ID_INDEO5",
            "CODEC_ID_MIMIC",
            "CODEC_ID_RL2",
            "CODEC_ID_8SVX_EXP",
            "CODEC_ID_8SVX_FIB",
            "CODEC_ID_ESCAPE124",
            "CODEC_ID_DIRAC",
            "CODEC_ID_BFI",
            "CODEC_ID_CMV",
            "CODEC_ID_MOTIONPIXELS",
            "CODEC_ID_TGV",
            "CODEC_ID_TGQ",
            "CODEC_ID_TQI",
            "CODEC_ID_AURA",
            "CODEC_ID_AURA2",
            "CODEC_ID_V210X",
            "CODEC_ID_TMV",
            "CODEC_ID_V210",
            "CODEC_ID_DPX",
            "CODEC_ID_MAD",
            "CODEC_ID_FRWU",
            "CODEC_ID_VP8",
            "CODEC_ID_APPLE_PRORES_NQ",
            "CODEC_ID_APPLE_PRORES_HQ",
            "CODEC_ID_FLASHSV2",
            "CODEC_ID_CDGRAPHICS",
            "CODEC_ID_R210",
            "CODEC_ID_ANM",
            "CODEC_ID_BINKVIDEO",
            "CODEC_ID_IFF_ILBM",
            "CODEC_ID_IFF_BYTERUN1",
            "CODEC_ID_KGV1",
            "CODEC_ID_YOP",
            "CODEC_ID_PICTOR",
            "CODEC_ID_APPLE_PRORES_LT",
            "CODEC_ID_APPLE_PRORES_PROXY",
            "CODEC_ID_APPLE_PRORES_4444",
            "CODEC_ID_APPLE_PIXLET",
            "CODEC_ID_G2M",
            "CODEC_ID_PRORES",
            "CODEC_ID_ANSI",
            "CODEC_ID_A64_MULTI",
            "CODEC_ID_A64_MULTI5",
            "CODEC_ID_R10K",
            "CODEC_ID_MXPEG",
            "CODEC_ID_LAGARITH",
            "CODEC_ID_JV",
            "CODEC_ID_DFA",
            "CODEC_ID_WMV3IMAGE",
            "CODEC_ID_VC1IMAGE",
            "CODEC_ID_UTVIDEO",
            "CODEC_ID_BMV_VIDEO",
            "CODEC_ID_VBLE",
            "CODEC_ID_DXTORY",
            "CODEC_ID_V410",
            "CODEC_ID_XWD",
            "CODEC_ID_CDXL",
            "CODEC_ID_XBM",
            "CODEC_ID_ZEROCODEC",
            "CODEC_ID_MSS1",
            "CODEC_ID_MSA1",
            "CODEC_ID_TSCC2",
            "CODEC_ID_MTS2",
            "CODEC_ID_CLLC",
            "CODEC_ID_MSS2",
            "CODEC_ID_Y41P",
            "CODEC_ID_ESCAPE130",
            "CODEC_ID_EXR",
            "CODEC_ID_AVRP",
            "CODEC_ID_AVUI",
            "CODEC_ID_AYUV",
            "CODEC_ID_V308",
            "CODEC_ID_V408",
            "CODEC_ID_YUV4",
            "CODEC_ID_SANM",
            "CODEC_ID_PAF_VIDEO",
            "CODEC_ID_AVRN",
            "CODEC_ID_CPIA",
            "CODEC_ID_VP9",
            "CODEC_ID_H265",
            "CODEC_ID_CFHD",
            "CODEC_ID_AV1",
            "CODEC_ID_AIC",
            "CODEC_ID_ALIAS_PIX",
            "CODEC_ID_APNG",
            "CODEC_ID_BRENDER_PIX",
            "CODEC_ID_CLEARVIDEO",
            "CODEC_ID_DDS",
            "CODEC_ID_DXV",
            "CODEC_ID_FIC",
            "CODEC_ID_FITS",
            "CODEC_ID_FMVC",
            "CODEC_ID_GDV",
            "CODEC_ID_HAP",
            "CODEC_ID_HNM4_VIDEO",
            "CODEC_ID_HQ_HQA",
            "CODEC_ID_HQX",
            "CODEC_ID_M101",
            "CODEC_ID_MAGICYUV",
            "CODEC_ID_MSCC",
            "CODEC_ID_MVC1",
            "CODEC_ID_MVC2",
            "CODEC_ID_PIXLET",
            "CODEC_ID_PSD",
            "CODEC_ID_RSCC",
            "CODEC_ID_SCPR",
            "CODEC_ID_SCREENPRESSO",
            "CODEC_ID_SGIRLE",
            "CODEC_ID_SHEERVIDEO",
            "CODEC_ID_SMVJPEG",
            "CODEC_ID_SPEEDHQ",
            "CODEC_ID_SRGC",
            "CODEC_ID_TARGA_Y216",
            "CODEC_ID_TDSC",
            "CODEC_ID_TRUEMOTION2RT",
            "CODEC_ID_VP7",
            "CODEC_ID_BITPACKED",
            "CODEC_ID_WEBP",
            "CODEC_ID_XFACE",
            "CODEC_ID_XPM",
            "CODEC_ID_YLC",
            "CODEC_ID_012V",
            "CODEC_ID_AVS2",
            "CODEC_ID_IMM4",
            "CODEC_ID_MWSC",
            "CODEC_ID_PROSUMER",
            "CODEC_ID_RASC",
            "CODEC_ID_WCMV",
            "CODEC_ID_UNKNOWN",
            "CODEC_ID_PCM_S16LE",
            "CODEC_ID_PCM_S16BE",
            "CODEC_ID_PCM_U16LE",
            "CODEC_ID_PCM_U16BE",
            "CODEC_ID_PCM_S8",
            "CODEC_ID_PCM_U8",
            "CODEC_ID_PCM_MULAW",
            "CODEC_ID_PCM_ALAW",
            "CODEC_ID_PCM_S32LE",
            "CODEC_ID_PCM_S32BE",
            "CODEC_ID_PCM_U32LE",
            "CODEC_ID_PCM_U32BE",
            "CODEC_ID_PCM_S24LE",
            "CODEC_ID_PCM_S24BE",
            "CODEC_ID_PCM_U24LE",
            "CODEC_ID_PCM_U24BE",
            "CODEC_ID_PCM_S24DAUD",
            "CODEC_ID_PCM_ZORK",
            "CODEC_ID_PCM_S16LE_PLANAR",
            "CODEC_ID_PCM_DVD",
            "CODEC_ID_PCM_F32BE",
            "CODEC_ID_PCM_F32LE",
            "CODEC_ID_PCM_F64BE",
            "CODEC_ID_PCM_F64LE",
            "CODEC_ID_PCM_BLURAY",
            "CODEC_ID_PCM_LXF",
            "CODEC_ID_S302M",
            "CODEC_ID_PCM_S8_PLANAR",
            "CODEC_ID_PCM_S24LE_PLANAR",
            "CODEC_ID_PCM_S32LE_PLANAR",
            "CODEC_ID_PCM_S16BE_PLANAR",
            "CODEC_ID_PCM_S64LE",
            "CODEC_ID_PCM_S64BE",
            "CODEC_ID_PCM_F16LE",
            "CODEC_ID_PCM_F24LE",
            "CODEC_ID_ADPCM_IMA_QT",
            "CODEC_ID_ADPCM_IMA_WAV",
            "CODEC_ID_ADPCM_IMA_DK3",
            "CODEC_ID_ADPCM_IMA_DK4",
            "CODEC_ID_ADPCM_IMA_WS",
            "CODEC_ID_ADPCM_IMA_SMJPEG",
            "CODEC_ID_ADPCM_MS",
            "CODEC_ID_ADPCM_4XM",
            "CODEC_ID_ADPCM_XA",
            "CODEC_ID_ADPCM_ADX",
            "CODEC_ID_ADPCM_EA",
            "CODEC_ID_ADPCM_G726",
            "CODEC_ID_ADPCM_CT",
            "CODEC_ID_ADPCM_SWF",
            "CODEC_ID_ADPCM_YAMAHA",
            "CODEC_ID_ADPCM_SBPRO_4",
            "CODEC_ID_ADPCM_SBPRO_3",
            "CODEC_ID_ADPCM_SBPRO_2",
            "CODEC_ID_ADPCM_THP",
            "CODEC_ID_ADPCM_IMA_AMV",
            "CODEC_ID_ADPCM_EA_R1",
            "CODEC_ID_ADPCM_EA_R3",
            "CODEC_ID_ADPCM_EA_R2",
            "CODEC_ID_ADPCM_IMA_EA_SEAD",
            "CODEC_ID_ADPCM_IMA_EA_EACS",
            "CODEC_ID_ADPCM_EA_XAS",
            "CODEC_ID_ADPCM_EA_MAXIS_XA",
            "CODEC_ID_ADPCM_IMA_ISS",
            "CODEC_ID_ADPCM_G722",
            "CODEC_ID_ADPCM_IMA_APC",
            "CODEC_ID_VIMA",
            "CODEC_ID_ADPCM_AFC",
            "CODEC_ID_ADPCM_IMA_OKI",
            "CODEC_ID_ADPCM_DTK",
            "CODEC_ID_ADPCM_IMA_RAD",
            "CODEC_ID_ADPCM_G726LE",
            "CODEC_ID_ADPCM_THP_LE",
            "CODEC_ID_ADPCM_PSX",
            "CODEC_ID_ADPCM_AICA",
            "CODEC_ID_ADPCM_IMA_DAT4",
            "CODEC_ID_ADPCM_MTAF",
            "CODEC_ID_ADPCM_VIMA",
            "CODEC_ID_AMR_NB",
            "CODEC_ID_AMR_WB",
            "CODEC_ID_RA_144",
            "CODEC_ID_RA_288",
            "CODEC_ID_ROQ_DPCM",
            "CODEC_ID_INTERPLAY_DPCM",
            "CODEC_ID_XAN_DPCM",
            "CODEC_ID_SOL_DPCM",
            "CODEC_ID_GREMLIN_DPCM",
            "CODEC_ID_SDX2_DPCM",
            "CODEC_ID_MP2",
            "CODEC_ID_MP3",
            "CODEC_ID_AAC",
            "CODEC_ID_MPEG4AAC_DEPRECATED",
            "CODEC_ID_AC3",
            "CODEC_ID_DTS",
            "CODEC_ID_VORBIS",
            "CODEC_ID_DVAUDIO",
            "CODEC_ID_WMAV1",
            "CODEC_ID_WMAV2",
            "CODEC_ID_MACE3",
            "CODEC_ID_MACE6",
            "CODEC_ID_VMDAUDIO",
            "CODEC_ID_SONIC",
            "CODEC_ID_SONIC_LS",
            "CODEC_ID_FLAC",
            "CODEC_ID_MP3ADU",
            "CODEC_ID_MP3ON4",
            "CODEC_ID_SHORTEN",
            "CODEC_ID_ALAC",
            "CODEC_ID_WESTWOOD_SND1",
            "CODEC_ID_GSM",
            "CODEC_ID_QDM2",
            "CODEC_ID_COOK",
            "CODEC_ID_TRUESPEECH",
            "CODEC_ID_TTA",
            "CODEC_ID_SMACKAUDIO",
            "CODEC_ID_QCELP",
            "CODEC_ID_WAVPACK",
            "CODEC_ID_DSICINAUDIO",
            "CODEC_ID_ASAO",
            "CODEC_ID_NELLYMOSER",
            "CODEC_ID_WMAVOICE",
            "CODEC_ID_WMAPRO",
            "CODEC_ID_WMALOSSLESS",
            "CODEC_ID_IMC",
            "CODEC_ID_MUSEPACK7",
            "CODEC_ID_MLP",
            "CODEC_ID_GSM_MS",
            "CODEC_ID_ATRAC3",
            "CODEC_ID_VOXWARE",
            "CODEC_ID_APE",
            "CODEC_ID_MUSEPACK8",
            "CODEC_ID_SPEEX",
            "CODEC_ID_ATRAC3P",
            "CODEC_ID_EAC3",
            "CODEC_ID_SIPR",
            "CODEC_ID_MP1",
            "CODEC_ID_TWINVQ",
            "CODEC_ID_TRUEHD",
            "CODEC_ID_MP4ALS",
            "CODEC_ID_ATRAC1",
            "CODEC_ID_BINKAUDIO_RDFT",
            "CODEC_ID_BINKAUDIO_DCT",
            "CODEC_ID_AAC_LATM",
            "CODEC_ID_QDMC",
            "CODEC_ID_CELT",
            "CODEC_ID_G723_1",
            "CODEC_ID_G729",
            "CODEC_ID_BMV_AUDIO",
            "CODEC_ID_RALF",
            "CODEC_ID_IAC",
            "CODEC_ID_ILBC",
            "CODEC_ID_FFWAVESYNTH",
            "CODEC_ID_8SVX_RAW",
            "CODEC_ID_PAF_AUDIO",
            "CODEC_ID_OPUS",
            "CODEC_ID_ATRAC3AL",
            "CODEC_ID_ATRAC3PAL",
            "CODEC_ID_DOLBY_E",
            "CODEC_ID_DSD_LSBF",
            "CODEC_ID_DSD_MSBF",
            "CODEC_ID_DSD_LSBF_PLANAR",
            "CODEC_ID_DSD_MSBF_PLANAR",
            "CODEC_ID_DSS_SP",
            "CODEC_ID_DST",
            "CODEC_ID_EVRC",
            "CODEC_ID_INTERPLAY_ACM",
            "CODEC_ID_METASOUND",
            "CODEC_ID_ON2AVC",
            "CODEC_ID_TAK",
            "CODEC_ID_XMA1",
            "CODEC_ID_XMA2",
            "CODEC_ID_COMFORT_NOISE",
            "CODEC_ID_APTX",
            "CODEC_ID_APTX_HD",
            "CODEC_ID_SBC",
            "CODEC_ID_ATRAC9",
            "CODEC_ID_CODEC2",
            "CODEC_ID_OGGTHEORA_DEPRECATED",
            "CODEC_ID_DVD_SUBTITLE",
            "CODEC_ID_DVB_SUBTITLE",
            "CODEC_ID_TEXT",
            "CODEC_ID_XSUB",
            "CODEC_ID_SSA",
            "CODEC_ID_MOV_TEXT",
            "CODEC_ID_HDMV_PGS_SUBTITLE",
            "CODEC_ID_DVB_TELETEXT",
            "CODEC_ID_SRT",
            "CODEC_ID_MICRODVD",
            "CODEC_ID_EIA_608",
            "CODEC_ID_JACOSUB",
            "CODEC_ID_SAMI",
            "CODEC_ID_REALTEXT",
            "CODEC_ID_SUBVIEWER",
            "CODEC_ID_SUBRIP",
            "CODEC_ID_WEBVTT",
            "CODEC_ID_ASS",
            "CODEC_ID_MPL2",
            "CODEC_ID_PJS",
            "CODEC_ID_STL",
            "CODEC_ID_SUBVIEWER1",
            "CODEC_ID_VPLAYER",
            "CODEC_ID_TTML",
            "CODEC_ID_TTF",
            "CODEC_ID_BINTEXT",
            "CODEC_ID_XBIN",
            "CODEC_ID_IDF",
            "CODEC_ID_OTF",
            "CODEC_ID_PROBE",
            "CODEC_ID_MPEG2TS",
            "CODEC_ID_MPEG4SYSTEMS",
            "CODEC_ID_FFMETADATA",
            "CODEC_ID_FFMPEG_OUT_OF_SYNC",
            "CODEC_ID_WRAPPED_AVFRAME",
            "CODEC_ID_CAMM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_MPEG4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "moved to audio codecs section in upstream",
            "moved to audio codecs section in upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various pcm \"codecs\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various adpcm codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AMR",
            "",
            "RealAudio codecs",
            "",
            "various DPCM codecs",
            "",
            "",
            "",
            "",
            "",
            "audio codecs",
            "preferred ID for MPEG Audio layer 1, 2 or 3",
            "",
            "Use CODEC_ID_AAC instead",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Not in ffmpeg as of rev 20544.",
            "Start of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Removed in ffmpeg rev 5877.",
            "subtitle codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "other specific kind of codecs (generally used for attachments)",
            "",
            "",
            "",
            "",
            "< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it",
            "_FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat)",
            "_FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat)",
            "Dummy codec for streams containing only metadata information.",
            "this one indicates an error in the mapping between this enum and libavcodec's",
            "AVFrames wrapped in AVPacket",
            "Camera motion metadata (http://go/wally-format)"
          ],
          "type": "string"
        },
        "metadata": {
          "description": "Metadata for the stream.",
          "items": {
            "$ref": "VideoClipInfo"
          },
          "type": "array"
        },
        "streamCodecTag": {
          "format": "int64",
          "type": "string"
        },
        "streamIndex": {
          "description": "Index of the stream in the file. it is 0 based.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoVideoStream": {
      "description": "TODO(yanghu) add 25/50/75 percentiles of FPS to have a 5 number summary. Next id: 48",
      "id": "VideoVideoStreamInfoVideoStream",
      "properties": {
        "averageFps": {
          "description": "This represents the canonical frame rate of the video. This is named average_fps for historical reasons, and may not actually be the arithmetic mean. For variable frame rate videos, the algorithm may change again in future. Currently, full vsi set it with arithmetic mean, and partial vsi set it with median.",
          "format": "double",
          "type": "number"
        },
        "bitrate": {
          "description": "video bitrate in bits/s",
          "format": "int64",
          "type": "string"
        },
        "bitstreamColorInfo": {
          "$ref": "VideoFileColorInfo",
          "description": "Contains the color information obtained after inspection of the bitstream in cases where there may be inconsistencies between container and coded bitstream that are resolved in favor of the container."
        },
        "cleanAperture": {
          "$ref": "VideoVideoStreamInfoVideoStreamCleanAperture"
        },
        "clockDiscontinuityUs": {
          "description": "some container allows for a clock discontinuity. In this case, the end_timestamp may not be the correct DTS of the stream.",
          "format": "int64",
          "type": "string"
        },
        "closedCaptions": {
          "$ref": "VideoClosedCaptions"
        },
        "closedGopSize": {
          "$ref": "VideoVideoStreamInfoVideoStreamStatistics",
          "description": "closed_gop_size refers to chunkable boundaries for each specified codec and may actually contain one or more GOPs, e.g. for H.264, closed_gop_size will denote the distance (frame count) between two IDR frames."
        },
        "codecFourcc": {
          "type": "string"
        },
        "codecId": {
          "description": "Primary video codec information",
          "enum": [
            "CODEC_ID_NONE",
            "CODEC_ID_MPEG1VIDEO",
            "CODEC_ID_MPEG2VIDEO",
            "CODEC_ID_MPEG2VIDEO_XVMC",
            "CODEC_ID_H261",
            "CODEC_ID_H263",
            "CODEC_ID_RV10",
            "CODEC_ID_RV20",
            "CODEC_ID_MJPEG",
            "CODEC_ID_MJPEGB",
            "CODEC_ID_LJPEG",
            "CODEC_ID_SP5X",
            "CODEC_ID_JPEGLS",
            "CODEC_ID_MPEG4",
            "CODEC_ID_RAWVIDEO",
            "CODEC_ID_MSMPEG4V1",
            "CODEC_ID_MSMPEG4V2",
            "CODEC_ID_MSMPEG4V3",
            "CODEC_ID_WMV1",
            "CODEC_ID_WMV2",
            "CODEC_ID_H263P",
            "CODEC_ID_H263I",
            "CODEC_ID_FLV1",
            "CODEC_ID_SVQ1",
            "CODEC_ID_SVQ3",
            "CODEC_ID_DVVIDEO",
            "CODEC_ID_HUFFYUV",
            "CODEC_ID_CYUV",
            "CODEC_ID_H264",
            "CODEC_ID_INDEO3",
            "CODEC_ID_VP3",
            "CODEC_ID_THEORA",
            "CODEC_ID_ASV1",
            "CODEC_ID_ASV2",
            "CODEC_ID_FFV1",
            "CODEC_ID_4XM",
            "CODEC_ID_VCR1",
            "CODEC_ID_CLJR",
            "CODEC_ID_MDEC",
            "CODEC_ID_ROQ",
            "CODEC_ID_INTERPLAY_VIDEO",
            "CODEC_ID_XAN_WC3",
            "CODEC_ID_XAN_WC4",
            "CODEC_ID_RPZA",
            "CODEC_ID_CINEPAK",
            "CODEC_ID_WS_VQA",
            "CODEC_ID_MSRLE",
            "CODEC_ID_MSVIDEO1",
            "CODEC_ID_IDCIN",
            "CODEC_ID_8BPS",
            "CODEC_ID_SMC",
            "CODEC_ID_FLIC",
            "CODEC_ID_TRUEMOTION1",
            "CODEC_ID_VMDVIDEO",
            "CODEC_ID_MSZH",
            "CODEC_ID_ZLIB",
            "CODEC_ID_QTRLE",
            "CODEC_ID_SNOW",
            "CODEC_ID_TSCC",
            "CODEC_ID_ULTI",
            "CODEC_ID_QDRAW",
            "CODEC_ID_VIXL",
            "CODEC_ID_QPEG",
            "CODEC_ID_XVID",
            "CODEC_ID_PNG",
            "CODEC_ID_PPM",
            "CODEC_ID_PBM",
            "CODEC_ID_PGM",
            "CODEC_ID_PGMYUV",
            "CODEC_ID_PAM",
            "CODEC_ID_FFVHUFF",
            "CODEC_ID_RV30",
            "CODEC_ID_RV40",
            "CODEC_ID_VC1",
            "CODEC_ID_WMV3",
            "CODEC_ID_LOCO",
            "CODEC_ID_WNV1",
            "CODEC_ID_AASC",
            "CODEC_ID_INDEO2",
            "CODEC_ID_FRAPS",
            "CODEC_ID_TRUEMOTION2",
            "CODEC_ID_BMP",
            "CODEC_ID_CSCD",
            "CODEC_ID_MMVIDEO",
            "CODEC_ID_ZMBV",
            "CODEC_ID_AVS",
            "CODEC_ID_SMACKVIDEO",
            "CODEC_ID_NUV",
            "CODEC_ID_KMVC",
            "CODEC_ID_FLASHSV",
            "CODEC_ID_CAVS",
            "CODEC_ID_JPEG2000",
            "CODEC_ID_VMNC",
            "CODEC_ID_VP5",
            "CODEC_ID_VP6",
            "CODEC_ID_VP6F",
            "CODEC_ID_TARGA",
            "CODEC_ID_DSICINVIDEO",
            "CODEC_ID_TIERTEXSEQVIDEO",
            "CODEC_ID_TIFF",
            "CODEC_ID_GIF",
            "CODEC_ID_FFH264",
            "CODEC_ID_DXA",
            "CODEC_ID_DNXHD",
            "CODEC_ID_THP",
            "CODEC_ID_SGI",
            "CODEC_ID_C93",
            "CODEC_ID_BETHSOFTVID",
            "CODEC_ID_PTX",
            "CODEC_ID_TXD",
            "CODEC_ID_VP6A",
            "CODEC_ID_AMV",
            "CODEC_ID_VB",
            "CODEC_ID_PCX",
            "CODEC_ID_SUNRAST",
            "CODEC_ID_INDEO4",
            "CODEC_ID_INDEO5",
            "CODEC_ID_MIMIC",
            "CODEC_ID_RL2",
            "CODEC_ID_8SVX_EXP",
            "CODEC_ID_8SVX_FIB",
            "CODEC_ID_ESCAPE124",
            "CODEC_ID_DIRAC",
            "CODEC_ID_BFI",
            "CODEC_ID_CMV",
            "CODEC_ID_MOTIONPIXELS",
            "CODEC_ID_TGV",
            "CODEC_ID_TGQ",
            "CODEC_ID_TQI",
            "CODEC_ID_AURA",
            "CODEC_ID_AURA2",
            "CODEC_ID_V210X",
            "CODEC_ID_TMV",
            "CODEC_ID_V210",
            "CODEC_ID_DPX",
            "CODEC_ID_MAD",
            "CODEC_ID_FRWU",
            "CODEC_ID_VP8",
            "CODEC_ID_APPLE_PRORES_NQ",
            "CODEC_ID_APPLE_PRORES_HQ",
            "CODEC_ID_FLASHSV2",
            "CODEC_ID_CDGRAPHICS",
            "CODEC_ID_R210",
            "CODEC_ID_ANM",
            "CODEC_ID_BINKVIDEO",
            "CODEC_ID_IFF_ILBM",
            "CODEC_ID_IFF_BYTERUN1",
            "CODEC_ID_KGV1",
            "CODEC_ID_YOP",
            "CODEC_ID_PICTOR",
            "CODEC_ID_APPLE_PRORES_LT",
            "CODEC_ID_APPLE_PRORES_PROXY",
            "CODEC_ID_APPLE_PRORES_4444",
            "CODEC_ID_APPLE_PIXLET",
            "CODEC_ID_G2M",
            "CODEC_ID_PRORES",
            "CODEC_ID_ANSI",
            "CODEC_ID_A64_MULTI",
            "CODEC_ID_A64_MULTI5",
            "CODEC_ID_R10K",
            "CODEC_ID_MXPEG",
            "CODEC_ID_LAGARITH",
            "CODEC_ID_JV",
            "CODEC_ID_DFA",
            "CODEC_ID_WMV3IMAGE",
            "CODEC_ID_VC1IMAGE",
            "CODEC_ID_UTVIDEO",
            "CODEC_ID_BMV_VIDEO",
            "CODEC_ID_VBLE",
            "CODEC_ID_DXTORY",
            "CODEC_ID_V410",
            "CODEC_ID_XWD",
            "CODEC_ID_CDXL",
            "CODEC_ID_XBM",
            "CODEC_ID_ZEROCODEC",
            "CODEC_ID_MSS1",
            "CODEC_ID_MSA1",
            "CODEC_ID_TSCC2",
            "CODEC_ID_MTS2",
            "CODEC_ID_CLLC",
            "CODEC_ID_MSS2",
            "CODEC_ID_Y41P",
            "CODEC_ID_ESCAPE130",
            "CODEC_ID_EXR",
            "CODEC_ID_AVRP",
            "CODEC_ID_AVUI",
            "CODEC_ID_AYUV",
            "CODEC_ID_V308",
            "CODEC_ID_V408",
            "CODEC_ID_YUV4",
            "CODEC_ID_SANM",
            "CODEC_ID_PAF_VIDEO",
            "CODEC_ID_AVRN",
            "CODEC_ID_CPIA",
            "CODEC_ID_VP9",
            "CODEC_ID_H265",
            "CODEC_ID_CFHD",
            "CODEC_ID_AV1",
            "CODEC_ID_AIC",
            "CODEC_ID_ALIAS_PIX",
            "CODEC_ID_APNG",
            "CODEC_ID_BRENDER_PIX",
            "CODEC_ID_CLEARVIDEO",
            "CODEC_ID_DDS",
            "CODEC_ID_DXV",
            "CODEC_ID_FIC",
            "CODEC_ID_FITS",
            "CODEC_ID_FMVC",
            "CODEC_ID_GDV",
            "CODEC_ID_HAP",
            "CODEC_ID_HNM4_VIDEO",
            "CODEC_ID_HQ_HQA",
            "CODEC_ID_HQX",
            "CODEC_ID_M101",
            "CODEC_ID_MAGICYUV",
            "CODEC_ID_MSCC",
            "CODEC_ID_MVC1",
            "CODEC_ID_MVC2",
            "CODEC_ID_PIXLET",
            "CODEC_ID_PSD",
            "CODEC_ID_RSCC",
            "CODEC_ID_SCPR",
            "CODEC_ID_SCREENPRESSO",
            "CODEC_ID_SGIRLE",
            "CODEC_ID_SHEERVIDEO",
            "CODEC_ID_SMVJPEG",
            "CODEC_ID_SPEEDHQ",
            "CODEC_ID_SRGC",
            "CODEC_ID_TARGA_Y216",
            "CODEC_ID_TDSC",
            "CODEC_ID_TRUEMOTION2RT",
            "CODEC_ID_VP7",
            "CODEC_ID_BITPACKED",
            "CODEC_ID_WEBP",
            "CODEC_ID_XFACE",
            "CODEC_ID_XPM",
            "CODEC_ID_YLC",
            "CODEC_ID_012V",
            "CODEC_ID_AVS2",
            "CODEC_ID_IMM4",
            "CODEC_ID_MWSC",
            "CODEC_ID_PROSUMER",
            "CODEC_ID_RASC",
            "CODEC_ID_WCMV",
            "CODEC_ID_UNKNOWN",
            "CODEC_ID_PCM_S16LE",
            "CODEC_ID_PCM_S16BE",
            "CODEC_ID_PCM_U16LE",
            "CODEC_ID_PCM_U16BE",
            "CODEC_ID_PCM_S8",
            "CODEC_ID_PCM_U8",
            "CODEC_ID_PCM_MULAW",
            "CODEC_ID_PCM_ALAW",
            "CODEC_ID_PCM_S32LE",
            "CODEC_ID_PCM_S32BE",
            "CODEC_ID_PCM_U32LE",
            "CODEC_ID_PCM_U32BE",
            "CODEC_ID_PCM_S24LE",
            "CODEC_ID_PCM_S24BE",
            "CODEC_ID_PCM_U24LE",
            "CODEC_ID_PCM_U24BE",
            "CODEC_ID_PCM_S24DAUD",
            "CODEC_ID_PCM_ZORK",
            "CODEC_ID_PCM_S16LE_PLANAR",
            "CODEC_ID_PCM_DVD",
            "CODEC_ID_PCM_F32BE",
            "CODEC_ID_PCM_F32LE",
            "CODEC_ID_PCM_F64BE",
            "CODEC_ID_PCM_F64LE",
            "CODEC_ID_PCM_BLURAY",
            "CODEC_ID_PCM_LXF",
            "CODEC_ID_S302M",
            "CODEC_ID_PCM_S8_PLANAR",
            "CODEC_ID_PCM_S24LE_PLANAR",
            "CODEC_ID_PCM_S32LE_PLANAR",
            "CODEC_ID_PCM_S16BE_PLANAR",
            "CODEC_ID_PCM_S64LE",
            "CODEC_ID_PCM_S64BE",
            "CODEC_ID_PCM_F16LE",
            "CODEC_ID_PCM_F24LE",
            "CODEC_ID_ADPCM_IMA_QT",
            "CODEC_ID_ADPCM_IMA_WAV",
            "CODEC_ID_ADPCM_IMA_DK3",
            "CODEC_ID_ADPCM_IMA_DK4",
            "CODEC_ID_ADPCM_IMA_WS",
            "CODEC_ID_ADPCM_IMA_SMJPEG",
            "CODEC_ID_ADPCM_MS",
            "CODEC_ID_ADPCM_4XM",
            "CODEC_ID_ADPCM_XA",
            "CODEC_ID_ADPCM_ADX",
            "CODEC_ID_ADPCM_EA",
            "CODEC_ID_ADPCM_G726",
            "CODEC_ID_ADPCM_CT",
            "CODEC_ID_ADPCM_SWF",
            "CODEC_ID_ADPCM_YAMAHA",
            "CODEC_ID_ADPCM_SBPRO_4",
            "CODEC_ID_ADPCM_SBPRO_3",
            "CODEC_ID_ADPCM_SBPRO_2",
            "CODEC_ID_ADPCM_THP",
            "CODEC_ID_ADPCM_IMA_AMV",
            "CODEC_ID_ADPCM_EA_R1",
            "CODEC_ID_ADPCM_EA_R3",
            "CODEC_ID_ADPCM_EA_R2",
            "CODEC_ID_ADPCM_IMA_EA_SEAD",
            "CODEC_ID_ADPCM_IMA_EA_EACS",
            "CODEC_ID_ADPCM_EA_XAS",
            "CODEC_ID_ADPCM_EA_MAXIS_XA",
            "CODEC_ID_ADPCM_IMA_ISS",
            "CODEC_ID_ADPCM_G722",
            "CODEC_ID_ADPCM_IMA_APC",
            "CODEC_ID_VIMA",
            "CODEC_ID_ADPCM_AFC",
            "CODEC_ID_ADPCM_IMA_OKI",
            "CODEC_ID_ADPCM_DTK",
            "CODEC_ID_ADPCM_IMA_RAD",
            "CODEC_ID_ADPCM_G726LE",
            "CODEC_ID_ADPCM_THP_LE",
            "CODEC_ID_ADPCM_PSX",
            "CODEC_ID_ADPCM_AICA",
            "CODEC_ID_ADPCM_IMA_DAT4",
            "CODEC_ID_ADPCM_MTAF",
            "CODEC_ID_ADPCM_VIMA",
            "CODEC_ID_AMR_NB",
            "CODEC_ID_AMR_WB",
            "CODEC_ID_RA_144",
            "CODEC_ID_RA_288",
            "CODEC_ID_ROQ_DPCM",
            "CODEC_ID_INTERPLAY_DPCM",
            "CODEC_ID_XAN_DPCM",
            "CODEC_ID_SOL_DPCM",
            "CODEC_ID_GREMLIN_DPCM",
            "CODEC_ID_SDX2_DPCM",
            "CODEC_ID_MP2",
            "CODEC_ID_MP3",
            "CODEC_ID_AAC",
            "CODEC_ID_MPEG4AAC_DEPRECATED",
            "CODEC_ID_AC3",
            "CODEC_ID_DTS",
            "CODEC_ID_VORBIS",
            "CODEC_ID_DVAUDIO",
            "CODEC_ID_WMAV1",
            "CODEC_ID_WMAV2",
            "CODEC_ID_MACE3",
            "CODEC_ID_MACE6",
            "CODEC_ID_VMDAUDIO",
            "CODEC_ID_SONIC",
            "CODEC_ID_SONIC_LS",
            "CODEC_ID_FLAC",
            "CODEC_ID_MP3ADU",
            "CODEC_ID_MP3ON4",
            "CODEC_ID_SHORTEN",
            "CODEC_ID_ALAC",
            "CODEC_ID_WESTWOOD_SND1",
            "CODEC_ID_GSM",
            "CODEC_ID_QDM2",
            "CODEC_ID_COOK",
            "CODEC_ID_TRUESPEECH",
            "CODEC_ID_TTA",
            "CODEC_ID_SMACKAUDIO",
            "CODEC_ID_QCELP",
            "CODEC_ID_WAVPACK",
            "CODEC_ID_DSICINAUDIO",
            "CODEC_ID_ASAO",
            "CODEC_ID_NELLYMOSER",
            "CODEC_ID_WMAVOICE",
            "CODEC_ID_WMAPRO",
            "CODEC_ID_WMALOSSLESS",
            "CODEC_ID_IMC",
            "CODEC_ID_MUSEPACK7",
            "CODEC_ID_MLP",
            "CODEC_ID_GSM_MS",
            "CODEC_ID_ATRAC3",
            "CODEC_ID_VOXWARE",
            "CODEC_ID_APE",
            "CODEC_ID_MUSEPACK8",
            "CODEC_ID_SPEEX",
            "CODEC_ID_ATRAC3P",
            "CODEC_ID_EAC3",
            "CODEC_ID_SIPR",
            "CODEC_ID_MP1",
            "CODEC_ID_TWINVQ",
            "CODEC_ID_TRUEHD",
            "CODEC_ID_MP4ALS",
            "CODEC_ID_ATRAC1",
            "CODEC_ID_BINKAUDIO_RDFT",
            "CODEC_ID_BINKAUDIO_DCT",
            "CODEC_ID_AAC_LATM",
            "CODEC_ID_QDMC",
            "CODEC_ID_CELT",
            "CODEC_ID_G723_1",
            "CODEC_ID_G729",
            "CODEC_ID_BMV_AUDIO",
            "CODEC_ID_RALF",
            "CODEC_ID_IAC",
            "CODEC_ID_ILBC",
            "CODEC_ID_FFWAVESYNTH",
            "CODEC_ID_8SVX_RAW",
            "CODEC_ID_PAF_AUDIO",
            "CODEC_ID_OPUS",
            "CODEC_ID_ATRAC3AL",
            "CODEC_ID_ATRAC3PAL",
            "CODEC_ID_DOLBY_E",
            "CODEC_ID_DSD_LSBF",
            "CODEC_ID_DSD_MSBF",
            "CODEC_ID_DSD_LSBF_PLANAR",
            "CODEC_ID_DSD_MSBF_PLANAR",
            "CODEC_ID_DSS_SP",
            "CODEC_ID_DST",
            "CODEC_ID_EVRC",
            "CODEC_ID_INTERPLAY_ACM",
            "CODEC_ID_METASOUND",
            "CODEC_ID_ON2AVC",
            "CODEC_ID_TAK",
            "CODEC_ID_XMA1",
            "CODEC_ID_XMA2",
            "CODEC_ID_COMFORT_NOISE",
            "CODEC_ID_APTX",
            "CODEC_ID_APTX_HD",
            "CODEC_ID_SBC",
            "CODEC_ID_ATRAC9",
            "CODEC_ID_CODEC2",
            "CODEC_ID_OGGTHEORA_DEPRECATED",
            "CODEC_ID_DVD_SUBTITLE",
            "CODEC_ID_DVB_SUBTITLE",
            "CODEC_ID_TEXT",
            "CODEC_ID_XSUB",
            "CODEC_ID_SSA",
            "CODEC_ID_MOV_TEXT",
            "CODEC_ID_HDMV_PGS_SUBTITLE",
            "CODEC_ID_DVB_TELETEXT",
            "CODEC_ID_SRT",
            "CODEC_ID_MICRODVD",
            "CODEC_ID_EIA_608",
            "CODEC_ID_JACOSUB",
            "CODEC_ID_SAMI",
            "CODEC_ID_REALTEXT",
            "CODEC_ID_SUBVIEWER",
            "CODEC_ID_SUBRIP",
            "CODEC_ID_WEBVTT",
            "CODEC_ID_ASS",
            "CODEC_ID_MPL2",
            "CODEC_ID_PJS",
            "CODEC_ID_STL",
            "CODEC_ID_SUBVIEWER1",
            "CODEC_ID_VPLAYER",
            "CODEC_ID_TTML",
            "CODEC_ID_TTF",
            "CODEC_ID_BINTEXT",
            "CODEC_ID_XBIN",
            "CODEC_ID_IDF",
            "CODEC_ID_OTF",
            "CODEC_ID_PROBE",
            "CODEC_ID_MPEG2TS",
            "CODEC_ID_MPEG4SYSTEMS",
            "CODEC_ID_FFMETADATA",
            "CODEC_ID_FFMPEG_OUT_OF_SYNC",
            "CODEC_ID_WRAPPED_AVFRAME",
            "CODEC_ID_CAMM"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_MPEG4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "deprecated: removed from upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "moved to audio codecs section in upstream",
            "moved to audio codecs section in upstream",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "deprecated: use CODEC_ID_PRORES",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various pcm \"codecs\"",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "various adpcm codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "AMR",
            "",
            "RealAudio codecs",
            "",
            "various DPCM codecs",
            "",
            "",
            "",
            "",
            "",
            "audio codecs",
            "preferred ID for MPEG Audio layer 1, 2 or 3",
            "",
            "Use CODEC_ID_AAC instead",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Not in ffmpeg as of rev 20544.",
            "Start of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "End of out of order with ffmpeg",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Removed in ffmpeg rev 5877.",
            "subtitle codecs",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "other specific kind of codecs (generally used for attachments)",
            "",
            "",
            "",
            "",
            "< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it",
            "_FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat)",
            "_FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat)",
            "Dummy codec for streams containing only metadata information.",
            "this one indicates an error in the mapping between this enum and libavcodec's",
            "AVFrames wrapped in AVPacket",
            "Camera motion metadata (http://go/wally-format)"
          ],
          "type": "string"
        },
        "codecString": {
          "description": "RFC6381 Codec string.",
          "type": "string"
        },
        "colorInfo": {
          "$ref": "VideoFileColorInfo"
        },
        "contentLightLevel": {
          "$ref": "VideoFileContentLightLevel"
        },
        "decodeOffset": {
          "description": "The bytes offset of the end of the first decodable packet.",
          "format": "int64",
          "type": "string"
        },
        "displayHeight": {
          "format": "int32",
          "type": "integer"
        },
        "displayWidth": {
          "description": "final display video width and height if explicitly set in the video otherwise this can be calculated from source width/height and video_pixel_aspect_ratio",
          "format": "int32",
          "type": "integer"
        },
        "doviConfiguration": {
          "$ref": "VideoDoViDecoderConfiguration",
          "description": "Dolby Vision configuration if stream is compatible."
        },
        "endTimestamp": {
          "format": "int64",
          "type": "string"
        },
        "flip": {
          "description": "Should the video be mirrored horizontally / vertically? When rotation and flip both are present for a video, it is assumed that the flip is applied first, and then the rotation.",
          "enum": [
            "FLIP_NONE",
            "FLIP_HORIZONTAL",
            "FLIP_VERTICAL"
          ],
          "enumDescriptions": [
            "No mirroring.",
            "Frame should be mirrored horizontally when displayed.",
            "Frame should be mirrored vertically when displayed."
          ],
          "type": "string"
        },
        "fps": {
          "description": "video frame per second, obtained by parsing video header information. It could be inaccurate for some types of codecs, notably, WMV, ASF, and FLV. It will be inaccurate for videos that does not have constant frame rate since it is the smallest framerate that can accurately represent all timestamps (see ffmpeg doc for AVStream.r_frame_rate). Also frame rate can be parsed from headers and can be wrong if it is not available there since ffmpeg uses a heuristic for determining it.",
          "format": "double",
          "type": "number"
        },
        "frameSize": {
          "description": "video frame size",
          "format": "int64",
          "type": "string"
        },
        "gopSize": {
          "$ref": "VideoVideoStreamInfoVideoStreamStatistics",
          "description": "Statistics about gop sizes of the video."
        },
        "hasBFrames": {
          "description": "video has b frames",
          "type": "boolean"
        },
        "hdr10PlusStats": {
          "$ref": "VideoFileHDR10PlusStats",
          "description": "Stats on HDR10+ over video frames."
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "interlace": {
          "description": "Information on interlaced video.",
          "enum": [
            "INTERLACE_NONE",
            "INTERLACE_PIC_AFF",
            "INTERLACE_MB_AFF"
          ],
          "enumDescriptions": [
            "No interlace",
            "Adaptive frame-field coding in picture level",
            "Adaptive frame-field coding in macroblock level"
          ],
          "type": "string"
        },
        "isInsaneSize": {
          "description": "Check if a video size insane or not. It is set if the input file is an MOV file.",
          "type": "boolean"
        },
        "ituTT35": {
          "description": "User data registered Itu-T T.35 SEI message",
          "items": {
            "$ref": "VideoUserDataRegisteredItuTT35"
          },
          "type": "array"
        },
        "length": {
          "description": "video length in seconds Note that when the VSI is from users videos, it is not guaranteed to be the same as transcode lengths and it could be 0 when the full VSI cannot compute the length from the source header and timestamps (for example when header and timestamps are too broken).",
          "format": "double",
          "type": "number"
        },
        "level": {
          "format": "int32",
          "type": "integer"
        },
        "masteringDisplayMetadata": {
          "$ref": "VideoFileMasteringDisplayMetadata"
        },
        "maxFps": {
          "description": "Maximum instantaneous frame rate seen from analyzing the entire stream.",
          "format": "double",
          "type": "number"
        },
        "metadata": {
          "description": "Metadata for video elementary stream;",
          "items": {
            "$ref": "VideoClipInfo"
          },
          "type": "array"
        },
        "minFps": {
          "description": "Minimum instantaneous frame rate seen from analyzing the entire stream.",
          "format": "double",
          "type": "number"
        },
        "numberOfFrames": {
          "description": "Number of video frames.",
          "format": "int64",
          "type": "string"
        },
        "numberOfInvisibleFrames": {
          "description": "Invisible frame count Keep a count of frames that are not displayed should the full frame count be needed for the video stream. The only codec currently reporting this value is VP8 with alternate reference frames enabled",
          "format": "int32",
          "type": "integer"
        },
        "pixFmt": {
          "description": "Pixel format for the video stream.",
          "enum": [
            "PIX_FMT_NONE",
            "PIX_FMT_YUV420P",
            "PIX_FMT_YUYV422",
            "PIX_FMT_RGB24",
            "PIX_FMT_BGR24",
            "PIX_FMT_YUV422P",
            "PIX_FMT_YUV444P",
            "PIX_FMT_RGB32",
            "PIX_FMT_YUV410P",
            "PIX_FMT_YUV411P",
            "PIX_FMT_RGB565",
            "PIX_FMT_RGB555",
            "PIX_FMT_GRAY8",
            "PIX_FMT_MONOWHITE",
            "PIX_FMT_MONOBLACK",
            "PIX_FMT_PAL8",
            "PIX_FMT_YUVJ420P",
            "PIX_FMT_YUVJ422P",
            "PIX_FMT_YUVJ444P",
            "PIX_FMT_XVMC_MPEG2_MC",
            "PIX_FMT_XVMC_MPEG2_IDCT",
            "PIX_FMT_UYVY422",
            "PIX_FMT_UYYVYY411",
            "PIX_FMT_BGR32",
            "PIX_FMT_BGR565",
            "PIX_FMT_BGR555",
            "PIX_FMT_BGR8",
            "PIX_FMT_BGR4",
            "PIX_FMT_BGR4_BYTE",
            "PIX_FMT_RGB8",
            "PIX_FMT_RGB4",
            "PIX_FMT_RGB4_BYTE",
            "PIX_FMT_NV12",
            "PIX_FMT_NV21",
            "PIX_FMT_RGB32_1",
            "PIX_FMT_BGR32_1",
            "PIX_FMT_GRAY16BE",
            "PIX_FMT_GRAY16LE",
            "PIX_FMT_YUV440P",
            "PIX_FMT_YUVJ440P",
            "PIX_FMT_YUVA420P",
            "PIX_FMT_VDPAU_H264",
            "PIX_FMT_VDPAU_MPEG1",
            "PIX_FMT_VDPAU_MPEG2",
            "PIX_FMT_VDPAU_WMV3",
            "PIX_FMT_VDPAU_VC1",
            "PIX_FMT_RGB48BE",
            "PIX_FMT_RGB48LE",
            "PIX_FMT_RGB565BE",
            "PIX_FMT_RGB555BE",
            "PIX_FMT_BGR565BE",
            "PIX_FMT_BGR555BE",
            "PIX_FMT_VAAPI_MOCO",
            "PIX_FMT_VAAPI_IDCT",
            "PIX_FMT_VAAPI_VLD",
            "PIX_FMT_YUV420P16LE",
            "PIX_FMT_YUV420P16BE",
            "PIX_FMT_YUV422P16LE",
            "PIX_FMT_YUV422P16BE",
            "PIX_FMT_YUV444P16LE",
            "PIX_FMT_YUV444P16BE",
            "PIX_FMT_VDPAU_MPEG4",
            "PIX_FMT_DXVA2_VLD",
            "PIX_FMT_RGB444LE",
            "PIX_FMT_RGB444BE",
            "PIX_FMT_BGR444LE",
            "PIX_FMT_BGR444BE",
            "PIX_FMT_GRAY8A",
            "PIX_FMT_BGR48BE",
            "PIX_FMT_BGR48LE",
            "PIX_FMT_YUV420P9BE",
            "PIX_FMT_YUV420P9LE",
            "PIX_FMT_YUV420P10BE",
            "PIX_FMT_YUV420P10LE",
            "PIX_FMT_YUV422P10BE",
            "PIX_FMT_YUV422P10LE",
            "PIX_FMT_YUV444P9BE",
            "PIX_FMT_YUV444P9LE",
            "PIX_FMT_YUV444P10BE",
            "PIX_FMT_YUV444P10LE",
            "PIX_FMT_YUV422P9BE",
            "PIX_FMT_YUV422P9LE",
            "PIX_FMT_VDA_VLD",
            "PIX_FMT_RGBA64BE",
            "PIX_FMT_RGBA64LE",
            "PIX_FMT_BGRA64BE",
            "PIX_FMT_BGRA64LE",
            "PIX_FMT_GBRP",
            "PIX_FMT_GBRP9BE",
            "PIX_FMT_GBRP9LE",
            "PIX_FMT_GBRP10BE",
            "PIX_FMT_GBRP10LE",
            "PIX_FMT_GBRP16BE",
            "PIX_FMT_GBRP16LE",
            "PIX_FMT_0RGB",
            "PIX_FMT_RGB0",
            "PIX_FMT_0BGR",
            "PIX_FMT_BGR0",
            "PIX_FMT_YUVA444P",
            "PIX_FMT_YUVA422P",
            "PIX_FMT_YUV420P12BE",
            "PIX_FMT_YUV420P12LE",
            "PIX_FMT_YUV420P14BE",
            "PIX_FMT_YUV420P14LE",
            "PIX_FMT_YUV422P12BE",
            "PIX_FMT_YUV422P12LE",
            "PIX_FMT_YUV422P14BE",
            "PIX_FMT_YUV422P14LE",
            "PIX_FMT_YUV444P12BE",
            "PIX_FMT_YUV444P12LE",
            "PIX_FMT_YUV444P14BE",
            "PIX_FMT_YUV444P14LE",
            "PIX_FMT_GBRP12BE",
            "PIX_FMT_GBRP12LE",
            "PIX_FMT_GBRP14BE",
            "PIX_FMT_GBRP14LE",
            "PIX_FMT_ARGB",
            "PIX_FMT_RGBA",
            "PIX_FMT_ABGR",
            "PIX_FMT_BGRA",
            "PIX_FMT_RGB565LE",
            "PIX_FMT_RGB555LE",
            "PIX_FMT_BGR565LE",
            "PIX_FMT_BGR555LE",
            "PIX_FMT_VAAPI",
            "PIX_FMT_YA8",
            "PIX_FMT_Y400A",
            "PIX_FMT_YUVA420P9BE",
            "PIX_FMT_YUVA420P9LE",
            "PIX_FMT_YUVA422P9BE",
            "PIX_FMT_YUVA422P9LE",
            "PIX_FMT_YUVA444P9BE",
            "PIX_FMT_YUVA444P9LE",
            "PIX_FMT_YUVA420P10BE",
            "PIX_FMT_YUVA420P10LE",
            "PIX_FMT_YUVA422P10BE",
            "PIX_FMT_YUVA422P10LE",
            "PIX_FMT_YUVA444P10BE",
            "PIX_FMT_YUVA444P10LE",
            "PIX_FMT_YUVA420P16BE",
            "PIX_FMT_YUVA420P16LE",
            "PIX_FMT_YUVA422P16BE",
            "PIX_FMT_YUVA422P16LE",
            "PIX_FMT_YUVA444P16BE",
            "PIX_FMT_YUVA444P16LE",
            "PIX_FMT_VDPAU",
            "PIX_FMT_XYZ12LE",
            "PIX_FMT_XYZ12BE",
            "PIX_FMT_NV16",
            "PIX_FMT_NV20LE",
            "PIX_FMT_NV20BE",
            "PIX_FMT_YVYU422",
            "PIX_FMT_VDA",
            "PIX_FMT_YA16BE",
            "PIX_FMT_YA16LE",
            "PIX_FMT_GBRAP",
            "PIX_FMT_GBRAP16BE",
            "PIX_FMT_GBRAP16LE",
            "PIX_FMT_QSV",
            "PIX_FMT_MMAL",
            "PIX_FMT_D3D11VA_VLD",
            "PIX_FMT_CUDA",
            "PIX_FMT_YUVJ411P",
            "PIX_FMT_BAYER_BGGR8",
            "PIX_FMT_BAYER_RGGB8",
            "PIX_FMT_BAYER_GBRG8",
            "PIX_FMT_BAYER_GRBG8",
            "PIX_FMT_BAYER_BGGR16LE",
            "PIX_FMT_BAYER_BGGR16BE",
            "PIX_FMT_BAYER_RGGB16LE",
            "PIX_FMT_BAYER_RGGB16BE",
            "PIX_FMT_BAYER_GBRG16LE",
            "PIX_FMT_BAYER_GBRG16BE",
            "PIX_FMT_BAYER_GRBG16LE",
            "PIX_FMT_BAYER_GRBG16BE",
            "PIX_FMT_XVMC",
            "PIX_FMT_YUV440P10LE",
            "PIX_FMT_YUV440P10BE",
            "PIX_FMT_YUV440P12LE",
            "PIX_FMT_YUV440P12BE",
            "PIX_FMT_AYUV64LE",
            "PIX_FMT_AYUV64BE",
            "PIX_FMT_VIDEOTOOLBOX",
            "PIX_FMT_P010LE",
            "PIX_FMT_P010BE",
            "PIX_FMT_GBRAP12BE",
            "PIX_FMT_GBRAP12LE",
            "PIX_FMT_GBRAP10BE",
            "PIX_FMT_GBRAP10LE",
            "PIX_FMT_MEDIACODEC",
            "PIX_FMT_GRAY12BE",
            "PIX_FMT_GRAY12LE",
            "PIX_FMT_GRAY10BE",
            "PIX_FMT_GRAY10LE",
            "PIX_FMT_P016LE",
            "PIX_FMT_P016BE",
            "PIX_FMT_D3D11",
            "PIX_FMT_GRAY9BE",
            "PIX_FMT_GRAY9LE",
            "PIX_FMT_GBRPF32BE",
            "PIX_FMT_GBRPF32LE",
            "PIX_FMT_GBRAPF32BE",
            "PIX_FMT_GBRAPF32LE",
            "PIX_FMT_DRM_PRIME",
            "PIX_FMT_GACCEL",
            "PIX_FMT_OPENCL",
            "PIX_FMT_GRAY14BE",
            "PIX_FMT_GRAY14LE",
            "PIX_FMT_GRAYF32BE",
            "PIX_FMT_GRAYF32LE",
            "PIX_FMT_VULKAN",
            "PIX_FMT_ID_FFMPEG_OUT_OF_SYNC"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "this one indicates an error in the mapping between this enum and libavcodec's"
          ],
          "type": "string"
        },
        "pixelAspectRatio": {
          "description": "video pixel aspect ratio",
          "format": "double",
          "type": "number"
        },
        "profile": {
          "enum": [
            "PROFILE_UNKNOWN",
            "PROFILE_AAC_MAIN",
            "PROFILE_AAC_LOW",
            "PROFILE_AAC_SSR",
            "PROFILE_AAC_LTP",
            "PROFILE_AAC_HE",
            "PROFILE_AAC_HE_V2",
            "PROFILE_AAC_LD",
            "PROFILE_AAC_ELD",
            "PROFILE_AVC_CONSTRAINED",
            "PROFILE_AVC_INTRA",
            "PROFILE_AVC_BASELINE",
            "PROFILE_AVC_CONSTRAINED_BASELINE",
            "PROFILE_AVC_MAIN",
            "PROFILE_AVC_EXTENDED",
            "PROFILE_AVC_HIGH",
            "PROFILE_AVC_HIGH10",
            "PROFILE_AVC_HIGH10_INTRA",
            "PROFILE_AVC_HIGH422",
            "PROFILE_AVC_HIGH422_INTRA",
            "PROFILE_AVC_HIGH444",
            "PROFILE_HIGH444_PREDICTIVE",
            "PROFILE_AVC_HIGH444_INTRA",
            "PROFILE_AVC_CAVLC444",
            "PROFILE_VP9_0",
            "PROFILE_VP9_1",
            "PROFILE_VP9_2",
            "PROFILE_VP9_3",
            "PROFILE_HEVC_MAIN",
            "PROFILE_HEVC_MAIN_10",
            "PROFILE_HEVC_MAIN_STILL_PICTURE",
            "PROFILE_HEVC_REXT",
            "PROFILE_DOVI_5"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "(1 << 8) constrained mode set bit",
            "(1 << 11) intra mode set bit",
            "",
            "PROFILE_AVC_CONSTRAINED_BASELINE = PROFILE_AVC_BASELINE | PROFILE_AVC_CONSTRAINED",
            "",
            "",
            "",
            "",
            "PROFILE_AVC_HIGH10_INTRA = PROFILE_AVC_HIGH10 | PROFILE_AVC_INTRA",
            "",
            "PROFILE_AVC_HIGH422_INTRA = PROFILE_AVC_HIGH422 | PROFILE_AVC_INTRA",
            "",
            "",
            "PROFILE_AVC_HIGH444_INTRA = PROFILE_AVC_HIGH444 | PROFILE_AVC_INTRA",
            "",
            "Since profile IDs might collide from different codecs, the profile IDs listed below are not identical to the numeric numbers defined in the spec due to collision. Next Profile ID: 10008 PROFILES for VP9. 0",
            "1",
            "2",
            "3",
            "1",
            "2",
            "3",
            "4",
            "DOVI Profile 5 can only be played as Dolby Vision so it has its own Profile."
          ],
          "type": "string"
        },
        "rationalFps": {
          "$ref": "VideoRational32",
          "description": "The nominal frame rate ('fps' field) represented as a fraction."
        },
        "rotation": {
          "description": "Is the video rotated ?",
          "enum": [
            "ROTATION_NONE",
            "ROTATION_OTHER",
            "ROTATION_CW_90",
            "ROTATION_CCW_90",
            "ROTATION_180"
          ],
          "enumDescriptions": [
            "No rotation",
            "Unspecified non-identity rotation",
            "Rotate clockwise by 90 degrees",
            "Rotate counter-clockwise by 90 degrees",
            "Rotate 180 degrees"
          ],
          "type": "string"
        },
        "seiMessage": {
          "description": "video SEI payload types and total payload size of a type this is only for H.264 and H.265",
          "items": {
            "$ref": "VideoSEIMessage"
          },
          "type": "array"
        },
        "spherical": {
          "$ref": "VideoFileSphericalMetadata",
          "description": "Optional spherical video information."
        },
        "startTimestamp": {
          "description": "Start/end timestamps of audio/video in ms.",
          "format": "int64",
          "type": "string"
        },
        "streamCodecTag": {
          "format": "int64",
          "type": "string"
        },
        "streamIndex": {
          "description": "Index of the stream in the file. it is 0 based.",
          "format": "int64",
          "type": "string"
        },
        "userDataUnregistered": {
          "description": "User data unregistered SEI message",
          "items": {
            "$ref": "VideoUserDataUnregistered"
          },
          "type": "array"
        },
        "width": {
          "description": "source video width and height",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoVideoStreamCleanAperture": {
      "id": "VideoVideoStreamInfoVideoStreamCleanAperture",
      "properties": {
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "horizontalOffset": {
          "format": "int32",
          "type": "integer"
        },
        "verticalOffset": {
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "VideoVideoStreamInfoVideoStreamStatistics": {
      "id": "VideoVideoStreamInfoVideoStreamStatistics",
      "properties": {
        "max": {
          "format": "int64",
          "type": "string"
        },
        "mean": {
          "format": "double",
          "type": "number"
        },
        "min": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoYoutubeCommentsClassificationProtoSmartSuggestion": {
      "id": "VideoYoutubeCommentsClassificationProtoSmartSuggestion",
      "properties": {
        "diversificationThreshold": {
          "description": "Diversification threshold used in prediction. Additional responses which are closer than the threshold to the already selected responses will be skipped.",
          "format": "float",
          "type": "number"
        },
        "likelihoodBiasWeight": {
          "description": "Bias weight used in prediction.",
          "format": "float",
          "type": "number"
        },
        "replyContent": {
          "description": "Content of the reply snippet (could include emoji as well as text).",
          "type": "string"
        },
        "score": {
          "description": "Model score for the predicted reply snippet.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "VideoYoutubeCommentsClassificationProtoYouTubeCommentSmartReply": {
      "description": "Smart reply suggestions for comment.",
      "id": "VideoYoutubeCommentsClassificationProtoYouTubeCommentSmartReply",
      "properties": {
        "smartSuggestions": {
          "description": "The order of the reply snippets in the list determines how they should be displayed in the UI and the client is not supposed to re-order the list using the scores.",
          "items": {
            "$ref": "VideoYoutubeCommentsClassificationProtoSmartSuggestion"
          },
          "type": "array"
        },
        "suggestionListIdentifier": {
          "description": "Identifier (language_code, channel_id, etc) for the suggestion list from which the top k suggestions are selected.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "VideoYoutubeCommentsRankingCTRMetrics": {
      "description": "Used for stanza KV pair. Next tag: 7.",
      "id": "VideoYoutubeCommentsRankingCTRMetrics",
      "properties": {
        "downvotes": {
          "format": "int64",
          "type": "string"
        },
        "impressions": {
          "format": "int64",
          "type": "string"
        },
        "measureWindow": {
          "enum": [
            "UNKNOWN",
            "THREE_DAYS",
            "SEVEN_DAYS",
            "FULL_HISTORY"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "teaserClicks": {
          "format": "int64",
          "type": "string"
        },
        "teaserImpressions": {
          "format": "int64",
          "type": "string"
        },
        "upvotes": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WWWDocInfo": {
      "description": "Some per-doc info is returned for all www DocInfo requests. Next id: 94",
      "id": "WWWDocInfo",
      "properties": {
        "additionalSafesearchStats": {
          "description": "Additional stats output by SafeSearch. See classifier/porn/public/porn-attachments.h.",
          "items": {
            "format": "uint32",
            "type": "integer"
          },
          "type": "array"
        },
        "authMethod": {
          "description": "Sometimes called secureid",
          "format": "int32",
          "type": "integer"
        },
        "badMetadescription": {
          "description": "Bad meta flag",
          "type": "boolean"
        },
        "bodySize": {
          "description": "Size of document",
          "format": "int32",
          "type": "integer"
        },
        "bodyTitleLanguages": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "boilerplateMetadescription": {
          "type": "boolean"
        },
        "colorDetectionResult": {
          "description": "Detected color in the image in RGB565 format in the lower 16 bits.",
          "format": "uint32",
          "type": "integer"
        },
        "contentType": {
          "description": "If not present, then the type",
          "format": "int64",
          "type": "string"
        },
        "coupledUrl": {
          "description": "Url of coupled doc (e.g. image)",
          "type": "string"
        },
        "coupledUrlEncoding": {
          "format": "int32",
          "type": "integer"
        },
        "crawlTime": {
          "description": "Last time this doc crawled",
          "format": "int64",
          "type": "string"
        },
        "cropData": {
          "description": "Thumbnail cropping information.",
          "format": "uint32",
          "type": "integer"
        },
        "dataVersion": {
          "type": "string"
        },
        "docVersionId": {
          "description": "Fields generated by the docserver, but whose meaning is unclear. Sometimes last crawl time",
          "format": "int64",
          "type": "string"
        },
        "encoding": {
          "format": "int64",
          "type": "string"
        },
        "failsSafeSearch": {
          "description": "fails_safe_search is never filled in production.",
          "format": "int64",
          "type": "string"
        },
        "fileTypeId": {
          "description": "If converted to TEXT or HTML",
          "format": "int64",
          "type": "string"
        },
        "foreignMetadescription": {
          "description": "Indicate if the meta description in a different language than its page.",
          "type": "boolean"
        },
        "fuzzyMetadescription": {
          "type": "boolean"
        },
        "googleLabelData": {
          "description": "Addition to support google label per-search-result annotation.",
          "format": "byte",
          "type": "string"
        },
        "hasBadSslCertificate": {
          "description": "If true, the original document has a bad SSL certificate.",
          "type": "boolean"
        },
        "imageHeight": {
          "description": "image height",
          "format": "int32",
          "type": "integer"
        },
        "imageLicenseInfo": {
          "$ref": "ImageSearchImageLicenseInfo",
          "description": "Image license info such as license url and how to acquire the license."
        },
        "imagePublisher": {
          "type": "string"
        },
        "imageSize": {
          "description": "size in bytes;",
          "format": "int32",
          "type": "integer"
        },
        "imageWidth": {
          "description": "image width",
          "format": "int32",
          "type": "integer"
        },
        "indexingTs": {
          "description": "The timestamp (the time since the Epoch, in microseconds) when the docjoin is exported from indexing. This is mainly exported and used by Youtube Search. See MustangBasicInfo.indexing_ts for more details.",
          "format": "int64",
          "type": "string"
        },
        "ip": {
          "description": "If ipaddr is set, ip should be ignored (it should not be set). Ipaddr should be either 4- or 16-byte string for IPv4 or IPv6 addresses. If ipaddr is not set, ip is set to the IPv4 address for the host.",
          "format": "int32",
          "type": "integer"
        },
        "ipaddr": {
          "format": "byte",
          "type": "string"
        },
        "isAnimated": {
          "description": "Is this image animated?",
          "type": "boolean"
        },
        "isHostedImage": {
          "description": "Hosted Images related fields.",
          "type": "boolean"
        },
        "isPorn": {
          "description": "Doc porn classification.",
          "type": "boolean"
        },
        "isRoboted": {
          "description": "Is disallowed for crawling according to host's robots.txt.",
          "type": "boolean"
        },
        "isSitePorn": {
          "description": "Consider the page classification is_porn as an alternative for is_site_porn, and talk to safesearch@google.com for additional information if needed.",
          "type": "boolean"
        },
        "isSoftporn": {
          "description": "Doc softporn classification.",
          "type": "boolean"
        },
        "language": {
          "description": "go/iii-td b/130371355",
          "format": "int64",
          "type": "string"
        },
        "languageTag": {
          "description": "This returns the most probable language for the document. The complete set of languages is in the GenericSearchResponse. (If some future use requires all languages from the doc request, note that fetching that will require decoding the entire per-doc data attachment, which is a performance hit) Use docinfo-util.h to set & read language fields. Language tag as defined by http://www.unicode.org/reports/tr35/#Identifiers and https://tools.ietf.org/html/bcp47 If not present, then use language.",
          "type": "string"
        },
        "lastModTime": {
          "description": "Unused by gws",
          "format": "int64",
          "type": "string"
        },
        "licensedWebImagesOptInState": {
          "description": "Indicates the web-master opt-in state of this image. This project is still in MVP stage, please contact us licensed-media-team@ before use.",
          "enum": [
            "IMAGES_OPTIN_NONE",
            "IMAGES_OPTIN_FULL",
            "PAGE_SNIPPET_CONTROL_SIZE_NONE",
            "PAGE_SNIPPET_CONTROL_SIZE_STANDARD",
            "PAGE_SNIPPET_CONTROL_SIZE_LARGE",
            "IMAGE_TAG_SNIPPET_CONTROL_SIZE_NONE",
            "IMAGE_TAG_SNIPPET_CONTROL_SIZE_STANDARD",
            "IMAGE_TAG_SNIPPET_CONTROL_SIZE_LARGE"
          ],
          "enumDescriptions": [
            "DEFAULT",
            "",
            "Followings are extracted from page snippet restriction. Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels.",
            "Followings are extracted from per image tag snippet restriction. Publisher explicitly requires a no-image treatment.",
            "Translates to 50k pixels.",
            "Translates to 300k pixels."
          ],
          "type": "string"
        },
        "lowQualityMetadescription": {
          "type": "boolean"
        },
        "metaDescriptionLanguages": {
          "description": "If meta description/body title were detected to be in a different language from the document language (the 'language' field above) in RosettaLanguageAnnotator, the detected languages are populated here. Note: as of ariane/154728, no more than one language is populated for each field.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "nearbyText": {
          "description": "Nearby text of the image on landing page. Used to construct Scroll to Image urls.",
          "type": "string"
        },
        "noimageframeoverlayreason": {
          "description": "If not 0, we should not show the image in overlay mode in image snippets.",
          "format": "int32",
          "type": "integer"
        },
        "nsrSitechunk": {
          "description": "Sitechunk used by NSR. For most pages this is equivalent HOST_LEVEL_V3 sitechunk. Main difference is that, for sites like youtube.com and vimeo.com, nsr_sitechunks are channel level (based on schema.org markup, not url alone). See go/nsr-chunks for more details.",
          "type": "string"
        },
        "partialBoilerplateMetadescription": {
          "type": "boolean"
        },
        "pornStats": {
          "description": "'porn_stats' is used in porn demotion and filtering. See classifier/porn/public/porn-attachments.h.",
          "format": "int32",
          "type": "integer"
        },
        "qualityWithoutAdjustment": {
          "description": "Quality score (also known as QScore, see go/qscore-faq).",
          "format": "float",
          "type": "number"
        },
        "referrerUrl": {
          "description": "Url of referring doc",
          "type": "string"
        },
        "relatedimages": {
          "items": {
            "$ref": "WWWDocInfoRelatedImages"
          },
          "type": "array"
        },
        "rootpageDuplicateMetadescription": {
          "description": "True if the meta-description is duplicated on many other pages and this page is the rootpage of such pages which have the same meta-description.",
          "type": "boolean"
        },
        "seenNoarchive": {
          "description": "Has noarchive meta robots flag",
          "type": "boolean"
        },
        "seenNoindex": {
          "description": "Has noindex meta robots flag",
          "type": "boolean"
        },
        "seenNoodp": {
          "description": "NOTE(kinoue): ODP/GWD snippet is unlaunched as of June 2017. This is no longer used.",
          "type": "boolean"
        },
        "seenNopreview": {
          "description": "Has nopreview meta robots flag",
          "type": "boolean"
        },
        "seenNosnippet": {
          "description": "Has nosnippet meta robots flag",
          "type": "boolean"
        },
        "seenNotranslate": {
          "description": "Has notranslate meta robots flag",
          "type": "boolean"
        },
        "shoppingAttachment": {
          "$ref": "QualityShoppingShoppingAttachment"
        },
        "shoppingOffers": {
          "description": "Shopping offer info from Inventory & Policy Service.",
          "items": {
            "$ref": "ImageMustangShoppingOffer"
          },
          "type": "array"
        },
        "subindex": {
          "description": "Subindex id of the document should be one of the values defined by enum CompositeDoc::SubIndexType. Used for superroot/gws logging if a shard has documents from multiple indices.",
          "format": "int32",
          "type": "integer"
        },
        "thumbHeight": {
          "description": "thumbnail height",
          "format": "int32",
          "type": "integer"
        },
        "thumbWidth": {
          "description": "Additions for image search.",
          "format": "int32",
          "type": "integer"
        },
        "thumbnail": {
          "items": {
            "$ref": "WWWDocInfoThumbnail"
          },
          "type": "array"
        },
        "title": {
          "description": "Landing page title.",
          "type": "string"
        },
        "unionBuildTime": {
          "format": "int64",
          "type": "string"
        },
        "url": {
          "description": "Url",
          "type": "string"
        },
        "urlAfterRedirects": {
          "description": "empty => same as url",
          "type": "string"
        },
        "urlEncoding": {
          "description": "See webutil/urlencoding",
          "format": "int32",
          "type": "integer"
        },
        "visibleImage": {
          "description": "If an image request, was the coupled image visible on the page?",
          "type": "boolean"
        },
        "visualType": {
          "description": "Is this doc visual RTL? See enum VisualType in visualtype.h. Default is NOT_VISUAL_DOCUMENT.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WWWDocInfoRelatedImages": {
      "description": "Return related images.",
      "id": "WWWDocInfoRelatedImages",
      "properties": {
        "imageDocid": {
          "format": "uint64",
          "type": "string"
        },
        "thumbHeight": {
          "format": "int32",
          "type": "integer"
        },
        "thumbType": {
          "enum": [
            "THUMBNAIL_TYPE_DEFAULT",
            "THUMBNAIL_TYPE_AREA_50K",
            "THUMBNAIL_TYPE_400",
            "THUMBNAIL_TYPE_800",
            "THUMBNAIL_TYPE_ORIGINAL",
            "THUMBNAIL_TYPE_ORIGINAL_HQ",
            "THUMBNAIL_TYPE_FAVICON_16",
            "THUMBNAIL_TYPE_FAVICON_28",
            "THUMBNAIL_TYPE_FAVICON_32",
            "THUMBNAIL_TYPE_FAVICON_64",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL",
            "THUMBNAIL_TYPE_FAVICON_16_DARK",
            "THUMBNAIL_TYPE_FAVICON_28_DARK",
            "THUMBNAIL_TYPE_FAVICON_32_DARK",
            "THUMBNAIL_TYPE_FAVICON_64_DARK",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL_DARK",
            "THUMBNAIL_TYPE_1080",
            "THUMBNAIL_TYPE_1600_HQ",
            "THUMBNAIL_TYPE_AREA_300K",
            "THUMBNAIL_TYPE_AREA_50K_ALPHA",
            "THUMBNAIL_TYPE_AREA_50K_SYNTHETIC_ALPHA",
            "THUMBNAIL_TYPE_AREA_2M",
            "THUMBNAIL_TYPE_AREA_2M_METADATA",
            "THUMBNAIL_TYPE_800_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ORIGINAL_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ANIMATED_H144",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_LICENSED",
            "THUMBNAIL_TYPE_TENOR_250K_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_GIF",
            "THUMBNAIL_TYPE_TENOR_30K_OPTIMIZED_THUMBNAIL_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_OPTIMIZED_90P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100P_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100W_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200W_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_PREVIEW_GIF",
            "THUMBNAIL_TYPE_TENOR_250K_MEDIUM_GIF",
            "THUMBNAIL_TYPE_AREA_2M_WEBP",
            "THUMBNAIL_TYPE_AREA_2M_WEBP_METADATA",
            "THUMBNAIL_TYPE_AREA_2M_AVIF",
            "THUMBNAIL_TYPE_AREA_2M_AVIF_METADATA",
            "THUMBNAIL_TYPE_AREA_50K_WEBP",
            "THUMBNAIL_TYPE_AREA_50K_AVIF",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_KG"
          ],
          "enumDescriptions": [
            "DEPRECATED - use THUMBNAIL_TYPE_AREA_50K if possible. The default thumbnail type is deprecated and no longer served by SFFE. For legacy users (e.g. imagesearch heirloom UI) you must request a downsized THUMBNAIL_TYPE_AREA_50K thumbnail.",
            "This is the most common thumbnail type, used in image search results. It is defined to have 50625 pixels (= 225 x 225).",
            "This refers to a thumbnail that fits in a 400x400 box.",
            "This refers to a thumbnail that fits in a 800x800 box.",
            "This refers to re-encoding original image to JPEG at the same size (up to 10000x10000). Output quality may be lower.",
            "Re-encode image at the same size as original (up to 10000x10000) but with high-quality (q=90). This was introduced by TYPHOON client and is expected only for very few images in our table (under 10k). If you plan to use this contact amarna-dev@ and/or crt@",
            "These refer to favicon thumbnails of 16x16, 32x32 or 64x64. If the original image is an ico file containing multiple embedded images including 16x16, 32x32 or 64x64, these thumbnails are derived from the embedded image of the corresponding size. (If no such embedded image is found, prefer the closest size that's larger. If still no such size exists, prefer largest.) If no such size exists, these thumbnails are rescaled to an image whose maximum dimension is 16, 28, 32 or 64.",
            "",
            "",
            "",
            "This type of favicon will preserve the size of the original image.",
            "These refer to favicon thumbnails for dark mode. This triggers dark mode on the SVG decoding (and otherwise, the same as the above favicon types)",
            "",
            "",
            "",
            "",
            "This refers to a thumbnail that fits in a 1080x1080 box.",
            "This refers to a thumbnail that fits in a 1600x1600 box and is encoded with high-quality (q=90). Contact amarna-dev@/crt@/bingwang@ for using it.",
            "This uses the same MaxAreaSizer as THUMBNAIL_TYPE_AREA_50K. The exact area is defined to be 307200 (= 640 x 480).",
            "This is like THUMBNAIL_TYPE_AREA_50K, but with an alpha channel.",
            "DEPRECATED - Please do not introduce new requests for this type. It will be eliminated soon. Until then, it will behave like the AREA_50K_ALPHA type -- use that instead.",
            "This refers to a thumbnail with at most 2073600 pixels (=1920*1080). The image will be scaled down to 2M while preserving the aspect ratio if it's too large. If the thumbnail is in JPEG format, it is encoded with quality = 85. Besides, it supports alpha channel by default and does not convert lossless formats to JPEG.",
            "Similar to THUMBNAIL_TYPE_AREA_2M, but with the source image metadata propagated.",
            "In alpha-white thumbs, colors are remapped in RGBA to be more transparent the closer they are to white. This is for use with white-background images, so that the perceived background color can be darkened by rendering over gray. See go/alpha-white-thumbs for details and limitations. Sizing matches non-ALPHA_WHITE equivalents.",
            "",
            "Height-scaled animated thumb types, encoded as H264 previews. Suffix gives height, e.g. _H144 indicates height 144. Width is a scaled multiple-of-8 value so the thumb has approximately the same aspect ratio as the original. For more info, see http://go/animated-thumbs.",
            "New thumbnail type for licensed contents. From a thumbnail generation perspective this behaves similarly to THUMBNAIL_TYPE_ORIGINAL_HQ, but it exists as a separate thumbnail type to enable takedowns requested by owner. WARNING: This type is primarily used by go/licensed-media-service and is subject to policy changes. Please contact g/license-media-service-team before using.",
            "Tenor gifs go/tenor-integration-binary-serving-discussion",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Similar to THUMBNAIL_TYPE_AREA_2M but pre-transcoded to WebP and AVIF format, as those two format can be slow to transcode in serving time. Currently only generated for AMP images. These two thumbnails are static images despite that their formats support animation.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_WEBP, but with the source image metadata propagated.",
            "AVIF is not yet a supported input for SCS serving time thumbnailing, trying to do so will give errors.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_AVIF, but with the source image metadata propagated.",
            "WebP format. Currently only generated for navboost images.",
            "AVIF format. Currently only generated for navboost images.",
            "WARNING: This type is dedicated to KG_IMAGE client. http://b/234653726"
          ],
          "type": "string"
        },
        "thumbWidth": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "WWWDocInfoThumbnail": {
      "id": "WWWDocInfoThumbnail",
      "properties": {
        "expirationTimestampMicros": {
          "format": "int64",
          "type": "string"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "description": "The type here corresponds to image_base::ThumbnailType defined in image/base/thumbnail-type.proto.",
          "format": "int32",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "WWWMetaTag": {
      "description": "We can return the content attribute for some or all meta tags.",
      "id": "WWWMetaTag",
      "properties": {
        "content": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "WWWResultInfoSubImageDocInfo": {
      "description": "The following message contains info of sub image docs, it is populated in query_state and consumed in web image boost twiddler: (go/WebImageBoostTwiddler).",
      "id": "WWWResultInfoSubImageDocInfo",
      "properties": {
        "additionalSafesearchSignals": {
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "bestThumbnailType": {
          "description": "The best thumbnail type is either 300K or 50K.",
          "enum": [
            "THUMBNAIL_TYPE_DEFAULT",
            "THUMBNAIL_TYPE_AREA_50K",
            "THUMBNAIL_TYPE_400",
            "THUMBNAIL_TYPE_800",
            "THUMBNAIL_TYPE_ORIGINAL",
            "THUMBNAIL_TYPE_ORIGINAL_HQ",
            "THUMBNAIL_TYPE_FAVICON_16",
            "THUMBNAIL_TYPE_FAVICON_28",
            "THUMBNAIL_TYPE_FAVICON_32",
            "THUMBNAIL_TYPE_FAVICON_64",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL",
            "THUMBNAIL_TYPE_FAVICON_16_DARK",
            "THUMBNAIL_TYPE_FAVICON_28_DARK",
            "THUMBNAIL_TYPE_FAVICON_32_DARK",
            "THUMBNAIL_TYPE_FAVICON_64_DARK",
            "THUMBNAIL_TYPE_FAVICON_ORIGINAL_DARK",
            "THUMBNAIL_TYPE_1080",
            "THUMBNAIL_TYPE_1600_HQ",
            "THUMBNAIL_TYPE_AREA_300K",
            "THUMBNAIL_TYPE_AREA_50K_ALPHA",
            "THUMBNAIL_TYPE_AREA_50K_SYNTHETIC_ALPHA",
            "THUMBNAIL_TYPE_AREA_2M",
            "THUMBNAIL_TYPE_AREA_2M_METADATA",
            "THUMBNAIL_TYPE_800_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ORIGINAL_ALPHA_WHITE",
            "THUMBNAIL_TYPE_ANIMATED_H144",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_LICENSED",
            "THUMBNAIL_TYPE_TENOR_250K_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_GIF",
            "THUMBNAIL_TYPE_TENOR_30K_OPTIMIZED_THUMBNAIL_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_OPTIMIZED_90P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100P_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200P_GIF",
            "THUMBNAIL_TYPE_TENOR_50K_OPTIMIZED_100W_GIF",
            "THUMBNAIL_TYPE_TENOR_100K_OPTIMIZED_200W_GIF",
            "THUMBNAIL_TYPE_TENOR_45K_PREVIEW_GIF",
            "THUMBNAIL_TYPE_TENOR_250K_MEDIUM_GIF",
            "THUMBNAIL_TYPE_AREA_2M_WEBP",
            "THUMBNAIL_TYPE_AREA_2M_WEBP_METADATA",
            "THUMBNAIL_TYPE_AREA_2M_AVIF",
            "THUMBNAIL_TYPE_AREA_2M_AVIF_METADATA",
            "THUMBNAIL_TYPE_AREA_50K_WEBP",
            "THUMBNAIL_TYPE_AREA_50K_AVIF",
            "THUMBNAIL_TYPE_ORIGINAL_HQ_KG"
          ],
          "enumDescriptions": [
            "DEPRECATED - use THUMBNAIL_TYPE_AREA_50K if possible. The default thumbnail type is deprecated and no longer served by SFFE. For legacy users (e.g. imagesearch heirloom UI) you must request a downsized THUMBNAIL_TYPE_AREA_50K thumbnail.",
            "This is the most common thumbnail type, used in image search results. It is defined to have 50625 pixels (= 225 x 225).",
            "This refers to a thumbnail that fits in a 400x400 box.",
            "This refers to a thumbnail that fits in a 800x800 box.",
            "This refers to re-encoding original image to JPEG at the same size (up to 10000x10000). Output quality may be lower.",
            "Re-encode image at the same size as original (up to 10000x10000) but with high-quality (q=90). This was introduced by TYPHOON client and is expected only for very few images in our table (under 10k). If you plan to use this contact amarna-dev@ and/or crt@",
            "These refer to favicon thumbnails of 16x16, 32x32 or 64x64. If the original image is an ico file containing multiple embedded images including 16x16, 32x32 or 64x64, these thumbnails are derived from the embedded image of the corresponding size. (If no such embedded image is found, prefer the closest size that's larger. If still no such size exists, prefer largest.) If no such size exists, these thumbnails are rescaled to an image whose maximum dimension is 16, 28, 32 or 64.",
            "",
            "",
            "",
            "This type of favicon will preserve the size of the original image.",
            "These refer to favicon thumbnails for dark mode. This triggers dark mode on the SVG decoding (and otherwise, the same as the above favicon types)",
            "",
            "",
            "",
            "",
            "This refers to a thumbnail that fits in a 1080x1080 box.",
            "This refers to a thumbnail that fits in a 1600x1600 box and is encoded with high-quality (q=90). Contact amarna-dev@/crt@/bingwang@ for using it.",
            "This uses the same MaxAreaSizer as THUMBNAIL_TYPE_AREA_50K. The exact area is defined to be 307200 (= 640 x 480).",
            "This is like THUMBNAIL_TYPE_AREA_50K, but with an alpha channel.",
            "DEPRECATED - Please do not introduce new requests for this type. It will be eliminated soon. Until then, it will behave like the AREA_50K_ALPHA type -- use that instead.",
            "This refers to a thumbnail with at most 2073600 pixels (=1920*1080). The image will be scaled down to 2M while preserving the aspect ratio if it's too large. If the thumbnail is in JPEG format, it is encoded with quality = 85. Besides, it supports alpha channel by default and does not convert lossless formats to JPEG.",
            "Similar to THUMBNAIL_TYPE_AREA_2M, but with the source image metadata propagated.",
            "In alpha-white thumbs, colors are remapped in RGBA to be more transparent the closer they are to white. This is for use with white-background images, so that the perceived background color can be darkened by rendering over gray. See go/alpha-white-thumbs for details and limitations. Sizing matches non-ALPHA_WHITE equivalents.",
            "",
            "Height-scaled animated thumb types, encoded as H264 previews. Suffix gives height, e.g. _H144 indicates height 144. Width is a scaled multiple-of-8 value so the thumb has approximately the same aspect ratio as the original. For more info, see http://go/animated-thumbs.",
            "New thumbnail type for licensed contents. From a thumbnail generation perspective this behaves similarly to THUMBNAIL_TYPE_ORIGINAL_HQ, but it exists as a separate thumbnail type to enable takedowns requested by owner. WARNING: This type is primarily used by go/licensed-media-service and is subject to policy changes. Please contact g/license-media-service-team before using.",
            "Tenor gifs go/tenor-integration-binary-serving-discussion",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Similar to THUMBNAIL_TYPE_AREA_2M but pre-transcoded to WebP and AVIF format, as those two format can be slow to transcode in serving time. Currently only generated for AMP images. These two thumbnails are static images despite that their formats support animation.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_WEBP, but with the source image metadata propagated.",
            "AVIF is not yet a supported input for SCS serving time thumbnailing, trying to do so will give errors.",
            "Similar to THUMBNAIL_TYPE_AREA_2M_AVIF, but with the source image metadata propagated.",
            "WebP format. Currently only generated for navboost images.",
            "AVIF format. Currently only generated for navboost images.",
            "WARNING: This type is dedicated to KG_IMAGE client. http://b/234653726"
          ],
          "type": "string"
        },
        "crops": {
          "format": "uint32",
          "type": "integer"
        },
        "deepCropBytes": {
          "description": "Deepcrop thumbnail cropping hints.",
          "format": "byte",
          "type": "string"
        },
        "docid": {
          "format": "uint64",
          "type": "string"
        },
        "documentTrust": {
          "format": "float",
          "type": "number"
        },
        "eqStar": {
          "description": "EQ* is a unified signal to capture the emotional quality (e.g. inspiration, lifestyle, context, etc.) of an image. For more information, please refer to go/image-inspiration-ranking-framework.",
          "format": "float",
          "type": "number"
        },
        "estRelevance": {
          "description": "Estimated Image Relevance ranging between 0.0 (Off-Topic) to 1.0 (Very Useful).",
          "format": "float",
          "type": "number"
        },
        "flowOutput": {
          "$ref": "ImageContentFlowProtoProd"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "height50k": {
          "format": "uint32",
          "type": "integer"
        },
        "humanModelScore": {
          "description": "DeepTags human model score. go/VisualShoppingImageAttributes",
          "format": "float",
          "type": "number"
        },
        "imageUrl": {
          "type": "string"
        },
        "pamirNormalizedScore": {
          "format": "float",
          "type": "number"
        },
        "pornSignals": {
          "description": "Encoded Safe Search annotations of the image. See image/safesearch/overall/public/image_porn_attachments.h for decoding functions.",
          "format": "int32",
          "type": "integer"
        },
        "safeForUniversal": {
          "description": "Result is not on the Images Universal blacklist. For more comprehensive filtering of IU images, including this bit, see superroot/impls/images/quality/safesearch/iu_inappropriate_filter_lib.h",
          "type": "boolean"
        },
        "salience": {
          "description": "Salient score, indicating how important an image is to the page it's on. Check go/salient-images-design-doc for details.",
          "format": "float",
          "type": "number"
        },
        "salientColorInfo": {
          "description": "4-bytes: (low order on the left) RRRRRRRR GGGGGGGG BBBBBBBB SS where R: 8-bits encoding color 'r' G: 8-bits encoding color 'g' B: 8-bits encoding color 'b' S: 2-bits encoding the color source - 00 = from color detection result - 01 = from cairo This field has the salient color information.",
          "format": "uint32",
          "type": "integer"
        },
        "score": {
          "format": "float",
          "type": "number"
        },
        "tqStar": {
          "description": "TQ* is a signal to capture the technical quality (e.g. exposure, sharpness, composition, etc.) of an image. For more information, please refer to go/tqstar.",
          "format": "float",
          "type": "number"
        },
        "tradFrac": {
          "format": "float",
          "type": "number"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        },
        "width50k": {
          "description": "Width and height of the AREA_50K thumbnail for this image.",
          "format": "uint32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "WWWSnippetResponse": {
      "description": "Per-document response for a www DocInfo request. Next field position: 55",
      "id": "WWWSnippetResponse",
      "properties": {
        "answerDocMatches": {
          "description": "A list of answers that had at least one hit in the document. Answers are identified by their index into the QRewriteQueryParams_AnswerSnippetInfo array (see //query/proto/query-params.proto).",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "chosenBodyTidbits": {
          "description": "Tidbits chosen from the document body. Consists of repeated [begin, end) half-open ranges in token offsets from the beginning of the document.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "docInfo": {
          "$ref": "WWWDocInfo"
        },
        "docPreviewRestrictions": {
          "$ref": "QualityDniDocPreviewRestrictions",
          "description": "DocPreviewRestrictions for canonical url."
        },
        "docPreviewRestrictionsForAmp": {
          "$ref": "QualityDniDocPreviewRestrictions",
          "description": "DocPreviewRestrictions for amp result."
        },
        "events": {
          "description": "Bitfield of snippet events and the various events. See SnippetEvents in ./snippets/defines.h for details on the contents.",
          "format": "uint64",
          "type": "string"
        },
        "extraInfo": {
          "$ref": "ExtraSnippetInfoResponse",
          "description": "If requested, the extra snippet info"
        },
        "findyTidbits": {
          "description": "A bitvector of the tidbits in the snippet that are appropriate for the Quick Scroll (Findy) Chrome extension. Typically these contain \"extra body matches\", i.e., important query items not in the title.",
          "format": "int32",
          "type": "integer"
        },
        "hasMessageType": {
          "description": "Additional available data (message type ids)",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "info": {
          "$ref": "Proto2BridgeMessageSet",
          "description": "Additional data. Currently, this is used for sitelinks, localinfo, manybox, discussion metadata, richsnippets, similarpages and breadcrumbs."
        },
        "isLoginPage": {
          "description": "True if the document represents a login page.",
          "type": "boolean"
        },
        "isValidResult": {
          "description": "Assume this is true unless we discover that the result doesn't match the the query, in which case this result is invalid despite having returned docinfo.",
          "type": "boolean"
        },
        "keyword": {
          "description": "Document keywords",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "listSnippet": {
          "$ref": "ListSnippetResponse",
          "description": "List snippet data."
        },
        "listSummary": {
          "description": "List summary phrase for list pages.",
          "type": "string"
        },
        "longStructuredSnippet": {
          "$ref": "LongStructuredSnippet",
          "description": "Returned if want_long_structured_snippets. If present, caller should ignore the normal snippet."
        },
        "matchesBitmapEncoded": {
          "description": "Bitmap representing matches to leaf query terms within document (body section and url). It gets populated if query_matches_info = true.",
          "format": "byte",
          "type": "string"
        },
        "matchesBitmapSize": {
          "format": "int32",
          "type": "integer"
        },
        "metaTags": {
          "description": "Meta tags",
          "items": {
            "$ref": "WWWMetaTag"
          },
          "type": "array"
        },
        "numTokensSkippedByInDocRestrictionsInPrinting": {
          "description": "Similar to num_tokens_skipped_by_in_doc_restrictions_in_scoring, but this number is for tokens skipped during printing, since printer owns its own token info manager which populates tokens.",
          "format": "int32",
          "type": "integer"
        },
        "numTokensSkippedByInDocRestrictionsInScoring": {
          "description": "Number of tokens that is skipped because of in doc restrictions during scoring. This is an estimate, as the list of tokens is cached in TokenInfoManager. We should only monitor the cases where this number is too big or non-zero.",
          "format": "int32",
          "type": "integer"
        },
        "numberOfPages": {
          "format": "int32",
          "type": "integer"
        },
        "obsoleteLocalinfo": {
          "description": "LocalWWWInfo",
          "type": "string"
        },
        "obsoleteManybox": {
          "description": "ManyboxData",
          "type": "string"
        },
        "obsoleteSitemap": {
          "description": "These fields were previously optional messages, but CL 2388905 moved them into the MessageSet. However, at this time, old Mustang binaries are still deployed in production and probably will be around for awhile. So, servers which need to talk to old binaries and need to use these fields need to check both the obsolete versions and the MessageSet version. Sitemap",
          "type": "string"
        },
        "odp": {
          "description": "Was odp used in the snippets? DEPRECATED - this is no longer populated as of June 2017.",
          "type": "boolean"
        },
        "orionEntities": {
          "$ref": "OrionDocEntitiesProto",
          "description": "DEPRECATED If requested, the orion entities"
        },
        "scienceInfo": {
          "$ref": "ScienceIndexSignal",
          "description": "Abbreviated bibliographic data from Google Scholar."
        },
        "sectionHeadingAnchorName": {
          "type": "string"
        },
        "sectionHeadingText": {
          "description": "If requested, the snippet generator may take note of query items present in an entry in an on-page table-of-contents (i.e. a series of on-page links to named anchors.) If so, these two fields contain the formatted and highlighted entry and the name of the on-page anchor it links to, respectively. This may be used by GWS to show a direct link to that named anchor on the page.",
          "type": "string"
        },
        "seenNotTerm": {
          "description": "Did a negative query term match the meta description?",
          "type": "boolean"
        },
        "sentimentSnippets": {
          "description": "DEPRECATED Sentiment snippets",
          "items": {
            "$ref": "RepositoryAnnotationsMustangSentimentSnippetAnnotations"
          },
          "type": "array"
        },
        "siteDisplayName": {
          "description": "The display name of the document's domain used as the first part of VisUrl, e.g, \"Google > play > store\" is the VisUrl of \"https://play.google.com/store/\". Wherein, \"Google\" is site_display_name of the domain \"google.com\". See go/site-display-name for more details.",
          "type": "string"
        },
        "snippetBylineDate": {
          "description": "Byline date for time sensitive snippets. Most of the time it originates from quality_timebased::SyntacticDate and it is floored to PT midnight.",
          "format": "int64",
          "type": "string"
        },
        "snippetExtraInfo": {
          "$ref": "SnippetExtraInfo"
        },
        "snippetHighlightMatchesBitmap": {
          "description": "List of bitmaps representing matches to leaf query terms within each of the highlighted snippet text fragments. Consecutive bitmaps correspond to consecutive text fragments. It gets populated iff return_query_snippet_highlight_matches = true. Example: document body section: \"This cafe has pet friendly patio.\" squery: (a (o dog :o pet :syn:general) friendly :o (o restaurant :o cafe :syn:general)) Let's assume the returned snippet text contains the whole document body section where two fragments get highlighted as follows: \"This *cafe* has *pet friendly* patio.\" Then, the returned snippet_highlight_matches_bitmap[] list will have two bitmaps: bitmap[0] = <\"cafe\" -> leaf term with index 4> = {encoded: DenseEncode(\"00001\"), size: 5} bitmap[1] = <\"pet\" and \"friendly\" -> leaf terms with indexes 1 and 2> = {encoded: DenseEncode(\"011\"), size: 3}",
          "items": {
            "$ref": "WWWSnippetResponseBitmapPB"
          },
          "type": "array"
        },
        "snippetPageNumber": {
          "description": "If requested the page number on which the snippet begins. (Only for documents such as PDFs where page numbers are well-defined.)",
          "format": "int32",
          "type": "integer"
        },
        "snippetPrefixCharCount": {
          "description": "Character counts of snippet prefix, if any. E.g. section heading, list summary, byline date.",
          "format": "int32",
          "type": "integer"
        },
        "snippetRenderedToken": {
          "description": "How tokens are rendered in generating snippet.",
          "items": {
            "$ref": "MustangSnippetsRenderedToken"
          },
          "type": "array"
        },
        "snippethash": {
          "description": "A hash for duplicate detection. Two results with the same content can return different snippets if, for example, one has an ODP entry and the other does not. Gws can use this value reliably to filter duplicates. It is a hash of body only tidbits.",
          "format": "int64",
          "type": "string"
        },
        "snippetsRanklabFeatures": {
          "$ref": "MustangReposWwwSnippetsSnippetsRanklabFeatures",
          "description": "Records features to analyze titles/snippets in ranklab."
        },
        "squeryFingerprint": {
          "description": "This field is never set.",
          "format": "uint64",
          "type": "string"
        },
        "titleLengthAdjustedForBrowserWidth": {
          "description": "True if the title length is already adjusted for the browser width. If it is true, GWS needs not truncate the title.",
          "type": "boolean"
        },
        "titleRenderedToken": {
          "description": "How tokens are rendered in generating title. Note: In rendering a title, the page title part and the site/host/domain title part can be flipped after initial rendering. The flip, if happend, may not be reflected in this field. That is, this field may contain the tokens in the original, pre-flip, order.",
          "items": {
            "$ref": "MustangSnippetsRenderedToken"
          },
          "type": "array"
        },
        "titleSizeParams": {
          "$ref": "TitleSizeParams",
          "description": "Will only be set when `title_use_num_of_chars` is false."
        },
        "truncatedTitle": {
          "description": "Only for desktop web search. Please refer to Title.keep_original_title_and_populate_truncated_one for more details.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WWWSnippetResponseBitmapPB": {
      "description": "Encoded bitmap.",
      "id": "WWWSnippetResponseBitmapPB",
      "properties": {
        "encoded": {
          "format": "byte",
          "type": "string"
        },
        "size": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "WatchpageLanguageWatchPageLanguageResult": {
      "id": "WatchpageLanguageWatchPageLanguageResult",
      "properties": {
        "watchpageLanguage": {
          "description": "The language predicted by the WatchPage Language model.",
          "enum": [
            "ENGLISH",
            "DANISH",
            "DUTCH",
            "FINNISH",
            "FRENCH",
            "GERMAN",
            "HEBREW",
            "ITALIAN",
            "JAPANESE",
            "KOREAN",
            "NORWEGIAN",
            "POLISH",
            "PORTUGUESE",
            "RUSSIAN",
            "SPANISH",
            "SWEDISH",
            "CHINESE",
            "CZECH",
            "GREEK",
            "ICELANDIC",
            "LATVIAN",
            "LITHUANIAN",
            "ROMANIAN",
            "HUNGARIAN",
            "ESTONIAN",
            "TG_UNKNOWN_LANGUAGE",
            "UNKNOWN_LANGUAGE",
            "BULGARIAN",
            "CROATIAN",
            "SERBIAN",
            "IRISH",
            "GALICIAN",
            "TAGALOG",
            "TURKISH",
            "UKRAINIAN",
            "HINDI",
            "MACEDONIAN",
            "BENGALI",
            "INDONESIAN",
            "LATIN",
            "MALAY",
            "MALAYALAM",
            "WELSH",
            "NEPALI",
            "TELUGU",
            "ALBANIAN",
            "TAMIL",
            "BELARUSIAN",
            "JAVANESE",
            "OCCITAN",
            "URDU",
            "BIHARI",
            "GUJARATI",
            "THAI",
            "ARABIC",
            "CATALAN",
            "ESPERANTO",
            "BASQUE",
            "INTERLINGUA",
            "KANNADA",
            "PUNJABI",
            "SCOTS_GAELIC",
            "SWAHILI",
            "SLOVENIAN",
            "MARATHI",
            "MALTESE",
            "VIETNAMESE",
            "FRISIAN",
            "SLOVAK",
            "CHINESE_T",
            "FAROESE",
            "SUNDANESE",
            "UZBEK",
            "AMHARIC",
            "AZERBAIJANI",
            "GEORGIAN",
            "TIGRINYA",
            "PERSIAN",
            "BOSNIAN",
            "SINHALESE",
            "NORWEGIAN_N",
            "PORTUGUESE_P",
            "PORTUGUESE_B",
            "XHOSA",
            "ZULU",
            "GUARANI",
            "SESOTHO",
            "TURKMEN",
            "KYRGYZ",
            "BRETON",
            "TWI",
            "YIDDISH",
            "SERBO_CROATIAN",
            "SOMALI",
            "UIGHUR",
            "KURDISH",
            "MONGOLIAN",
            "ARMENIAN",
            "LAOTHIAN",
            "SINDHI",
            "RHAETO_ROMANCE",
            "AFRIKAANS",
            "LUXEMBOURGISH",
            "BURMESE",
            "KHMER",
            "TIBETAN",
            "DHIVEHI",
            "CHEROKEE",
            "SYRIAC",
            "LIMBU",
            "ORIYA",
            "ASSAMESE",
            "CORSICAN",
            "INTERLINGUE",
            "KAZAKH",
            "LINGALA",
            "MOLDAVIAN",
            "PASHTO",
            "QUECHUA",
            "SHONA",
            "TAJIK",
            "TATAR",
            "TONGA",
            "YORUBA",
            "CREOLES_AND_PIDGINS_ENGLISH_BASED",
            "CREOLES_AND_PIDGINS_FRENCH_BASED",
            "CREOLES_AND_PIDGINS_PORTUGUESE_BASED",
            "CREOLES_AND_PIDGINS_OTHER",
            "MAORI",
            "WOLOF",
            "ABKHAZIAN",
            "AFAR",
            "AYMARA",
            "BASHKIR",
            "BISLAMA",
            "DZONGKHA",
            "FIJIAN",
            "GREENLANDIC",
            "HAUSA",
            "HAITIAN_CREOLE",
            "INUPIAK",
            "INUKTITUT",
            "KASHMIRI",
            "KINYARWANDA",
            "MALAGASY",
            "NAURU",
            "OROMO",
            "RUNDI",
            "SAMOAN",
            "SANGO",
            "SANSKRIT",
            "SISWANT",
            "TSONGA",
            "TSWANA",
            "VOLAPUK",
            "ZHUANG",
            "KHASI",
            "SCOTS",
            "GANDA",
            "MANX",
            "MONTENEGRIN",
            "AKAN",
            "IGBO",
            "MAURITIAN_CREOLE",
            "HAWAIIAN",
            "CEBUANO",
            "EWE",
            "GA",
            "HMONG",
            "KRIO",
            "LOZI",
            "LUBA_LULUA",
            "LUO_KENYA_AND_TANZANIA",
            "NEWARI",
            "NYANJA",
            "OSSETIAN",
            "PAMPANGA",
            "PEDI",
            "RAJASTHANI",
            "SESELWA_CREOLE_FRENCH",
            "TUMBUKA",
            "VENDA",
            "WARAY_PHILIPPINES",
            "NUM_LANGUAGES"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Norwegian\" = \"no\" normally implies Bokm\u00e5l (\"nb\"). See also NORWEGIAN_N. Consider using IsNorwegianLanguage().",
            "",
            "WARNING: \"Portuguese\" in the enum Language implies the Iberian variant, while Google and industry standard practice is for \"pt\" to imply Brazilian, for the much larger population. The old LanguageCode() function returns \"pt\" for legacy reasons. The III LanguageEnumLanguageCodeConverter converts it to \"pt-PT\" to preserve the semantics. Converting between this legacy enum and industry-standard language tags cannot preserve the distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage().",
            "",
            "",
            "",
            "\"Chinese\" normally implies simplified Han characters (\"zh-Hans\"). See also CHINESE_T. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "Serbian is commonly written in two scripts. The default is Cyrillic (\"sr\" = \"sr-Cyrl\"). It is also often written with Latin letters (\"sr-Latn\"). This enum does not convey that distinction.",
            "",
            "",
            "TAGALOG is used to mean both Tagalog (tl) and Filipino (fil). These are nearly the same; Filipino is the official language, and \"fil\" is normally used for UI settings etc. The old LanguageCode() function returns \"tl\".",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\"Bihari\" is not a language: There are several different languages spoken in and around the Indian state of Bihar. This is like saying \"Swiss\" to mean German+French+Italian+Romansh.",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Chinese written in traditional Han characters (\"zh-Hant\"). See also CHINESE. Consider using IsChineseLanguage().",
            "",
            "",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "UI only. LangId language: CROATIAN (28)",
            "",
            "Norwegian Nynorsk (\"nn\"). See also NORWEGIAN. Consider using IsNorwegianLanguage(). UI only. LangId language: NORWEGIAN (10)",
            "Portuguese in Portugal (\"pt-PT\"). See the WARNING at PORTUGUESE. Avoid a distinction between PORTUGUESE and PORTUGUESE_P. Relying on it is a bug. Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "Portuguese in Brazil (\"pt-BR\"). Consider using IsPortugueseLanguage(). UI only. LangId language: PORTUGUESE (12)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "",
            "UI only.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "",
            "This has been documented as \"Kurmanji (kmr) + Sorani (ckb) + Kurdish (ku)\". There are several kinds of Kurdish languages. \"ku\" normally implies Northern Kurdish = Kurmanji (kmr) which is normally written in Latin letters. \"ckb\" is Central Kurdish (largely in Iraq) which is normally written in Arabic letters (thus right-to-left).",
            "",
            "",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "",
            "sometimes spelled Divehi; lang of Maldives",
            "",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "\"Moldavian\" is the same language as Romanian. In language tags, \"ro-MD\" can be used but is not normally necessary. Avoid making a distinction between ROMANIAN and MOLDAVIAN. Consider using IsRomanianLanguage(). UI only. LangId language: ROMANIAN (22)",
            "",
            "",
            "UI only.",
            "",
            "",
            "",
            "",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "This is a vague group of languages, not one language. UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only. More commonly called Luganda.",
            "UI only.",
            "UI only. LangId language: SERBIAN (29)",
            "UI only.",
            "UI only.",
            "UI only.",
            "UI only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "Translate only.",
            "CLD only.",
            "Translate only.",
            "CLD only.",
            "CLD only.",
            "CLD only.",
            "Translate only.",
            "Always keep this at the end. It is not a"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "WeboftrustLiveResultDocBoostData": {
      "description": "Page boosting using Live Results data. Attaching this proto to a document indicates that a Live Result feed exists for that document, and that this feed has sufficient reliability to warrant potential boosting of the document rank. Next ID: 3",
      "id": "WeboftrustLiveResultDocBoostData",
      "properties": {
        "boostLevel": {
          "description": "Identifies the degree to which the existence of this LiveResult should boost a query's score (when the query is performed within the hot_times range). This field is always in the range [0,1]. A missing field, a value of 0, or a value outside the legal range indicates that no boosting is performed. A value of 1 indicates that the maximum level of boosting will be applied. This field will be updated from time to time based on CTR and other signals.",
          "format": "float",
          "type": "number"
        },
        "hotTimes": {
          "$ref": "WeboftrustTimeRange",
          "description": "Specifies the time range within which this LiveResult is relevant. Used for deciding whether the rank of the corresponding page should be boosted. For example, this range can be set to encompass a few days before and after a sports game to which the page refers. If this field is missing, no boosting is performed. Specifying that a page should always be boosted is not recommended, but can be accomplished by setting hot_times.start_unix_time=0 and hot_time.end_unix_time=0x7fffffff. Note that multiple time ranges can be implemented by adding several LiveResultDocBoostData messages to the LiveResultsDocAttachments proto. If overlapping time ranges are used, the proto containing the highest boost level will be used."
        }
      },
      "type": "object"
    },
    "WeboftrustLiveResultProviderDocAttachment": {
      "description": "Per-provider attachment of a LiveResult. Used to identify pages for which result-based triggering of Live Results should appear. Theoretically there can be more than one attachment per web document, so we keep them as a repeated field of the LiveResultsDocAttachment. Next ID: 4",
      "id": "WeboftrustLiveResultProviderDocAttachment",
      "properties": {
        "providerId": {
          "format": "uint64",
          "type": "string"
        },
        "tag": {
          "description": "Tag that specifies the use-case within provider's data. It appears as a string in Alexandria signal and in the DocJoins. During the indexing stage this field will be converted to a 64-bit fingerprint to save space. See the \"tag_fp\" field, below.",
          "type": "string"
        },
        "tagFp": {
          "description": "A fingerprint of the \"tag\" field, automatically calculated during the indexing stage. Will be used as a key for fetching the data.",
          "format": "uint64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WeboftrustLiveResultsDocAttachments": {
      "description": "Message to which we attach to web documents in order to decide which LiveResult to trigger. Next ID: 3",
      "id": "WeboftrustLiveResultsDocAttachments",
      "properties": {
        "docBoost": {
          "description": "Information about potential rank boosting for the document by virtue of its Live Result feed.",
          "items": {
            "$ref": "WeboftrustLiveResultDocBoostData"
          },
          "type": "array"
        },
        "providerAttachment": {
          "description": "Identifies a Live Result which is to be attached to the document.",
          "items": {
            "$ref": "WeboftrustLiveResultProviderDocAttachment"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "WeboftrustTimeRange": {
      "description": "Time range (start time and end time). Used to indicate the times in which a LiveResult is considered \"hot\" and thus a potential for boosting. Specified as Unix time (seconds since midnight, January 1, 1970). Time zone is same as that for query_start_time (i.e., GMT). Next ID: 3",
      "id": "WeboftrustTimeRange",
      "properties": {
        "endUnixTime": {
          "format": "int64",
          "type": "string"
        },
        "startUnixTime": {
          "description": "Start and end times should always appear. Marked as optional to avoid breaking code.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WebutilHtmlTypesSafeHtmlProto": {
      "description": "IMPORTANT: It is unsafe to accept this message from an untrusted source, since it's trivial for an attacker to forge serialized messages that don't fulfill the type's safety contract -- for example, it could contain attacker controlled script. A system which receives a SafeHtmlProto implicitly trusts the producer of the SafeHtmlProto. So, it's generally safe to return this message in RPC responses, but generally unsafe to accept it in RPC requests.",
      "id": "WebutilHtmlTypesSafeHtmlProto",
      "properties": {
        "privateDoNotAccessOrElseSafeHtmlWrappedValue": {
          "description": "IMPORTANT: Never set or read this field, even from tests, it is private. See documentation at the top of .proto file for programming language packages with which to create or read this message.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WirelessTranscoderFetchFetchMetadata": {
      "id": "WirelessTranscoderFetchFetchMetadata",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "format": "byte",
          "type": "string"
        }
      },
      "type": "object"
    },
    "WirelessTranscoderFetchFetchSourceInfo": {
      "description": "To tag which fetcher satisfied this fetch request with optional detail.",
      "id": "WirelessTranscoderFetchFetchSourceInfo",
      "properties": {
        "detail": {
          "description": "Provides fetcher-specific detail about how source satisfied the request.",
          "type": "string"
        },
        "source": {
          "description": "The fetcher that ultimately satisfied this fetch request.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeBackstageSuperVodCommentInfo": {
      "description": "Contains information about comment that is posted through a Super VOD purchase. Next ID: 6",
      "id": "YoutubeBackstageSuperVodCommentInfo",
      "properties": {
        "currencyCode": {
          "description": "Currency code the user uses to purchase this Super VOD item.",
          "type": "string"
        },
        "entitlementId": {
          "description": "The ID of the Super VOD entitlement. It uniquely identifies a Super VOD purchase.",
          "type": "string"
        },
        "priceInMicros": {
          "description": "Price of Super VOD item the user purchases in micros.",
          "format": "uint64",
          "type": "string"
        },
        "superVodItemId": {
          "description": "The Super VOD item the user purchases, it represents price tier.",
          "type": "string"
        },
        "version": {
          "description": "Which version of experiment this Super VOD comment is posted in.",
          "enum": [
            "UNSPECIFIED_VERSION",
            "V1_DEFAULT_MESSAGE",
            "V2_DECORATED_DEFAULT_MESSAGE",
            "V3_USER_GENERATED_MESSAGE"
          ],
          "enumDescriptions": [
            "",
            "DEPRECATED since decorated comments are fully launched. Comments previously posted with this enum value will continue to exist. Undecorated Comment. When user buys a Super VOD, a comment with default message will be automatically posted on behalf of the user.",
            "Decorated Comment. When user buys a Super VOD, a comment with default message and a special decoration will be automatically posted on behalf of the user. https://screenshot.googleplex.com/6aYvGnX5Bp9bT9Q",
            "UGC. When user buys a Super VOD, they can write their own UGC comment which will be decorated and automatically posted on behalf of the user."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeCommentsClusteringMiniStanza": {
      "description": "Intended to be simpler to work with than the ExportedStanza it's derived from See documentation: https://g3doc.corp.google.com/company/teams/youtube/community_intelligence/eng_resources/data_sources.md#ministanza Next available: 77",
      "id": "YoutubeCommentsClusteringMiniStanza",
      "properties": {
        "ansibleScores": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "TnS Ansible scores map. Keyed by various model names.",
          "type": "object"
        },
        "automodScores": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Automod scores map. Keyed by various model names.",
          "type": "object"
        },
        "blarneyStoneScore": {
          "$ref": "YoutubeDistillerBlarneyStoneScores",
          "description": "The blarney stone score."
        },
        "channelDiscussionId": {
          "description": "The channel this channel discussion comment belongs to. Note that this will match channel_id for such comments.",
          "type": "string"
        },
        "channelId": {
          "description": "The channel of the video this comment belongs to.",
          "type": "string"
        },
        "channelProfileQualityScores": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Channel profile quality scores map. Keyed by various model names.",
          "type": "object"
        },
        "charEntropy": {
          "description": "Char entropy of the comment.",
          "format": "double",
          "type": "number"
        },
        "commentClassification": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Comment classification mapping all secondary keys to values. E.g. {\"joke_v1\":0.8, \"joke_v2\":0.7, \"question_v1\":0.3}.",
          "type": "object"
        },
        "commentClassificationBuckets": {
          "description": "List of pre-defined classification score buckets to which the comment belongs. E.g. satisfaction_v1_percentile_80.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "commentClassificationRanking": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Comment classification for ranking mapping all secondary keys to values. E.g. {\"joke_v1\":0.8, \"joke_v2\":0.7, \"question_v1\":0.3}.",
          "type": "object"
        },
        "commentType": {
          "description": "Whether the comment is on a video, post, or other product.",
          "enum": [
            "UNKNOWN_PRODUCT_TYPE",
            "UNSUPPORTED_PRODUCT_TYPE",
            "YT_VIDEO_COMMENT",
            "YT_CHANNEL_DISCUSSION",
            "YT_BACKSTAGE_COMMENT",
            "YT_LIVE_CHAT",
            "YT_LIVE_CHAT_CONFIG",
            "YT_CHANNEL_CONFIG",
            "YT_POST_COMMENT"
          ],
          "enumDescriptions": [
            "",
            "Product which the model currently does not support for moderation.",
            "YouTube video comments.",
            "YouTube channel discussions.",
            "YouTube backstage comments.",
            "YouTube live chat messages.",
            "YouTube live chat configurations: contains the kv pair indicating whether auto moderation is enabled.",
            "YouTube channel configurations: contains channel configured badwords and moderators.",
            "YouTube post comments (using the unified comment system)."
          ],
          "type": "string"
        },
        "content": {
          "description": "The text content of the comment.",
          "type": "string"
        },
        "contentUpdateTimestamp": {
          "description": "The stanza content last update timestamp, as observed by the server. Note that for many comments older than Nov. 2014 this is unset in the original stanza. MiniStanza tries to be consistent with the original so for such comments it remains unset in MiniStanza. If you use this field you should check has_content_update_timestamp().",
          "format": "google-datetime",
          "type": "string"
        },
        "coverageSamplingEligible": {
          "description": "Whether or not this comment is eligible for comment classifier coverage sampling (in Kapla). Refer to go/coverage-monitoring-for-kapla-comment-classifiers for more information.",
          "type": "boolean"
        },
        "creationDevice": {
          "description": "The creation device. Derived from shares:yt_creation_device",
          "enum": [
            "UNKNOWN_INTERFACE",
            "WEB",
            "WEB_GAMING",
            "WEB_MUSIC",
            "WEB_MUSIC_EMBEDDED_PLAYER",
            "WEB_REMIX",
            "WEB_EXPERIMENTS",
            "WEB_MOVIES",
            "WEB_HEROES",
            "WEB_CREATOR",
            "WEB_LIVE_STREAMING",
            "WEB_KIDS",
            "WEB_INTERNAL_ANALYTICS",
            "WEB_PARENT_TOOLS",
            "WEB_PHONE_VERIFICATION",
            "WEB_EMBEDDED_PLAYER",
            "WEB_UNPLUGGED",
            "WEB_UNPLUGGED_ONBOARDING",
            "WEB_UNPLUGGED_OPS",
            "WEB_UNPLUGGED_PUBLIC",
            "MWEB",
            "MWEB_TIER_2",
            "ANDROID",
            "ANDROID_CASUAL",
            "ANDROID_CREATOR",
            "ANDROID_GAMING",
            "ANDROID_KIDS",
            "ANDROID_INSTANT",
            "ANDROID_MUSIC",
            "ANDROID_TESTSUITE",
            "ANDROID_UNPLUGGED",
            "ANDROID_VR",
            "ANDROID_WITNESS",
            "ANDROID_SPORTS",
            "ANDROID_LITE",
            "ANDROID_MOVIES",
            "ANDROID_EMBEDDED_PLAYER",
            "ANDROID_PRODUCER",
            "IOSAPPLE",
            "IOS",
            "IOS_CREATOR",
            "IOS_DIRECTOR",
            "IOS_GAMING",
            "IOS_INSTANT",
            "IOS_KIDS",
            "IOS_LIVE_CREATION_EXTENSION",
            "IOS_MESSAGES_EXTENSION",
            "IOS_MUSIC",
            "IOS_TABLOID",
            "IOS_UNPLUGGED",
            "IOS_WITNESS",
            "IOS_SPORTS",
            "IOS_EMBEDDED_PLAYER",
            "IOS_MOVIES",
            "IOS_PILOT_STUDIO",
            "IOS_UPTIME",
            "IOS_PRODUCER",
            "OTHERAPP",
            "TVHTML5",
            "TVHTML5_AUDIO",
            "TVHTML5_CAST",
            "TVHTML5_KIDS",
            "TVHTML5_FOR_KIDS",
            "TVHTML5_MOVIES",
            "TVHTML5_SIMPLY",
            "TVHTML5_SIMPLY_EMBEDDED_PLAYER",
            "TVHTML5_UNPLUGGED",
            "TVHTML5_VR",
            "TVHTML5_YONGLE",
            "TVLITE",
            "TV_UNPLUGGED_CAST",
            "TV_UNPLUGGED_ANDROID",
            "XL",
            "ROKU_MOVIES",
            "CC_MOVIES",
            "TVANDROID",
            "ANDROID_TV",
            "ANDROID_TV_KIDS",
            "ANDROID_TV_MOVIES",
            "XBOX",
            "XBOXONEGUIDE",
            "CLIENTX",
            "TVAPPLE",
            "TVAPPLE_MOVIES",
            "AIRPLAY_MOVIES",
            "WEB_MUSIC_ANALYTICS",
            "MUSIC_INTEGRATIONS",
            "WEB_HANGOUTS_MEET",
            "KAIOS_LAUNCHER",
            "WEB_GVP_ADS",
            "ANDROID_GVP_ADS",
            "IOS_GVP_ADS",
            "VAST_GVP_ADS",
            "GOOGLE_ASSISTANT",
            "GOOGLE_LIST_RECS",
            "GOOGLE_MEDIA_ACTIONS",
            "MEDIA_CONNECT_FRONTEND",
            "GOOGLE_TV"
          ],
          "enumDescriptions": [
            "",
            "Targeted for desktop. youtube.com",
            "",
            "Legacy YouTube Music playback page for shares. Deprecated with",
            "unbundling (2017). For music.youtube.com, see WEB_REMIX. YouTube Music embedded web player.",
            "YouTube Music web app.",
            "",
            "Play Movies: go/avi.",
            "YT Heroes: go/yt-heroes.",
            "YouTube Creator Studio Desktop app.",
            "YouTube Live Streaming Desktop app (go/rotom).",
            "YouTube Kids web app.",
            "YouTube Internal Analytics",
            "YT Parent Tools web app (go/parent-zone-prd).",
            "YouTube Phone Verification web app",
            "(go/wexit-phone-verify).",
            "Unplugged web clients. Sign-in, member experience (Polymer app).",
            "Onboarding web app.",
            "Unplugged ops tools.",
            "Public web experience (e.g. browse).",
            "Targeted for mobile and/or tablet devices. m.youtube.com for smart phones and tablets",
            "MWEB_TIER_2 is deprecated, turned down August 2019, go/future-of-v2",
            "Android Main app",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "DO NOT USE",
            "",
            "Play Movies: go/avi.",
            "",
            "Producer: go/yt-producer",
            "Apple-controlled app for iOS, deprecated in ~2013",
            "iOS Main App (YouTube-controlled)",
            "",
            "DO NOT USE",
            "",
            "",
            "",
            "",
            "YT integration for Apple's iMessage. go/ytios-imessage-extension-design",
            "TL bgoodrich@",
            "DO NOT USE",
            "",
            "",
            "DO NOT USE",
            "go/ytios-embedded-player",
            "Play Movies: go/avi.",
            "go/pilot",
            "go/uptime",
            "Producer: go/yt-producer",
            "ANDROID_EMBEDDED_PLAYER used to be OTHERAPP. Android embeds viewed on devices that have not upgraded the YouTube Main App in a long time still report as OTHERAPP. (Legacy embeds use the ClientName ANDROID and the SoftwareInterface OTHERAPP.) This may have been used in other contexts in the past (e.g. players created by third-parties), but the third-party case is unsupported today. Do not use this client name for new apps.",
            "Targeted for TV and/or game console devices. youtube.com/tv",
            "youtube.com/tv, on display-less Cast receivers.",
            "youtube.com/tv, on Cast Receivers.",
            "Kids youtube app.",
            "Kids mode within the TVHTML5 app.",
            "Play Movies: go/avi.",
            "go/yt-simply.",
            "go/yt-simply-embedded-design",
            "Unplugged Living Room app.",
            "NOT USED, /tv based VR devices log TVHTML5.",
            "go/yongle go/yongle-playback.",
            "youtube.com/leanbacklite",
            "Unplugged Chromecast app",
            "Unplugged Android TV app",
            "youtube.com/xl. No longer available.",
            "Play Movies: go/avi.",
            "Chromecast Play Movies: go/avi.",
            "Old Google TV app. No longer available.",
            "Android TV app, introduced at I/O 2014.",
            "Kids Android TV app.",
            "Play Movies: go/avi.",
            "Silverlight Xbox 360 app. No longer available.",
            "Xbox One launcher app.",
            "clientx.corp.google.com",
            "Apple TV app",
            "Play Movies: go/avi.",
            "Play Movies: go/avi.",
            "Music Analytics (charts.youtube.com)",
            "Music Integrations (go/music-integrations).",
            "Hangouts meet broadcast (go/yt-thor-broadcast)",
            "YouTube Launcher on KaiOS phones.",
            "GVP clients (IMA and GMA SDKs) go/gvp-sdk These are ad SDKs used by non-YouTube publishers to play ads, including YouTube hosted ads. The main interaction with YouTube is for TrueView, which increments YouTube viewcount of the ad video after the delay is reached. Thus, the ad SDKs send requests to the viewcount/VSS pipeline. IMA SDK",
            "GMA SDK Android",
            "GMA SDK iOS",
            "VAST based SDKs",
            "Middleware or Frontend Server Clients Google Assistant integration with Voz",
            "List Recs Service Clients",
            "Media Actions Service Clients",
            "YouTube Media Connect Frontend (YMCFE)",
            "Google TV clients New Google TV devices (go/gtv-deck). This is added to support go/gtv-ads."
          ],
          "type": "string"
        },
        "creationTimeInSeconds": {
          "description": "The time when the comment is created.",
          "format": "int64",
          "type": "string"
        },
        "detailedLanguageCode": {
          "description": "The language code with extra script details. This is derived from detailed_language_code if it's populated, otherwise the same as language_code. E.g. mr-Latn",
          "type": "string"
        },
        "distillerEngagements": {
          "$ref": "AppsPeopleActivityStreamqualityDistillerEngagements",
          "description": "All distiller engagements like reports and downvotes."
        },
        "eligibleQualifiedTeaserFilters": {
          "description": "The qualified comment teaser filters that this comment is eligible for. Refer to go/comment-teaser-design for more information.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "empiricalCtrs": {
          "$ref": "VideoYoutubeCommentsRankingCTRMetrics",
          "description": "Comments empirical CTRs."
        },
        "fds": {
          "description": "Fountain Discovery Score, which represents the reputation of the author.",
          "format": "double",
          "type": "number"
        },
        "hasCreatorHeart": {
          "description": "Indicator for whether there is creator heart on this comment.",
          "type": "boolean"
        },
        "hasCreatorReply": {
          "description": "If the comment has a creator reply.",
          "type": "boolean"
        },
        "isAuthorSponsor": {
          "description": "If the author is a channel member (sponsor).",
          "type": "boolean"
        },
        "isDeleted": {
          "description": "Whether a comment is from deleted shares. See stanza_restrictions for more specific information and is_publicly_visible for comments which are allowed to be seen by everyone.",
          "type": "boolean"
        },
        "isPinned": {
          "description": "Whether the comment is pinned. This is derived from the DestinationStreamDump.",
          "type": "boolean"
        },
        "isPubliclyVisible": {
          "description": "If the post is publicly visible.",
          "type": "boolean"
        },
        "isReply": {
          "description": "Whether the comment is a reply.",
          "type": "boolean"
        },
        "isSubscriber": {
          "description": "If the comment author is publicly subscribed to the channel.",
          "type": "boolean"
        },
        "languageCode": {
          "description": "Unicode CLDR language code of the segments, as implemented by //depot/google3/java/com/google/i18n/identifiers/LanguageCode.java This is derived from user_content and should be considered the canonical language code of the comment.",
          "type": "string"
        },
        "lastReplyTimestampUsec": {
          "description": "The time when last reply is created.",
          "format": "int64",
          "type": "string"
        },
        "lowQualityDecisions": {
          "additionalProperties": {
            "type": "boolean"
          },
          "description": "Low quality decisions. Keyed by decision types corresponding to secondary keys.",
          "type": "object"
        },
        "mentionedTimestampCommentSecond": {
          "description": "Timed comments for the \"mentioned\" secondary key.",
          "format": "int32",
          "type": "integer"
        },
        "misinfoScores": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Misinfo scores map. Keyed by various model names.",
          "type": "object"
        },
        "numDislikes": {
          "description": "Number of dislikes the comment has.",
          "format": "int32",
          "type": "integer"
        },
        "numLikes": {
          "description": "Number of likes the comment has.",
          "format": "int32",
          "type": "integer"
        },
        "numRepliers": {
          "description": "Number of different repliers the comment has.",
          "format": "int32",
          "type": "integer"
        },
        "numReplies": {
          "description": "Number of non-abusive replies the comment has.",
          "format": "int32",
          "type": "integer"
        },
        "numSubscribersBucket": {
          "description": "Bucketed number of subscribers held by comment author.",
          "format": "int32",
          "type": "integer"
        },
        "offlineEngagementScores": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Offline engagement scores map. Keyed by various model names.",
          "type": "object"
        },
        "parentId": {
          "description": "The parent stanza's stanza_id, empty for top-level posts (non-replies). Prefer is_reply field for checking if a comment is a reply since that is unaffected by surrogatization. For replies to replies, this is the root stanza_id (not guaranteed AFAIK).",
          "type": "string"
        },
        "postId": {
          "description": "The post this comment belongs to.",
          "type": "string"
        },
        "rankingPostLanguage": {
          "description": "The language code stored in the KV pair ranking:post_language. This should usually be the same as language_code but is not guaranteed to be identical. The KV pair is needed because ranking can't consume user_content.",
          "type": "string"
        },
        "segments": {
          "$ref": "SocialCommonSegments",
          "description": "A textual content for the context."
        },
        "sensitivityScores": {
          "additionalProperties": {
            "format": "double",
            "type": "number"
          },
          "description": "Sensitivity scores map for smart reply sensitivity scores. Keyed by model names. See (g3doc/company/teams/expander/research/conversation/sensitive.md) for more information on sensitivity scores.",
          "type": "object"
        },
        "sentiment": {
          "$ref": "YoutubeCommentsSentimentSentiment",
          "description": "Sentiment. This omits entity_sentiment and keeps only the polarity, magnitude, and score. Sentiment as currently implemented is not debiased and has limited language coverage. Please read go/comments-sentiment-access before using."
        },
        "shortReplyVideoId": {
          "description": "Associated Short Reply video ID if the comment represents a Short Reply. See go/yt-comment-sticker-m2.",
          "type": "string"
        },
        "smartReplies": {
          "additionalProperties": {
            "$ref": "VideoYoutubeCommentsClassificationProtoYouTubeCommentSmartReply"
          },
          "description": "Smart replies for this comment. Keyed by model names.",
          "type": "object"
        },
        "stanzaId": {
          "description": "Refers to the stanza this data is derived from.",
          "type": "string"
        },
        "stanzaRestrictions": {
          "description": "Contains various restriction information about a stanza.",
          "items": {
            "$ref": "SocialStanzaStanzaRestriction"
          },
          "type": "array"
        },
        "subject": {
          "$ref": "SecurityCredentialsPrincipalProto",
          "description": "The author of the comment"
        },
        "subjectIsVideoOwner": {
          "description": "Whether the comment is authored by the creator.",
          "type": "boolean"
        },
        "subscriptionTimestamp": {
          "description": "The timestamp (in seconds) when the author subscribed to the channel.",
          "format": "int64",
          "type": "string"
        },
        "superThanksInfo": {
          "$ref": "YoutubeBackstageSuperVodCommentInfo",
          "description": "Super Thanks related info if a comment is posted through a Super Thanks purchase."
        },
        "textEmbedding": {
          "additionalProperties": {
            "$ref": "YoutubeCommentsRankingYouTubeCommentTextEmbedding"
          },
          "description": "Comment text embedding.",
          "type": "object"
        },
        "textLength": {
          "description": "Text length of the comment.",
          "format": "int32",
          "type": "integer"
        },
        "textQualityScores": {
          "$ref": "YoutubeCommentsRankingYouTubeCommentTextQualityAnnotation",
          "description": "Predicted probability of the comment being flagged based on the text."
        },
        "textQualityScores2": {
          "$ref": "YoutubeCommentsRankingYouTubeCommentTextQualityAnnotation",
          "description": "Predicted probability of the comment being flagged based on the text. For testing the new annotation process only."
        },
        "videoId": {
          "description": "The video this comment belongs to.",
          "type": "string"
        },
        "videoTimestamps": {
          "description": "Unique video timestamps in seconds sorted by timestamp. This is derived from text Segments, not from a KV. These may exceed the length of the video since that isn't checked at segmentation time. The segmentation rules have changed over time e.g. in the past \"10:00 PM\" was treated as a timestamp.",
          "items": {
            "format": "int32",
            "type": "integer"
          },
          "type": "array"
        },
        "wordEntropy": {
          "description": "Word entropy of the comment.",
          "format": "double",
          "type": "number"
        },
        "ytAuthorChannelId": {
          "description": "The youtube channel id of the comment author.",
          "type": "string"
        },
        "ytCommentQualityScore": {
          "description": "Existing quality corpus scores.",
          "format": "double",
          "type": "number"
        },
        "ytCommentQualityScore2": {
          "format": "double",
          "type": "number"
        },
        "ytCommentQualityScore3": {
          "format": "double",
          "type": "number"
        },
        "ytReplyToItemId": {
          "description": "For replies to replies, this contains the parent reply's id. The parent_id field is actually the root stanza_id (not guaranteed AFAIK).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeCommentsRankingYouTubeCommentTextEmbedding": {
      "description": "Comment text embedding.",
      "id": "YoutubeCommentsRankingYouTubeCommentTextEmbedding",
      "properties": {
        "textEmbedding": {
          "description": "Comment text embedding.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "YoutubeCommentsRankingYouTubeCommentTextQualityAnnotation": {
      "description": "Text quality scores for a single comment.",
      "id": "YoutubeCommentsRankingYouTubeCommentTextQualityAnnotation",
      "properties": {
        "flagPredictionScore": {
          "description": "Score produced by the user flag prediction model.",
          "format": "float",
          "type": "number"
        },
        "flagPredictionVersion": {
          "description": "Version identifier of the flag prediction model.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeCommentsSentimentSentiment": {
      "description": "Sentiment information extracted from the annotated content by Goldmine. This mirrors nlp_sentiment.SentimentAnnotation. Next tag: 5.",
      "id": "YoutubeCommentsSentimentSentiment",
      "properties": {
        "entitySentiment": {
          "items": {
            "$ref": "YoutubeCommentsSentimentSentimentEntitySentimentAnnotation"
          },
          "type": "array"
        },
        "magnitude": {
          "description": "Total magnitude of the sentiment. A positive number representing the total intensity of sentiment regardless of positive vs negative polarity.",
          "format": "float",
          "type": "number"
        },
        "polarity": {
          "description": "Polarity of the sentiment. Value is between -1.0 and 1.0 inclusive, with larger numbers representing more positive sentiment and negative numbers representing negative sentiment.",
          "format": "float",
          "type": "number"
        },
        "score": {
          "description": "The average score over sentences. This combines the polarity and magnitude signals into one value. Bounded between -1.0 and 1.0.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "YoutubeCommentsSentimentSentimentEntitySentimentAnnotation": {
      "description": "An entity level sentiment annotation containing the sentiment values aggregated over all mentions of an entity. Next tag: 7.",
      "id": "YoutubeCommentsSentimentSentimentEntitySentimentAnnotation",
      "properties": {
        "entityName": {
          "description": "The representative entity name. This can be blank for cases when there is no explicit name like \"I\" or \"it\". The mentions' tokens can be used to get more details about each entity.",
          "type": "string"
        },
        "magnitude": {
          "description": "Total magnitude of the sentiment.",
          "format": "float",
          "type": "number"
        },
        "mentionSentiment": {
          "items": {
            "$ref": "YoutubeCommentsSentimentSentimentEntitySentimentAnnotationMentionSentimentAnnotation"
          },
          "type": "array"
        },
        "mid": {
          "description": "MID for this entity, if available.",
          "type": "string"
        },
        "polarity": {
          "description": "Polarity of the sentiment. See above for detail.",
          "format": "float",
          "type": "number"
        },
        "score": {
          "description": "The per entity score between -1.0 and 1.0. Combines the signal from polarity and magnitude values.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "YoutubeCommentsSentimentSentimentEntitySentimentAnnotationMentionSentimentAnnotation": {
      "description": "A mention level sentiment annotation containing the sentiment values for a single entity mention. // Next tag: 6.",
      "id": "YoutubeCommentsSentimentSentimentEntitySentimentAnnotationMentionSentimentAnnotation",
      "properties": {
        "endToken": {
          "description": "Token end index in corresponding SAFT document (inclusive).",
          "format": "int64",
          "type": "string"
        },
        "magnitude": {
          "description": "Total magnitude of the sentiment.",
          "format": "float",
          "type": "number"
        },
        "polarity": {
          "description": "Polarity of the sentiment. See above for detail.",
          "format": "float",
          "type": "number"
        },
        "score": {
          "description": "The per mention score between -1.0 and 1.0. Combines the signal from polarity and magnitude values.",
          "format": "float",
          "type": "number"
        },
        "startToken": {
          "description": "Token start index in corresponding SAFT document.",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosAnnotation": {
      "description": "The annotation of a document by a given entity, for a given type of relationship.",
      "id": "YoutubeDiscoveryLegosLegosAnnotation",
      "properties": {
        "entity": {
          "$ref": "YoutubeDiscoveryLegosLegosEntity",
          "description": "The entity annotating the document."
        },
        "format": {
          "$ref": "YoutubeDiscoveryLegosLegosFormatRelationship",
          "description": "The annotation is a format annotation, i.e. it tells the format of the video."
        },
        "present": {
          "$ref": "YoutubeDiscoveryLegosLegosPresentRelationship",
          "description": "The annotation is present in the video. Semantic Legos and Presence Legos naturally overlap and can contain the same entities. However, we do not enforce a strict subset relation."
        },
        "semantic": {
          "$ref": "YoutubeDiscoveryLegosLegosSemanticRelationship",
          "description": "The annotation is a semantic annotation, i.e. it tells what the document is about and what the reasons to watch the video are. The annotation should be valid for the complete annotated document, not simply a part of the document such as a video segment."
        },
        "taxonomic": {
          "$ref": "YoutubeDiscoveryLegosLegosTaxonomicRelationship",
          "description": "The annotation is a taxonomic annotation, i.e. it tells to which class of the Legos taxonomy the document belongs to."
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosAnnotations": {
      "description": "A collection of annotations returned by Legos for a document.",
      "id": "YoutubeDiscoveryLegosLegosAnnotations",
      "properties": {
        "annotations": {
          "description": "The annotations for this document. For a given (entity, relationship type) pair, there will be at most one annotation. The list has no particular order.",
          "items": {
            "$ref": "YoutubeDiscoveryLegosLegosAnnotation"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosEntity": {
      "description": "The identification of a Knowledge Graph (KG) entity in Legos.",
      "id": "YoutubeDiscoveryLegosLegosEntity",
      "properties": {
        "debugName": {
          "description": "DO NOT USE THIS FIELD. The entity name here can be random garbage and when it's actually a name it will be in a random language (most of the time English but not always). This field is going away soon. For a replacement you should probably use the following RPC: cs/symbol:Ytpedia.GetNames please read go/ytks-calling details on how to call it and don't hesitate to write to us for help with this (or in any case before starting to send real traffic to us) at: g/yt-knowledge-service",
          "type": "string"
        },
        "kgId": {
          "description": "The ID of the Knowledge Graph entity. Note: this is the primary ID at generation time. See https://sites.google.com/a/google.com/knowledge-graph/data/primary_ids",
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosFormatRelationship": {
      "description": "Description of a format Legos annotation. http://go/legos/formats.md",
      "id": "YoutubeDiscoveryLegosLegosFormatRelationship",
      "properties": {
        "confidence": {
          "description": "Format classification confidence score, in the 0-1 range. A score of XX% means that we expect at least XX% of the documents annotated with this format to be correctly annotated; i.e. thresholding at XX% yields a precision of at least XX%.",
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosPresentRelationship": {
      "description": "Description of a present Legos annotation.",
      "id": "YoutubeDiscoveryLegosLegosPresentRelationship",
      "properties": {
        "confidence": {
          "description": "Confidence score. Thresholding at the confidence score at 0.XX yields annotations of precision of at least XX%.",
          "format": "float",
          "type": "number"
        },
        "contexts": {
          "description": "Extra context about how the entity relates to the document. Typically vertical-specific. Please refrain from populating this field as we're working on migrating most of the use cases to the LegosEntity proto so clients don't have to scan all relationships to know which annotations they may be interested in.",
          "items": {
            "$ref": "YoutubeDiscoveryLegosLegosSemanticRelationshipContext"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosSemanticRelationship": {
      "description": "Description of a semantic Legos annotation. http://go/legos/project.md#semantic-intent-annotations",
      "id": "YoutubeDiscoveryLegosLegosSemanticRelationship",
      "properties": {
        "confidence": {
          "description": "Confidence score. Thresholding at the confidence score at 0.XX yields annotations of precision of at least XX%. Only filled in the intent definition Legos. Please use IsSemanticAnnotationAtConfidenceThreshold() from video/youtube/discovery/legos/annotations/public/legos_annotations_util.h to obtain only intent definition Legos. For more information on the migration please look at go/legos-intent-migration.",
          "format": "float",
          "type": "number"
        },
        "contexts": {
          "items": {
            "$ref": "YoutubeDiscoveryLegosLegosSemanticRelationshipContext"
          },
          "type": "array"
        },
        "topicalityScore": {
          "description": "DEPRECATED. Please use confidence instead. Will be set to the same value as confidence in early January 2019. See go/legos-intent-migration for more information.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosSemanticRelationshipContext": {
      "description": "Extra context about how the entity relates to the document. Typically vertical-specific.",
      "id": "YoutubeDiscoveryLegosLegosSemanticRelationshipContext",
      "properties": {
        "subject": {
          "$ref": "YoutubeDiscoveryLegosLegosEntity",
          "description": "The subject of the semantic relationship. This is set when the relationship is derived from some other entity. The exact meaning of this field depends on the ContextType."
        },
        "type": {
          "description": "The type of semantic relationship between the document and the entity. This allows one to retrieve vertical-specific fine-grained information about the document.",
          "enum": [
            "UNKNOWN_CONTEXT_TYPE",
            "MUSIC_RECORDING_CLUSTER",
            "MUSIC_EXACT_RECORDING",
            "MUSIC_PRIMARY_RECORDING",
            "MUSIC_RECORDING_ARTIST",
            "MUSIC_FEATURED_ARTIST",
            "MUSIC_COMPOSITION",
            "MUSIC_ORIGINAL_ARTIST_OF_COVER",
            "MUSIC_ORIGINAL_RECORDING_CLUSTER_OF_COVER",
            "MUSIC_OFFICIAL_VIDEO",
            "MUSIC_OFFICIAL_AUDIO",
            "MUSIC_OFFICIAL_EXACT_RECORDING_WITHOUT_CLUSTER",
            "MUSIC_LYRICS_VIDEO",
            "MUSIC_LIVE_RECORDING",
            "MUSIC_REMIX_RECORDING",
            "MUSIC_KARAOKE_VERSION",
            "MUSIC_INSTRUMENTAL_RECORDING",
            "MUSIC_REMIX_ARTIST",
            "MUSIC_BOLLYWOOD_ACTOR",
            "MUSIC_UGC_SONG",
            "MUSIC_ART_TRACK_OR_PREMIUM_CLAIM",
            "SHORT_VIDEO_BACKGROUND_MUSIC",
            "SHORT_VIDEO_BACKGROUND_MUSIC_COMPOSITION",
            "SHORT_VIDEO_BACKGROUND_MUSIC_EXACT_RECORDING",
            "MUSIC_BASS_TOP_LEVEL_GENRE",
            "MUSIC_BASS_SUBGENRE",
            "CREATOR_OFFICIAL_CHANNEL",
            "CREATOR_VEVO_SINGLE_CHANNEL",
            "CREATOR_OTHER_SINGLE_CHANNEL",
            "CREATOR_MULTIPLE_CHANNEL",
            "TV_SHOW_FOOTAGE",
            "TV_SHOW_GENRE",
            "MOVIE_GENRE",
            "GAMING_TOP_VIDEO_GAME",
            "GAMING_IS_ITEM_EQUIPPED_BY",
            "GAMING_IS_ITEM_USED_BY",
            "GAMING_IS_ALLIED_CHARACTER_OF",
            "GAMING_IS_CHARACTER_CONTROLLED_BY",
            "LEGOS_OVERRIDE_LIVE_SPORTS",
            "KG_SOCIAL_MEDIA_PROFILE",
            "PERSON_CREATOR",
            "PREMIUM_TVOD_MOVIE",
            "PREMIUM_AVOD_MOVIE",
            "PREMIUM_TVOD_SHOW",
            "PREMIUM_MOVIE_ACTOR",
            "PREMIUM_MOVIE_DIRECTOR",
            "PREMIUM_MOVIE_GENRE",
            "PUBLIC_FIGURE_UPLOADER",
            "PUBLIC_FIGURE_ABOUT",
            "RESPONSIBILITY_CLARIFICATION_NEEDED",
            "CLARIFY_TFX_MODEL",
            "DENORM_VIDEO_GAME_TO_VIDEO_GAME_GENRES",
            "DENORM_VIDEO_GAME_TO_VIDEO_GAME_SERIES",
            "DENORM_PRODUCT_LINE_TO_BRAND",
            "DENORM_ORGANIZATION_TO_BRAND",
            "DENORM_PODCAST_SERIES_TO_PODCAST",
            "DENORM_COVID_VACCINE",
            "DENORM_PRODUCT_TO_DOMINANT_PRODUCT_CATEGORY",
            "DENORM_PRODUCT_TO_PRODUCT_CATEGORY",
            "DENORMALIZATIONS",
            "SHOPPING_PRODUCT",
            "SHOPPING_PRODUCT_LINE",
            "SHOPPING_BRAND",
            "SHOPPING_CATEGORY",
            "CREATOR_SHOPPING_PRODUCT",
            "VSU_SHOPPING_PRODUCT",
            "GEO_TYPE_RESTAURANT_OR_CAFE",
            "GEO_TYPE_ESTABLISHMENT_POI",
            "GEO_TYPES_COLLECTION_TRAVEL_AND_TOURISM",
            "GEO_TYPE_ENTERTAINMENT_AND_RECREATION",
            "GEO_TYPES_COLLECTION_BUSINESSES",
            "GEO_TYPES_COLLECTION_POTENTIALLY_SENSITIVE",
            "GEO_TYPE",
            "GEO_TYPES_COLLECTION_SMALL_POLITICALS",
            "ADDED_DURING_GEO_ENTITIES_PROMOTION",
            "DENORM_LOCATION_TO_CONTAINING_COUNTRY",
            "DENORM_LOCATION_TO_CONTAINING_REGION",
            "DENORM_LOCATION_TO_CONTAINING_CITY",
            "MOVIE",
            "TV_SHOW",
            "SPORT_TEAM",
            "SPORT_LEAGUE",
            "ELECTIONS_ANNOTATION_PRE_RULES",
            "HAS_A_VOTING_MID",
            "GEO_LEGOS_TEST_SET_V2_POLITICAL",
            "GEO_LEGOS_TEST_SET_V2_TRAVEL_DESTINATIONS",
            "GEO_LEGOS_TEST_SET_V2_DINING",
            "GEO_LEGOS_TEST_SET_V2_HOTEL"
          ],
          "enumDescriptions": [
            "",
            "The entity refers to the recording cluster featured on the video. We will always create a supplementary RECORDING_CLUSTER when an EXACT_RECORDING annotation is present by denormalizing KG data. LegosAnnotation.LegosSemanticRelationship.Context.subject should be empty.",
            "The mid refers to exact recording featured on the video. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster. The subject can be empty, if no recording cluster exists.",
            "The entity refers to the primary_recording of the recording cluster featured on the video. This exists only for backward compatibility until WebRef, QRef and all its clients migrate to /music/recording_cluster. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster.",
            "The entity refers to the musical artist performing a recording featured on the video. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster of the featured recording, if known.",
            "The entity refers to the featured artist relationship mined from KG, featured on the video. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster of the featured recording, if known.",
            "The entity refers to composition of the recording featured on the video. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster of the featured recording, if known.",
            "The entity refers to the original musical artist for which the recording is a cover of. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster of the cover recording, if known.",
            "The entity refers to the original musical recording cluster for which the recording is a cover of. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording cluster of the cover recording, if known.",
            "The entity refers to the musical recording cluster for which the recording is an official video of.",
            "The entity refers to the musical recording cluster for which the recording is an official audio-only (no visuals) video of. Typically an Art Track.",
            "The mid refers to exact recording for which the video is an official video. The subject is empty because the recording cluster does not exist yet. This context should only exist in the beginning of the lifetime of a recording.",
            "The entity refers to the musical recording cluster for which the recording is a lyrics video of.",
            "The entity refers to the musical recording cluster and the video is featuring a live recording of this recording cluster.",
            "The entity refers to the musical recording cluster and the video features a remix recording of this recording cluster.",
            "The entity refers to the original musical recording cluster for which the recording is a karaoke version of.",
            "The entity refers to the original musical recording cluster for which the recording is an instrumental version of.",
            "The entity refers to the remix artist relationship mined from KG, doing the remix and only exists for a recording. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the recording made by this remixer, if known.",
            "The entity refers to /film/actor that are associated with music videos from allowed Bollywood music channels. Allowlist: google3/googledata/video/youtube/discovery/metadata_aggregation/lists/bollywood_music_channels.txt",
            "Information whether a song is user generated content or not. This information was originally carried with a Legos extension but since it's getting deprecated (b/153987502), context is now used for this.",
            "Information whether the song was an art-track or the song was found in a premium claim on the video (the content owner is the owner of the video). This context is used to replace Disco2 Detours extension which is getting deprecated (b/153987502).",
            "The entity refers to the recording cluster featured on a Short form video, where the music is playing in the background. This context is an equivalent of MUSIC_RECORDING_CLUSTER for background music on Shorts.",
            "The entity refers to a composition present on a Short form video, where the music is playing in the background. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the SHORT_VIDEO_BACKGROUND_MUSIC recording cluster of the featured recording, if known. This context is an equivalent of MUSIC_COMPOSITION for background music on Shorts.",
            "The entity refers to an exact recording featured on a Short form video, where the music is playing in the background. LegosAnnotation.LegosSemanticRelationship.Context.subject should point to the SHORT_VIDEO_BACKGROUND_MUSIC recording cluster of the featured recording, if known. This context is an equivalent of MUSIC_EXACT_RECORDING for background music on Shorts.",
            "Context for music genres that come from Music Classification team.",
            "",
            "The entity refers to a creator who has uploaded this video on their verified official channel. go/avg-use-cases go/artist-channels contact: ytm-classification-eng@google.com",
            "The entity refers to a creator who has uploaded this video on a VEVO channel with no other creators. go/avg-use-cases go/artist-channels contact: ytm-classification-eng@google.com",
            "The entity refers to a creator who has uploaded this video on a channel that they are verified to control, but not their official channel go/avg-use-cases go/artist-channels contact: ytm-classification-eng@google.com",
            "The entity refers to a creator who has uploaded this video on a channel that they are verified to be related to, but may not control exclusively go/avg-use-cases go/artist-channels contact: ytm-classification-eng@google.com",
            "Deprecated. The context is currently unused and very sparse populated. We plan to delete it.",
            "The entity refers to a TV show genre added from a TV show annotated on this video. Note that this does not imply that TV_SHOW_FOOTAGE is present on any annotation for this video; the show may have been obtained using metadata methods and we don't know for sure that footage is present.",
            "The entity refers to a movie genre added from a movie annotated on this video. Note that this might also trigger for shoulder content such as trailers or interviews.",
            "The entity refers to the top scored game title(s) for a particular gaming related video.",
            "Deprecated. The experiment on top of this has not launched.",
            "Deprecated. The experiment on top of this has not launched.",
            "Deprecated. The experiment on top of this has not launched.",
            "Deprecated. The experiment on top of this has not launched.",
            "The entity refers to a Legos annotation that is manually requested by the live discovery team for sports live streams.",
            "The entity refers to a creator who has uploaded this video on one of their channels that is present as a social profile in KG, e.g. https://screenshot.googleplex.com/RCNN3YPizpe.png. Annotations with this context may overlap with CREATOR_OFFICIAL_CHANNEL which is Disco3 specific.",
            "Deprecated context, do not use.",
            "The video is a premium TVOD (Transaction-based Video On Demand) movie described by the entity. Premium movies and shows are owned by the YT Popcorn team (go/popcorn).",
            "The video is a premium AVOD (Advertisement-based Video On Demand) movie described by the entity. Premium movies and shows are owned by the YT Popcorn team (go/popcorn).",
            "The video is a premium TVOD (Transaction-based Video On Demand) show described by the entity. Premium movies and shows are owned by the YT Popcorn team (go/popcorn).",
            "The entity is a genre, actor or director mid that has been inferred from the presence of a movie mid, in a premium movie. See go/legos-premium-movie-associations. Premium movies and shows are owned by the YT Popcorn team (go/popcorn).",
            "",
            "",
            "The video is by the public figure who owns the uploading channel.",
            "The entity owns a channel part of the Public Figure corpus.",
            "The video needs clarification about the entity. This typically means we should display a message establishing facts or scientific consensus about the entity next to the video. NOTE: this is not a public context type yet. Please reach out to yt-knowledge-responsibility-features@google.com before using it. Its semantics and precision are very specific and subject to change without warning.",
            "Deprecated context, do not use.",
            "Video game genre entity that has been denormalized from a video game.",
            "Video game series entity that has been denormalized from a video game.",
            "Brand entity that has been denormalized by a product-related entity.",
            "Brand entity that has been denormalized by an organization entity.",
            "Podcast entity that has been denormalized from a base Podcast by KG type.",
            "Covid vaccine entity denormalized from a particular vaccine (e.g. Sputnik).",
            "Dominant product category denormalized from a particular product.",
            "Product category denormalized from a particular product.",
            "Generic KG denormalization, scored by doc cooccurrence. For testing only! If it looks good it should be launched with its own context. In the meantime you can see the type in the debugger trace.",
            "This context indicates when a Legos is of type /business/variant_cluster. Further product related KG types will be added in the future and the context will stop corresponding to a single KG type. Furthermore, the context is only applied, if the entity passes additional filtering (e.g. requiring a name).",
            "This context indicates that a Legos annotation is of a product line See go/shopping-kg-schema#product-lines.",
            "This context indicates that a Legos annotation is of a shopping brand. See go/shopping-kg-schema#brands.",
            "This context indicates that a Legos annotation is of a shopping category. See go/shopping-kg-schema#product-categories.",
            "This context indicates that a Legos annotation comes from a creator shopping product annotation (go/shoptube).",
            "This context indicates that a Legos annotation was output by VSU.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Context used by Geo that indicates if an entity is a geo feature.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Deprecated. See b/244583433. Instead, consider relying on GEO_TYPE and looking up individual KG types in YTKS.",
            "Assigned to an entity that has been denormalized from an entity which it geographically contains according to the containing entity's type.",
            "",
            "",
            "This context indicates that a Legos annotation is of a movie.",
            "This context indicates that a Legos annotation is of a tv show.",
            "This context indicates that a Legos annotation is of a sport team.",
            "This context indicates that a Legos annotation is of a sport league.",
            "To help with monitoring: marks preexisting annotations before applying rules that increase recall for this mid.",
            "",
            "To use in Geo Legos launch report. Each context defines a slice of docs to subsample in a test.",
            "",
            "",
            ""
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "YoutubeDiscoveryLegosLegosTaxonomicRelationship": {
      "description": "Description of a taxonomic Legos annotation. http://go/legos/project.md#taxonomy-annotations",
      "id": "YoutubeDiscoveryLegosLegosTaxonomicRelationship",
      "properties": {
        "isRedundant": {
          "description": "Set to true if the taxonomy annotation is redundant amongst the set of other taxonomy annotations for the same document, i.e. if there is at least one other taxonomy annotation that is a child node of this one.",
          "type": "boolean"
        },
        "score": {
          "description": "A score, in the 0-1 range, used to rank taxonomy annotations.",
          "format": "double",
          "type": "number"
        }
      },
      "type": "object"
    },
    "YoutubeDistillerBlarneyStoneScores": {
      "description": "Blarney Stone classification scores: go/blarneystone Next available ID: 6",
      "id": "YoutubeDistillerBlarneyStoneScores",
      "properties": {
        "familySafeV1Score": {
          "format": "float",
          "type": "number"
        },
        "mildHateHarassV1Score": {
          "format": "float",
          "type": "number"
        },
        "mildHateHarassV2Score": {
          "format": "float",
          "type": "number"
        },
        "modelScores": {
          "description": "The scores corresponds to each of the abe_models in /cns/yk-d/home/blarneystone/model0/config-2015-11-20.pbtxt",
          "items": {
            "$ref": "YoutubeDistillerModelScore"
          },
          "type": "array"
        },
        "severeHateHarassV1Score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    },
    "YoutubeDistillerModelScore": {
      "description": "Next available ID: 4",
      "id": "YoutubeDistillerModelScore",
      "properties": {
        "classifier": {
          "description": "The classifier trained with tensor flow.",
          "enum": [
            "UNKNOWN",
            "OFFENSIVE_NON_POLICY",
            "OFFENSIVE_YT_POLICY",
            "COMMERCIAL_INTENT"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "model": {
          "description": "The model trained with dist belief [going to be deprecated].",
          "enum": [
            "UNKNOWN",
            "HATE",
            "HARASSMENT",
            "HATE_OR_HARASSMENT",
            "COMMERCIAL_INTENT",
            "SEVERE_HATE_HARASSMENT",
            "MILD_HATE_HARASSMENT",
            "MILD_HATE_HARASSMENT_V2"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "type": "string"
        },
        "score": {
          "format": "float",
          "type": "number"
        }
      },
      "type": "object"
    }
  },
  "servicePath": "",
  "title": "Document AI Warehouse API",
  "version": "v1",
  "version_module": true
}