<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="slides_v1.html">Google Slides API</a> . <a href="slides_v1.presentations.html">presentations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="slides_v1.presentations.pages.html">pages()</a></code>
</p>
<p class="firstline">Returns the pages Resource.</p>

<p class="toc_element">
  <code><a href="#batchUpdate">batchUpdate(presentationId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Applies one or more updates to the presentation.</p>
<p class="toc_element">
  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new presentation using the title given in the request. Other</p>
<p class="toc_element">
  <code><a href="#get">get(presentationId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the latest version of the specified presentation.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchUpdate">batchUpdate(presentationId, body, x__xgafv=None)</code>
  <pre>Applies one or more updates to the presentation.

Each request is validated before
being applied. If any request is not valid, then the entire request will
fail and nothing will be applied.

Some requests have replies to
give you some information about how they are applied. Other requests do
not need to return information; these each return an empty reply.
The order of replies matches that of the requests.

For example, suppose you call batchUpdate with four updates, and only the
third one returns information. The response would have two empty replies:
the reply to the third request, and another empty reply, in that order.

Because other users may be editing the presentation, the presentation
might not exactly reflect your changes: your changes may
be altered with respect to collaborator changes. If there are no
collaborators, the presentation should reflect your changes. In any case,
the updates in your request are guaranteed to be applied together
atomically.

Args:
  presentationId: string, The presentation to apply the updates to. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for PresentationsService.BatchUpdatePresentation.
    "requests": [ # A list of updates to apply to the presentation.
      { # A single kind of update to apply to a presentation.
        "insertText": { # Inserts text into a shape or a table cell. # Inserts text into a shape or table cell.
          "text": "A String", # The text to be inserted.
              #
              # Inserting a newline character will implicitly create a new
              # ParagraphMarker at that index.
              # The paragraph style of the new paragraph will be copied from the paragraph
              # at the current insertion index, including lists and bullets.
              #
              # Text styles for inserted text will be determined automatically, generally
              # preserving the styling of neighboring text. In most cases, the text will be
              # added to the TextRun that exists at the
              # insertion index.
              #
              # Some control characters (U+0000-U+0008, U+000C-U+001F) and characters
              # from the Unicode Basic Multilingual Plane Private Use Area (U+E000-U+F8FF)
              # will be stripped out of the inserted text.
          "cellLocation": { # A location of a single table cell within a table. # The optional table cell location if the text is to be inserted into a table
              # cell. If present, the object_id must refer to a table.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
          "objectId": "A String", # The object ID of the shape or table where the text will be inserted.
          "insertionIndex": 42, # The index where the text will be inserted, in Unicode code units, based
              # on TextElement indexes.
              #
              # The index is zero-based and is computed from the start of the string.
              # The index may be adjusted to prevent insertions inside Unicode grapheme
              # clusters. In these cases, the text will be inserted immediately after the
              # grapheme cluster.
        },
        "insertTableRows": { # Inserts rows into a table. # Inserts rows into a table.
          "insertBelow": True or False, # Whether to insert new rows below the reference cell location.
              #
              # - `True`: insert below the cell.
              # - `False`: insert above the cell.
          "tableObjectId": "A String", # The table to insert rows into.
          "number": 42, # The number of rows to be inserted. Maximum 20 per request.
          "cellLocation": { # A location of a single table cell within a table. # The reference table cell location from which rows will be inserted.
              #
              # A new row will be inserted above (or below) the row where the reference
              # cell is. If the reference cell is a merged cell, a new row will be
              # inserted above (or below) the merged cell.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
        },
        "createVideo": { # Creates a video. # Creates a video.
          "source": "A String", # The video source.
          "elementProperties": { # Common properties for a page element. # The element properties for the video.
              #
              # Note: When you initially create a
              # PageElement, the API may modify
              # the values of both `size` and `transform`, but the
              # visual size will be unchanged.
            "pageObjectId": "A String", # The object ID of the page where the element is located.
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform for the element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "size": { # A width and height. # The size of the element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "objectId": "A String", # A user-supplied object ID.
              #
              # If you specify an ID, it must be unique among all pages and page elements
              # in the presentation. The ID must start with an alphanumeric character or an
              # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
              # may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`).
              # The length of the ID must not be less than 5 or greater than 50.
              #
              # If you don't specify an ID, a unique one is generated.
          "id": "A String", # The video source's unique identifier for this video.
              #
              # e.g. For YouTube video https://www.youtube.com/watch?v=7U3axjORYZ0,
              # the ID is 7U3axjORYZ0.
        },
        "deleteTableRow": { # Deletes a row from a table. # Deletes a row from a table.
          "cellLocation": { # A location of a single table cell within a table. # The reference table cell location from which a row will be deleted.
              #
              # The row this cell spans will be deleted. If this is a merged cell, multiple
              # rows will be deleted. If no rows remain in the table after this deletion,
              # the whole table is deleted.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
          "tableObjectId": "A String", # The table to delete rows from.
        },
        "updateImageProperties": { # Update the properties of an Image. # Updates the properties of an Image.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `imageProperties` is
              # implied and should not be specified. A single `"*"` can be used as
              # short-hand for listing every field.
              #
              # For example to update the image outline color, set `fields` to
              # `"outline.outlineFill.solidFill.color"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          "imageProperties": { # The properties of the Image. # The image properties to update.
            "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "outlineFill": { # The fill of the outline. # The fill of the outline.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # 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 * (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.
                },
              },
              "propertyState": "A String", # The outline property state.
                  #
                  # Updating the the outline on a page element will implicitly update this
                  # field to`RENDERED`, unless another value is specified in the same request.
                  # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                  # this case, any other outline fields set in the same request will be
                  # ignored.
              "dashStyle": "A String", # The dash style of the outline.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
            "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect. This property is read-only.
            "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                # This property is read-only.
              "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                  # stops.
                  #
                  # The colors in the gradient will replace the corresponding colors at
                  # the same position in the color palette and apply to the image. This
                  # property is read-only.
                { # A color and position in a gradient band.
                  "color": { # A themeable solid color value. # The color of the gradient stop.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                      # fully opaque.
                  "position": 3.14, # The relative position of the color stop in the gradient band measured
                      # in percentage. The value should be in the interval [0.0, 1.0].
                },
              ],
              "name": "A String", # The name of the recolor effect.
                  #
                  # The name is determined from the `recolor_stops` by matching the gradient
                  # against the colors in the page's current color scheme. This property is
                  # read-only.
            },
            "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                # This property is read-only.
            "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                # This property is read-only.
                # Image.
                #
                # The crop properties is represented by the offsets of four edges which define
                # a crop rectangle. The offsets are measured in percentage from the
                # corresponding edges of the object's original bounding rectangle towards
                # inside, relative to the object's original dimensions.
                #
                # - If the offset is in the interval (0, 1), the corresponding edge of crop
                # rectangle is positioned inside of the object's original bounding rectangle.
                # - If the offset is negative or greater than 1, the corresponding edge of crop
                # rectangle is positioned outside of the object's original bounding rectangle.
                # - If the left edge of the crop rectangle is on the right side of its right
                # edge, the object will be flipped horizontally.
                # - If the top edge of the crop rectangle is below its bottom edge, the object
                # will be flipped vertically.
                # - If all offsets and rotation angle is 0, the object is not cropped.
                #
                # After cropping, the content in the crop rectangle will be stretched to fit
                # its container.
              "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                  # the right of the original bounding rectangle left edge, relative to the
                  # object's original width.
              "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                  # Rotation angle is applied after the offset.
              "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                  # to the left of the original bounding rectangle right edge, relative to the
                  # object's original width.
              "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                  # above the original bounding rectangle bottom edge, relative to the object's
                  # original height.
              "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                  # below the original bounding rectangle top edge, relative to the object's
                  # original height.
            },
            "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                # is read-only.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "color": { # A themeable solid color value. # The shadow color value.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                  # relative to the alignment position.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "propertyState": "A String", # The shadow property state.
                  #
                  # Updating the the shadow on a page element will implicitly update this field
                  # to `RENDERED`, unless another value is specified in the same request. To
                  # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                  # case, any other shadow fields set in the same request will be ignored.
              "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                  # shadow becomes.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
              "type": "A String", # The type of the shadow.
              "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                  # scale and skew of the shadow.
              "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
            },
            "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect. This property is read-only.
          },
          "objectId": "A String", # The object ID of the image the updates are applied to.
        },
        "createLine": { # Creates a line. # Creates a line.
          "lineCategory": "A String", # The category of line to be created.
          "elementProperties": { # Common properties for a page element. # The element properties for the line.
              #
              # Note: When you initially create a
              # PageElement, the API may modify
              # the values of both `size` and `transform`, but the
              # visual size will be unchanged.
            "pageObjectId": "A String", # The object ID of the page where the element is located.
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform for the element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "size": { # A width and height. # The size of the element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "objectId": "A String", # A user-supplied object ID.
              #
              # If you specify an ID, it must be unique among all pages and page elements
              # in the presentation. The ID must start with an alphanumeric character or an
              # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
              # may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`).
              # The length of the ID must not be less than 5 or greater than 50.
              #
              # If you don't specify an ID, a unique one is generated.
        },
        "replaceAllShapesWithSheetsChart": { # Replaces all shapes that match the given criteria with the provided Google # Replaces all shapes matching some criteria with a Google Sheets chart.
            # Sheets chart. The chart will be scaled and centered to fit within the bounds
            # of the original shape.
            #
            # NOTE: Replacing shapes with a chart requires at least one of the
            # spreadsheets.readonly, spreadsheets, drive.readonly, or drive OAuth scopes.
          "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet.
          "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the chart.
          "containsText": { # A criteria that matches a specific string of text in a shape or table. # The criteria that the shapes must match in order to be replaced. The
              # request will replace all of the shapes that contain the given text.
            "text": "A String", # The text to search for in the shape or table.
            "matchCase": True or False, # Indicates whether the search should respect case:
                #
                # - `True`: the search is case sensitive.
                # - `False`: the search is case insensitive.
          },
          "pageObjectIds": [ # If non-empty, limits the matches to page elements only on the given pages.
              #
              # Returns a 400 bad request error if given the page object ID of a
              # notes page or a
              # notes master, or if a
              # page with that object ID doesn't exist in the presentation.
            "A String",
          ],
          "linkingMode": "A String", # The mode with which the chart is linked to the source spreadsheet. When
              # not specified, the chart will be an image that is not linked.
        },
        "createImage": { # Creates an image. # Creates an image.
          "url": "A String", # The image URL.
              #
              # The image is fetched once at insertion time and a copy is stored for
              # display inside the presentation. Images must be less than 50MB in size,
              # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
              # format.
          "elementProperties": { # Common properties for a page element. # The element properties for the image.
              #
              # When the aspect ratio of the provided size does not match the image aspect
              # ratio, the image is scaled and centered with respect to the size in order
              # to maintain aspect ratio. The provided transform is applied after this
              # operation.
              #
              # Note: When you initially create a
              # PageElement, the API may modify
              # the values of both `size` and `transform`, but the
              # visual size will be unchanged.
            "pageObjectId": "A String", # The object ID of the page where the element is located.
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform for the element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "size": { # A width and height. # The size of the element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "objectId": "A String", # A user-supplied object ID.
              #
              # If you specify an ID, it must be unique among all pages and page elements
              # in the presentation. The ID must start with an alphanumeric character or an
              # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
              # may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`).
              # The length of the ID must not be less than 5 or greater than 50.
              #
              # If you don't specify an ID, a unique one is generated.
        },
        "updateVideoProperties": { # Update the properties of a Video. # Updates the properties of a Video.
          "videoProperties": { # The properties of the Video. # The video properties to update.
            "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                # videos created in the Slides editor.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "outlineFill": { # The fill of the outline. # The fill of the outline.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # 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 * (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.
                },
              },
              "propertyState": "A String", # The outline property state.
                  #
                  # Updating the the outline on a page element will implicitly update this
                  # field to`RENDERED`, unless another value is specified in the same request.
                  # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                  # this case, any other outline fields set in the same request will be
                  # ignored.
              "dashStyle": "A String", # The dash style of the outline.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "objectId": "A String", # The object ID of the video the updates are applied to.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `videoProperties` is
              # implied and should not be specified. A single `"*"` can be used as
              # short-hand for listing every field.
              #
              # For example to update the video outline color, set `fields` to
              # `"outline.outlineFill.solidFill.color"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
        },
        "deleteParagraphBullets": { # Deletes bullets from all of the paragraphs that overlap with the given text # Deletes bullets from paragraphs.
            # index range.
            #
            # The nesting level of each paragraph will be visually preserved by adding
            # indent to the start of the corresponding paragraph.
          "cellLocation": { # A location of a single table cell within a table. # The optional table cell location if the text to be modified is in a table
              # cell. If present, the object_id must refer to a table.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
          "objectId": "A String", # The object ID of the shape or table containing the text to delete bullets
              # from.
          "textRange": { # Specifies a contiguous range of an indexed collection, such as characters in # The range of text to delete bullets from, based on TextElement indexes.
              # text.
            "endIndex": 42, # The optional zero-based index of the end of the collection.
                # Required for `FIXED_RANGE` ranges.
            "startIndex": 42, # The optional zero-based index of the beginning of the collection.
                # Required for `FIXED_RANGE` and `FROM_START_INDEX` ranges.
            "type": "A String", # The type of range.
          },
        },
        "updateLineProperties": { # Updates the properties of a Line. # Updates the properties of a Line.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `lineProperties` is
              # implied and should not be specified. A single `"*"` can be used as
              # short-hand for listing every field.
              #
              # For example to update the line solid fill color, set `fields` to
              # `"lineFill.solidFill.color"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          "lineProperties": { # The properties of the Line. # The line properties to update.
              #
              # When unset, these fields default to values that match the appearance of
              # new lines created in the Slides editor.
            "dashStyle": "A String", # The dash style of the line.
            "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "endArrow": "A String", # The style of the arrow at the end of the line.
            "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                # lines created in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
            },
            "startArrow": "A String", # The style of the arrow at the beginning of the line.
          },
          "objectId": "A String", # The object ID of the line the update is applied to.
        },
        "deleteText": { # Deletes text from a shape or a table cell. # Deletes text from a shape or a table cell.
          "textRange": { # Specifies a contiguous range of an indexed collection, such as characters in # The range of text to delete, based on TextElement indexes.
              #
              # There is always an implicit newline character at the end of a shape's or
              # table cell's text that cannot be deleted. `Range.Type.ALL` will use the
              # correct bounds, but care must be taken when specifying explicit bounds for
              # range types `FROM_START_INDEX` and `FIXED_RANGE`. For example, if the text
              # is "ABC", followed by an implicit newline, then the maximum value is 2 for
              # `text_range.start_index` and 3 for `text_range.end_index`.
              #
              # Deleting text that crosses a paragraph boundary may result in changes
              # to paragraph styles and lists as the two paragraphs are merged.
              #
              # Ranges that include only one code unit of a surrogate pair are expanded to
              # include both code units.
              # text.
            "endIndex": 42, # The optional zero-based index of the end of the collection.
                # Required for `FIXED_RANGE` ranges.
            "startIndex": 42, # The optional zero-based index of the beginning of the collection.
                # Required for `FIXED_RANGE` and `FROM_START_INDEX` ranges.
            "type": "A String", # The type of range.
          },
          "objectId": "A String", # The object ID of the shape or table from which the text will be deleted.
          "cellLocation": { # A location of a single table cell within a table. # The optional table cell location if the text is to be deleted from a table
              # cell. If present, the object_id must refer to a table.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
        },
        "updatePageProperties": { # Updates the properties of a Page. # Updates the properties of a Page.
          "pageProperties": { # The properties of the Page. # The page properties to update.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `pageProperties` is
              # implied and should not be specified. A single `"*"` can be used as
              # short-hand for listing every field.
              #
              # For example to update the page background solid fill color, set `fields`
              # to `"pageBackgroundFill.solidFill.color"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          "objectId": "A String", # The object ID of the page the update is applied to.
        },
        "updateTextStyle": { # Update the styling of text in a Shape or # Updates the styling of text within a Shape or Table.
            # Table.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `style` is implied and
              # should not be specified. A single `"*"` can be used as short-hand for
              # listing every field.
              #
              # For example, to update the text style to bold, set `fields` to `"bold"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          "style": { # Represents the styling that can be applied to a TextRun. # The style(s) to set on the text.
              #
              # If the value for a particular style matches that of the parent, that style
              # will be set to inherit.
              #
              # Certain text style changes may cause other changes meant to mirror the
              # behavior of the Slides editor. See the documentation of
              # TextStyle for more information.
              #
              # If this text is contained in a shape with a parent placeholder, then these text styles may be
              # inherited from the parent. Which text styles are inherited depend on the
              # nesting level of lists:
              #
              # * A text run in a paragraph that is not in a list will inherit its text style
              #   from the the newline character in the paragraph at the 0 nesting level of
              #   the list inside the parent placeholder.
              # * A text run in a paragraph that is in a list will inherit its text style
              #   from the newline character in the paragraph at its corresponding nesting
              #   level of the list inside the parent placeholder.
              #
              # Inherited text styles are represented as unset fields in this message. If
              # text is contained in a shape without a parent placeholder, unsetting these
              # fields will revert the style to a value matching the defaults in the Slides
              # editor.
            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                # transparent, depending on if the `opaque_color` field in it is set.
              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
            },
            "bold": True or False, # Whether or not the text is rendered as bold.
            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                #
                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                # rendered in a smaller font size, computed based on the `font_size` field.
                # The `font_size` itself is not affected by changes in this field.
            "strikethrough": True or False, # Whether or not the text is struck through.
            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                #
                # This field is an extension of `font_family` meant to support explicit font
                # weights without breaking backwards compatibility. As such, when reading the
                # style of a range of text, the value of `weighted_font_family#font_family`
                # will always be equal to that of `font_family`. However, when writing, if
                # both fields are included in the field mask (either explicitly or through
                # the wildcard `"*"`), their values are reconciled as follows:
                #
                # * If `font_family` is set and `weighted_font_family` is not, the value of
                #   `font_family` is applied with weight `400` ("normal").
                # * If both fields are set, the value of `font_family` must match that of
                #   `weighted_font_family#font_family`. If so, the font family and weight of
                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                #   returned.
                # * If `weighted_font_family` is set and `font_family` is not, the font
                #   family and weight of `weighted_font_family` is applied.
                # * If neither field is set, the font family and weight of the text inherit
                #   from the parent. Note that these properties cannot inherit separately
                #   from each other.
                #
                # If an update request specifies values for both `weighted_font_family` and
                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                #
                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                #
                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                # is returned.
              "fontFamily": "A String", # The font family of the text.
                  #
                  # The font family can be any font from the Font menu in Slides or from
                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                  # unrecognized, the text is rendered in `Arial`.
              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                  # multiple of `100` between `100` and `900`, inclusive. This range
                  # corresponds to the numerical values described in the CSS 2.1
                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                  # with non-numerical values disallowed. Weights greater than or equal to
                  # `700` are considered bold, and weights less than `700`are not bold. The
                  # default value is `400` ("normal").
            },
            "smallCaps": True or False, # Whether or not the text is in small capital letters.
            "fontFamily": "A String", # The font family of the text.
                #
                # The font family can be any font from the Font menu in Slides or from
                # [Google Fonts] (https://fonts.google.com/). If the font name is
                # unrecognized, the text is rendered in `Arial`.
                #
                # Some fonts can affect the weight of the text. If an update request
                # specifies values for both `font_family` and `bold`, the explicitly-set
                # `bold` value is used.
            "italic": True or False, # Whether or not the text is italicized.
            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                # are not inherited from parent text.
                #
                # Changing the link in an update request causes some other changes to the
                # text style of the range:
                #
                # * When setting a link, the text foreground color will be set to
                #   ThemeColorType.HYPERLINK and the text will
                #   be underlined. If these fields are modified in the same
                #   request, those values will be used instead of the link defaults.
                # * Setting a link on a text range that overlaps with an existing link will
                #   also update the existing link to point to the new URL.
                # * Links are not settable on newline characters. As a result, setting a link
                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                #   will separate the newline character(s) into their own text runs. The
                #   link will be applied separately to the runs before and after the newline.
                # * Removing a link will update the text style of the range to match the
                #   style of the preceding text (or the default text styles if the preceding
                #   text is another link) unless different styles are being set in the same
                #   request.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                # transparent, depending on if the `opaque_color` field in it is set.
              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
            },
            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                # points.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "underline": True or False, # Whether or not the text is underlined.
          },
          "textRange": { # Specifies a contiguous range of an indexed collection, such as characters in # The range of text to style.
              #
              # The range may be extended to include adjacent newlines.
              #
              # If the range fully contains a paragraph belonging to a list, the
              # paragraph's bullet is also updated with the matching text style.
              # text.
            "endIndex": 42, # The optional zero-based index of the end of the collection.
                # Required for `FIXED_RANGE` ranges.
            "startIndex": 42, # The optional zero-based index of the beginning of the collection.
                # Required for `FIXED_RANGE` and `FROM_START_INDEX` ranges.
            "type": "A String", # The type of range.
          },
          "objectId": "A String", # The object ID of the shape or table with the text to be styled.
          "cellLocation": { # A location of a single table cell within a table. # The location of the cell in the table containing the text to style. If
              # `object_id` refers to a table, `cell_location` must have a value.
              # Otherwise, it must not.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
        },
        "updateTableCellProperties": { # Update the properties of a TableCell. # Updates the properties of a TableCell.
          "tableRange": { # A table range represents a reference to a subset of a table. # The table range representing the subset of the table to which the updates
              # are applied. If a table range is not specified, the updates will apply to
              # the entire table.
              #
              # It's important to note that the cells specified by a table range do not
              # necessarily form a rectangle. For example, let's say we have a 3 x 3 table
              # where all the cells of the last row are merged together. The table looks
              # like this:
              #
              #
              #   [             ]
              #
              # A table range with location = (0, 0), row span = 3 and column span = 2
              # specifies the following cells:
              #
              #    x     x
              #   [      x      ]
            "rowSpan": 42, # The row span of the table range.
            "columnSpan": 42, # The column span of the table range.
            "location": { # A location of a single table cell within a table. # The starting location of the table range.
              "rowIndex": 42, # The 0-based row index.
              "columnIndex": 42, # The 0-based column index.
            },
          },
          "tableCellProperties": { # The properties of the TableCell. # The table cell properties to update.
            "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                # for newly created table cells in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a table cell will implicitly update this field
                  # to `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                  # case, any other fill fields set in the same request will be ignored.
            },
          },
          "objectId": "A String", # The object ID of the table.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `tableCellProperties` is
              # implied and should not be specified. A single `"*"` can be used as
              # short-hand for listing every field.
              #
              # For example to update the table cell background solid fill color, set
              # `fields` to `"tableCellBackgroundFill.solidFill.color"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
        },
        "replaceAllShapesWithImage": { # Replaces all shapes that match the given criteria with the provided image. # Replaces all shapes matching some criteria with an image.
          "containsText": { # A criteria that matches a specific string of text in a shape or table. # If set, this request will replace all of the shapes that contain the
              # given text.
            "text": "A String", # The text to search for in the shape or table.
            "matchCase": True or False, # Indicates whether the search should respect case:
                #
                # - `True`: the search is case sensitive.
                # - `False`: the search is case insensitive.
          },
          "pageObjectIds": [ # If non-empty, limits the matches to page elements only on the given pages.
              #
              # Returns a 400 bad request error if given the page object ID of a
              # notes page or a
              # notes master, or if a
              # page with that object ID doesn't exist in the presentation.
            "A String",
          ],
          "imageUrl": "A String", # The image URL.
              #
              # The image is fetched once at insertion time and a copy is stored for
              # display inside the presentation. Images must be less than 50MB in size,
              # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
              # format.
          "replaceMethod": "A String", # The replace method.
        },
        "updateSlidesPosition": { # Updates the position of slides in the presentation. # Updates the position of a set of slides in the presentation.
          "slideObjectIds": [ # The IDs of the slides in the presentation that should be moved.
              # The slides in this list must be in existing presentation order, without
              # duplicates.
            "A String",
          ],
          "insertionIndex": 42, # The index where the slides should be inserted, based on the slide
              # arrangement before the move takes place. Must be between zero and the
              # number of slides in the presentation, inclusive.
        },
        "duplicateObject": { # Duplicates a slide or page element. # Duplicates a slide or page element.
            #
            # When duplicating a slide, the duplicate slide will be created immediately
            # following the specified slide. When duplicating a page element, the duplicate
            # will be placed on the same page at the same position as the original.
          "objectIds": { # The object being duplicated may contain other objects, for example when
              # duplicating a slide or a group page element. This map defines how the IDs
              # of duplicated objects are generated: the keys are the IDs of the original
              # objects and its values are the IDs that will be assigned to the
              # corresponding duplicate object. The ID of the source object's duplicate
              # may be specified in this map as well, using the same value of the
              # `object_id` field as a key and the newly desired ID as the value.
              #
              # All keys must correspond to existing IDs in the presentation. All values
              # must be unique in the presentation and must start with an alphanumeric
              # character or an underscore (matches regex `[a-zA-Z0-9_]`); remaining
              # characters may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`). The length of the new ID must not be less than 5 or
              # greater than 50.
              #
              # If any IDs of source objects are omitted from the map, a new random ID will
              # be assigned. If the map is empty or unset, all duplicate objects will
              # receive a new random ID.
            "a_key": "A String",
          },
          "objectId": "A String", # The ID of the object to duplicate.
        },
        "updateParagraphStyle": { # Updates the styling for all of the paragraphs within a Shape or Table that # Updates the styling of paragraphs within a Shape or Table.
            # overlap with the given text index range.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `style` is implied and
              # should not be specified. A single `"*"` can be used as short-hand for
              # listing every field.
              #
              # For example, to update the paragraph alignment, set `fields` to
              # `"alignment"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          "style": { # Styles that apply to a whole paragraph. # The paragraph's style.
              #
              # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
              # inherited from the parent. Which paragraph styles are inherited depend on the
              # nesting level of lists:
              #
              # * A paragraph not in a list will inherit its paragraph style from the
              #   paragraph at the 0 nesting level of the list inside the parent placeholder.
              # * A paragraph in a list will inherit its paragraph style from the paragraph
              #   at its corresponding nesting level of the list inside the parent
              #   placeholder.
              #
              # Inherited paragraph styles are represented as unset fields in this message.
            "spacingMode": "A String", # The spacing mode for the paragraph.
            "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                # LEFT_TO_RIGHT since
                # text direction is not inherited.
            "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                # inherited from the parent.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                # is represented as 100.0. If unset, the value is inherited from the parent.
            "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                # the start of the text, based on the current text direction. If unset, the
                # value is inherited from the parent.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                # inherited from the parent.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                # the end of the text, based on the current text direction. If unset, the
                # value is inherited from the parent.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                # If unset, the value is inherited from the parent.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "alignment": "A String", # The text alignment for this paragraph.
          },
          "textRange": { # Specifies a contiguous range of an indexed collection, such as characters in # The range of text containing the paragraph(s) to style.
              # text.
            "endIndex": 42, # The optional zero-based index of the end of the collection.
                # Required for `FIXED_RANGE` ranges.
            "startIndex": 42, # The optional zero-based index of the beginning of the collection.
                # Required for `FIXED_RANGE` and `FROM_START_INDEX` ranges.
            "type": "A String", # The type of range.
          },
          "objectId": "A String", # The object ID of the shape or table with the text to be styled.
          "cellLocation": { # A location of a single table cell within a table. # The location of the cell in the table containing the paragraph(s) to
              # style. If `object_id` refers to a table, `cell_location` must have a value.
              # Otherwise, it must not.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
        },
        "refreshSheetsChart": { # Refreshes an embedded Google Sheets chart by replacing it with the latest # Refreshes a Google Sheets chart.
            # version of the chart from Google Sheets.
            #
            # NOTE: Refreshing charts requires  at least one of the spreadsheets.readonly,
            # spreadsheets, drive.readonly, or drive OAuth scopes.
          "objectId": "A String", # The object ID of the chart to refresh.
        },
        "replaceAllText": { # Replaces all instances of text matching a criteria with replace text. # Replaces all instances of specified text.
          "containsText": { # A criteria that matches a specific string of text in a shape or table. # Finds text in a shape matching this substring.
            "text": "A String", # The text to search for in the shape or table.
            "matchCase": True or False, # Indicates whether the search should respect case:
                #
                # - `True`: the search is case sensitive.
                # - `False`: the search is case insensitive.
          },
          "pageObjectIds": [ # If non-empty, limits the matches to page elements only on the given pages.
              #
              # Returns a 400 bad request error if given the page object ID of a
              # notes master,
              # or if a page with that object ID doesn't exist in the presentation.
            "A String",
          ],
          "replaceText": "A String", # The text that will replace the matched text.
        },
        "createSheetsChart": { # Creates an embedded Google Sheets chart. # Creates an embedded Google Sheets chart.
            #
            # NOTE: Chart creation requires at least one of the spreadsheets.readonly,
            # spreadsheets, drive.readonly, or drive OAuth scopes.
          "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet.
          "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the chart.
          "linkingMode": "A String", # The mode with which the chart is linked to the source spreadsheet. When
              # not specified, the chart will be an image that is not linked.
          "elementProperties": { # Common properties for a page element. # The element properties for the chart.
              #
              # When the aspect ratio of the provided size does not match the chart aspect
              # ratio, the chart is scaled and centered with respect to the size in order
              # to maintain aspect ratio. The provided transform is applied after this
              # operation.
              #
              # Note: When you initially create a
              # PageElement, the API may modify
              # the values of both `size` and `transform`, but the
              # visual size will be unchanged.
            "pageObjectId": "A String", # The object ID of the page where the element is located.
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform for the element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "size": { # A width and height. # The size of the element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "objectId": "A String", # A user-supplied object ID.
              #
              # If specified, the ID must be unique among all pages and page elements in
              # the presentation. The ID should start with a word character [a-zA-Z0-9_]
              # and then followed by any number of the following characters [a-zA-Z0-9_-:].
              # The length of the ID should not be less than 5 or greater than 50.
              # If empty, a unique identifier will be generated.
        },
        "createSlide": { # Creates a new slide. # Creates a new slide.
          "placeholderIdMappings": [ # An optional list of object ID mappings from the placeholder(s) on the layout to the placeholder(s)
              # that will be created on the new slide from that specified layout. Can only
              # be used when `slide_layout_reference` is specified.
            { # The user-specified ID mapping for a placeholder that will be created on a
                # slide from a specified layout.
              "layoutPlaceholder": { # The placeholder information that uniquely identifies a placeholder shape. # The placeholder on a layout that will be applied to a slide. Only type and index are needed. For example, a
                  # predefined `TITLE_AND_BODY` layout may usually have a TITLE placeholder
                  # with index 0 and a BODY placeholder with index 0.
                "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                    # If unset, the parent placeholder shape does not exist, so the shape does
                    # not inherit properties from any other shape.
                "index": 42, # The index of the placeholder. If the same placeholder types are present in
                    # the same page, they would have different index values.
                "type": "A String", # The type of the placeholder.
              },
              "objectId": "A String", # A user-supplied object ID for the placeholder identified above that to be
                  # created onto a slide.
                  #
                  # If you specify an ID, it must be unique among all pages and page elements
                  # in the presentation. The ID must start with an alphanumeric character or an
                  # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
                  # may include those as well as a hyphen or colon (matches regex
                  # `[a-zA-Z0-9_-:]`).
                  # The length of the ID must not be less than 5 or greater than 50.
                  #
                  # If you don't specify an ID, a unique one is generated.
              "layoutPlaceholderObjectId": "A String", # The object ID of the placeholder on a layout that will be applied
                  # to a slide.
            },
          ],
          "slideLayoutReference": { # Slide layout reference. This may reference either: # Layout reference of the slide to be inserted, based on the *current
              # master*, which is one of the following:
              #
              # - The master of the previous slide index.
              # - The master of the first slide, if the insertion_index is zero.
              # - The first master in the presentation, if there are no slides.
              #
              # If the LayoutReference is not found in the current master, a 400 bad
              # request error is returned.
              #
              # If you don't specify a layout reference, then the new slide will use the
              # predefined layout `BLANK`.
              #
              # - A predefined layout
              # - One of the layouts in the presentation.
            "predefinedLayout": "A String", # Predefined layout.
            "layoutId": "A String", # Layout ID: the object ID of one of the layouts in the presentation.
          },
          "objectId": "A String", # A user-supplied object ID.
              #
              # If you specify an ID, it must be unique among all pages and page elements
              # in the presentation. The ID must start with an alphanumeric character or an
              # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
              # may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`).
              # The length of the ID must not be less than 5 or greater than 50.
              #
              # If you don't specify an ID, a unique one is generated.
          "insertionIndex": 42, # The optional zero-based index indicating where to insert the slides.
              #
              # If you don't specify an index, the new slide is created at the end.
        },
        "deleteObject": { # Deletes an object, either pages or # Deletes a page or page element from the presentation.
            # page elements, from the
            # presentation.
          "objectId": "A String", # The object ID of the page or page element to delete.
              #
              # If after a delete operation a group contains
              # only 1 or no page elements, the group is also deleted.
              #
              # If a placeholder is deleted on a layout, any empty inheriting shapes are
              # also deleted.
        },
        "updateShapeProperties": { # Update the properties of a Shape. # Updates the properties of a Shape.
          "fields": "A String", # The fields that should be updated.
              #
              # At least one field must be specified. The root `shapeProperties` is
              # implied and should not be specified. A single `"*"` can be used as
              # short-hand for listing every field.
              #
              # For example to update the shape background solid fill color, set `fields`
              # to `"shapeBackgroundFill.solidFill.color"`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          "shapeProperties": { # The properties of a Shape. # The shape properties to update.
              #
              # If the shape is a placeholder shape as determined by the
              # placeholder field, then these
              # properties may be inherited from a parent placeholder shape.
              # Determining the rendered value of the property depends on the corresponding
              # property_state field value.
            "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                # a parent placeholder if it exists. If the shape has no parent, then the
                # default shadow matches the defaults for new shapes created in the Slides
                # editor. This property is read-only.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "color": { # A themeable solid color value. # The shadow color value.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                  # relative to the alignment position.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "propertyState": "A String", # The shadow property state.
                  #
                  # Updating the the shadow on a page element will implicitly update this field
                  # to `RENDERED`, unless another value is specified in the same request. To
                  # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                  # case, any other shadow fields set in the same request will be ignored.
              "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                  # shadow becomes.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
              "type": "A String", # The type of the shadow.
              "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                  # scale and skew of the shadow.
              "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
            },
            "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                # inherited from a parent placeholder if it exists. If the shape has no
                # parent, then the default background fill depends on the shape type,
                # matching the defaults for new shapes created in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a shape will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
            },
            "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                # are not inherited from parent placeholders.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                # parent placeholder if it exists. If the shape has no parent, then the
                # default outline depends on the shape type, matching the defaults for
                # new shapes created in the Slides editor.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "outlineFill": { # The fill of the outline. # The fill of the outline.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # 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 * (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.
                },
              },
              "propertyState": "A String", # The outline property state.
                  #
                  # Updating the the outline on a page element will implicitly update this
                  # field to`RENDERED`, unless another value is specified in the same request.
                  # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                  # this case, any other outline fields set in the same request will be
                  # ignored.
              "dashStyle": "A String", # The dash style of the outline.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "objectId": "A String", # The object ID of the shape the updates are applied to.
        },
        "createShape": { # Creates a new shape. # Creates a new shape.
          "elementProperties": { # Common properties for a page element. # The element properties for the shape.
              #
              # Note: When you initially create a
              # PageElement, the API may modify
              # the values of both `size` and `transform`, but the
              # visual size will be unchanged.
            "pageObjectId": "A String", # The object ID of the page where the element is located.
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform for the element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "size": { # A width and height. # The size of the element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "shapeType": "A String", # The shape type.
          "objectId": "A String", # A user-supplied object ID.
              #
              # If you specify an ID, it must be unique among all pages and page elements
              # in the presentation. The ID must start with an alphanumeric character or an
              # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
              # may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`).
              # The length of the ID must not be less than 5 or greater than 50.
              # If empty, a unique identifier will be generated.
        },
        "insertTableColumns": { # Inserts columns into a table. # Inserts columns into a table.
            #
            # Other columns in the table will be resized to fit the new column.
          "number": 42, # The number of columns to be inserted. Maximum 20 per request.
          "insertRight": True or False, # Whether to insert new columns to the right of the reference cell location.
              #
              # - `True`: insert to the right.
              # - `False`: insert to the left.
          "cellLocation": { # A location of a single table cell within a table. # The reference table cell location from which columns will be inserted.
              #
              # A new column will be inserted to the left (or right) of the column where
              # the reference cell is. If the reference cell is a merged cell, a new
              # column will be inserted to the left (or right) of the merged cell.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
          "tableObjectId": "A String", # The table to insert columns into.
        },
        "createParagraphBullets": { # Creates bullets for all of the paragraphs that overlap with the given # Creates bullets for paragraphs.
            # text index range.
            #
            # The nesting level of each paragraph will be determined by counting leading
            # tabs in front of each paragraph. To avoid excess space between the bullet and
            # the corresponding paragraph, these leading tabs are removed by this request.
            # This may change the indices of parts of the text.
            #
            # If the paragraph immediately before paragraphs being updated is in a list
            # with a matching preset, the paragraphs being updated are added to that
            # preceding list.
          "bulletPreset": "A String", # The kinds of bullet glyphs to be used. Defaults to the
              # `BULLET_DISC_CIRCLE_SQUARE` preset.
          "textRange": { # Specifies a contiguous range of an indexed collection, such as characters in # The range of text to apply the bullet presets to, based on TextElement indexes.
              # text.
            "endIndex": 42, # The optional zero-based index of the end of the collection.
                # Required for `FIXED_RANGE` ranges.
            "startIndex": 42, # The optional zero-based index of the beginning of the collection.
                # Required for `FIXED_RANGE` and `FROM_START_INDEX` ranges.
            "type": "A String", # The type of range.
          },
          "objectId": "A String", # The object ID of the shape or table containing the text to add bullets to.
          "cellLocation": { # A location of a single table cell within a table. # The optional table cell location if the text to be modified is in a table
              # cell. If present, the object_id must refer to a table.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
        },
        "createTable": { # Creates a new table. # Creates a new table.
          "rows": 42, # Number of rows in the table.
          "elementProperties": { # Common properties for a page element. # The element properties for the table.
              #
              # The table will be created at the provided size, subject to a minimum size.
              # If no size is provided, the table will be automatically sized.
              #
              # Table transforms must have a scale of 1 and no shear components. If no
              # transform is provided, the table will be centered on the page.
              #
              # Note: When you initially create a
              # PageElement, the API may modify
              # the values of both `size` and `transform`, but the
              # visual size will be unchanged.
            "pageObjectId": "A String", # The object ID of the page where the element is located.
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform for the element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "size": { # A width and height. # The size of the element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "columns": 42, # Number of columns in the table.
          "objectId": "A String", # A user-supplied object ID.
              #
              # If you specify an ID, it must be unique among all pages and page elements
              # in the presentation. The ID must start with an alphanumeric character or an
              # underscore (matches regex `[a-zA-Z0-9_]`); remaining characters
              # may include those as well as a hyphen or colon (matches regex
              # `[a-zA-Z0-9_-:]`).
              # The length of the ID must not be less than 5 or greater than 50.
              #
              # If you don't specify an ID, a unique one is generated.
        },
        "deleteTableColumn": { # Deletes a column from a table. # Deletes a column from a table.
          "cellLocation": { # A location of a single table cell within a table. # The reference table cell location from which a column will be deleted.
              #
              # The column this cell spans will be deleted. If this is a merged cell,
              # multiple columns will be deleted. If no columns remain in the table after
              # this deletion, the whole table is deleted.
            "rowIndex": 42, # The 0-based row index.
            "columnIndex": 42, # The 0-based column index.
          },
          "tableObjectId": "A String", # The table to delete columns from.
        },
        "updatePageElementTransform": { # Updates the transform of a page element. # Updates the transform of a page element.
          "applyMode": "A String", # The apply mode of the transform update.
          "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The input transform matrix used to update the page element.
              # to transform source coordinates (x,y) into destination coordinates (x', y')
              # according to:
              #
              #       x'  x  =   shear_y  scale_y  translate_y
              #       1  [ 1 ]
              #
              # After transformation,
              #
              #      x' = scale_x * x + shear_x * y + translate_x;
              #      y' = scale_y * y + shear_y * x + translate_y;
              #
              # This message is therefore composed of these six matrix elements.
            "translateX": 3.14, # The X coordinate translation element.
            "translateY": 3.14, # The Y coordinate translation element.
            "scaleX": 3.14, # The X coordinate scaling element.
            "scaleY": 3.14, # The Y coordinate scaling element.
            "shearY": 3.14, # The Y coordinate shearing element.
            "shearX": 3.14, # The X coordinate shearing element.
            "unit": "A String", # The units for translate elements.
          },
          "objectId": "A String", # The object ID of the page element to update.
        },
      },
    ],
    "writeControl": { # Provides control over how write requests are executed. # Provides control over how write requests are executed.
      "requiredRevisionId": "A String", # The revision ID of the presentation required for the write request. If
          # specified and the `required_revision_id` doesn't exactly match the
          # presentation's current `revision_id`, the request will not be processed and
          # will return a 400 bad request error.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message from a batch update.
    "presentationId": "A String", # The presentation the updates were applied to.
    "replies": [ # The reply of the updates.  This maps 1:1 with the updates, although
        # replies to some requests may be empty.
      { # A single response from an update.
        "createImage": { # The result of creating an image. # The result of creating an image.
          "objectId": "A String", # The object ID of the created image.
        },
        "replaceAllShapesWithImage": { # The result of replacing shapes with an image. # The result of replacing all shapes matching some criteria with an
            # image.
          "occurrencesChanged": 42, # The number of shapes replaced with images.
        },
        "duplicateObject": { # The response of duplicating an object. # The result of duplicating an object.
          "objectId": "A String", # The ID of the new duplicate object.
        },
        "createShape": { # The result of creating a shape. # The result of creating a shape.
          "objectId": "A String", # The object ID of the created shape.
        },
        "replaceAllText": { # The result of replacing text. # The result of replacing text.
          "occurrencesChanged": 42, # The number of occurrences changed by replacing all text.
        },
        "createSheetsChart": { # The result of creating an embedded Google Sheets chart. # The result of creating a Google Sheets chart.
          "objectId": "A String", # The object ID of the created chart.
        },
        "createVideo": { # The result of creating a video. # The result of creating a video.
          "objectId": "A String", # The object ID of the created video.
        },
        "createLine": { # The result of creating a line. # The result of creating a line.
          "objectId": "A String", # The object ID of the created line.
        },
        "createTable": { # The result of creating a table. # The result of creating a table.
          "objectId": "A String", # The object ID of the created table.
        },
        "createSlide": { # The result of creating a slide. # The result of creating a slide.
          "objectId": "A String", # The object ID of the created slide.
        },
        "replaceAllShapesWithSheetsChart": { # The result of replacing shapes with a Google Sheets chart. # The result of replacing all shapes matching some criteria with a Google
            # Sheets chart.
          "occurrencesChanged": 42, # The number of shapes replaced with charts.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body, x__xgafv=None)</code>
  <pre>Creates a new presentation using the title given in the request. Other
fields in the request are ignored.
Returns the created presentation.

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # A Google Slides presentation.
    "presentationId": "A String", # The ID of the presentation.
    "notesMaster": { # A page in a presentation. # The notes master in the presentation. It serves three purposes:
        # 
        # - Placeholder shapes on a notes master contain the default text styles and
        #   shape properties of all placeholder shapes on notes pages. Specifically,
        #   a `SLIDE_IMAGE` placeholder shape contains the slide thumbnail, and a
        #   `BODY` placeholder shape contains the speaker notes.
        # - The notes master page properties define the common page properties
        #   inherited by all notes pages.
        # - Any other shapes on the notes master will appear on all notes pages.
        # 
        # The notes master is read-only.
      "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
          # relevant for pages with page_type LAYOUT.
        "displayName": "A String", # The human readable name of the layout in the presentation's locale.
        "name": "A String", # The name of the layout.
        "masterObjectId": "A String", # The object ID of the master that this layout is based on.
      },
      "pageElements": [ # The page elements rendered on the page.
        { # A visual element rendered on a page.
          "wordArt": { # A PageElement kind representing # A word art page element.
              # word art.
            "renderedText": "A String", # The text rendered as word art.
          },
          "description": "A String", # The description of the page element. Combined with title to display alt
              # text.
          "objectId": "A String", # The object ID for this page element. Object IDs used by
              # google.apps.slides.v1.Page and
              # google.apps.slides.v1.PageElement share the same namespace.
          "title": "A String", # The title of the page element. Combined with description to display alt
              # text.
          "image": { # A PageElement kind representing an # An image page element.
              # image.
            "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                # This URL is tagged with the account of the requester. Anyone with the URL
                # effectively accesses the image as the original requester. Access to the
                # image may be lost if the presentation's sharing settings change.
            "imageProperties": { # The properties of the Image. # The properties of the image.
              "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "outlineFill": { # The fill of the outline. # The fill of the outline.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "propertyState": "A String", # The outline property state.
                    #
                    # Updating the the outline on a page element will implicitly update this
                    # field to`RENDERED`, unless another value is specified in the same request.
                    # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                    # this case, any other outline fields set in the same request will be
                    # ignored.
                "dashStyle": "A String", # The dash style of the outline.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
              "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                  # This property is read-only.
                "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                    # stops.
                    #
                    # The colors in the gradient will replace the corresponding colors at
                    # the same position in the color palette and apply to the image. This
                    # property is read-only.
                  { # A color and position in a gradient band.
                    "color": { # A themeable solid color value. # The color of the gradient stop.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                        # fully opaque.
                    "position": 3.14, # The relative position of the color stop in the gradient band measured
                        # in percentage. The value should be in the interval [0.0, 1.0].
                  },
                ],
                "name": "A String", # The name of the recolor effect.
                    #
                    # The name is determined from the `recolor_stops` by matching the gradient
                    # against the colors in the page's current color scheme. This property is
                    # read-only.
              },
              "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                    # in the presentation. There may not be a slide at this index.
                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                    # presentation with this ID. A page with this ID may not exist.
                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                    # addressed by its position.
              },
              "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                  # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                  # This property is read-only.
              "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                  # This property is read-only.
                  # Image.
                  #
                  # The crop properties is represented by the offsets of four edges which define
                  # a crop rectangle. The offsets are measured in percentage from the
                  # corresponding edges of the object's original bounding rectangle towards
                  # inside, relative to the object's original dimensions.
                  #
                  # - If the offset is in the interval (0, 1), the corresponding edge of crop
                  # rectangle is positioned inside of the object's original bounding rectangle.
                  # - If the offset is negative or greater than 1, the corresponding edge of crop
                  # rectangle is positioned outside of the object's original bounding rectangle.
                  # - If the left edge of the crop rectangle is on the right side of its right
                  # edge, the object will be flipped horizontally.
                  # - If the top edge of the crop rectangle is below its bottom edge, the object
                  # will be flipped vertically.
                  # - If all offsets and rotation angle is 0, the object is not cropped.
                  #
                  # After cropping, the content in the crop rectangle will be stretched to fit
                  # its container.
                "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                    # the right of the original bounding rectangle left edge, relative to the
                    # object's original width.
                "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                    # Rotation angle is applied after the offset.
                "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                    # to the left of the original bounding rectangle right edge, relative to the
                    # object's original width.
                "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                    # above the original bounding rectangle bottom edge, relative to the object's
                    # original height.
                "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                    # below the original bounding rectangle top edge, relative to the object's
                    # original height.
              },
              "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                  # is read-only.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "color": { # A themeable solid color value. # The shadow color value.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                    # relative to the alignment position.
                    # to transform source coordinates (x,y) into destination coordinates (x', y')
                    # according to:
                    #
                    #       x'  x  =   shear_y  scale_y  translate_y
                    #       1  [ 1 ]
                    #
                    # After transformation,
                    #
                    #      x' = scale_x * x + shear_x * y + translate_x;
                    #      y' = scale_y * y + shear_y * x + translate_y;
                    #
                    # This message is therefore composed of these six matrix elements.
                  "translateX": 3.14, # The X coordinate translation element.
                  "translateY": 3.14, # The Y coordinate translation element.
                  "scaleX": 3.14, # The X coordinate scaling element.
                  "scaleY": 3.14, # The Y coordinate scaling element.
                  "shearY": 3.14, # The Y coordinate shearing element.
                  "shearX": 3.14, # The X coordinate shearing element.
                  "unit": "A String", # The units for translate elements.
                },
                "propertyState": "A String", # The shadow property state.
                    #
                    # Updating the the shadow on a page element will implicitly update this field
                    # to `RENDERED`, unless another value is specified in the same request. To
                    # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                    # case, any other shadow fields set in the same request will be ignored.
                "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                    # shadow becomes.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                "type": "A String", # The type of the shadow.
                "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                    # scale and skew of the shadow.
                "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
              },
              "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect. This property is read-only.
            },
          },
          "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
              # to transform source coordinates (x,y) into destination coordinates (x', y')
              # according to:
              #
              #       x'  x  =   shear_y  scale_y  translate_y
              #       1  [ 1 ]
              #
              # After transformation,
              #
              #      x' = scale_x * x + shear_x * y + translate_x;
              #      y' = scale_y * y + shear_y * x + translate_y;
              #
              # This message is therefore composed of these six matrix elements.
            "translateX": 3.14, # The X coordinate translation element.
            "translateY": 3.14, # The Y coordinate translation element.
            "scaleX": 3.14, # The X coordinate scaling element.
            "scaleY": 3.14, # The Y coordinate scaling element.
            "shearY": 3.14, # The Y coordinate shearing element.
            "shearX": 3.14, # The X coordinate shearing element.
            "unit": "A String", # The units for translate elements.
          },
          "shape": { # A PageElement kind representing a # A generic shape.
              # generic shape that does not have a more specific classification.
            "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                # text box or rectangle) or a table cell in a page.
              "lists": { # The bulleted lists contained in this text, keyed by list ID.
                "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                    # associated with a list. A paragraph that is part of a list has an implicit
                    # reference to that list's ID.
                  "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                      # level. A list has at most nine levels of nesting, so the possible values
                      # for the keys of this map are 0 through 8, inclusive.
                    "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                        # level of nesting.
                      "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                    },
                  },
                  "listId": "A String", # The ID of the list.
                },
              },
              "textElements": [ # The text contents broken down into its component parts, including styling
                  # information. This property is read-only.
                { # A TextElement describes the content of a range of indices in the text content
                    # of a Shape or TableCell.
                  "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                      # replaced with content that can change over time.
                    "content": "A String", # The rendered content of this auto text, if available.
                    "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                        #
                        # If this text is contained in a shape with a parent placeholder, then these text styles may be
                        # inherited from the parent. Which text styles are inherited depend on the
                        # nesting level of lists:
                        #
                        # * A text run in a paragraph that is not in a list will inherit its text style
                        #   from the the newline character in the paragraph at the 0 nesting level of
                        #   the list inside the parent placeholder.
                        # * A text run in a paragraph that is in a list will inherit its text style
                        #   from the newline character in the paragraph at its corresponding nesting
                        #   level of the list inside the parent placeholder.
                        #
                        # Inherited text styles are represented as unset fields in this message. If
                        # text is contained in a shape without a parent placeholder, unsetting these
                        # fields will revert the style to a value matching the defaults in the Slides
                        # editor.
                      "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "bold": True or False, # Whether or not the text is rendered as bold.
                      "baselineOffset": "A String", # The text's vertical offset from its normal position.
                          #
                          # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                          # rendered in a smaller font size, computed based on the `font_size` field.
                          # The `font_size` itself is not affected by changes in this field.
                      "strikethrough": True or False, # Whether or not the text is struck through.
                      "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                          #
                          # This field is an extension of `font_family` meant to support explicit font
                          # weights without breaking backwards compatibility. As such, when reading the
                          # style of a range of text, the value of `weighted_font_family#font_family`
                          # will always be equal to that of `font_family`. However, when writing, if
                          # both fields are included in the field mask (either explicitly or through
                          # the wildcard `"*"`), their values are reconciled as follows:
                          #
                          # * If `font_family` is set and `weighted_font_family` is not, the value of
                          #   `font_family` is applied with weight `400` ("normal").
                          # * If both fields are set, the value of `font_family` must match that of
                          #   `weighted_font_family#font_family`. If so, the font family and weight of
                          #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                          #   returned.
                          # * If `weighted_font_family` is set and `font_family` is not, the font
                          #   family and weight of `weighted_font_family` is applied.
                          # * If neither field is set, the font family and weight of the text inherit
                          #   from the parent. Note that these properties cannot inherit separately
                          #   from each other.
                          #
                          # If an update request specifies values for both `weighted_font_family` and
                          # `bold`, the `weighted_font_family` is applied first, then `bold`.
                          #
                          # If `weighted_font_family#weight` is not set, it defaults to `400`.
                          #
                          # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                          # must also be set with a non-empty value. Otherwise, a 400 bad request error
                          # is returned.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        "weight": 42, # The rendered weight of the text. This field can have any value that is a
                            # multiple of `100` between `100` and `900`, inclusive. This range
                            # corresponds to the numerical values described in the CSS 2.1
                            # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                            # with non-numerical values disallowed. Weights greater than or equal to
                            # `700` are considered bold, and weights less than `700`are not bold. The
                            # default value is `400` ("normal").
                      },
                      "smallCaps": True or False, # Whether or not the text is in small capital letters.
                      "fontFamily": "A String", # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Slides or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                          #
                          # Some fonts can affect the weight of the text. If an update request
                          # specifies values for both `font_family` and `bold`, the explicitly-set
                          # `bold` value is used.
                      "italic": True or False, # Whether or not the text is italicized.
                      "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                          # are not inherited from parent text.
                          #
                          # Changing the link in an update request causes some other changes to the
                          # text style of the range:
                          #
                          # * When setting a link, the text foreground color will be set to
                          #   ThemeColorType.HYPERLINK and the text will
                          #   be underlined. If these fields are modified in the same
                          #   request, those values will be used instead of the link defaults.
                          # * Setting a link on a text range that overlaps with an existing link will
                          #   also update the existing link to point to the new URL.
                          # * Links are not settable on newline characters. As a result, setting a link
                          #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                          #   will separate the newline character(s) into their own text runs. The
                          #   link will be applied separately to the runs before and after the newline.
                          # * Removing a link will update the text style of the range to match the
                          #   style of the preceding text (or the default text styles if the preceding
                          #   text is another link) unless different styles are being set in the same
                          #   request.
                        "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                        "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                            # in the presentation. There may not be a slide at this index.
                        "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                            # presentation with this ID. A page with this ID may not exist.
                        "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                            # addressed by its position.
                      },
                      "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                          # points.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "underline": True or False, # Whether or not the text is underlined.
                    },
                    "type": "A String", # The type of this auto text.
                  },
                  "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                      # units.
                  "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                  "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                      #
                      # The `start_index` and `end_index` of this TextElement represent the
                      # range of the paragraph. Other TextElements with an index range contained
                      # inside this paragraph's range are considered to be part of this
                      # paragraph. The range of indices of two separate paragraphs will never
                      # overlap.
                    "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                        #
                        # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                        # inherited from the parent. Which paragraph styles are inherited depend on the
                        # nesting level of lists:
                        #
                        # * A paragraph not in a list will inherit its paragraph style from the
                        #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                        # * A paragraph in a list will inherit its paragraph style from the paragraph
                        #   at its corresponding nesting level of the list inside the parent
                        #   placeholder.
                        #
                        # Inherited paragraph styles are represented as unset fields in this message.
                      "spacingMode": "A String", # The spacing mode for the paragraph.
                      "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                          # LEFT_TO_RIGHT since
                          # text direction is not inherited.
                      "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                          # inherited from the parent.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                          # is represented as 100.0. If unset, the value is inherited from the parent.
                      "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                          # the start of the text, based on the current text direction. If unset, the
                          # value is inherited from the parent.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                          # inherited from the parent.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                          # the end of the text, based on the current text direction. If unset, the
                          # value is inherited from the parent.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                          # If unset, the value is inherited from the parent.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alignment": "A String", # The text alignment for this paragraph.
                    },
                    "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                        # belong to a list.
                      "nestingLevel": 42, # The nesting level of this paragraph in the list.
                      "listId": "A String", # The ID of the list this paragraph belongs to.
                      "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                      "glyph": "A String", # The rendered bullet glyph for this paragraph.
                    },
                  },
                  "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                      # in the run have the same TextStyle.
                      #
                      # The `start_index` and `end_index` of TextRuns will always be fully
                      # contained in the index range of a single `paragraph_marker` TextElement.
                      # In other words, a TextRun will never span multiple paragraphs.
                      # styling.
                    "content": "A String", # The text of this run.
                    "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                        #
                        # If this text is contained in a shape with a parent placeholder, then these text styles may be
                        # inherited from the parent. Which text styles are inherited depend on the
                        # nesting level of lists:
                        #
                        # * A text run in a paragraph that is not in a list will inherit its text style
                        #   from the the newline character in the paragraph at the 0 nesting level of
                        #   the list inside the parent placeholder.
                        # * A text run in a paragraph that is in a list will inherit its text style
                        #   from the newline character in the paragraph at its corresponding nesting
                        #   level of the list inside the parent placeholder.
                        #
                        # Inherited text styles are represented as unset fields in this message. If
                        # text is contained in a shape without a parent placeholder, unsetting these
                        # fields will revert the style to a value matching the defaults in the Slides
                        # editor.
                      "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "bold": True or False, # Whether or not the text is rendered as bold.
                      "baselineOffset": "A String", # The text's vertical offset from its normal position.
                          #
                          # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                          # rendered in a smaller font size, computed based on the `font_size` field.
                          # The `font_size` itself is not affected by changes in this field.
                      "strikethrough": True or False, # Whether or not the text is struck through.
                      "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                          #
                          # This field is an extension of `font_family` meant to support explicit font
                          # weights without breaking backwards compatibility. As such, when reading the
                          # style of a range of text, the value of `weighted_font_family#font_family`
                          # will always be equal to that of `font_family`. However, when writing, if
                          # both fields are included in the field mask (either explicitly or through
                          # the wildcard `"*"`), their values are reconciled as follows:
                          #
                          # * If `font_family` is set and `weighted_font_family` is not, the value of
                          #   `font_family` is applied with weight `400` ("normal").
                          # * If both fields are set, the value of `font_family` must match that of
                          #   `weighted_font_family#font_family`. If so, the font family and weight of
                          #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                          #   returned.
                          # * If `weighted_font_family` is set and `font_family` is not, the font
                          #   family and weight of `weighted_font_family` is applied.
                          # * If neither field is set, the font family and weight of the text inherit
                          #   from the parent. Note that these properties cannot inherit separately
                          #   from each other.
                          #
                          # If an update request specifies values for both `weighted_font_family` and
                          # `bold`, the `weighted_font_family` is applied first, then `bold`.
                          #
                          # If `weighted_font_family#weight` is not set, it defaults to `400`.
                          #
                          # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                          # must also be set with a non-empty value. Otherwise, a 400 bad request error
                          # is returned.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        "weight": 42, # The rendered weight of the text. This field can have any value that is a
                            # multiple of `100` between `100` and `900`, inclusive. This range
                            # corresponds to the numerical values described in the CSS 2.1
                            # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                            # with non-numerical values disallowed. Weights greater than or equal to
                            # `700` are considered bold, and weights less than `700`are not bold. The
                            # default value is `400` ("normal").
                      },
                      "smallCaps": True or False, # Whether or not the text is in small capital letters.
                      "fontFamily": "A String", # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Slides or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                          #
                          # Some fonts can affect the weight of the text. If an update request
                          # specifies values for both `font_family` and `bold`, the explicitly-set
                          # `bold` value is used.
                      "italic": True or False, # Whether or not the text is italicized.
                      "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                          # are not inherited from parent text.
                          #
                          # Changing the link in an update request causes some other changes to the
                          # text style of the range:
                          #
                          # * When setting a link, the text foreground color will be set to
                          #   ThemeColorType.HYPERLINK and the text will
                          #   be underlined. If these fields are modified in the same
                          #   request, those values will be used instead of the link defaults.
                          # * Setting a link on a text range that overlaps with an existing link will
                          #   also update the existing link to point to the new URL.
                          # * Links are not settable on newline characters. As a result, setting a link
                          #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                          #   will separate the newline character(s) into their own text runs. The
                          #   link will be applied separately to the runs before and after the newline.
                          # * Removing a link will update the text style of the range to match the
                          #   style of the preceding text (or the default text styles if the preceding
                          #   text is another link) unless different styles are being set in the same
                          #   request.
                        "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                        "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                            # in the presentation. There may not be a slide at this index.
                        "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                            # presentation with this ID. A page with this ID may not exist.
                        "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                            # addressed by its position.
                      },
                      "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                          # points.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "underline": True or False, # Whether or not the text is underlined.
                    },
                  },
                },
              ],
            },
            "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                #
                # If the shape is a placeholder shape as determined by the
                # placeholder field, then these
                # properties may be inherited from a parent placeholder shape.
                # Determining the rendered value of the property depends on the corresponding
                # property_state field value.
              "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                  # a parent placeholder if it exists. If the shape has no parent, then the
                  # default shadow matches the defaults for new shapes created in the Slides
                  # editor. This property is read-only.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "color": { # A themeable solid color value. # The shadow color value.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                    # relative to the alignment position.
                    # to transform source coordinates (x,y) into destination coordinates (x', y')
                    # according to:
                    #
                    #       x'  x  =   shear_y  scale_y  translate_y
                    #       1  [ 1 ]
                    #
                    # After transformation,
                    #
                    #      x' = scale_x * x + shear_x * y + translate_x;
                    #      y' = scale_y * y + shear_y * x + translate_y;
                    #
                    # This message is therefore composed of these six matrix elements.
                  "translateX": 3.14, # The X coordinate translation element.
                  "translateY": 3.14, # The Y coordinate translation element.
                  "scaleX": 3.14, # The X coordinate scaling element.
                  "scaleY": 3.14, # The Y coordinate scaling element.
                  "shearY": 3.14, # The Y coordinate shearing element.
                  "shearX": 3.14, # The X coordinate shearing element.
                  "unit": "A String", # The units for translate elements.
                },
                "propertyState": "A String", # The shadow property state.
                    #
                    # Updating the the shadow on a page element will implicitly update this field
                    # to `RENDERED`, unless another value is specified in the same request. To
                    # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                    # case, any other shadow fields set in the same request will be ignored.
                "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                    # shadow becomes.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                "type": "A String", # The type of the shadow.
                "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                    # scale and skew of the shadow.
                "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
              },
              "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                  # inherited from a parent placeholder if it exists. If the shape has no
                  # parent, then the default background fill depends on the shape type,
                  # matching the defaults for new shapes created in the Slides editor.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # 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 * (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.
                },
                "propertyState": "A String", # The background fill property state.
                    #
                    # Updating the the fill on a shape will implicitly update this field to
                    # `RENDERED`, unless another value is specified in the same request. To
                    # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                    # any other fill fields set in the same request will be ignored.
              },
              "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                  # are not inherited from parent placeholders.
                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                    # in the presentation. There may not be a slide at this index.
                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                    # presentation with this ID. A page with this ID may not exist.
                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                    # addressed by its position.
              },
              "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                  # parent placeholder if it exists. If the shape has no parent, then the
                  # default outline depends on the shape type, matching the defaults for
                  # new shapes created in the Slides editor.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "outlineFill": { # The fill of the outline. # The fill of the outline.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "propertyState": "A String", # The outline property state.
                    #
                    # Updating the the outline on a page element will implicitly update this
                    # field to`RENDERED`, unless another value is specified in the same request.
                    # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                    # this case, any other outline fields set in the same request will be
                    # ignored.
                "dashStyle": "A String", # The dash style of the outline.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
            "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                # layouts and masters.
                #
                # If set, the shape is a placeholder shape and any inherited properties
                # can be resolved by looking at the parent placeholder identified by the
                # Placeholder.parent_object_id field.
              "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                  # If unset, the parent placeholder shape does not exist, so the shape does
                  # not inherit properties from any other shape.
              "index": 42, # The index of the placeholder. If the same placeholder types are present in
                  # the same page, they would have different index values.
              "type": "A String", # The type of the placeholder.
            },
            "shapeType": "A String", # The type of the shape.
          },
          "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
              # represented as images.
              # a linked chart embedded from Google Sheets.
            "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                # minutes. This URL is tagged with the account of the requester. Anyone with
                # the URL effectively accesses the image as the original requester. Access to
                # the image may be lost if the presentation's sharing settings change.
            "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
            "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
              "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
                "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                    # This property is read-only.
                  "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                      # stops.
                      #
                      # The colors in the gradient will replace the corresponding colors at
                      # the same position in the color palette and apply to the image. This
                      # property is read-only.
                    { # A color and position in a gradient band.
                      "color": { # A themeable solid color value. # The color of the gradient stop.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                          # fully opaque.
                      "position": 3.14, # The relative position of the color stop in the gradient band measured
                          # in percentage. The value should be in the interval [0.0, 1.0].
                    },
                  ],
                  "name": "A String", # The name of the recolor effect.
                      #
                      # The name is determined from the `recolor_stops` by matching the gradient
                      # against the colors in the page's current color scheme. This property is
                      # read-only.
                },
                "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                    # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                    # This property is read-only.
                "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                    # This property is read-only.
                    # Image.
                    #
                    # The crop properties is represented by the offsets of four edges which define
                    # a crop rectangle. The offsets are measured in percentage from the
                    # corresponding edges of the object's original bounding rectangle towards
                    # inside, relative to the object's original dimensions.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the object's original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the object's original bounding rectangle.
                    # - If the left edge of the crop rectangle is on the right side of its right
                    # edge, the object will be flipped horizontally.
                    # - If the top edge of the crop rectangle is below its bottom edge, the object
                    # will be flipped vertically.
                    # - If all offsets and rotation angle is 0, the object is not cropped.
                    #
                    # After cropping, the content in the crop rectangle will be stretched to fit
                    # its container.
                  "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                      # the right of the original bounding rectangle left edge, relative to the
                      # object's original width.
                  "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                      # Rotation angle is applied after the offset.
                  "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                      # to the left of the original bounding rectangle right edge, relative to the
                      # object's original width.
                  "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                      # above the original bounding rectangle bottom edge, relative to the object's
                      # original height.
                  "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                      # below the original bounding rectangle top edge, relative to the object's
                      # original height.
                },
                "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                    # is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              },
            },
            "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                # embedded.
          },
          "video": { # A PageElement kind representing a # A video page element.
              # video.
            "url": "A String", # An URL to a video. The URL is valid as long as the source video
                # exists and sharing settings do not change.
            "videoProperties": { # The properties of the Video. # The properties of the video.
              "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                  # videos created in the Slides editor.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "outlineFill": { # The fill of the outline. # The fill of the outline.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "propertyState": "A String", # The outline property state.
                    #
                    # Updating the the outline on a page element will implicitly update this
                    # field to`RENDERED`, unless another value is specified in the same request.
                    # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                    # this case, any other outline fields set in the same request will be
                    # ignored.
                "dashStyle": "A String", # The dash style of the outline.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
            "id": "A String", # The video source's unique identifier for this video.
            "source": "A String", # The video source.
          },
          "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
              # joined collection of PageElements.
            "children": [ # The collection of elements in the group. The minimum size of a group is 2.
              # Object with schema name: PageElement
            ],
          },
          "table": { # A PageElement kind representing a # A table page element.
              # table.
            "tableColumns": [ # Properties of each column.
              { # Properties of each column in a table.
                "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            ],
            "tableRows": [ # Properties and contents of each row.
                #
                # Cells that span multiple rows are contained in only one of these rows and
                # have a row_span greater
                # than 1.
              { # Properties and contents of each row in a table.
                "tableCells": [ # Properties and contents of each cell.
                    #
                    # Cells that span multiple columns are represented only once with a
                    # column_span greater
                    # than 1. As a result, the length of this collection does not always match
                    # the number of columns of the entire table.
                  { # Properties and contents of each table cell.
                    "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                        # text box or rectangle) or a table cell in a page.
                      "lists": { # The bulleted lists contained in this text, keyed by list ID.
                        "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                            # associated with a list. A paragraph that is part of a list has an implicit
                            # reference to that list's ID.
                          "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                              # level. A list has at most nine levels of nesting, so the possible values
                              # for the keys of this map are 0 through 8, inclusive.
                            "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                # level of nesting.
                              "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                            },
                          },
                          "listId": "A String", # The ID of the list.
                        },
                      },
                      "textElements": [ # The text contents broken down into its component parts, including styling
                          # information. This property is read-only.
                        { # A TextElement describes the content of a range of indices in the text content
                            # of a Shape or TableCell.
                          "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                              # replaced with content that can change over time.
                            "content": "A String", # The rendered content of this auto text, if available.
                            "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                #
                                # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                # inherited from the parent. Which text styles are inherited depend on the
                                # nesting level of lists:
                                #
                                # * A text run in a paragraph that is not in a list will inherit its text style
                                #   from the the newline character in the paragraph at the 0 nesting level of
                                #   the list inside the parent placeholder.
                                # * A text run in a paragraph that is in a list will inherit its text style
                                #   from the newline character in the paragraph at its corresponding nesting
                                #   level of the list inside the parent placeholder.
                                #
                                # Inherited text styles are represented as unset fields in this message. If
                                # text is contained in a shape without a parent placeholder, unsetting these
                                # fields will revert the style to a value matching the defaults in the Slides
                                # editor.
                              "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "bold": True or False, # Whether or not the text is rendered as bold.
                              "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                  #
                                  # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                  # rendered in a smaller font size, computed based on the `font_size` field.
                                  # The `font_size` itself is not affected by changes in this field.
                              "strikethrough": True or False, # Whether or not the text is struck through.
                              "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                  #
                                  # This field is an extension of `font_family` meant to support explicit font
                                  # weights without breaking backwards compatibility. As such, when reading the
                                  # style of a range of text, the value of `weighted_font_family#font_family`
                                  # will always be equal to that of `font_family`. However, when writing, if
                                  # both fields are included in the field mask (either explicitly or through
                                  # the wildcard `"*"`), their values are reconciled as follows:
                                  #
                                  # * If `font_family` is set and `weighted_font_family` is not, the value of
                                  #   `font_family` is applied with weight `400` ("normal").
                                  # * If both fields are set, the value of `font_family` must match that of
                                  #   `weighted_font_family#font_family`. If so, the font family and weight of
                                  #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                  #   returned.
                                  # * If `weighted_font_family` is set and `font_family` is not, the font
                                  #   family and weight of `weighted_font_family` is applied.
                                  # * If neither field is set, the font family and weight of the text inherit
                                  #   from the parent. Note that these properties cannot inherit separately
                                  #   from each other.
                                  #
                                  # If an update request specifies values for both `weighted_font_family` and
                                  # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                  #
                                  # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                  #
                                  # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                  # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                  # is returned.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                    # multiple of `100` between `100` and `900`, inclusive. This range
                                    # corresponds to the numerical values described in the CSS 2.1
                                    # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                    # with non-numerical values disallowed. Weights greater than or equal to
                                    # `700` are considered bold, and weights less than `700`are not bold. The
                                    # default value is `400` ("normal").
                              },
                              "smallCaps": True or False, # Whether or not the text is in small capital letters.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                                  #
                                  # Some fonts can affect the weight of the text. If an update request
                                  # specifies values for both `font_family` and `bold`, the explicitly-set
                                  # `bold` value is used.
                              "italic": True or False, # Whether or not the text is italicized.
                              "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                  # are not inherited from parent text.
                                  #
                                  # Changing the link in an update request causes some other changes to the
                                  # text style of the range:
                                  #
                                  # * When setting a link, the text foreground color will be set to
                                  #   ThemeColorType.HYPERLINK and the text will
                                  #   be underlined. If these fields are modified in the same
                                  #   request, those values will be used instead of the link defaults.
                                  # * Setting a link on a text range that overlaps with an existing link will
                                  #   also update the existing link to point to the new URL.
                                  # * Links are not settable on newline characters. As a result, setting a link
                                  #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                  #   will separate the newline character(s) into their own text runs. The
                                  #   link will be applied separately to the runs before and after the newline.
                                  # * Removing a link will update the text style of the range to match the
                                  #   style of the preceding text (or the default text styles if the preceding
                                  #   text is another link) unless different styles are being set in the same
                                  #   request.
                                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                    # in the presentation. There may not be a slide at this index.
                                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                    # presentation with this ID. A page with this ID may not exist.
                                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                    # addressed by its position.
                              },
                              "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                  # points.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "underline": True or False, # Whether or not the text is underlined.
                            },
                            "type": "A String", # The type of this auto text.
                          },
                          "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                              # units.
                          "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                          "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                              #
                              # The `start_index` and `end_index` of this TextElement represent the
                              # range of the paragraph. Other TextElements with an index range contained
                              # inside this paragraph's range are considered to be part of this
                              # paragraph. The range of indices of two separate paragraphs will never
                              # overlap.
                            "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                #
                                # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                # inherited from the parent. Which paragraph styles are inherited depend on the
                                # nesting level of lists:
                                #
                                # * A paragraph not in a list will inherit its paragraph style from the
                                #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                # * A paragraph in a list will inherit its paragraph style from the paragraph
                                #   at its corresponding nesting level of the list inside the parent
                                #   placeholder.
                                #
                                # Inherited paragraph styles are represented as unset fields in this message.
                              "spacingMode": "A String", # The spacing mode for the paragraph.
                              "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                  # LEFT_TO_RIGHT since
                                  # text direction is not inherited.
                              "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                  # inherited from the parent.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                  # is represented as 100.0. If unset, the value is inherited from the parent.
                              "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                  # the start of the text, based on the current text direction. If unset, the
                                  # value is inherited from the parent.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                  # inherited from the parent.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                  # the end of the text, based on the current text direction. If unset, the
                                  # value is inherited from the parent.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                  # If unset, the value is inherited from the parent.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "alignment": "A String", # The text alignment for this paragraph.
                            },
                            "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                # belong to a list.
                              "nestingLevel": 42, # The nesting level of this paragraph in the list.
                              "listId": "A String", # The ID of the list this paragraph belongs to.
                              "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                              "glyph": "A String", # The rendered bullet glyph for this paragraph.
                            },
                          },
                          "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                              # in the run have the same TextStyle.
                              #
                              # The `start_index` and `end_index` of TextRuns will always be fully
                              # contained in the index range of a single `paragraph_marker` TextElement.
                              # In other words, a TextRun will never span multiple paragraphs.
                              # styling.
                            "content": "A String", # The text of this run.
                            "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                #
                                # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                # inherited from the parent. Which text styles are inherited depend on the
                                # nesting level of lists:
                                #
                                # * A text run in a paragraph that is not in a list will inherit its text style
                                #   from the the newline character in the paragraph at the 0 nesting level of
                                #   the list inside the parent placeholder.
                                # * A text run in a paragraph that is in a list will inherit its text style
                                #   from the newline character in the paragraph at its corresponding nesting
                                #   level of the list inside the parent placeholder.
                                #
                                # Inherited text styles are represented as unset fields in this message. If
                                # text is contained in a shape without a parent placeholder, unsetting these
                                # fields will revert the style to a value matching the defaults in the Slides
                                # editor.
                              "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "bold": True or False, # Whether or not the text is rendered as bold.
                              "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                  #
                                  # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                  # rendered in a smaller font size, computed based on the `font_size` field.
                                  # The `font_size` itself is not affected by changes in this field.
                              "strikethrough": True or False, # Whether or not the text is struck through.
                              "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                  #
                                  # This field is an extension of `font_family` meant to support explicit font
                                  # weights without breaking backwards compatibility. As such, when reading the
                                  # style of a range of text, the value of `weighted_font_family#font_family`
                                  # will always be equal to that of `font_family`. However, when writing, if
                                  # both fields are included in the field mask (either explicitly or through
                                  # the wildcard `"*"`), their values are reconciled as follows:
                                  #
                                  # * If `font_family` is set and `weighted_font_family` is not, the value of
                                  #   `font_family` is applied with weight `400` ("normal").
                                  # * If both fields are set, the value of `font_family` must match that of
                                  #   `weighted_font_family#font_family`. If so, the font family and weight of
                                  #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                  #   returned.
                                  # * If `weighted_font_family` is set and `font_family` is not, the font
                                  #   family and weight of `weighted_font_family` is applied.
                                  # * If neither field is set, the font family and weight of the text inherit
                                  #   from the parent. Note that these properties cannot inherit separately
                                  #   from each other.
                                  #
                                  # If an update request specifies values for both `weighted_font_family` and
                                  # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                  #
                                  # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                  #
                                  # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                  # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                  # is returned.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                    # multiple of `100` between `100` and `900`, inclusive. This range
                                    # corresponds to the numerical values described in the CSS 2.1
                                    # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                    # with non-numerical values disallowed. Weights greater than or equal to
                                    # `700` are considered bold, and weights less than `700`are not bold. The
                                    # default value is `400` ("normal").
                              },
                              "smallCaps": True or False, # Whether or not the text is in small capital letters.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                                  #
                                  # Some fonts can affect the weight of the text. If an update request
                                  # specifies values for both `font_family` and `bold`, the explicitly-set
                                  # `bold` value is used.
                              "italic": True or False, # Whether or not the text is italicized.
                              "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                  # are not inherited from parent text.
                                  #
                                  # Changing the link in an update request causes some other changes to the
                                  # text style of the range:
                                  #
                                  # * When setting a link, the text foreground color will be set to
                                  #   ThemeColorType.HYPERLINK and the text will
                                  #   be underlined. If these fields are modified in the same
                                  #   request, those values will be used instead of the link defaults.
                                  # * Setting a link on a text range that overlaps with an existing link will
                                  #   also update the existing link to point to the new URL.
                                  # * Links are not settable on newline characters. As a result, setting a link
                                  #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                  #   will separate the newline character(s) into their own text runs. The
                                  #   link will be applied separately to the runs before and after the newline.
                                  # * Removing a link will update the text style of the range to match the
                                  #   style of the preceding text (or the default text styles if the preceding
                                  #   text is another link) unless different styles are being set in the same
                                  #   request.
                                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                    # in the presentation. There may not be a slide at this index.
                                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                    # presentation with this ID. A page with this ID may not exist.
                                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                    # addressed by its position.
                              },
                              "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                  # points.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "underline": True or False, # Whether or not the text is underlined.
                            },
                          },
                        },
                      ],
                    },
                    "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                      "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                          # for newly created table cells in the Slides editor.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                        "propertyState": "A String", # The background fill property state.
                            #
                            # Updating the the fill on a table cell will implicitly update this field
                            # to `RENDERED`, unless another value is specified in the same request. To
                            # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                            # case, any other fill fields set in the same request will be ignored.
                      },
                    },
                    "rowSpan": 42, # Row span of the cell.
                    "columnSpan": 42, # Column span of the cell.
                    "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                      "rowIndex": 42, # The 0-based row index.
                      "columnIndex": 42, # The 0-based column index.
                    },
                  },
                ],
                "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            ],
            "rows": 42, # Number of rows in the table.
            "columns": 42, # Number of columns in the table.
          },
          "line": { # A PageElement kind representing a # A line page element.
              # line, curved connector, or bent connector.
            "lineProperties": { # The properties of the Line. # The properties of the line.
                #
                # When unset, these fields default to values that match the appearance of
                # new lines created in the Slides editor.
              "dashStyle": "A String", # The dash style of the line.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "endArrow": "A String", # The style of the arrow at the end of the line.
              "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                    # in the presentation. There may not be a slide at this index.
                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                    # presentation with this ID. A page with this ID may not exist.
                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                    # addressed by its position.
              },
              "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                  # lines created in the Slides editor.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # 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 * (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.
                },
              },
              "startArrow": "A String", # The style of the arrow at the beginning of the line.
            },
            "lineType": "A String", # The type of the line.
          },
          "size": { # A width and height. # The size of the page element.
            "width": { # A magnitude in a single direction in the specified units. # The width of the object.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "height": { # A magnitude in a single direction in the specified units. # The height of the object.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
          },
        },
      ],
      "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
          # relevant for pages with page_type NOTES.
        "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
            # notes for the corresponding slide.
            # The actual shape may not always exist on the notes page. Inserting text
            # using this object ID will automatically create the shape. In this case, the
            # actual shape may have different object ID. The `GetPresentation` or
            # `GetPage` action will always return the latest object ID.
      },
      "objectId": "A String", # The object ID for this page. Object IDs used by
          # Page and
          # PageElement share the same namespace.
      "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
          # update requests to assert that the presentation revision hasn't changed
          # since the last read operation. Only populated if the user has edit access
          # to the presentation.
          #
          # The format of the revision ID may change over time, so it should be treated
          # opaquely. A returned revision ID is only guaranteed to be valid for 24
          # hours after it has been returned and cannot be shared across users. If the
          # revision ID is unchanged between calls, then the presentation has not
          # changed. Conversely, a changed ID (for the same presentation and user)
          # usually means the presentation has been updated; however, a changed ID can
          # also be due to internal factors such as ID format changes.
      "pageProperties": { # The properties of the Page. # The properties of the page.
          #
          # The page will inherit properties from the parent page. Depending on the page
          # type the hierarchy is defined in either
          # SlideProperties or
          # LayoutProperties.
        "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
            # from a parent page if it exists. If the page has no parent, then the
            # background fill defaults to the corresponding fill in the Slides editor.
          "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
              # specified color value.
              #
              # If any field is unset, its value may be inherited from a parent placeholder
              # if it exists.
            "color": { # A themeable solid color value. # The color value of the solid fill.
              "themeColor": "A String", # An opaque theme color.
              "rgbColor": { # An RGB color. # An opaque RGB color.
                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
              },
            },
            "alpha": 3.14, # 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 * (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.
          },
          "propertyState": "A String", # The background fill property state.
              #
              # Updating the the fill on a page will implicitly update this field to
              # `RENDERED`, unless another value is specified in the same request. To
              # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
              # any other fill fields set in the same request will be ignored.
          "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
              # the specified picture. The picture is stretched to fit its container.
            "contentUrl": "A String", # Reading the content_url:
                #
                # An URL to a picture with a default lifetime of 30 minutes.
                # This URL is tagged with the account of the requester. Anyone with the URL
                # effectively accesses the picture as the original requester. Access to the
                # picture may be lost if the presentation's sharing settings change.
                #
                # Writing the content_url:
                #
                # The picture is fetched once at insertion time and a copy is stored for
                # display inside the presentation. Pictures must be less than 50MB in size,
                # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                # format.
            "size": { # A width and height. # The original size of the picture fill. This field is read-only.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
        },
        "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
            # a parent page. If the page has no parent, the color scheme uses a default
            # Slides color scheme. This field is read-only.
          "colors": [ # The ThemeColorType and corresponding concrete color pairs.
            { # A pair mapping a theme color type to the concrete color it represents.
              "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
              },
              "type": "A String", # The type of the theme color.
            },
          ],
        },
      },
      "pageType": "A String", # The type of the page.
      "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
          # relevant for pages with page_type SLIDE.
        "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
            # appearance of a notes page when printing or exporting slides with speaker
            # notes. A notes page inherits properties from the
            # notes master.
            # The placeholder shape with type BODY on the notes page contains the speaker
            # notes for this slide. The ID of this shape is identified by the
            # speakerNotesObjectId field.
            # The notes page is read-only except for the text content and styles of the
            # speaker notes shape.
        "masterObjectId": "A String", # The object ID of the master that this slide is based on.
        "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
      },
    },
    "pageSize": { # A width and height. # The size of pages in the presentation.
      "width": { # A magnitude in a single direction in the specified units. # The width of the object.
        "magnitude": 3.14, # The magnitude.
        "unit": "A String", # The units for magnitude.
      },
      "height": { # A magnitude in a single direction in the specified units. # The height of the object.
        "magnitude": 3.14, # The magnitude.
        "unit": "A String", # The units for magnitude.
      },
    },
    "title": "A String", # The title of the presentation.
    "locale": "A String", # The locale of the presentation, as an IETF BCP 47 language tag.
    "revisionId": "A String", # The revision ID of the presentation. Can be used in update requests
        # to assert that the presentation revision hasn't changed since the last
        # read operation. Only populated if the user has edit access to the
        # presentation.
        # 
        # The format of the revision ID may change over time, so it should be treated
        # opaquely. A returned revision ID is only guaranteed to be valid for 24
        # hours after it has been returned and cannot be shared across users. If the
        # revision ID is unchanged between calls, then the presentation has not
        # changed. Conversely, a changed ID (for the same presentation and user)
        # usually means the presentation has been updated; however, a changed ID can
        # also be due to internal factors such as ID format changes.
    "masters": [ # The slide masters in the presentation. A slide master contains all common
        # page elements and the common properties for a set of layouts. They serve
        # three purposes:
        # 
        # - Placeholder shapes on a master contain the default text styles and shape
        #   properties of all placeholder shapes on pages that use that master.
        # - The master page properties define the common page properties inherited by
        #   its layouts.
        # - Any other shapes on the master slide will appear on all slides using that
        #   master, regardless of their layout.
      { # A page in a presentation.
        "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
            # relevant for pages with page_type LAYOUT.
          "displayName": "A String", # The human readable name of the layout in the presentation's locale.
          "name": "A String", # The name of the layout.
          "masterObjectId": "A String", # The object ID of the master that this layout is based on.
        },
        "pageElements": [ # The page elements rendered on the page.
          { # A visual element rendered on a page.
            "wordArt": { # A PageElement kind representing # A word art page element.
                # word art.
              "renderedText": "A String", # The text rendered as word art.
            },
            "description": "A String", # The description of the page element. Combined with title to display alt
                # text.
            "objectId": "A String", # The object ID for this page element. Object IDs used by
                # google.apps.slides.v1.Page and
                # google.apps.slides.v1.PageElement share the same namespace.
            "title": "A String", # The title of the page element. Combined with description to display alt
                # text.
            "image": { # A PageElement kind representing an # An image page element.
                # image.
              "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the presentation's sharing settings change.
              "imageProperties": { # The properties of the Image. # The properties of the image.
                "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
                "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                    # This property is read-only.
                  "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                      # stops.
                      #
                      # The colors in the gradient will replace the corresponding colors at
                      # the same position in the color palette and apply to the image. This
                      # property is read-only.
                    { # A color and position in a gradient band.
                      "color": { # A themeable solid color value. # The color of the gradient stop.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                          # fully opaque.
                      "position": 3.14, # The relative position of the color stop in the gradient band measured
                          # in percentage. The value should be in the interval [0.0, 1.0].
                    },
                  ],
                  "name": "A String", # The name of the recolor effect.
                      #
                      # The name is determined from the `recolor_stops` by matching the gradient
                      # against the colors in the page's current color scheme. This property is
                      # read-only.
                },
                "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                    # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                    # This property is read-only.
                "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                    # This property is read-only.
                    # Image.
                    #
                    # The crop properties is represented by the offsets of four edges which define
                    # a crop rectangle. The offsets are measured in percentage from the
                    # corresponding edges of the object's original bounding rectangle towards
                    # inside, relative to the object's original dimensions.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the object's original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the object's original bounding rectangle.
                    # - If the left edge of the crop rectangle is on the right side of its right
                    # edge, the object will be flipped horizontally.
                    # - If the top edge of the crop rectangle is below its bottom edge, the object
                    # will be flipped vertically.
                    # - If all offsets and rotation angle is 0, the object is not cropped.
                    #
                    # After cropping, the content in the crop rectangle will be stretched to fit
                    # its container.
                  "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                      # the right of the original bounding rectangle left edge, relative to the
                      # object's original width.
                  "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                      # Rotation angle is applied after the offset.
                  "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                      # to the left of the original bounding rectangle right edge, relative to the
                      # object's original width.
                  "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                      # above the original bounding rectangle bottom edge, relative to the object's
                      # original height.
                  "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                      # below the original bounding rectangle top edge, relative to the object's
                      # original height.
                },
                "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                    # is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              },
            },
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "shape": { # A PageElement kind representing a # A generic shape.
                # generic shape that does not have a more specific classification.
              "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                  # text box or rectangle) or a table cell in a page.
                "lists": { # The bulleted lists contained in this text, keyed by list ID.
                  "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                      # associated with a list. A paragraph that is part of a list has an implicit
                      # reference to that list's ID.
                    "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                        # level. A list has at most nine levels of nesting, so the possible values
                        # for the keys of this map are 0 through 8, inclusive.
                      "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                          # level of nesting.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                    "listId": "A String", # The ID of the list.
                  },
                },
                "textElements": [ # The text contents broken down into its component parts, including styling
                    # information. This property is read-only.
                  { # A TextElement describes the content of a range of indices in the text content
                      # of a Shape or TableCell.
                    "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                        # replaced with content that can change over time.
                      "content": "A String", # The rendered content of this auto text, if available.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                      "type": "A String", # The type of this auto text.
                    },
                    "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                        # units.
                    "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                    "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                        #
                        # The `start_index` and `end_index` of this TextElement represent the
                        # range of the paragraph. Other TextElements with an index range contained
                        # inside this paragraph's range are considered to be part of this
                        # paragraph. The range of indices of two separate paragraphs will never
                        # overlap.
                      "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                          #
                          # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                          # inherited from the parent. Which paragraph styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A paragraph not in a list will inherit its paragraph style from the
                          #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                          # * A paragraph in a list will inherit its paragraph style from the paragraph
                          #   at its corresponding nesting level of the list inside the parent
                          #   placeholder.
                          #
                          # Inherited paragraph styles are represented as unset fields in this message.
                        "spacingMode": "A String", # The spacing mode for the paragraph.
                        "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                            # LEFT_TO_RIGHT since
                            # text direction is not inherited.
                        "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                            # is represented as 100.0. If unset, the value is inherited from the parent.
                        "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the start of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the end of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                            # If unset, the value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "alignment": "A String", # The text alignment for this paragraph.
                      },
                      "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                          # belong to a list.
                        "nestingLevel": 42, # The nesting level of this paragraph in the list.
                        "listId": "A String", # The ID of the list this paragraph belongs to.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "glyph": "A String", # The rendered bullet glyph for this paragraph.
                      },
                    },
                    "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                        # in the run have the same TextStyle.
                        #
                        # The `start_index` and `end_index` of TextRuns will always be fully
                        # contained in the index range of a single `paragraph_marker` TextElement.
                        # In other words, a TextRun will never span multiple paragraphs.
                        # styling.
                      "content": "A String", # The text of this run.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                    },
                  },
                ],
              },
              "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                  #
                  # If the shape is a placeholder shape as determined by the
                  # placeholder field, then these
                  # properties may be inherited from a parent placeholder shape.
                  # Determining the rendered value of the property depends on the corresponding
                  # property_state field value.
                "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                    # a parent placeholder if it exists. If the shape has no parent, then the
                    # default shadow matches the defaults for new shapes created in the Slides
                    # editor. This property is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                    # inherited from a parent placeholder if it exists. If the shape has no
                    # parent, then the default background fill depends on the shape type,
                    # matching the defaults for new shapes created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                  "propertyState": "A String", # The background fill property state.
                      #
                      # Updating the the fill on a shape will implicitly update this field to
                      # `RENDERED`, unless another value is specified in the same request. To
                      # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                      # any other fill fields set in the same request will be ignored.
                },
                "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                    # are not inherited from parent placeholders.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                    # parent placeholder if it exists. If the shape has no parent, then the
                    # default outline depends on the shape type, matching the defaults for
                    # new shapes created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                  # layouts and masters.
                  #
                  # If set, the shape is a placeholder shape and any inherited properties
                  # can be resolved by looking at the parent placeholder identified by the
                  # Placeholder.parent_object_id field.
                "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                    # If unset, the parent placeholder shape does not exist, so the shape does
                    # not inherit properties from any other shape.
                "index": 42, # The index of the placeholder. If the same placeholder types are present in
                    # the same page, they would have different index values.
                "type": "A String", # The type of the placeholder.
              },
              "shapeType": "A String", # The type of the shape.
            },
            "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                # represented as images.
                # a linked chart embedded from Google Sheets.
              "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                  # minutes. This URL is tagged with the account of the requester. Anyone with
                  # the URL effectively accesses the image as the original requester. Access to
                  # the image may be lost if the presentation's sharing settings change.
              "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
              "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
            "video": { # A PageElement kind representing a # A video page element.
                # video.
              "url": "A String", # An URL to a video. The URL is valid as long as the source video
                  # exists and sharing settings do not change.
              "videoProperties": { # The properties of the Video. # The properties of the video.
                "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                    # videos created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "id": "A String", # The video source's unique identifier for this video.
              "source": "A String", # The video source.
            },
            "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                # joined collection of PageElements.
              "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                # Object with schema name: PageElement
              ],
            },
            "table": { # A PageElement kind representing a # A table page element.
                # table.
              "tableColumns": [ # Properties of each column.
                { # Properties of each column in a table.
                  "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "tableRows": [ # Properties and contents of each row.
                  #
                  # Cells that span multiple rows are contained in only one of these rows and
                  # have a row_span greater
                  # than 1.
                { # Properties and contents of each row in a table.
                  "tableCells": [ # Properties and contents of each cell.
                      #
                      # Cells that span multiple columns are represented only once with a
                      # column_span greater
                      # than 1. As a result, the length of this collection does not always match
                      # the number of columns of the entire table.
                    { # Properties and contents of each table cell.
                      "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                          # text box or rectangle) or a table cell in a page.
                        "lists": { # The bulleted lists contained in this text, keyed by list ID.
                          "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                              # associated with a list. A paragraph that is part of a list has an implicit
                              # reference to that list's ID.
                            "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                # level. A list has at most nine levels of nesting, so the possible values
                                # for the keys of this map are 0 through 8, inclusive.
                              "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                  # level of nesting.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                            "listId": "A String", # The ID of the list.
                          },
                        },
                        "textElements": [ # The text contents broken down into its component parts, including styling
                            # information. This property is read-only.
                          { # A TextElement describes the content of a range of indices in the text content
                              # of a Shape or TableCell.
                            "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                # replaced with content that can change over time.
                              "content": "A String", # The rendered content of this auto text, if available.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                              "type": "A String", # The type of this auto text.
                            },
                            "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                # units.
                            "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                            "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                #
                                # The `start_index` and `end_index` of this TextElement represent the
                                # range of the paragraph. Other TextElements with an index range contained
                                # inside this paragraph's range are considered to be part of this
                                # paragraph. The range of indices of two separate paragraphs will never
                                # overlap.
                              "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                  # inherited from the parent. Which paragraph styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A paragraph not in a list will inherit its paragraph style from the
                                  #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                  # * A paragraph in a list will inherit its paragraph style from the paragraph
                                  #   at its corresponding nesting level of the list inside the parent
                                  #   placeholder.
                                  #
                                  # Inherited paragraph styles are represented as unset fields in this message.
                                "spacingMode": "A String", # The spacing mode for the paragraph.
                                "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                    # LEFT_TO_RIGHT since
                                    # text direction is not inherited.
                                "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                    # is represented as 100.0. If unset, the value is inherited from the parent.
                                "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the start of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the end of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                    # If unset, the value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "alignment": "A String", # The text alignment for this paragraph.
                              },
                              "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                  # belong to a list.
                                "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                "listId": "A String", # The ID of the list this paragraph belongs to.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "glyph": "A String", # The rendered bullet glyph for this paragraph.
                              },
                            },
                            "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                # in the run have the same TextStyle.
                                #
                                # The `start_index` and `end_index` of TextRuns will always be fully
                                # contained in the index range of a single `paragraph_marker` TextElement.
                                # In other words, a TextRun will never span multiple paragraphs.
                                # styling.
                              "content": "A String", # The text of this run.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                            },
                          },
                        ],
                      },
                      "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                        "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                            # for newly created table cells in the Slides editor.
                          "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                              # specified color value.
                              #
                              # If any field is unset, its value may be inherited from a parent placeholder
                              # if it exists.
                            "color": { # A themeable solid color value. # The color value of the solid fill.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                            "alpha": 3.14, # 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 * (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.
                          },
                          "propertyState": "A String", # The background fill property state.
                              #
                              # Updating the the fill on a table cell will implicitly update this field
                              # to `RENDERED`, unless another value is specified in the same request. To
                              # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                              # case, any other fill fields set in the same request will be ignored.
                        },
                      },
                      "rowSpan": 42, # Row span of the cell.
                      "columnSpan": 42, # Column span of the cell.
                      "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                        "rowIndex": 42, # The 0-based row index.
                        "columnIndex": 42, # The 0-based column index.
                      },
                    },
                  ],
                  "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "rows": 42, # Number of rows in the table.
              "columns": 42, # Number of columns in the table.
            },
            "line": { # A PageElement kind representing a # A line page element.
                # line, curved connector, or bent connector.
              "lineProperties": { # The properties of the Line. # The properties of the line.
                  #
                  # When unset, these fields default to values that match the appearance of
                  # new lines created in the Slides editor.
                "dashStyle": "A String", # The dash style of the line.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "endArrow": "A String", # The style of the arrow at the end of the line.
                "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                    # lines created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "startArrow": "A String", # The style of the arrow at the beginning of the line.
              },
              "lineType": "A String", # The type of the line.
            },
            "size": { # A width and height. # The size of the page element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
        ],
        "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
            # relevant for pages with page_type NOTES.
          "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
              # notes for the corresponding slide.
              # The actual shape may not always exist on the notes page. Inserting text
              # using this object ID will automatically create the shape. In this case, the
              # actual shape may have different object ID. The `GetPresentation` or
              # `GetPage` action will always return the latest object ID.
        },
        "objectId": "A String", # The object ID for this page. Object IDs used by
            # Page and
            # PageElement share the same namespace.
        "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
            # update requests to assert that the presentation revision hasn't changed
            # since the last read operation. Only populated if the user has edit access
            # to the presentation.
            #
            # The format of the revision ID may change over time, so it should be treated
            # opaquely. A returned revision ID is only guaranteed to be valid for 24
            # hours after it has been returned and cannot be shared across users. If the
            # revision ID is unchanged between calls, then the presentation has not
            # changed. Conversely, a changed ID (for the same presentation and user)
            # usually means the presentation has been updated; however, a changed ID can
            # also be due to internal factors such as ID format changes.
        "pageProperties": { # The properties of the Page. # The properties of the page.
            #
            # The page will inherit properties from the parent page. Depending on the page
            # type the hierarchy is defined in either
            # SlideProperties or
            # LayoutProperties.
          "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
              # from a parent page if it exists. If the page has no parent, then the
              # background fill defaults to the corresponding fill in the Slides editor.
            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                # specified color value.
                #
                # If any field is unset, its value may be inherited from a parent placeholder
                # if it exists.
              "color": { # A themeable solid color value. # The color value of the solid fill.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "alpha": 3.14, # 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 * (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.
            },
            "propertyState": "A String", # The background fill property state.
                #
                # Updating the the fill on a page will implicitly update this field to
                # `RENDERED`, unless another value is specified in the same request. To
                # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                # any other fill fields set in the same request will be ignored.
            "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                # the specified picture. The picture is stretched to fit its container.
              "contentUrl": "A String", # Reading the content_url:
                  #
                  # An URL to a picture with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the picture as the original requester. Access to the
                  # picture may be lost if the presentation's sharing settings change.
                  #
                  # Writing the content_url:
                  #
                  # The picture is fetched once at insertion time and a copy is stored for
                  # display inside the presentation. Pictures must be less than 50MB in size,
                  # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                  # format.
              "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          },
          "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
              # a parent page. If the page has no parent, the color scheme uses a default
              # Slides color scheme. This field is read-only.
            "colors": [ # The ThemeColorType and corresponding concrete color pairs.
              { # A pair mapping a theme color type to the concrete color it represents.
                "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
                "type": "A String", # The type of the theme color.
              },
            ],
          },
        },
        "pageType": "A String", # The type of the page.
        "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
            # relevant for pages with page_type SLIDE.
          "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
              # appearance of a notes page when printing or exporting slides with speaker
              # notes. A notes page inherits properties from the
              # notes master.
              # The placeholder shape with type BODY on the notes page contains the speaker
              # notes for this slide. The ID of this shape is identified by the
              # speakerNotesObjectId field.
              # The notes page is read-only except for the text content and styles of the
              # speaker notes shape.
          "masterObjectId": "A String", # The object ID of the master that this slide is based on.
          "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
        },
      },
    ],
    "slides": [ # The slides in the presentation.
        # A slide inherits properties from a slide layout.
      { # A page in a presentation.
        "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
            # relevant for pages with page_type LAYOUT.
          "displayName": "A String", # The human readable name of the layout in the presentation's locale.
          "name": "A String", # The name of the layout.
          "masterObjectId": "A String", # The object ID of the master that this layout is based on.
        },
        "pageElements": [ # The page elements rendered on the page.
          { # A visual element rendered on a page.
            "wordArt": { # A PageElement kind representing # A word art page element.
                # word art.
              "renderedText": "A String", # The text rendered as word art.
            },
            "description": "A String", # The description of the page element. Combined with title to display alt
                # text.
            "objectId": "A String", # The object ID for this page element. Object IDs used by
                # google.apps.slides.v1.Page and
                # google.apps.slides.v1.PageElement share the same namespace.
            "title": "A String", # The title of the page element. Combined with description to display alt
                # text.
            "image": { # A PageElement kind representing an # An image page element.
                # image.
              "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the presentation's sharing settings change.
              "imageProperties": { # The properties of the Image. # The properties of the image.
                "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
                "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                    # This property is read-only.
                  "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                      # stops.
                      #
                      # The colors in the gradient will replace the corresponding colors at
                      # the same position in the color palette and apply to the image. This
                      # property is read-only.
                    { # A color and position in a gradient band.
                      "color": { # A themeable solid color value. # The color of the gradient stop.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                          # fully opaque.
                      "position": 3.14, # The relative position of the color stop in the gradient band measured
                          # in percentage. The value should be in the interval [0.0, 1.0].
                    },
                  ],
                  "name": "A String", # The name of the recolor effect.
                      #
                      # The name is determined from the `recolor_stops` by matching the gradient
                      # against the colors in the page's current color scheme. This property is
                      # read-only.
                },
                "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                    # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                    # This property is read-only.
                "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                    # This property is read-only.
                    # Image.
                    #
                    # The crop properties is represented by the offsets of four edges which define
                    # a crop rectangle. The offsets are measured in percentage from the
                    # corresponding edges of the object's original bounding rectangle towards
                    # inside, relative to the object's original dimensions.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the object's original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the object's original bounding rectangle.
                    # - If the left edge of the crop rectangle is on the right side of its right
                    # edge, the object will be flipped horizontally.
                    # - If the top edge of the crop rectangle is below its bottom edge, the object
                    # will be flipped vertically.
                    # - If all offsets and rotation angle is 0, the object is not cropped.
                    #
                    # After cropping, the content in the crop rectangle will be stretched to fit
                    # its container.
                  "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                      # the right of the original bounding rectangle left edge, relative to the
                      # object's original width.
                  "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                      # Rotation angle is applied after the offset.
                  "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                      # to the left of the original bounding rectangle right edge, relative to the
                      # object's original width.
                  "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                      # above the original bounding rectangle bottom edge, relative to the object's
                      # original height.
                  "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                      # below the original bounding rectangle top edge, relative to the object's
                      # original height.
                },
                "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                    # is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              },
            },
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "shape": { # A PageElement kind representing a # A generic shape.
                # generic shape that does not have a more specific classification.
              "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                  # text box or rectangle) or a table cell in a page.
                "lists": { # The bulleted lists contained in this text, keyed by list ID.
                  "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                      # associated with a list. A paragraph that is part of a list has an implicit
                      # reference to that list's ID.
                    "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                        # level. A list has at most nine levels of nesting, so the possible values
                        # for the keys of this map are 0 through 8, inclusive.
                      "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                          # level of nesting.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                    "listId": "A String", # The ID of the list.
                  },
                },
                "textElements": [ # The text contents broken down into its component parts, including styling
                    # information. This property is read-only.
                  { # A TextElement describes the content of a range of indices in the text content
                      # of a Shape or TableCell.
                    "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                        # replaced with content that can change over time.
                      "content": "A String", # The rendered content of this auto text, if available.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                      "type": "A String", # The type of this auto text.
                    },
                    "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                        # units.
                    "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                    "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                        #
                        # The `start_index` and `end_index` of this TextElement represent the
                        # range of the paragraph. Other TextElements with an index range contained
                        # inside this paragraph's range are considered to be part of this
                        # paragraph. The range of indices of two separate paragraphs will never
                        # overlap.
                      "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                          #
                          # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                          # inherited from the parent. Which paragraph styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A paragraph not in a list will inherit its paragraph style from the
                          #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                          # * A paragraph in a list will inherit its paragraph style from the paragraph
                          #   at its corresponding nesting level of the list inside the parent
                          #   placeholder.
                          #
                          # Inherited paragraph styles are represented as unset fields in this message.
                        "spacingMode": "A String", # The spacing mode for the paragraph.
                        "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                            # LEFT_TO_RIGHT since
                            # text direction is not inherited.
                        "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                            # is represented as 100.0. If unset, the value is inherited from the parent.
                        "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the start of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the end of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                            # If unset, the value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "alignment": "A String", # The text alignment for this paragraph.
                      },
                      "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                          # belong to a list.
                        "nestingLevel": 42, # The nesting level of this paragraph in the list.
                        "listId": "A String", # The ID of the list this paragraph belongs to.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "glyph": "A String", # The rendered bullet glyph for this paragraph.
                      },
                    },
                    "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                        # in the run have the same TextStyle.
                        #
                        # The `start_index` and `end_index` of TextRuns will always be fully
                        # contained in the index range of a single `paragraph_marker` TextElement.
                        # In other words, a TextRun will never span multiple paragraphs.
                        # styling.
                      "content": "A String", # The text of this run.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                    },
                  },
                ],
              },
              "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                  #
                  # If the shape is a placeholder shape as determined by the
                  # placeholder field, then these
                  # properties may be inherited from a parent placeholder shape.
                  # Determining the rendered value of the property depends on the corresponding
                  # property_state field value.
                "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                    # a parent placeholder if it exists. If the shape has no parent, then the
                    # default shadow matches the defaults for new shapes created in the Slides
                    # editor. This property is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                    # inherited from a parent placeholder if it exists. If the shape has no
                    # parent, then the default background fill depends on the shape type,
                    # matching the defaults for new shapes created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                  "propertyState": "A String", # The background fill property state.
                      #
                      # Updating the the fill on a shape will implicitly update this field to
                      # `RENDERED`, unless another value is specified in the same request. To
                      # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                      # any other fill fields set in the same request will be ignored.
                },
                "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                    # are not inherited from parent placeholders.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                    # parent placeholder if it exists. If the shape has no parent, then the
                    # default outline depends on the shape type, matching the defaults for
                    # new shapes created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                  # layouts and masters.
                  #
                  # If set, the shape is a placeholder shape and any inherited properties
                  # can be resolved by looking at the parent placeholder identified by the
                  # Placeholder.parent_object_id field.
                "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                    # If unset, the parent placeholder shape does not exist, so the shape does
                    # not inherit properties from any other shape.
                "index": 42, # The index of the placeholder. If the same placeholder types are present in
                    # the same page, they would have different index values.
                "type": "A String", # The type of the placeholder.
              },
              "shapeType": "A String", # The type of the shape.
            },
            "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                # represented as images.
                # a linked chart embedded from Google Sheets.
              "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                  # minutes. This URL is tagged with the account of the requester. Anyone with
                  # the URL effectively accesses the image as the original requester. Access to
                  # the image may be lost if the presentation's sharing settings change.
              "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
              "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
            "video": { # A PageElement kind representing a # A video page element.
                # video.
              "url": "A String", # An URL to a video. The URL is valid as long as the source video
                  # exists and sharing settings do not change.
              "videoProperties": { # The properties of the Video. # The properties of the video.
                "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                    # videos created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "id": "A String", # The video source's unique identifier for this video.
              "source": "A String", # The video source.
            },
            "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                # joined collection of PageElements.
              "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                # Object with schema name: PageElement
              ],
            },
            "table": { # A PageElement kind representing a # A table page element.
                # table.
              "tableColumns": [ # Properties of each column.
                { # Properties of each column in a table.
                  "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "tableRows": [ # Properties and contents of each row.
                  #
                  # Cells that span multiple rows are contained in only one of these rows and
                  # have a row_span greater
                  # than 1.
                { # Properties and contents of each row in a table.
                  "tableCells": [ # Properties and contents of each cell.
                      #
                      # Cells that span multiple columns are represented only once with a
                      # column_span greater
                      # than 1. As a result, the length of this collection does not always match
                      # the number of columns of the entire table.
                    { # Properties and contents of each table cell.
                      "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                          # text box or rectangle) or a table cell in a page.
                        "lists": { # The bulleted lists contained in this text, keyed by list ID.
                          "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                              # associated with a list. A paragraph that is part of a list has an implicit
                              # reference to that list's ID.
                            "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                # level. A list has at most nine levels of nesting, so the possible values
                                # for the keys of this map are 0 through 8, inclusive.
                              "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                  # level of nesting.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                            "listId": "A String", # The ID of the list.
                          },
                        },
                        "textElements": [ # The text contents broken down into its component parts, including styling
                            # information. This property is read-only.
                          { # A TextElement describes the content of a range of indices in the text content
                              # of a Shape or TableCell.
                            "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                # replaced with content that can change over time.
                              "content": "A String", # The rendered content of this auto text, if available.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                              "type": "A String", # The type of this auto text.
                            },
                            "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                # units.
                            "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                            "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                #
                                # The `start_index` and `end_index` of this TextElement represent the
                                # range of the paragraph. Other TextElements with an index range contained
                                # inside this paragraph's range are considered to be part of this
                                # paragraph. The range of indices of two separate paragraphs will never
                                # overlap.
                              "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                  # inherited from the parent. Which paragraph styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A paragraph not in a list will inherit its paragraph style from the
                                  #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                  # * A paragraph in a list will inherit its paragraph style from the paragraph
                                  #   at its corresponding nesting level of the list inside the parent
                                  #   placeholder.
                                  #
                                  # Inherited paragraph styles are represented as unset fields in this message.
                                "spacingMode": "A String", # The spacing mode for the paragraph.
                                "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                    # LEFT_TO_RIGHT since
                                    # text direction is not inherited.
                                "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                    # is represented as 100.0. If unset, the value is inherited from the parent.
                                "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the start of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the end of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                    # If unset, the value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "alignment": "A String", # The text alignment for this paragraph.
                              },
                              "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                  # belong to a list.
                                "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                "listId": "A String", # The ID of the list this paragraph belongs to.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "glyph": "A String", # The rendered bullet glyph for this paragraph.
                              },
                            },
                            "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                # in the run have the same TextStyle.
                                #
                                # The `start_index` and `end_index` of TextRuns will always be fully
                                # contained in the index range of a single `paragraph_marker` TextElement.
                                # In other words, a TextRun will never span multiple paragraphs.
                                # styling.
                              "content": "A String", # The text of this run.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                            },
                          },
                        ],
                      },
                      "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                        "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                            # for newly created table cells in the Slides editor.
                          "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                              # specified color value.
                              #
                              # If any field is unset, its value may be inherited from a parent placeholder
                              # if it exists.
                            "color": { # A themeable solid color value. # The color value of the solid fill.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                            "alpha": 3.14, # 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 * (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.
                          },
                          "propertyState": "A String", # The background fill property state.
                              #
                              # Updating the the fill on a table cell will implicitly update this field
                              # to `RENDERED`, unless another value is specified in the same request. To
                              # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                              # case, any other fill fields set in the same request will be ignored.
                        },
                      },
                      "rowSpan": 42, # Row span of the cell.
                      "columnSpan": 42, # Column span of the cell.
                      "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                        "rowIndex": 42, # The 0-based row index.
                        "columnIndex": 42, # The 0-based column index.
                      },
                    },
                  ],
                  "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "rows": 42, # Number of rows in the table.
              "columns": 42, # Number of columns in the table.
            },
            "line": { # A PageElement kind representing a # A line page element.
                # line, curved connector, or bent connector.
              "lineProperties": { # The properties of the Line. # The properties of the line.
                  #
                  # When unset, these fields default to values that match the appearance of
                  # new lines created in the Slides editor.
                "dashStyle": "A String", # The dash style of the line.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "endArrow": "A String", # The style of the arrow at the end of the line.
                "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                    # lines created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "startArrow": "A String", # The style of the arrow at the beginning of the line.
              },
              "lineType": "A String", # The type of the line.
            },
            "size": { # A width and height. # The size of the page element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
        ],
        "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
            # relevant for pages with page_type NOTES.
          "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
              # notes for the corresponding slide.
              # The actual shape may not always exist on the notes page. Inserting text
              # using this object ID will automatically create the shape. In this case, the
              # actual shape may have different object ID. The `GetPresentation` or
              # `GetPage` action will always return the latest object ID.
        },
        "objectId": "A String", # The object ID for this page. Object IDs used by
            # Page and
            # PageElement share the same namespace.
        "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
            # update requests to assert that the presentation revision hasn't changed
            # since the last read operation. Only populated if the user has edit access
            # to the presentation.
            #
            # The format of the revision ID may change over time, so it should be treated
            # opaquely. A returned revision ID is only guaranteed to be valid for 24
            # hours after it has been returned and cannot be shared across users. If the
            # revision ID is unchanged between calls, then the presentation has not
            # changed. Conversely, a changed ID (for the same presentation and user)
            # usually means the presentation has been updated; however, a changed ID can
            # also be due to internal factors such as ID format changes.
        "pageProperties": { # The properties of the Page. # The properties of the page.
            #
            # The page will inherit properties from the parent page. Depending on the page
            # type the hierarchy is defined in either
            # SlideProperties or
            # LayoutProperties.
          "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
              # from a parent page if it exists. If the page has no parent, then the
              # background fill defaults to the corresponding fill in the Slides editor.
            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                # specified color value.
                #
                # If any field is unset, its value may be inherited from a parent placeholder
                # if it exists.
              "color": { # A themeable solid color value. # The color value of the solid fill.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "alpha": 3.14, # 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 * (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.
            },
            "propertyState": "A String", # The background fill property state.
                #
                # Updating the the fill on a page will implicitly update this field to
                # `RENDERED`, unless another value is specified in the same request. To
                # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                # any other fill fields set in the same request will be ignored.
            "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                # the specified picture. The picture is stretched to fit its container.
              "contentUrl": "A String", # Reading the content_url:
                  #
                  # An URL to a picture with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the picture as the original requester. Access to the
                  # picture may be lost if the presentation's sharing settings change.
                  #
                  # Writing the content_url:
                  #
                  # The picture is fetched once at insertion time and a copy is stored for
                  # display inside the presentation. Pictures must be less than 50MB in size,
                  # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                  # format.
              "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          },
          "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
              # a parent page. If the page has no parent, the color scheme uses a default
              # Slides color scheme. This field is read-only.
            "colors": [ # The ThemeColorType and corresponding concrete color pairs.
              { # A pair mapping a theme color type to the concrete color it represents.
                "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
                "type": "A String", # The type of the theme color.
              },
            ],
          },
        },
        "pageType": "A String", # The type of the page.
        "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
            # relevant for pages with page_type SLIDE.
          "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
              # appearance of a notes page when printing or exporting slides with speaker
              # notes. A notes page inherits properties from the
              # notes master.
              # The placeholder shape with type BODY on the notes page contains the speaker
              # notes for this slide. The ID of this shape is identified by the
              # speakerNotesObjectId field.
              # The notes page is read-only except for the text content and styles of the
              # speaker notes shape.
          "masterObjectId": "A String", # The object ID of the master that this slide is based on.
          "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
        },
      },
    ],
    "layouts": [ # The layouts in the presentation. A layout is a template that determines
        # how content is arranged and styled on the slides that inherit from that
        # layout.
      { # A page in a presentation.
        "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
            # relevant for pages with page_type LAYOUT.
          "displayName": "A String", # The human readable name of the layout in the presentation's locale.
          "name": "A String", # The name of the layout.
          "masterObjectId": "A String", # The object ID of the master that this layout is based on.
        },
        "pageElements": [ # The page elements rendered on the page.
          { # A visual element rendered on a page.
            "wordArt": { # A PageElement kind representing # A word art page element.
                # word art.
              "renderedText": "A String", # The text rendered as word art.
            },
            "description": "A String", # The description of the page element. Combined with title to display alt
                # text.
            "objectId": "A String", # The object ID for this page element. Object IDs used by
                # google.apps.slides.v1.Page and
                # google.apps.slides.v1.PageElement share the same namespace.
            "title": "A String", # The title of the page element. Combined with description to display alt
                # text.
            "image": { # A PageElement kind representing an # An image page element.
                # image.
              "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the presentation's sharing settings change.
              "imageProperties": { # The properties of the Image. # The properties of the image.
                "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
                "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                    # This property is read-only.
                  "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                      # stops.
                      #
                      # The colors in the gradient will replace the corresponding colors at
                      # the same position in the color palette and apply to the image. This
                      # property is read-only.
                    { # A color and position in a gradient band.
                      "color": { # A themeable solid color value. # The color of the gradient stop.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                          # fully opaque.
                      "position": 3.14, # The relative position of the color stop in the gradient band measured
                          # in percentage. The value should be in the interval [0.0, 1.0].
                    },
                  ],
                  "name": "A String", # The name of the recolor effect.
                      #
                      # The name is determined from the `recolor_stops` by matching the gradient
                      # against the colors in the page's current color scheme. This property is
                      # read-only.
                },
                "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                    # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                    # This property is read-only.
                "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                    # This property is read-only.
                    # Image.
                    #
                    # The crop properties is represented by the offsets of four edges which define
                    # a crop rectangle. The offsets are measured in percentage from the
                    # corresponding edges of the object's original bounding rectangle towards
                    # inside, relative to the object's original dimensions.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the object's original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the object's original bounding rectangle.
                    # - If the left edge of the crop rectangle is on the right side of its right
                    # edge, the object will be flipped horizontally.
                    # - If the top edge of the crop rectangle is below its bottom edge, the object
                    # will be flipped vertically.
                    # - If all offsets and rotation angle is 0, the object is not cropped.
                    #
                    # After cropping, the content in the crop rectangle will be stretched to fit
                    # its container.
                  "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                      # the right of the original bounding rectangle left edge, relative to the
                      # object's original width.
                  "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                      # Rotation angle is applied after the offset.
                  "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                      # to the left of the original bounding rectangle right edge, relative to the
                      # object's original width.
                  "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                      # above the original bounding rectangle bottom edge, relative to the object's
                      # original height.
                  "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                      # below the original bounding rectangle top edge, relative to the object's
                      # original height.
                },
                "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                    # is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              },
            },
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "shape": { # A PageElement kind representing a # A generic shape.
                # generic shape that does not have a more specific classification.
              "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                  # text box or rectangle) or a table cell in a page.
                "lists": { # The bulleted lists contained in this text, keyed by list ID.
                  "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                      # associated with a list. A paragraph that is part of a list has an implicit
                      # reference to that list's ID.
                    "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                        # level. A list has at most nine levels of nesting, so the possible values
                        # for the keys of this map are 0 through 8, inclusive.
                      "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                          # level of nesting.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                    "listId": "A String", # The ID of the list.
                  },
                },
                "textElements": [ # The text contents broken down into its component parts, including styling
                    # information. This property is read-only.
                  { # A TextElement describes the content of a range of indices in the text content
                      # of a Shape or TableCell.
                    "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                        # replaced with content that can change over time.
                      "content": "A String", # The rendered content of this auto text, if available.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                      "type": "A String", # The type of this auto text.
                    },
                    "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                        # units.
                    "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                    "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                        #
                        # The `start_index` and `end_index` of this TextElement represent the
                        # range of the paragraph. Other TextElements with an index range contained
                        # inside this paragraph's range are considered to be part of this
                        # paragraph. The range of indices of two separate paragraphs will never
                        # overlap.
                      "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                          #
                          # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                          # inherited from the parent. Which paragraph styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A paragraph not in a list will inherit its paragraph style from the
                          #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                          # * A paragraph in a list will inherit its paragraph style from the paragraph
                          #   at its corresponding nesting level of the list inside the parent
                          #   placeholder.
                          #
                          # Inherited paragraph styles are represented as unset fields in this message.
                        "spacingMode": "A String", # The spacing mode for the paragraph.
                        "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                            # LEFT_TO_RIGHT since
                            # text direction is not inherited.
                        "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                            # is represented as 100.0. If unset, the value is inherited from the parent.
                        "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the start of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the end of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                            # If unset, the value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "alignment": "A String", # The text alignment for this paragraph.
                      },
                      "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                          # belong to a list.
                        "nestingLevel": 42, # The nesting level of this paragraph in the list.
                        "listId": "A String", # The ID of the list this paragraph belongs to.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "glyph": "A String", # The rendered bullet glyph for this paragraph.
                      },
                    },
                    "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                        # in the run have the same TextStyle.
                        #
                        # The `start_index` and `end_index` of TextRuns will always be fully
                        # contained in the index range of a single `paragraph_marker` TextElement.
                        # In other words, a TextRun will never span multiple paragraphs.
                        # styling.
                      "content": "A String", # The text of this run.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                    },
                  },
                ],
              },
              "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                  #
                  # If the shape is a placeholder shape as determined by the
                  # placeholder field, then these
                  # properties may be inherited from a parent placeholder shape.
                  # Determining the rendered value of the property depends on the corresponding
                  # property_state field value.
                "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                    # a parent placeholder if it exists. If the shape has no parent, then the
                    # default shadow matches the defaults for new shapes created in the Slides
                    # editor. This property is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                    # inherited from a parent placeholder if it exists. If the shape has no
                    # parent, then the default background fill depends on the shape type,
                    # matching the defaults for new shapes created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                  "propertyState": "A String", # The background fill property state.
                      #
                      # Updating the the fill on a shape will implicitly update this field to
                      # `RENDERED`, unless another value is specified in the same request. To
                      # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                      # any other fill fields set in the same request will be ignored.
                },
                "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                    # are not inherited from parent placeholders.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                    # parent placeholder if it exists. If the shape has no parent, then the
                    # default outline depends on the shape type, matching the defaults for
                    # new shapes created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                  # layouts and masters.
                  #
                  # If set, the shape is a placeholder shape and any inherited properties
                  # can be resolved by looking at the parent placeholder identified by the
                  # Placeholder.parent_object_id field.
                "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                    # If unset, the parent placeholder shape does not exist, so the shape does
                    # not inherit properties from any other shape.
                "index": 42, # The index of the placeholder. If the same placeholder types are present in
                    # the same page, they would have different index values.
                "type": "A String", # The type of the placeholder.
              },
              "shapeType": "A String", # The type of the shape.
            },
            "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                # represented as images.
                # a linked chart embedded from Google Sheets.
              "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                  # minutes. This URL is tagged with the account of the requester. Anyone with
                  # the URL effectively accesses the image as the original requester. Access to
                  # the image may be lost if the presentation's sharing settings change.
              "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
              "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
            "video": { # A PageElement kind representing a # A video page element.
                # video.
              "url": "A String", # An URL to a video. The URL is valid as long as the source video
                  # exists and sharing settings do not change.
              "videoProperties": { # The properties of the Video. # The properties of the video.
                "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                    # videos created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "id": "A String", # The video source's unique identifier for this video.
              "source": "A String", # The video source.
            },
            "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                # joined collection of PageElements.
              "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                # Object with schema name: PageElement
              ],
            },
            "table": { # A PageElement kind representing a # A table page element.
                # table.
              "tableColumns": [ # Properties of each column.
                { # Properties of each column in a table.
                  "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "tableRows": [ # Properties and contents of each row.
                  #
                  # Cells that span multiple rows are contained in only one of these rows and
                  # have a row_span greater
                  # than 1.
                { # Properties and contents of each row in a table.
                  "tableCells": [ # Properties and contents of each cell.
                      #
                      # Cells that span multiple columns are represented only once with a
                      # column_span greater
                      # than 1. As a result, the length of this collection does not always match
                      # the number of columns of the entire table.
                    { # Properties and contents of each table cell.
                      "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                          # text box or rectangle) or a table cell in a page.
                        "lists": { # The bulleted lists contained in this text, keyed by list ID.
                          "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                              # associated with a list. A paragraph that is part of a list has an implicit
                              # reference to that list's ID.
                            "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                # level. A list has at most nine levels of nesting, so the possible values
                                # for the keys of this map are 0 through 8, inclusive.
                              "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                  # level of nesting.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                            "listId": "A String", # The ID of the list.
                          },
                        },
                        "textElements": [ # The text contents broken down into its component parts, including styling
                            # information. This property is read-only.
                          { # A TextElement describes the content of a range of indices in the text content
                              # of a Shape or TableCell.
                            "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                # replaced with content that can change over time.
                              "content": "A String", # The rendered content of this auto text, if available.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                              "type": "A String", # The type of this auto text.
                            },
                            "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                # units.
                            "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                            "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                #
                                # The `start_index` and `end_index` of this TextElement represent the
                                # range of the paragraph. Other TextElements with an index range contained
                                # inside this paragraph's range are considered to be part of this
                                # paragraph. The range of indices of two separate paragraphs will never
                                # overlap.
                              "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                  # inherited from the parent. Which paragraph styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A paragraph not in a list will inherit its paragraph style from the
                                  #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                  # * A paragraph in a list will inherit its paragraph style from the paragraph
                                  #   at its corresponding nesting level of the list inside the parent
                                  #   placeholder.
                                  #
                                  # Inherited paragraph styles are represented as unset fields in this message.
                                "spacingMode": "A String", # The spacing mode for the paragraph.
                                "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                    # LEFT_TO_RIGHT since
                                    # text direction is not inherited.
                                "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                    # is represented as 100.0. If unset, the value is inherited from the parent.
                                "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the start of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the end of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                    # If unset, the value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "alignment": "A String", # The text alignment for this paragraph.
                              },
                              "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                  # belong to a list.
                                "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                "listId": "A String", # The ID of the list this paragraph belongs to.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "glyph": "A String", # The rendered bullet glyph for this paragraph.
                              },
                            },
                            "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                # in the run have the same TextStyle.
                                #
                                # The `start_index` and `end_index` of TextRuns will always be fully
                                # contained in the index range of a single `paragraph_marker` TextElement.
                                # In other words, a TextRun will never span multiple paragraphs.
                                # styling.
                              "content": "A String", # The text of this run.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                            },
                          },
                        ],
                      },
                      "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                        "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                            # for newly created table cells in the Slides editor.
                          "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                              # specified color value.
                              #
                              # If any field is unset, its value may be inherited from a parent placeholder
                              # if it exists.
                            "color": { # A themeable solid color value. # The color value of the solid fill.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                            "alpha": 3.14, # 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 * (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.
                          },
                          "propertyState": "A String", # The background fill property state.
                              #
                              # Updating the the fill on a table cell will implicitly update this field
                              # to `RENDERED`, unless another value is specified in the same request. To
                              # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                              # case, any other fill fields set in the same request will be ignored.
                        },
                      },
                      "rowSpan": 42, # Row span of the cell.
                      "columnSpan": 42, # Column span of the cell.
                      "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                        "rowIndex": 42, # The 0-based row index.
                        "columnIndex": 42, # The 0-based column index.
                      },
                    },
                  ],
                  "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "rows": 42, # Number of rows in the table.
              "columns": 42, # Number of columns in the table.
            },
            "line": { # A PageElement kind representing a # A line page element.
                # line, curved connector, or bent connector.
              "lineProperties": { # The properties of the Line. # The properties of the line.
                  #
                  # When unset, these fields default to values that match the appearance of
                  # new lines created in the Slides editor.
                "dashStyle": "A String", # The dash style of the line.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "endArrow": "A String", # The style of the arrow at the end of the line.
                "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                    # lines created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "startArrow": "A String", # The style of the arrow at the beginning of the line.
              },
              "lineType": "A String", # The type of the line.
            },
            "size": { # A width and height. # The size of the page element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
        ],
        "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
            # relevant for pages with page_type NOTES.
          "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
              # notes for the corresponding slide.
              # The actual shape may not always exist on the notes page. Inserting text
              # using this object ID will automatically create the shape. In this case, the
              # actual shape may have different object ID. The `GetPresentation` or
              # `GetPage` action will always return the latest object ID.
        },
        "objectId": "A String", # The object ID for this page. Object IDs used by
            # Page and
            # PageElement share the same namespace.
        "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
            # update requests to assert that the presentation revision hasn't changed
            # since the last read operation. Only populated if the user has edit access
            # to the presentation.
            #
            # The format of the revision ID may change over time, so it should be treated
            # opaquely. A returned revision ID is only guaranteed to be valid for 24
            # hours after it has been returned and cannot be shared across users. If the
            # revision ID is unchanged between calls, then the presentation has not
            # changed. Conversely, a changed ID (for the same presentation and user)
            # usually means the presentation has been updated; however, a changed ID can
            # also be due to internal factors such as ID format changes.
        "pageProperties": { # The properties of the Page. # The properties of the page.
            #
            # The page will inherit properties from the parent page. Depending on the page
            # type the hierarchy is defined in either
            # SlideProperties or
            # LayoutProperties.
          "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
              # from a parent page if it exists. If the page has no parent, then the
              # background fill defaults to the corresponding fill in the Slides editor.
            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                # specified color value.
                #
                # If any field is unset, its value may be inherited from a parent placeholder
                # if it exists.
              "color": { # A themeable solid color value. # The color value of the solid fill.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "alpha": 3.14, # 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 * (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.
            },
            "propertyState": "A String", # The background fill property state.
                #
                # Updating the the fill on a page will implicitly update this field to
                # `RENDERED`, unless another value is specified in the same request. To
                # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                # any other fill fields set in the same request will be ignored.
            "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                # the specified picture. The picture is stretched to fit its container.
              "contentUrl": "A String", # Reading the content_url:
                  #
                  # An URL to a picture with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the picture as the original requester. Access to the
                  # picture may be lost if the presentation's sharing settings change.
                  #
                  # Writing the content_url:
                  #
                  # The picture is fetched once at insertion time and a copy is stored for
                  # display inside the presentation. Pictures must be less than 50MB in size,
                  # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                  # format.
              "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          },
          "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
              # a parent page. If the page has no parent, the color scheme uses a default
              # Slides color scheme. This field is read-only.
            "colors": [ # The ThemeColorType and corresponding concrete color pairs.
              { # A pair mapping a theme color type to the concrete color it represents.
                "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
                "type": "A String", # The type of the theme color.
              },
            ],
          },
        },
        "pageType": "A String", # The type of the page.
        "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
            # relevant for pages with page_type SLIDE.
          "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
              # appearance of a notes page when printing or exporting slides with speaker
              # notes. A notes page inherits properties from the
              # notes master.
              # The placeholder shape with type BODY on the notes page contains the speaker
              # notes for this slide. The ID of this shape is identified by the
              # speakerNotesObjectId field.
              # The notes page is read-only except for the text content and styles of the
              # speaker notes shape.
          "masterObjectId": "A String", # The object ID of the master that this slide is based on.
          "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
        },
      },
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Google Slides presentation.
      "presentationId": "A String", # The ID of the presentation.
      "notesMaster": { # A page in a presentation. # The notes master in the presentation. It serves three purposes:
          #
          # - Placeholder shapes on a notes master contain the default text styles and
          #   shape properties of all placeholder shapes on notes pages. Specifically,
          #   a `SLIDE_IMAGE` placeholder shape contains the slide thumbnail, and a
          #   `BODY` placeholder shape contains the speaker notes.
          # - The notes master page properties define the common page properties
          #   inherited by all notes pages.
          # - Any other shapes on the notes master will appear on all notes pages.
          #
          # The notes master is read-only.
        "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
            # relevant for pages with page_type LAYOUT.
          "displayName": "A String", # The human readable name of the layout in the presentation's locale.
          "name": "A String", # The name of the layout.
          "masterObjectId": "A String", # The object ID of the master that this layout is based on.
        },
        "pageElements": [ # The page elements rendered on the page.
          { # A visual element rendered on a page.
            "wordArt": { # A PageElement kind representing # A word art page element.
                # word art.
              "renderedText": "A String", # The text rendered as word art.
            },
            "description": "A String", # The description of the page element. Combined with title to display alt
                # text.
            "objectId": "A String", # The object ID for this page element. Object IDs used by
                # google.apps.slides.v1.Page and
                # google.apps.slides.v1.PageElement share the same namespace.
            "title": "A String", # The title of the page element. Combined with description to display alt
                # text.
            "image": { # A PageElement kind representing an # An image page element.
                # image.
              "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the presentation's sharing settings change.
              "imageProperties": { # The properties of the Image. # The properties of the image.
                "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
                "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                    # This property is read-only.
                  "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                      # stops.
                      #
                      # The colors in the gradient will replace the corresponding colors at
                      # the same position in the color palette and apply to the image. This
                      # property is read-only.
                    { # A color and position in a gradient band.
                      "color": { # A themeable solid color value. # The color of the gradient stop.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                          # fully opaque.
                      "position": 3.14, # The relative position of the color stop in the gradient band measured
                          # in percentage. The value should be in the interval [0.0, 1.0].
                    },
                  ],
                  "name": "A String", # The name of the recolor effect.
                      #
                      # The name is determined from the `recolor_stops` by matching the gradient
                      # against the colors in the page's current color scheme. This property is
                      # read-only.
                },
                "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                    # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                    # This property is read-only.
                "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                    # This property is read-only.
                    # Image.
                    #
                    # The crop properties is represented by the offsets of four edges which define
                    # a crop rectangle. The offsets are measured in percentage from the
                    # corresponding edges of the object's original bounding rectangle towards
                    # inside, relative to the object's original dimensions.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the object's original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the object's original bounding rectangle.
                    # - If the left edge of the crop rectangle is on the right side of its right
                    # edge, the object will be flipped horizontally.
                    # - If the top edge of the crop rectangle is below its bottom edge, the object
                    # will be flipped vertically.
                    # - If all offsets and rotation angle is 0, the object is not cropped.
                    #
                    # After cropping, the content in the crop rectangle will be stretched to fit
                    # its container.
                  "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                      # the right of the original bounding rectangle left edge, relative to the
                      # object's original width.
                  "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                      # Rotation angle is applied after the offset.
                  "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                      # to the left of the original bounding rectangle right edge, relative to the
                      # object's original width.
                  "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                      # above the original bounding rectangle bottom edge, relative to the object's
                      # original height.
                  "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                      # below the original bounding rectangle top edge, relative to the object's
                      # original height.
                },
                "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                    # is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              },
            },
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "shape": { # A PageElement kind representing a # A generic shape.
                # generic shape that does not have a more specific classification.
              "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                  # text box or rectangle) or a table cell in a page.
                "lists": { # The bulleted lists contained in this text, keyed by list ID.
                  "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                      # associated with a list. A paragraph that is part of a list has an implicit
                      # reference to that list's ID.
                    "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                        # level. A list has at most nine levels of nesting, so the possible values
                        # for the keys of this map are 0 through 8, inclusive.
                      "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                          # level of nesting.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                    "listId": "A String", # The ID of the list.
                  },
                },
                "textElements": [ # The text contents broken down into its component parts, including styling
                    # information. This property is read-only.
                  { # A TextElement describes the content of a range of indices in the text content
                      # of a Shape or TableCell.
                    "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                        # replaced with content that can change over time.
                      "content": "A String", # The rendered content of this auto text, if available.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                      "type": "A String", # The type of this auto text.
                    },
                    "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                        # units.
                    "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                    "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                        #
                        # The `start_index` and `end_index` of this TextElement represent the
                        # range of the paragraph. Other TextElements with an index range contained
                        # inside this paragraph's range are considered to be part of this
                        # paragraph. The range of indices of two separate paragraphs will never
                        # overlap.
                      "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                          #
                          # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                          # inherited from the parent. Which paragraph styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A paragraph not in a list will inherit its paragraph style from the
                          #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                          # * A paragraph in a list will inherit its paragraph style from the paragraph
                          #   at its corresponding nesting level of the list inside the parent
                          #   placeholder.
                          #
                          # Inherited paragraph styles are represented as unset fields in this message.
                        "spacingMode": "A String", # The spacing mode for the paragraph.
                        "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                            # LEFT_TO_RIGHT since
                            # text direction is not inherited.
                        "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                            # is represented as 100.0. If unset, the value is inherited from the parent.
                        "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the start of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the end of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                            # If unset, the value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "alignment": "A String", # The text alignment for this paragraph.
                      },
                      "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                          # belong to a list.
                        "nestingLevel": 42, # The nesting level of this paragraph in the list.
                        "listId": "A String", # The ID of the list this paragraph belongs to.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "glyph": "A String", # The rendered bullet glyph for this paragraph.
                      },
                    },
                    "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                        # in the run have the same TextStyle.
                        #
                        # The `start_index` and `end_index` of TextRuns will always be fully
                        # contained in the index range of a single `paragraph_marker` TextElement.
                        # In other words, a TextRun will never span multiple paragraphs.
                        # styling.
                      "content": "A String", # The text of this run.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                    },
                  },
                ],
              },
              "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                  #
                  # If the shape is a placeholder shape as determined by the
                  # placeholder field, then these
                  # properties may be inherited from a parent placeholder shape.
                  # Determining the rendered value of the property depends on the corresponding
                  # property_state field value.
                "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                    # a parent placeholder if it exists. If the shape has no parent, then the
                    # default shadow matches the defaults for new shapes created in the Slides
                    # editor. This property is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                    # inherited from a parent placeholder if it exists. If the shape has no
                    # parent, then the default background fill depends on the shape type,
                    # matching the defaults for new shapes created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                  "propertyState": "A String", # The background fill property state.
                      #
                      # Updating the the fill on a shape will implicitly update this field to
                      # `RENDERED`, unless another value is specified in the same request. To
                      # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                      # any other fill fields set in the same request will be ignored.
                },
                "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                    # are not inherited from parent placeholders.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                    # parent placeholder if it exists. If the shape has no parent, then the
                    # default outline depends on the shape type, matching the defaults for
                    # new shapes created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                  # layouts and masters.
                  #
                  # If set, the shape is a placeholder shape and any inherited properties
                  # can be resolved by looking at the parent placeholder identified by the
                  # Placeholder.parent_object_id field.
                "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                    # If unset, the parent placeholder shape does not exist, so the shape does
                    # not inherit properties from any other shape.
                "index": 42, # The index of the placeholder. If the same placeholder types are present in
                    # the same page, they would have different index values.
                "type": "A String", # The type of the placeholder.
              },
              "shapeType": "A String", # The type of the shape.
            },
            "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                # represented as images.
                # a linked chart embedded from Google Sheets.
              "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                  # minutes. This URL is tagged with the account of the requester. Anyone with
                  # the URL effectively accesses the image as the original requester. Access to
                  # the image may be lost if the presentation's sharing settings change.
              "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
              "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
            "video": { # A PageElement kind representing a # A video page element.
                # video.
              "url": "A String", # An URL to a video. The URL is valid as long as the source video
                  # exists and sharing settings do not change.
              "videoProperties": { # The properties of the Video. # The properties of the video.
                "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                    # videos created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "id": "A String", # The video source's unique identifier for this video.
              "source": "A String", # The video source.
            },
            "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                # joined collection of PageElements.
              "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                # Object with schema name: PageElement
              ],
            },
            "table": { # A PageElement kind representing a # A table page element.
                # table.
              "tableColumns": [ # Properties of each column.
                { # Properties of each column in a table.
                  "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "tableRows": [ # Properties and contents of each row.
                  #
                  # Cells that span multiple rows are contained in only one of these rows and
                  # have a row_span greater
                  # than 1.
                { # Properties and contents of each row in a table.
                  "tableCells": [ # Properties and contents of each cell.
                      #
                      # Cells that span multiple columns are represented only once with a
                      # column_span greater
                      # than 1. As a result, the length of this collection does not always match
                      # the number of columns of the entire table.
                    { # Properties and contents of each table cell.
                      "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                          # text box or rectangle) or a table cell in a page.
                        "lists": { # The bulleted lists contained in this text, keyed by list ID.
                          "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                              # associated with a list. A paragraph that is part of a list has an implicit
                              # reference to that list's ID.
                            "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                # level. A list has at most nine levels of nesting, so the possible values
                                # for the keys of this map are 0 through 8, inclusive.
                              "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                  # level of nesting.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                            "listId": "A String", # The ID of the list.
                          },
                        },
                        "textElements": [ # The text contents broken down into its component parts, including styling
                            # information. This property is read-only.
                          { # A TextElement describes the content of a range of indices in the text content
                              # of a Shape or TableCell.
                            "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                # replaced with content that can change over time.
                              "content": "A String", # The rendered content of this auto text, if available.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                              "type": "A String", # The type of this auto text.
                            },
                            "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                # units.
                            "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                            "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                #
                                # The `start_index` and `end_index` of this TextElement represent the
                                # range of the paragraph. Other TextElements with an index range contained
                                # inside this paragraph's range are considered to be part of this
                                # paragraph. The range of indices of two separate paragraphs will never
                                # overlap.
                              "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                  # inherited from the parent. Which paragraph styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A paragraph not in a list will inherit its paragraph style from the
                                  #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                  # * A paragraph in a list will inherit its paragraph style from the paragraph
                                  #   at its corresponding nesting level of the list inside the parent
                                  #   placeholder.
                                  #
                                  # Inherited paragraph styles are represented as unset fields in this message.
                                "spacingMode": "A String", # The spacing mode for the paragraph.
                                "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                    # LEFT_TO_RIGHT since
                                    # text direction is not inherited.
                                "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                    # is represented as 100.0. If unset, the value is inherited from the parent.
                                "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the start of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the end of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                    # If unset, the value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "alignment": "A String", # The text alignment for this paragraph.
                              },
                              "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                  # belong to a list.
                                "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                "listId": "A String", # The ID of the list this paragraph belongs to.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "glyph": "A String", # The rendered bullet glyph for this paragraph.
                              },
                            },
                            "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                # in the run have the same TextStyle.
                                #
                                # The `start_index` and `end_index` of TextRuns will always be fully
                                # contained in the index range of a single `paragraph_marker` TextElement.
                                # In other words, a TextRun will never span multiple paragraphs.
                                # styling.
                              "content": "A String", # The text of this run.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                            },
                          },
                        ],
                      },
                      "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                        "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                            # for newly created table cells in the Slides editor.
                          "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                              # specified color value.
                              #
                              # If any field is unset, its value may be inherited from a parent placeholder
                              # if it exists.
                            "color": { # A themeable solid color value. # The color value of the solid fill.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                            "alpha": 3.14, # 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 * (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.
                          },
                          "propertyState": "A String", # The background fill property state.
                              #
                              # Updating the the fill on a table cell will implicitly update this field
                              # to `RENDERED`, unless another value is specified in the same request. To
                              # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                              # case, any other fill fields set in the same request will be ignored.
                        },
                      },
                      "rowSpan": 42, # Row span of the cell.
                      "columnSpan": 42, # Column span of the cell.
                      "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                        "rowIndex": 42, # The 0-based row index.
                        "columnIndex": 42, # The 0-based column index.
                      },
                    },
                  ],
                  "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "rows": 42, # Number of rows in the table.
              "columns": 42, # Number of columns in the table.
            },
            "line": { # A PageElement kind representing a # A line page element.
                # line, curved connector, or bent connector.
              "lineProperties": { # The properties of the Line. # The properties of the line.
                  #
                  # When unset, these fields default to values that match the appearance of
                  # new lines created in the Slides editor.
                "dashStyle": "A String", # The dash style of the line.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "endArrow": "A String", # The style of the arrow at the end of the line.
                "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                    # lines created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "startArrow": "A String", # The style of the arrow at the beginning of the line.
              },
              "lineType": "A String", # The type of the line.
            },
            "size": { # A width and height. # The size of the page element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
        ],
        "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
            # relevant for pages with page_type NOTES.
          "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
              # notes for the corresponding slide.
              # The actual shape may not always exist on the notes page. Inserting text
              # using this object ID will automatically create the shape. In this case, the
              # actual shape may have different object ID. The `GetPresentation` or
              # `GetPage` action will always return the latest object ID.
        },
        "objectId": "A String", # The object ID for this page. Object IDs used by
            # Page and
            # PageElement share the same namespace.
        "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
            # update requests to assert that the presentation revision hasn't changed
            # since the last read operation. Only populated if the user has edit access
            # to the presentation.
            #
            # The format of the revision ID may change over time, so it should be treated
            # opaquely. A returned revision ID is only guaranteed to be valid for 24
            # hours after it has been returned and cannot be shared across users. If the
            # revision ID is unchanged between calls, then the presentation has not
            # changed. Conversely, a changed ID (for the same presentation and user)
            # usually means the presentation has been updated; however, a changed ID can
            # also be due to internal factors such as ID format changes.
        "pageProperties": { # The properties of the Page. # The properties of the page.
            #
            # The page will inherit properties from the parent page. Depending on the page
            # type the hierarchy is defined in either
            # SlideProperties or
            # LayoutProperties.
          "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
              # from a parent page if it exists. If the page has no parent, then the
              # background fill defaults to the corresponding fill in the Slides editor.
            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                # specified color value.
                #
                # If any field is unset, its value may be inherited from a parent placeholder
                # if it exists.
              "color": { # A themeable solid color value. # The color value of the solid fill.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "alpha": 3.14, # 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 * (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.
            },
            "propertyState": "A String", # The background fill property state.
                #
                # Updating the the fill on a page will implicitly update this field to
                # `RENDERED`, unless another value is specified in the same request. To
                # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                # any other fill fields set in the same request will be ignored.
            "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                # the specified picture. The picture is stretched to fit its container.
              "contentUrl": "A String", # Reading the content_url:
                  #
                  # An URL to a picture with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the picture as the original requester. Access to the
                  # picture may be lost if the presentation's sharing settings change.
                  #
                  # Writing the content_url:
                  #
                  # The picture is fetched once at insertion time and a copy is stored for
                  # display inside the presentation. Pictures must be less than 50MB in size,
                  # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                  # format.
              "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          },
          "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
              # a parent page. If the page has no parent, the color scheme uses a default
              # Slides color scheme. This field is read-only.
            "colors": [ # The ThemeColorType and corresponding concrete color pairs.
              { # A pair mapping a theme color type to the concrete color it represents.
                "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
                "type": "A String", # The type of the theme color.
              },
            ],
          },
        },
        "pageType": "A String", # The type of the page.
        "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
            # relevant for pages with page_type SLIDE.
          "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
              # appearance of a notes page when printing or exporting slides with speaker
              # notes. A notes page inherits properties from the
              # notes master.
              # The placeholder shape with type BODY on the notes page contains the speaker
              # notes for this slide. The ID of this shape is identified by the
              # speakerNotesObjectId field.
              # The notes page is read-only except for the text content and styles of the
              # speaker notes shape.
          "masterObjectId": "A String", # The object ID of the master that this slide is based on.
          "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
        },
      },
      "pageSize": { # A width and height. # The size of pages in the presentation.
        "width": { # A magnitude in a single direction in the specified units. # The width of the object.
          "magnitude": 3.14, # The magnitude.
          "unit": "A String", # The units for magnitude.
        },
        "height": { # A magnitude in a single direction in the specified units. # The height of the object.
          "magnitude": 3.14, # The magnitude.
          "unit": "A String", # The units for magnitude.
        },
      },
      "title": "A String", # The title of the presentation.
      "locale": "A String", # The locale of the presentation, as an IETF BCP 47 language tag.
      "revisionId": "A String", # The revision ID of the presentation. Can be used in update requests
          # to assert that the presentation revision hasn't changed since the last
          # read operation. Only populated if the user has edit access to the
          # presentation.
          #
          # The format of the revision ID may change over time, so it should be treated
          # opaquely. A returned revision ID is only guaranteed to be valid for 24
          # hours after it has been returned and cannot be shared across users. If the
          # revision ID is unchanged between calls, then the presentation has not
          # changed. Conversely, a changed ID (for the same presentation and user)
          # usually means the presentation has been updated; however, a changed ID can
          # also be due to internal factors such as ID format changes.
      "masters": [ # The slide masters in the presentation. A slide master contains all common
          # page elements and the common properties for a set of layouts. They serve
          # three purposes:
          #
          # - Placeholder shapes on a master contain the default text styles and shape
          #   properties of all placeholder shapes on pages that use that master.
          # - The master page properties define the common page properties inherited by
          #   its layouts.
          # - Any other shapes on the master slide will appear on all slides using that
          #   master, regardless of their layout.
        { # A page in a presentation.
          "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
              # relevant for pages with page_type LAYOUT.
            "displayName": "A String", # The human readable name of the layout in the presentation's locale.
            "name": "A String", # The name of the layout.
            "masterObjectId": "A String", # The object ID of the master that this layout is based on.
          },
          "pageElements": [ # The page elements rendered on the page.
            { # A visual element rendered on a page.
              "wordArt": { # A PageElement kind representing # A word art page element.
                  # word art.
                "renderedText": "A String", # The text rendered as word art.
              },
              "description": "A String", # The description of the page element. Combined with title to display alt
                  # text.
              "objectId": "A String", # The object ID for this page element. Object IDs used by
                  # google.apps.slides.v1.Page and
                  # google.apps.slides.v1.PageElement share the same namespace.
              "title": "A String", # The title of the page element. Combined with description to display alt
                  # text.
              "image": { # A PageElement kind representing an # An image page element.
                  # image.
                "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the presentation's sharing settings change.
                "imageProperties": { # The properties of the Image. # The properties of the image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "shape": { # A PageElement kind representing a # A generic shape.
                  # generic shape that does not have a more specific classification.
                "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                    # text box or rectangle) or a table cell in a page.
                  "lists": { # The bulleted lists contained in this text, keyed by list ID.
                    "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                        # associated with a list. A paragraph that is part of a list has an implicit
                        # reference to that list's ID.
                      "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                          # level. A list has at most nine levels of nesting, so the possible values
                          # for the keys of this map are 0 through 8, inclusive.
                        "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                            # level of nesting.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                      "listId": "A String", # The ID of the list.
                    },
                  },
                  "textElements": [ # The text contents broken down into its component parts, including styling
                      # information. This property is read-only.
                    { # A TextElement describes the content of a range of indices in the text content
                        # of a Shape or TableCell.
                      "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                          # replaced with content that can change over time.
                        "content": "A String", # The rendered content of this auto text, if available.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "type": "A String", # The type of this auto text.
                      },
                      "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                          # units.
                      "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                      "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                          #
                          # The `start_index` and `end_index` of this TextElement represent the
                          # range of the paragraph. Other TextElements with an index range contained
                          # inside this paragraph's range are considered to be part of this
                          # paragraph. The range of indices of two separate paragraphs will never
                          # overlap.
                        "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                            #
                            # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                            # inherited from the parent. Which paragraph styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A paragraph not in a list will inherit its paragraph style from the
                            #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                            # * A paragraph in a list will inherit its paragraph style from the paragraph
                            #   at its corresponding nesting level of the list inside the parent
                            #   placeholder.
                            #
                            # Inherited paragraph styles are represented as unset fields in this message.
                          "spacingMode": "A String", # The spacing mode for the paragraph.
                          "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                              # LEFT_TO_RIGHT since
                              # text direction is not inherited.
                          "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                              # is represented as 100.0. If unset, the value is inherited from the parent.
                          "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the start of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the end of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                              # If unset, the value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "alignment": "A String", # The text alignment for this paragraph.
                        },
                        "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                            # belong to a list.
                          "nestingLevel": 42, # The nesting level of this paragraph in the list.
                          "listId": "A String", # The ID of the list this paragraph belongs to.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "glyph": "A String", # The rendered bullet glyph for this paragraph.
                        },
                      },
                      "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                          # in the run have the same TextStyle.
                          #
                          # The `start_index` and `end_index` of TextRuns will always be fully
                          # contained in the index range of a single `paragraph_marker` TextElement.
                          # In other words, a TextRun will never span multiple paragraphs.
                          # styling.
                        "content": "A String", # The text of this run.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                  ],
                },
                "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                    #
                    # If the shape is a placeholder shape as determined by the
                    # placeholder field, then these
                    # properties may be inherited from a parent placeholder shape.
                    # Determining the rendered value of the property depends on the corresponding
                    # property_state field value.
                  "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                      # a parent placeholder if it exists. If the shape has no parent, then the
                      # default shadow matches the defaults for new shapes created in the Slides
                      # editor. This property is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                      # inherited from a parent placeholder if it exists. If the shape has no
                      # parent, then the default background fill depends on the shape type,
                      # matching the defaults for new shapes created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                    "propertyState": "A String", # The background fill property state.
                        #
                        # Updating the the fill on a shape will implicitly update this field to
                        # `RENDERED`, unless another value is specified in the same request. To
                        # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                        # any other fill fields set in the same request will be ignored.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                      # are not inherited from parent placeholders.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                      # parent placeholder if it exists. If the shape has no parent, then the
                      # default outline depends on the shape type, matching the defaults for
                      # new shapes created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                    # layouts and masters.
                    #
                    # If set, the shape is a placeholder shape and any inherited properties
                    # can be resolved by looking at the parent placeholder identified by the
                    # Placeholder.parent_object_id field.
                  "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                      # If unset, the parent placeholder shape does not exist, so the shape does
                      # not inherit properties from any other shape.
                  "index": 42, # The index of the placeholder. If the same placeholder types are present in
                      # the same page, they would have different index values.
                  "type": "A String", # The type of the placeholder.
                },
                "shapeType": "A String", # The type of the shape.
              },
              "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                  # represented as images.
                  # a linked chart embedded from Google Sheets.
                "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                    # minutes. This URL is tagged with the account of the requester. Anyone with
                    # the URL effectively accesses the image as the original requester. Access to
                    # the image may be lost if the presentation's sharing settings change.
                "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
                "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                  "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                    "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "outlineFill": { # The fill of the outline. # The fill of the outline.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                      },
                      "propertyState": "A String", # The outline property state.
                          #
                          # Updating the the outline on a page element will implicitly update this
                          # field to`RENDERED`, unless another value is specified in the same request.
                          # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                          # this case, any other outline fields set in the same request will be
                          # ignored.
                      "dashStyle": "A String", # The dash style of the outline.
                      "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                    },
                    "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                    "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                        # This property is read-only.
                      "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                          # stops.
                          #
                          # The colors in the gradient will replace the corresponding colors at
                          # the same position in the color palette and apply to the image. This
                          # property is read-only.
                        { # A color and position in a gradient band.
                          "color": { # A themeable solid color value. # The color of the gradient stop.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                              # fully opaque.
                          "position": 3.14, # The relative position of the color stop in the gradient band measured
                              # in percentage. The value should be in the interval [0.0, 1.0].
                        },
                      ],
                      "name": "A String", # The name of the recolor effect.
                          #
                          # The name is determined from the `recolor_stops` by matching the gradient
                          # against the colors in the page's current color scheme. This property is
                          # read-only.
                    },
                    "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                        # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                        # This property is read-only.
                    "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                        # This property is read-only.
                        # Image.
                        #
                        # The crop properties is represented by the offsets of four edges which define
                        # a crop rectangle. The offsets are measured in percentage from the
                        # corresponding edges of the object's original bounding rectangle towards
                        # inside, relative to the object's original dimensions.
                        #
                        # - If the offset is in the interval (0, 1), the corresponding edge of crop
                        # rectangle is positioned inside of the object's original bounding rectangle.
                        # - If the offset is negative or greater than 1, the corresponding edge of crop
                        # rectangle is positioned outside of the object's original bounding rectangle.
                        # - If the left edge of the crop rectangle is on the right side of its right
                        # edge, the object will be flipped horizontally.
                        # - If the top edge of the crop rectangle is below its bottom edge, the object
                        # will be flipped vertically.
                        # - If all offsets and rotation angle is 0, the object is not cropped.
                        #
                        # After cropping, the content in the crop rectangle will be stretched to fit
                        # its container.
                      "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                          # the right of the original bounding rectangle left edge, relative to the
                          # object's original width.
                      "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                          # Rotation angle is applied after the offset.
                      "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                          # to the left of the original bounding rectangle right edge, relative to the
                          # object's original width.
                      "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                          # above the original bounding rectangle bottom edge, relative to the object's
                          # original height.
                      "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                          # below the original bounding rectangle top edge, relative to the object's
                          # original height.
                    },
                    "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                        # is read-only.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "color": { # A themeable solid color value. # The shadow color value.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                          # relative to the alignment position.
                          # to transform source coordinates (x,y) into destination coordinates (x', y')
                          # according to:
                          #
                          #       x'  x  =   shear_y  scale_y  translate_y
                          #       1  [ 1 ]
                          #
                          # After transformation,
                          #
                          #      x' = scale_x * x + shear_x * y + translate_x;
                          #      y' = scale_y * y + shear_y * x + translate_y;
                          #
                          # This message is therefore composed of these six matrix elements.
                        "translateX": 3.14, # The X coordinate translation element.
                        "translateY": 3.14, # The Y coordinate translation element.
                        "scaleX": 3.14, # The X coordinate scaling element.
                        "scaleY": 3.14, # The Y coordinate scaling element.
                        "shearY": 3.14, # The Y coordinate shearing element.
                        "shearX": 3.14, # The X coordinate shearing element.
                        "unit": "A String", # The units for translate elements.
                      },
                      "propertyState": "A String", # The shadow property state.
                          #
                          # Updating the the shadow on a page element will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                          # case, any other shadow fields set in the same request will be ignored.
                      "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                          # shadow becomes.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                      "type": "A String", # The type of the shadow.
                      "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                          # scale and skew of the shadow.
                      "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                    },
                    "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  },
                },
                "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
              "video": { # A PageElement kind representing a # A video page element.
                  # video.
                "url": "A String", # An URL to a video. The URL is valid as long as the source video
                    # exists and sharing settings do not change.
                "videoProperties": { # The properties of the Video. # The properties of the video.
                  "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                      # videos created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "id": "A String", # The video source's unique identifier for this video.
                "source": "A String", # The video source.
              },
              "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                  # joined collection of PageElements.
                "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                  # Object with schema name: PageElement
                ],
              },
              "table": { # A PageElement kind representing a # A table page element.
                  # table.
                "tableColumns": [ # Properties of each column.
                  { # Properties of each column in a table.
                    "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "tableRows": [ # Properties and contents of each row.
                    #
                    # Cells that span multiple rows are contained in only one of these rows and
                    # have a row_span greater
                    # than 1.
                  { # Properties and contents of each row in a table.
                    "tableCells": [ # Properties and contents of each cell.
                        #
                        # Cells that span multiple columns are represented only once with a
                        # column_span greater
                        # than 1. As a result, the length of this collection does not always match
                        # the number of columns of the entire table.
                      { # Properties and contents of each table cell.
                        "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                            # text box or rectangle) or a table cell in a page.
                          "lists": { # The bulleted lists contained in this text, keyed by list ID.
                            "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                                # associated with a list. A paragraph that is part of a list has an implicit
                                # reference to that list's ID.
                              "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                  # level. A list has at most nine levels of nesting, so the possible values
                                  # for the keys of this map are 0 through 8, inclusive.
                                "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                    # level of nesting.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                },
                              },
                              "listId": "A String", # The ID of the list.
                            },
                          },
                          "textElements": [ # The text contents broken down into its component parts, including styling
                              # information. This property is read-only.
                            { # A TextElement describes the content of a range of indices in the text content
                                # of a Shape or TableCell.
                              "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                  # replaced with content that can change over time.
                                "content": "A String", # The rendered content of this auto text, if available.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "type": "A String", # The type of this auto text.
                              },
                              "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                  # units.
                              "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                              "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                  #
                                  # The `start_index` and `end_index` of this TextElement represent the
                                  # range of the paragraph. Other TextElements with an index range contained
                                  # inside this paragraph's range are considered to be part of this
                                  # paragraph. The range of indices of two separate paragraphs will never
                                  # overlap.
                                "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                    # inherited from the parent. Which paragraph styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A paragraph not in a list will inherit its paragraph style from the
                                    #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                    # * A paragraph in a list will inherit its paragraph style from the paragraph
                                    #   at its corresponding nesting level of the list inside the parent
                                    #   placeholder.
                                    #
                                    # Inherited paragraph styles are represented as unset fields in this message.
                                  "spacingMode": "A String", # The spacing mode for the paragraph.
                                  "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                      # LEFT_TO_RIGHT since
                                      # text direction is not inherited.
                                  "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                      # is represented as 100.0. If unset, the value is inherited from the parent.
                                  "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the start of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the end of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                      # If unset, the value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "alignment": "A String", # The text alignment for this paragraph.
                                },
                                "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                    # belong to a list.
                                  "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                  "listId": "A String", # The ID of the list this paragraph belongs to.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                  "glyph": "A String", # The rendered bullet glyph for this paragraph.
                                },
                              },
                              "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                  # in the run have the same TextStyle.
                                  #
                                  # The `start_index` and `end_index` of TextRuns will always be fully
                                  # contained in the index range of a single `paragraph_marker` TextElement.
                                  # In other words, a TextRun will never span multiple paragraphs.
                                  # styling.
                                "content": "A String", # The text of this run.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                          ],
                        },
                        "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                          "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                              # for newly created table cells in the Slides editor.
                            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                                # specified color value.
                                #
                                # If any field is unset, its value may be inherited from a parent placeholder
                                # if it exists.
                              "color": { # A themeable solid color value. # The color value of the solid fill.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                              "alpha": 3.14, # 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 * (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.
                            },
                            "propertyState": "A String", # The background fill property state.
                                #
                                # Updating the the fill on a table cell will implicitly update this field
                                # to `RENDERED`, unless another value is specified in the same request. To
                                # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                                # case, any other fill fields set in the same request will be ignored.
                          },
                        },
                        "rowSpan": 42, # Row span of the cell.
                        "columnSpan": 42, # Column span of the cell.
                        "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                          "rowIndex": 42, # The 0-based row index.
                          "columnIndex": 42, # The 0-based column index.
                        },
                      },
                    ],
                    "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "rows": 42, # Number of rows in the table.
                "columns": 42, # Number of columns in the table.
              },
              "line": { # A PageElement kind representing a # A line page element.
                  # line, curved connector, or bent connector.
                "lineProperties": { # The properties of the Line. # The properties of the line.
                    #
                    # When unset, these fields default to values that match the appearance of
                    # new lines created in the Slides editor.
                  "dashStyle": "A String", # The dash style of the line.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "endArrow": "A String", # The style of the arrow at the end of the line.
                  "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                      # lines created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "startArrow": "A String", # The style of the arrow at the beginning of the line.
                },
                "lineType": "A String", # The type of the line.
              },
              "size": { # A width and height. # The size of the page element.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          ],
          "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
              # relevant for pages with page_type NOTES.
            "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
                # notes for the corresponding slide.
                # The actual shape may not always exist on the notes page. Inserting text
                # using this object ID will automatically create the shape. In this case, the
                # actual shape may have different object ID. The `GetPresentation` or
                # `GetPage` action will always return the latest object ID.
          },
          "objectId": "A String", # The object ID for this page. Object IDs used by
              # Page and
              # PageElement share the same namespace.
          "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
              # update requests to assert that the presentation revision hasn't changed
              # since the last read operation. Only populated if the user has edit access
              # to the presentation.
              #
              # The format of the revision ID may change over time, so it should be treated
              # opaquely. A returned revision ID is only guaranteed to be valid for 24
              # hours after it has been returned and cannot be shared across users. If the
              # revision ID is unchanged between calls, then the presentation has not
              # changed. Conversely, a changed ID (for the same presentation and user)
              # usually means the presentation has been updated; however, a changed ID can
              # also be due to internal factors such as ID format changes.
          "pageProperties": { # The properties of the Page. # The properties of the page.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "pageType": "A String", # The type of the page.
          "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
              # relevant for pages with page_type SLIDE.
            "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
                # appearance of a notes page when printing or exporting slides with speaker
                # notes. A notes page inherits properties from the
                # notes master.
                # The placeholder shape with type BODY on the notes page contains the speaker
                # notes for this slide. The ID of this shape is identified by the
                # speakerNotesObjectId field.
                # The notes page is read-only except for the text content and styles of the
                # speaker notes shape.
            "masterObjectId": "A String", # The object ID of the master that this slide is based on.
            "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
          },
        },
      ],
      "slides": [ # The slides in the presentation.
          # A slide inherits properties from a slide layout.
        { # A page in a presentation.
          "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
              # relevant for pages with page_type LAYOUT.
            "displayName": "A String", # The human readable name of the layout in the presentation's locale.
            "name": "A String", # The name of the layout.
            "masterObjectId": "A String", # The object ID of the master that this layout is based on.
          },
          "pageElements": [ # The page elements rendered on the page.
            { # A visual element rendered on a page.
              "wordArt": { # A PageElement kind representing # A word art page element.
                  # word art.
                "renderedText": "A String", # The text rendered as word art.
              },
              "description": "A String", # The description of the page element. Combined with title to display alt
                  # text.
              "objectId": "A String", # The object ID for this page element. Object IDs used by
                  # google.apps.slides.v1.Page and
                  # google.apps.slides.v1.PageElement share the same namespace.
              "title": "A String", # The title of the page element. Combined with description to display alt
                  # text.
              "image": { # A PageElement kind representing an # An image page element.
                  # image.
                "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the presentation's sharing settings change.
                "imageProperties": { # The properties of the Image. # The properties of the image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "shape": { # A PageElement kind representing a # A generic shape.
                  # generic shape that does not have a more specific classification.
                "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                    # text box or rectangle) or a table cell in a page.
                  "lists": { # The bulleted lists contained in this text, keyed by list ID.
                    "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                        # associated with a list. A paragraph that is part of a list has an implicit
                        # reference to that list's ID.
                      "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                          # level. A list has at most nine levels of nesting, so the possible values
                          # for the keys of this map are 0 through 8, inclusive.
                        "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                            # level of nesting.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                      "listId": "A String", # The ID of the list.
                    },
                  },
                  "textElements": [ # The text contents broken down into its component parts, including styling
                      # information. This property is read-only.
                    { # A TextElement describes the content of a range of indices in the text content
                        # of a Shape or TableCell.
                      "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                          # replaced with content that can change over time.
                        "content": "A String", # The rendered content of this auto text, if available.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "type": "A String", # The type of this auto text.
                      },
                      "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                          # units.
                      "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                      "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                          #
                          # The `start_index` and `end_index` of this TextElement represent the
                          # range of the paragraph. Other TextElements with an index range contained
                          # inside this paragraph's range are considered to be part of this
                          # paragraph. The range of indices of two separate paragraphs will never
                          # overlap.
                        "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                            #
                            # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                            # inherited from the parent. Which paragraph styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A paragraph not in a list will inherit its paragraph style from the
                            #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                            # * A paragraph in a list will inherit its paragraph style from the paragraph
                            #   at its corresponding nesting level of the list inside the parent
                            #   placeholder.
                            #
                            # Inherited paragraph styles are represented as unset fields in this message.
                          "spacingMode": "A String", # The spacing mode for the paragraph.
                          "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                              # LEFT_TO_RIGHT since
                              # text direction is not inherited.
                          "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                              # is represented as 100.0. If unset, the value is inherited from the parent.
                          "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the start of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the end of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                              # If unset, the value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "alignment": "A String", # The text alignment for this paragraph.
                        },
                        "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                            # belong to a list.
                          "nestingLevel": 42, # The nesting level of this paragraph in the list.
                          "listId": "A String", # The ID of the list this paragraph belongs to.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "glyph": "A String", # The rendered bullet glyph for this paragraph.
                        },
                      },
                      "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                          # in the run have the same TextStyle.
                          #
                          # The `start_index` and `end_index` of TextRuns will always be fully
                          # contained in the index range of a single `paragraph_marker` TextElement.
                          # In other words, a TextRun will never span multiple paragraphs.
                          # styling.
                        "content": "A String", # The text of this run.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                  ],
                },
                "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                    #
                    # If the shape is a placeholder shape as determined by the
                    # placeholder field, then these
                    # properties may be inherited from a parent placeholder shape.
                    # Determining the rendered value of the property depends on the corresponding
                    # property_state field value.
                  "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                      # a parent placeholder if it exists. If the shape has no parent, then the
                      # default shadow matches the defaults for new shapes created in the Slides
                      # editor. This property is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                      # inherited from a parent placeholder if it exists. If the shape has no
                      # parent, then the default background fill depends on the shape type,
                      # matching the defaults for new shapes created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                    "propertyState": "A String", # The background fill property state.
                        #
                        # Updating the the fill on a shape will implicitly update this field to
                        # `RENDERED`, unless another value is specified in the same request. To
                        # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                        # any other fill fields set in the same request will be ignored.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                      # are not inherited from parent placeholders.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                      # parent placeholder if it exists. If the shape has no parent, then the
                      # default outline depends on the shape type, matching the defaults for
                      # new shapes created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                    # layouts and masters.
                    #
                    # If set, the shape is a placeholder shape and any inherited properties
                    # can be resolved by looking at the parent placeholder identified by the
                    # Placeholder.parent_object_id field.
                  "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                      # If unset, the parent placeholder shape does not exist, so the shape does
                      # not inherit properties from any other shape.
                  "index": 42, # The index of the placeholder. If the same placeholder types are present in
                      # the same page, they would have different index values.
                  "type": "A String", # The type of the placeholder.
                },
                "shapeType": "A String", # The type of the shape.
              },
              "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                  # represented as images.
                  # a linked chart embedded from Google Sheets.
                "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                    # minutes. This URL is tagged with the account of the requester. Anyone with
                    # the URL effectively accesses the image as the original requester. Access to
                    # the image may be lost if the presentation's sharing settings change.
                "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
                "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                  "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                    "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "outlineFill": { # The fill of the outline. # The fill of the outline.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                      },
                      "propertyState": "A String", # The outline property state.
                          #
                          # Updating the the outline on a page element will implicitly update this
                          # field to`RENDERED`, unless another value is specified in the same request.
                          # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                          # this case, any other outline fields set in the same request will be
                          # ignored.
                      "dashStyle": "A String", # The dash style of the outline.
                      "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                    },
                    "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                    "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                        # This property is read-only.
                      "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                          # stops.
                          #
                          # The colors in the gradient will replace the corresponding colors at
                          # the same position in the color palette and apply to the image. This
                          # property is read-only.
                        { # A color and position in a gradient band.
                          "color": { # A themeable solid color value. # The color of the gradient stop.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                              # fully opaque.
                          "position": 3.14, # The relative position of the color stop in the gradient band measured
                              # in percentage. The value should be in the interval [0.0, 1.0].
                        },
                      ],
                      "name": "A String", # The name of the recolor effect.
                          #
                          # The name is determined from the `recolor_stops` by matching the gradient
                          # against the colors in the page's current color scheme. This property is
                          # read-only.
                    },
                    "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                        # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                        # This property is read-only.
                    "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                        # This property is read-only.
                        # Image.
                        #
                        # The crop properties is represented by the offsets of four edges which define
                        # a crop rectangle. The offsets are measured in percentage from the
                        # corresponding edges of the object's original bounding rectangle towards
                        # inside, relative to the object's original dimensions.
                        #
                        # - If the offset is in the interval (0, 1), the corresponding edge of crop
                        # rectangle is positioned inside of the object's original bounding rectangle.
                        # - If the offset is negative or greater than 1, the corresponding edge of crop
                        # rectangle is positioned outside of the object's original bounding rectangle.
                        # - If the left edge of the crop rectangle is on the right side of its right
                        # edge, the object will be flipped horizontally.
                        # - If the top edge of the crop rectangle is below its bottom edge, the object
                        # will be flipped vertically.
                        # - If all offsets and rotation angle is 0, the object is not cropped.
                        #
                        # After cropping, the content in the crop rectangle will be stretched to fit
                        # its container.
                      "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                          # the right of the original bounding rectangle left edge, relative to the
                          # object's original width.
                      "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                          # Rotation angle is applied after the offset.
                      "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                          # to the left of the original bounding rectangle right edge, relative to the
                          # object's original width.
                      "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                          # above the original bounding rectangle bottom edge, relative to the object's
                          # original height.
                      "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                          # below the original bounding rectangle top edge, relative to the object's
                          # original height.
                    },
                    "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                        # is read-only.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "color": { # A themeable solid color value. # The shadow color value.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                          # relative to the alignment position.
                          # to transform source coordinates (x,y) into destination coordinates (x', y')
                          # according to:
                          #
                          #       x'  x  =   shear_y  scale_y  translate_y
                          #       1  [ 1 ]
                          #
                          # After transformation,
                          #
                          #      x' = scale_x * x + shear_x * y + translate_x;
                          #      y' = scale_y * y + shear_y * x + translate_y;
                          #
                          # This message is therefore composed of these six matrix elements.
                        "translateX": 3.14, # The X coordinate translation element.
                        "translateY": 3.14, # The Y coordinate translation element.
                        "scaleX": 3.14, # The X coordinate scaling element.
                        "scaleY": 3.14, # The Y coordinate scaling element.
                        "shearY": 3.14, # The Y coordinate shearing element.
                        "shearX": 3.14, # The X coordinate shearing element.
                        "unit": "A String", # The units for translate elements.
                      },
                      "propertyState": "A String", # The shadow property state.
                          #
                          # Updating the the shadow on a page element will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                          # case, any other shadow fields set in the same request will be ignored.
                      "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                          # shadow becomes.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                      "type": "A String", # The type of the shadow.
                      "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                          # scale and skew of the shadow.
                      "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                    },
                    "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  },
                },
                "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
              "video": { # A PageElement kind representing a # A video page element.
                  # video.
                "url": "A String", # An URL to a video. The URL is valid as long as the source video
                    # exists and sharing settings do not change.
                "videoProperties": { # The properties of the Video. # The properties of the video.
                  "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                      # videos created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "id": "A String", # The video source's unique identifier for this video.
                "source": "A String", # The video source.
              },
              "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                  # joined collection of PageElements.
                "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                  # Object with schema name: PageElement
                ],
              },
              "table": { # A PageElement kind representing a # A table page element.
                  # table.
                "tableColumns": [ # Properties of each column.
                  { # Properties of each column in a table.
                    "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "tableRows": [ # Properties and contents of each row.
                    #
                    # Cells that span multiple rows are contained in only one of these rows and
                    # have a row_span greater
                    # than 1.
                  { # Properties and contents of each row in a table.
                    "tableCells": [ # Properties and contents of each cell.
                        #
                        # Cells that span multiple columns are represented only once with a
                        # column_span greater
                        # than 1. As a result, the length of this collection does not always match
                        # the number of columns of the entire table.
                      { # Properties and contents of each table cell.
                        "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                            # text box or rectangle) or a table cell in a page.
                          "lists": { # The bulleted lists contained in this text, keyed by list ID.
                            "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                                # associated with a list. A paragraph that is part of a list has an implicit
                                # reference to that list's ID.
                              "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                  # level. A list has at most nine levels of nesting, so the possible values
                                  # for the keys of this map are 0 through 8, inclusive.
                                "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                    # level of nesting.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                },
                              },
                              "listId": "A String", # The ID of the list.
                            },
                          },
                          "textElements": [ # The text contents broken down into its component parts, including styling
                              # information. This property is read-only.
                            { # A TextElement describes the content of a range of indices in the text content
                                # of a Shape or TableCell.
                              "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                  # replaced with content that can change over time.
                                "content": "A String", # The rendered content of this auto text, if available.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "type": "A String", # The type of this auto text.
                              },
                              "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                  # units.
                              "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                              "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                  #
                                  # The `start_index` and `end_index` of this TextElement represent the
                                  # range of the paragraph. Other TextElements with an index range contained
                                  # inside this paragraph's range are considered to be part of this
                                  # paragraph. The range of indices of two separate paragraphs will never
                                  # overlap.
                                "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                    # inherited from the parent. Which paragraph styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A paragraph not in a list will inherit its paragraph style from the
                                    #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                    # * A paragraph in a list will inherit its paragraph style from the paragraph
                                    #   at its corresponding nesting level of the list inside the parent
                                    #   placeholder.
                                    #
                                    # Inherited paragraph styles are represented as unset fields in this message.
                                  "spacingMode": "A String", # The spacing mode for the paragraph.
                                  "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                      # LEFT_TO_RIGHT since
                                      # text direction is not inherited.
                                  "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                      # is represented as 100.0. If unset, the value is inherited from the parent.
                                  "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the start of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the end of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                      # If unset, the value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "alignment": "A String", # The text alignment for this paragraph.
                                },
                                "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                    # belong to a list.
                                  "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                  "listId": "A String", # The ID of the list this paragraph belongs to.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                  "glyph": "A String", # The rendered bullet glyph for this paragraph.
                                },
                              },
                              "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                  # in the run have the same TextStyle.
                                  #
                                  # The `start_index` and `end_index` of TextRuns will always be fully
                                  # contained in the index range of a single `paragraph_marker` TextElement.
                                  # In other words, a TextRun will never span multiple paragraphs.
                                  # styling.
                                "content": "A String", # The text of this run.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                          ],
                        },
                        "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                          "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                              # for newly created table cells in the Slides editor.
                            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                                # specified color value.
                                #
                                # If any field is unset, its value may be inherited from a parent placeholder
                                # if it exists.
                              "color": { # A themeable solid color value. # The color value of the solid fill.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                              "alpha": 3.14, # 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 * (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.
                            },
                            "propertyState": "A String", # The background fill property state.
                                #
                                # Updating the the fill on a table cell will implicitly update this field
                                # to `RENDERED`, unless another value is specified in the same request. To
                                # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                                # case, any other fill fields set in the same request will be ignored.
                          },
                        },
                        "rowSpan": 42, # Row span of the cell.
                        "columnSpan": 42, # Column span of the cell.
                        "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                          "rowIndex": 42, # The 0-based row index.
                          "columnIndex": 42, # The 0-based column index.
                        },
                      },
                    ],
                    "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "rows": 42, # Number of rows in the table.
                "columns": 42, # Number of columns in the table.
              },
              "line": { # A PageElement kind representing a # A line page element.
                  # line, curved connector, or bent connector.
                "lineProperties": { # The properties of the Line. # The properties of the line.
                    #
                    # When unset, these fields default to values that match the appearance of
                    # new lines created in the Slides editor.
                  "dashStyle": "A String", # The dash style of the line.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "endArrow": "A String", # The style of the arrow at the end of the line.
                  "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                      # lines created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "startArrow": "A String", # The style of the arrow at the beginning of the line.
                },
                "lineType": "A String", # The type of the line.
              },
              "size": { # A width and height. # The size of the page element.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          ],
          "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
              # relevant for pages with page_type NOTES.
            "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
                # notes for the corresponding slide.
                # The actual shape may not always exist on the notes page. Inserting text
                # using this object ID will automatically create the shape. In this case, the
                # actual shape may have different object ID. The `GetPresentation` or
                # `GetPage` action will always return the latest object ID.
          },
          "objectId": "A String", # The object ID for this page. Object IDs used by
              # Page and
              # PageElement share the same namespace.
          "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
              # update requests to assert that the presentation revision hasn't changed
              # since the last read operation. Only populated if the user has edit access
              # to the presentation.
              #
              # The format of the revision ID may change over time, so it should be treated
              # opaquely. A returned revision ID is only guaranteed to be valid for 24
              # hours after it has been returned and cannot be shared across users. If the
              # revision ID is unchanged between calls, then the presentation has not
              # changed. Conversely, a changed ID (for the same presentation and user)
              # usually means the presentation has been updated; however, a changed ID can
              # also be due to internal factors such as ID format changes.
          "pageProperties": { # The properties of the Page. # The properties of the page.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "pageType": "A String", # The type of the page.
          "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
              # relevant for pages with page_type SLIDE.
            "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
                # appearance of a notes page when printing or exporting slides with speaker
                # notes. A notes page inherits properties from the
                # notes master.
                # The placeholder shape with type BODY on the notes page contains the speaker
                # notes for this slide. The ID of this shape is identified by the
                # speakerNotesObjectId field.
                # The notes page is read-only except for the text content and styles of the
                # speaker notes shape.
            "masterObjectId": "A String", # The object ID of the master that this slide is based on.
            "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
          },
        },
      ],
      "layouts": [ # The layouts in the presentation. A layout is a template that determines
          # how content is arranged and styled on the slides that inherit from that
          # layout.
        { # A page in a presentation.
          "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
              # relevant for pages with page_type LAYOUT.
            "displayName": "A String", # The human readable name of the layout in the presentation's locale.
            "name": "A String", # The name of the layout.
            "masterObjectId": "A String", # The object ID of the master that this layout is based on.
          },
          "pageElements": [ # The page elements rendered on the page.
            { # A visual element rendered on a page.
              "wordArt": { # A PageElement kind representing # A word art page element.
                  # word art.
                "renderedText": "A String", # The text rendered as word art.
              },
              "description": "A String", # The description of the page element. Combined with title to display alt
                  # text.
              "objectId": "A String", # The object ID for this page element. Object IDs used by
                  # google.apps.slides.v1.Page and
                  # google.apps.slides.v1.PageElement share the same namespace.
              "title": "A String", # The title of the page element. Combined with description to display alt
                  # text.
              "image": { # A PageElement kind representing an # An image page element.
                  # image.
                "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the presentation's sharing settings change.
                "imageProperties": { # The properties of the Image. # The properties of the image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "shape": { # A PageElement kind representing a # A generic shape.
                  # generic shape that does not have a more specific classification.
                "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                    # text box or rectangle) or a table cell in a page.
                  "lists": { # The bulleted lists contained in this text, keyed by list ID.
                    "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                        # associated with a list. A paragraph that is part of a list has an implicit
                        # reference to that list's ID.
                      "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                          # level. A list has at most nine levels of nesting, so the possible values
                          # for the keys of this map are 0 through 8, inclusive.
                        "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                            # level of nesting.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                      "listId": "A String", # The ID of the list.
                    },
                  },
                  "textElements": [ # The text contents broken down into its component parts, including styling
                      # information. This property is read-only.
                    { # A TextElement describes the content of a range of indices in the text content
                        # of a Shape or TableCell.
                      "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                          # replaced with content that can change over time.
                        "content": "A String", # The rendered content of this auto text, if available.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "type": "A String", # The type of this auto text.
                      },
                      "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                          # units.
                      "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                      "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                          #
                          # The `start_index` and `end_index` of this TextElement represent the
                          # range of the paragraph. Other TextElements with an index range contained
                          # inside this paragraph's range are considered to be part of this
                          # paragraph. The range of indices of two separate paragraphs will never
                          # overlap.
                        "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                            #
                            # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                            # inherited from the parent. Which paragraph styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A paragraph not in a list will inherit its paragraph style from the
                            #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                            # * A paragraph in a list will inherit its paragraph style from the paragraph
                            #   at its corresponding nesting level of the list inside the parent
                            #   placeholder.
                            #
                            # Inherited paragraph styles are represented as unset fields in this message.
                          "spacingMode": "A String", # The spacing mode for the paragraph.
                          "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                              # LEFT_TO_RIGHT since
                              # text direction is not inherited.
                          "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                              # is represented as 100.0. If unset, the value is inherited from the parent.
                          "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the start of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the end of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                              # If unset, the value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "alignment": "A String", # The text alignment for this paragraph.
                        },
                        "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                            # belong to a list.
                          "nestingLevel": 42, # The nesting level of this paragraph in the list.
                          "listId": "A String", # The ID of the list this paragraph belongs to.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "glyph": "A String", # The rendered bullet glyph for this paragraph.
                        },
                      },
                      "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                          # in the run have the same TextStyle.
                          #
                          # The `start_index` and `end_index` of TextRuns will always be fully
                          # contained in the index range of a single `paragraph_marker` TextElement.
                          # In other words, a TextRun will never span multiple paragraphs.
                          # styling.
                        "content": "A String", # The text of this run.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                  ],
                },
                "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                    #
                    # If the shape is a placeholder shape as determined by the
                    # placeholder field, then these
                    # properties may be inherited from a parent placeholder shape.
                    # Determining the rendered value of the property depends on the corresponding
                    # property_state field value.
                  "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                      # a parent placeholder if it exists. If the shape has no parent, then the
                      # default shadow matches the defaults for new shapes created in the Slides
                      # editor. This property is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                      # inherited from a parent placeholder if it exists. If the shape has no
                      # parent, then the default background fill depends on the shape type,
                      # matching the defaults for new shapes created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                    "propertyState": "A String", # The background fill property state.
                        #
                        # Updating the the fill on a shape will implicitly update this field to
                        # `RENDERED`, unless another value is specified in the same request. To
                        # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                        # any other fill fields set in the same request will be ignored.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                      # are not inherited from parent placeholders.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                      # parent placeholder if it exists. If the shape has no parent, then the
                      # default outline depends on the shape type, matching the defaults for
                      # new shapes created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                    # layouts and masters.
                    #
                    # If set, the shape is a placeholder shape and any inherited properties
                    # can be resolved by looking at the parent placeholder identified by the
                    # Placeholder.parent_object_id field.
                  "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                      # If unset, the parent placeholder shape does not exist, so the shape does
                      # not inherit properties from any other shape.
                  "index": 42, # The index of the placeholder. If the same placeholder types are present in
                      # the same page, they would have different index values.
                  "type": "A String", # The type of the placeholder.
                },
                "shapeType": "A String", # The type of the shape.
              },
              "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                  # represented as images.
                  # a linked chart embedded from Google Sheets.
                "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                    # minutes. This URL is tagged with the account of the requester. Anyone with
                    # the URL effectively accesses the image as the original requester. Access to
                    # the image may be lost if the presentation's sharing settings change.
                "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
                "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                  "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                    "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "outlineFill": { # The fill of the outline. # The fill of the outline.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                      },
                      "propertyState": "A String", # The outline property state.
                          #
                          # Updating the the outline on a page element will implicitly update this
                          # field to`RENDERED`, unless another value is specified in the same request.
                          # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                          # this case, any other outline fields set in the same request will be
                          # ignored.
                      "dashStyle": "A String", # The dash style of the outline.
                      "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                    },
                    "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                    "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                        # This property is read-only.
                      "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                          # stops.
                          #
                          # The colors in the gradient will replace the corresponding colors at
                          # the same position in the color palette and apply to the image. This
                          # property is read-only.
                        { # A color and position in a gradient band.
                          "color": { # A themeable solid color value. # The color of the gradient stop.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                              # fully opaque.
                          "position": 3.14, # The relative position of the color stop in the gradient band measured
                              # in percentage. The value should be in the interval [0.0, 1.0].
                        },
                      ],
                      "name": "A String", # The name of the recolor effect.
                          #
                          # The name is determined from the `recolor_stops` by matching the gradient
                          # against the colors in the page's current color scheme. This property is
                          # read-only.
                    },
                    "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                        # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                        # This property is read-only.
                    "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                        # This property is read-only.
                        # Image.
                        #
                        # The crop properties is represented by the offsets of four edges which define
                        # a crop rectangle. The offsets are measured in percentage from the
                        # corresponding edges of the object's original bounding rectangle towards
                        # inside, relative to the object's original dimensions.
                        #
                        # - If the offset is in the interval (0, 1), the corresponding edge of crop
                        # rectangle is positioned inside of the object's original bounding rectangle.
                        # - If the offset is negative or greater than 1, the corresponding edge of crop
                        # rectangle is positioned outside of the object's original bounding rectangle.
                        # - If the left edge of the crop rectangle is on the right side of its right
                        # edge, the object will be flipped horizontally.
                        # - If the top edge of the crop rectangle is below its bottom edge, the object
                        # will be flipped vertically.
                        # - If all offsets and rotation angle is 0, the object is not cropped.
                        #
                        # After cropping, the content in the crop rectangle will be stretched to fit
                        # its container.
                      "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                          # the right of the original bounding rectangle left edge, relative to the
                          # object's original width.
                      "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                          # Rotation angle is applied after the offset.
                      "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                          # to the left of the original bounding rectangle right edge, relative to the
                          # object's original width.
                      "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                          # above the original bounding rectangle bottom edge, relative to the object's
                          # original height.
                      "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                          # below the original bounding rectangle top edge, relative to the object's
                          # original height.
                    },
                    "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                        # is read-only.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "color": { # A themeable solid color value. # The shadow color value.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                          # relative to the alignment position.
                          # to transform source coordinates (x,y) into destination coordinates (x', y')
                          # according to:
                          #
                          #       x'  x  =   shear_y  scale_y  translate_y
                          #       1  [ 1 ]
                          #
                          # After transformation,
                          #
                          #      x' = scale_x * x + shear_x * y + translate_x;
                          #      y' = scale_y * y + shear_y * x + translate_y;
                          #
                          # This message is therefore composed of these six matrix elements.
                        "translateX": 3.14, # The X coordinate translation element.
                        "translateY": 3.14, # The Y coordinate translation element.
                        "scaleX": 3.14, # The X coordinate scaling element.
                        "scaleY": 3.14, # The Y coordinate scaling element.
                        "shearY": 3.14, # The Y coordinate shearing element.
                        "shearX": 3.14, # The X coordinate shearing element.
                        "unit": "A String", # The units for translate elements.
                      },
                      "propertyState": "A String", # The shadow property state.
                          #
                          # Updating the the shadow on a page element will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                          # case, any other shadow fields set in the same request will be ignored.
                      "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                          # shadow becomes.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                      "type": "A String", # The type of the shadow.
                      "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                          # scale and skew of the shadow.
                      "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                    },
                    "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  },
                },
                "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
              "video": { # A PageElement kind representing a # A video page element.
                  # video.
                "url": "A String", # An URL to a video. The URL is valid as long as the source video
                    # exists and sharing settings do not change.
                "videoProperties": { # The properties of the Video. # The properties of the video.
                  "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                      # videos created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "id": "A String", # The video source's unique identifier for this video.
                "source": "A String", # The video source.
              },
              "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                  # joined collection of PageElements.
                "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                  # Object with schema name: PageElement
                ],
              },
              "table": { # A PageElement kind representing a # A table page element.
                  # table.
                "tableColumns": [ # Properties of each column.
                  { # Properties of each column in a table.
                    "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "tableRows": [ # Properties and contents of each row.
                    #
                    # Cells that span multiple rows are contained in only one of these rows and
                    # have a row_span greater
                    # than 1.
                  { # Properties and contents of each row in a table.
                    "tableCells": [ # Properties and contents of each cell.
                        #
                        # Cells that span multiple columns are represented only once with a
                        # column_span greater
                        # than 1. As a result, the length of this collection does not always match
                        # the number of columns of the entire table.
                      { # Properties and contents of each table cell.
                        "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                            # text box or rectangle) or a table cell in a page.
                          "lists": { # The bulleted lists contained in this text, keyed by list ID.
                            "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                                # associated with a list. A paragraph that is part of a list has an implicit
                                # reference to that list's ID.
                              "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                  # level. A list has at most nine levels of nesting, so the possible values
                                  # for the keys of this map are 0 through 8, inclusive.
                                "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                    # level of nesting.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                },
                              },
                              "listId": "A String", # The ID of the list.
                            },
                          },
                          "textElements": [ # The text contents broken down into its component parts, including styling
                              # information. This property is read-only.
                            { # A TextElement describes the content of a range of indices in the text content
                                # of a Shape or TableCell.
                              "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                  # replaced with content that can change over time.
                                "content": "A String", # The rendered content of this auto text, if available.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "type": "A String", # The type of this auto text.
                              },
                              "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                  # units.
                              "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                              "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                  #
                                  # The `start_index` and `end_index` of this TextElement represent the
                                  # range of the paragraph. Other TextElements with an index range contained
                                  # inside this paragraph's range are considered to be part of this
                                  # paragraph. The range of indices of two separate paragraphs will never
                                  # overlap.
                                "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                    # inherited from the parent. Which paragraph styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A paragraph not in a list will inherit its paragraph style from the
                                    #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                    # * A paragraph in a list will inherit its paragraph style from the paragraph
                                    #   at its corresponding nesting level of the list inside the parent
                                    #   placeholder.
                                    #
                                    # Inherited paragraph styles are represented as unset fields in this message.
                                  "spacingMode": "A String", # The spacing mode for the paragraph.
                                  "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                      # LEFT_TO_RIGHT since
                                      # text direction is not inherited.
                                  "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                      # is represented as 100.0. If unset, the value is inherited from the parent.
                                  "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the start of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the end of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                      # If unset, the value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "alignment": "A String", # The text alignment for this paragraph.
                                },
                                "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                    # belong to a list.
                                  "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                  "listId": "A String", # The ID of the list this paragraph belongs to.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                  "glyph": "A String", # The rendered bullet glyph for this paragraph.
                                },
                              },
                              "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                  # in the run have the same TextStyle.
                                  #
                                  # The `start_index` and `end_index` of TextRuns will always be fully
                                  # contained in the index range of a single `paragraph_marker` TextElement.
                                  # In other words, a TextRun will never span multiple paragraphs.
                                  # styling.
                                "content": "A String", # The text of this run.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                          ],
                        },
                        "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                          "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                              # for newly created table cells in the Slides editor.
                            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                                # specified color value.
                                #
                                # If any field is unset, its value may be inherited from a parent placeholder
                                # if it exists.
                              "color": { # A themeable solid color value. # The color value of the solid fill.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                              "alpha": 3.14, # 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 * (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.
                            },
                            "propertyState": "A String", # The background fill property state.
                                #
                                # Updating the the fill on a table cell will implicitly update this field
                                # to `RENDERED`, unless another value is specified in the same request. To
                                # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                                # case, any other fill fields set in the same request will be ignored.
                          },
                        },
                        "rowSpan": 42, # Row span of the cell.
                        "columnSpan": 42, # Column span of the cell.
                        "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                          "rowIndex": 42, # The 0-based row index.
                          "columnIndex": 42, # The 0-based column index.
                        },
                      },
                    ],
                    "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "rows": 42, # Number of rows in the table.
                "columns": 42, # Number of columns in the table.
              },
              "line": { # A PageElement kind representing a # A line page element.
                  # line, curved connector, or bent connector.
                "lineProperties": { # The properties of the Line. # The properties of the line.
                    #
                    # When unset, these fields default to values that match the appearance of
                    # new lines created in the Slides editor.
                  "dashStyle": "A String", # The dash style of the line.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "endArrow": "A String", # The style of the arrow at the end of the line.
                  "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                      # lines created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "startArrow": "A String", # The style of the arrow at the beginning of the line.
                },
                "lineType": "A String", # The type of the line.
              },
              "size": { # A width and height. # The size of the page element.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          ],
          "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
              # relevant for pages with page_type NOTES.
            "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
                # notes for the corresponding slide.
                # The actual shape may not always exist on the notes page. Inserting text
                # using this object ID will automatically create the shape. In this case, the
                # actual shape may have different object ID. The `GetPresentation` or
                # `GetPage` action will always return the latest object ID.
          },
          "objectId": "A String", # The object ID for this page. Object IDs used by
              # Page and
              # PageElement share the same namespace.
          "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
              # update requests to assert that the presentation revision hasn't changed
              # since the last read operation. Only populated if the user has edit access
              # to the presentation.
              #
              # The format of the revision ID may change over time, so it should be treated
              # opaquely. A returned revision ID is only guaranteed to be valid for 24
              # hours after it has been returned and cannot be shared across users. If the
              # revision ID is unchanged between calls, then the presentation has not
              # changed. Conversely, a changed ID (for the same presentation and user)
              # usually means the presentation has been updated; however, a changed ID can
              # also be due to internal factors such as ID format changes.
          "pageProperties": { # The properties of the Page. # The properties of the page.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "pageType": "A String", # The type of the page.
          "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
              # relevant for pages with page_type SLIDE.
            "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
                # appearance of a notes page when printing or exporting slides with speaker
                # notes. A notes page inherits properties from the
                # notes master.
                # The placeholder shape with type BODY on the notes page contains the speaker
                # notes for this slide. The ID of this shape is identified by the
                # speakerNotesObjectId field.
                # The notes page is read-only except for the text content and styles of the
                # speaker notes shape.
            "masterObjectId": "A String", # The object ID of the master that this slide is based on.
            "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
          },
        },
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(presentationId, x__xgafv=None)</code>
  <pre>Gets the latest version of the specified presentation.

Args:
  presentationId: string, The ID of the presentation to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Google Slides presentation.
      "presentationId": "A String", # The ID of the presentation.
      "notesMaster": { # A page in a presentation. # The notes master in the presentation. It serves three purposes:
          #
          # - Placeholder shapes on a notes master contain the default text styles and
          #   shape properties of all placeholder shapes on notes pages. Specifically,
          #   a `SLIDE_IMAGE` placeholder shape contains the slide thumbnail, and a
          #   `BODY` placeholder shape contains the speaker notes.
          # - The notes master page properties define the common page properties
          #   inherited by all notes pages.
          # - Any other shapes on the notes master will appear on all notes pages.
          #
          # The notes master is read-only.
        "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
            # relevant for pages with page_type LAYOUT.
          "displayName": "A String", # The human readable name of the layout in the presentation's locale.
          "name": "A String", # The name of the layout.
          "masterObjectId": "A String", # The object ID of the master that this layout is based on.
        },
        "pageElements": [ # The page elements rendered on the page.
          { # A visual element rendered on a page.
            "wordArt": { # A PageElement kind representing # A word art page element.
                # word art.
              "renderedText": "A String", # The text rendered as word art.
            },
            "description": "A String", # The description of the page element. Combined with title to display alt
                # text.
            "objectId": "A String", # The object ID for this page element. Object IDs used by
                # google.apps.slides.v1.Page and
                # google.apps.slides.v1.PageElement share the same namespace.
            "title": "A String", # The title of the page element. Combined with description to display alt
                # text.
            "image": { # A PageElement kind representing an # An image page element.
                # image.
              "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the presentation's sharing settings change.
              "imageProperties": { # The properties of the Image. # The properties of the image.
                "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
                "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                    # This property is read-only.
                  "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                      # stops.
                      #
                      # The colors in the gradient will replace the corresponding colors at
                      # the same position in the color palette and apply to the image. This
                      # property is read-only.
                    { # A color and position in a gradient band.
                      "color": { # A themeable solid color value. # The color of the gradient stop.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                          # fully opaque.
                      "position": 3.14, # The relative position of the color stop in the gradient band measured
                          # in percentage. The value should be in the interval [0.0, 1.0].
                    },
                  ],
                  "name": "A String", # The name of the recolor effect.
                      #
                      # The name is determined from the `recolor_stops` by matching the gradient
                      # against the colors in the page's current color scheme. This property is
                      # read-only.
                },
                "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                    # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                    # This property is read-only.
                "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                    # This property is read-only.
                    # Image.
                    #
                    # The crop properties is represented by the offsets of four edges which define
                    # a crop rectangle. The offsets are measured in percentage from the
                    # corresponding edges of the object's original bounding rectangle towards
                    # inside, relative to the object's original dimensions.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the object's original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the object's original bounding rectangle.
                    # - If the left edge of the crop rectangle is on the right side of its right
                    # edge, the object will be flipped horizontally.
                    # - If the top edge of the crop rectangle is below its bottom edge, the object
                    # will be flipped vertically.
                    # - If all offsets and rotation angle is 0, the object is not cropped.
                    #
                    # After cropping, the content in the crop rectangle will be stretched to fit
                    # its container.
                  "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                      # the right of the original bounding rectangle left edge, relative to the
                      # object's original width.
                  "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                      # Rotation angle is applied after the offset.
                  "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                      # to the left of the original bounding rectangle right edge, relative to the
                      # object's original width.
                  "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                      # above the original bounding rectangle bottom edge, relative to the object's
                      # original height.
                  "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                      # below the original bounding rectangle top edge, relative to the object's
                      # original height.
                },
                "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                    # is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              },
            },
            "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                # to transform source coordinates (x,y) into destination coordinates (x', y')
                # according to:
                #
                #       x'  x  =   shear_y  scale_y  translate_y
                #       1  [ 1 ]
                #
                # After transformation,
                #
                #      x' = scale_x * x + shear_x * y + translate_x;
                #      y' = scale_y * y + shear_y * x + translate_y;
                #
                # This message is therefore composed of these six matrix elements.
              "translateX": 3.14, # The X coordinate translation element.
              "translateY": 3.14, # The Y coordinate translation element.
              "scaleX": 3.14, # The X coordinate scaling element.
              "scaleY": 3.14, # The Y coordinate scaling element.
              "shearY": 3.14, # The Y coordinate shearing element.
              "shearX": 3.14, # The X coordinate shearing element.
              "unit": "A String", # The units for translate elements.
            },
            "shape": { # A PageElement kind representing a # A generic shape.
                # generic shape that does not have a more specific classification.
              "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                  # text box or rectangle) or a table cell in a page.
                "lists": { # The bulleted lists contained in this text, keyed by list ID.
                  "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                      # associated with a list. A paragraph that is part of a list has an implicit
                      # reference to that list's ID.
                    "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                        # level. A list has at most nine levels of nesting, so the possible values
                        # for the keys of this map are 0 through 8, inclusive.
                      "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                          # level of nesting.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                    "listId": "A String", # The ID of the list.
                  },
                },
                "textElements": [ # The text contents broken down into its component parts, including styling
                    # information. This property is read-only.
                  { # A TextElement describes the content of a range of indices in the text content
                      # of a Shape or TableCell.
                    "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                        # replaced with content that can change over time.
                      "content": "A String", # The rendered content of this auto text, if available.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                      "type": "A String", # The type of this auto text.
                    },
                    "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                        # units.
                    "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                    "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                        #
                        # The `start_index` and `end_index` of this TextElement represent the
                        # range of the paragraph. Other TextElements with an index range contained
                        # inside this paragraph's range are considered to be part of this
                        # paragraph. The range of indices of two separate paragraphs will never
                        # overlap.
                      "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                          #
                          # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                          # inherited from the parent. Which paragraph styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A paragraph not in a list will inherit its paragraph style from the
                          #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                          # * A paragraph in a list will inherit its paragraph style from the paragraph
                          #   at its corresponding nesting level of the list inside the parent
                          #   placeholder.
                          #
                          # Inherited paragraph styles are represented as unset fields in this message.
                        "spacingMode": "A String", # The spacing mode for the paragraph.
                        "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                            # LEFT_TO_RIGHT since
                            # text direction is not inherited.
                        "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                            # is represented as 100.0. If unset, the value is inherited from the parent.
                        "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the start of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                            # inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                            # the end of the text, based on the current text direction. If unset, the
                            # value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                            # If unset, the value is inherited from the parent.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "alignment": "A String", # The text alignment for this paragraph.
                      },
                      "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                          # belong to a list.
                        "nestingLevel": 42, # The nesting level of this paragraph in the list.
                        "listId": "A String", # The ID of the list this paragraph belongs to.
                        "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "glyph": "A String", # The rendered bullet glyph for this paragraph.
                      },
                    },
                    "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                        # in the run have the same TextStyle.
                        #
                        # The `start_index` and `end_index` of TextRuns will always be fully
                        # contained in the index range of a single `paragraph_marker` TextElement.
                        # In other words, a TextRun will never span multiple paragraphs.
                        # styling.
                      "content": "A String", # The text of this run.
                      "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                          #
                          # If this text is contained in a shape with a parent placeholder, then these text styles may be
                          # inherited from the parent. Which text styles are inherited depend on the
                          # nesting level of lists:
                          #
                          # * A text run in a paragraph that is not in a list will inherit its text style
                          #   from the the newline character in the paragraph at the 0 nesting level of
                          #   the list inside the parent placeholder.
                          # * A text run in a paragraph that is in a list will inherit its text style
                          #   from the newline character in the paragraph at its corresponding nesting
                          #   level of the list inside the parent placeholder.
                          #
                          # Inherited text styles are represented as unset fields in this message. If
                          # text is contained in a shape without a parent placeholder, unsetting these
                          # fields will revert the style to a value matching the defaults in the Slides
                          # editor.
                        "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "bold": True or False, # Whether or not the text is rendered as bold.
                        "baselineOffset": "A String", # The text's vertical offset from its normal position.
                            #
                            # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                            # rendered in a smaller font size, computed based on the `font_size` field.
                            # The `font_size` itself is not affected by changes in this field.
                        "strikethrough": True or False, # Whether or not the text is struck through.
                        "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                            #
                            # This field is an extension of `font_family` meant to support explicit font
                            # weights without breaking backwards compatibility. As such, when reading the
                            # style of a range of text, the value of `weighted_font_family#font_family`
                            # will always be equal to that of `font_family`. However, when writing, if
                            # both fields are included in the field mask (either explicitly or through
                            # the wildcard `"*"`), their values are reconciled as follows:
                            #
                            # * If `font_family` is set and `weighted_font_family` is not, the value of
                            #   `font_family` is applied with weight `400` ("normal").
                            # * If both fields are set, the value of `font_family` must match that of
                            #   `weighted_font_family#font_family`. If so, the font family and weight of
                            #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                            #   returned.
                            # * If `weighted_font_family` is set and `font_family` is not, the font
                            #   family and weight of `weighted_font_family` is applied.
                            # * If neither field is set, the font family and weight of the text inherit
                            #   from the parent. Note that these properties cannot inherit separately
                            #   from each other.
                            #
                            # If an update request specifies values for both `weighted_font_family` and
                            # `bold`, the `weighted_font_family` is applied first, then `bold`.
                            #
                            # If `weighted_font_family#weight` is not set, it defaults to `400`.
                            #
                            # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                            # must also be set with a non-empty value. Otherwise, a 400 bad request error
                            # is returned.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          "weight": 42, # The rendered weight of the text. This field can have any value that is a
                              # multiple of `100` between `100` and `900`, inclusive. This range
                              # corresponds to the numerical values described in the CSS 2.1
                              # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                              # with non-numerical values disallowed. Weights greater than or equal to
                              # `700` are considered bold, and weights less than `700`are not bold. The
                              # default value is `400` ("normal").
                        },
                        "smallCaps": True or False, # Whether or not the text is in small capital letters.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                            #
                            # Some fonts can affect the weight of the text. If an update request
                            # specifies values for both `font_family` and `bold`, the explicitly-set
                            # `bold` value is used.
                        "italic": True or False, # Whether or not the text is italicized.
                        "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                            # are not inherited from parent text.
                            #
                            # Changing the link in an update request causes some other changes to the
                            # text style of the range:
                            #
                            # * When setting a link, the text foreground color will be set to
                            #   ThemeColorType.HYPERLINK and the text will
                            #   be underlined. If these fields are modified in the same
                            #   request, those values will be used instead of the link defaults.
                            # * Setting a link on a text range that overlaps with an existing link will
                            #   also update the existing link to point to the new URL.
                            # * Links are not settable on newline characters. As a result, setting a link
                            #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                            #   will separate the newline character(s) into their own text runs. The
                            #   link will be applied separately to the runs before and after the newline.
                            # * Removing a link will update the text style of the range to match the
                            #   style of the preceding text (or the default text styles if the preceding
                            #   text is another link) unless different styles are being set in the same
                            #   request.
                          "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                          "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                              # in the presentation. There may not be a slide at this index.
                          "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                              # presentation with this ID. A page with this ID may not exist.
                          "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                              # addressed by its position.
                        },
                        "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                            # transparent, depending on if the `opaque_color` field in it is set.
                          "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                            # points.
                          "magnitude": 3.14, # The magnitude.
                          "unit": "A String", # The units for magnitude.
                        },
                        "underline": True or False, # Whether or not the text is underlined.
                      },
                    },
                  },
                ],
              },
              "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                  #
                  # If the shape is a placeholder shape as determined by the
                  # placeholder field, then these
                  # properties may be inherited from a parent placeholder shape.
                  # Determining the rendered value of the property depends on the corresponding
                  # property_state field value.
                "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                    # a parent placeholder if it exists. If the shape has no parent, then the
                    # default shadow matches the defaults for new shapes created in the Slides
                    # editor. This property is read-only.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "color": { # A themeable solid color value. # The shadow color value.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                      # relative to the alignment position.
                      # to transform source coordinates (x,y) into destination coordinates (x', y')
                      # according to:
                      #
                      #       x'  x  =   shear_y  scale_y  translate_y
                      #       1  [ 1 ]
                      #
                      # After transformation,
                      #
                      #      x' = scale_x * x + shear_x * y + translate_x;
                      #      y' = scale_y * y + shear_y * x + translate_y;
                      #
                      # This message is therefore composed of these six matrix elements.
                    "translateX": 3.14, # The X coordinate translation element.
                    "translateY": 3.14, # The Y coordinate translation element.
                    "scaleX": 3.14, # The X coordinate scaling element.
                    "scaleY": 3.14, # The Y coordinate scaling element.
                    "shearY": 3.14, # The Y coordinate shearing element.
                    "shearX": 3.14, # The X coordinate shearing element.
                    "unit": "A String", # The units for translate elements.
                  },
                  "propertyState": "A String", # The shadow property state.
                      #
                      # Updating the the shadow on a page element will implicitly update this field
                      # to `RENDERED`, unless another value is specified in the same request. To
                      # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                      # case, any other shadow fields set in the same request will be ignored.
                  "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                      # shadow becomes.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                  "type": "A String", # The type of the shadow.
                  "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                      # scale and skew of the shadow.
                  "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                },
                "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                    # inherited from a parent placeholder if it exists. If the shape has no
                    # parent, then the default background fill depends on the shape type,
                    # matching the defaults for new shapes created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                  "propertyState": "A String", # The background fill property state.
                      #
                      # Updating the the fill on a shape will implicitly update this field to
                      # `RENDERED`, unless another value is specified in the same request. To
                      # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                      # any other fill fields set in the same request will be ignored.
                },
                "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                    # are not inherited from parent placeholders.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                    # parent placeholder if it exists. If the shape has no parent, then the
                    # default outline depends on the shape type, matching the defaults for
                    # new shapes created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                  # layouts and masters.
                  #
                  # If set, the shape is a placeholder shape and any inherited properties
                  # can be resolved by looking at the parent placeholder identified by the
                  # Placeholder.parent_object_id field.
                "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                    # If unset, the parent placeholder shape does not exist, so the shape does
                    # not inherit properties from any other shape.
                "index": 42, # The index of the placeholder. If the same placeholder types are present in
                    # the same page, they would have different index values.
                "type": "A String", # The type of the placeholder.
              },
              "shapeType": "A String", # The type of the shape.
            },
            "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                # represented as images.
                # a linked chart embedded from Google Sheets.
              "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                  # minutes. This URL is tagged with the account of the requester. Anyone with
                  # the URL effectively accesses the image as the original requester. Access to
                  # the image may be lost if the presentation's sharing settings change.
              "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
              "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
            "video": { # A PageElement kind representing a # A video page element.
                # video.
              "url": "A String", # An URL to a video. The URL is valid as long as the source video
                  # exists and sharing settings do not change.
              "videoProperties": { # The properties of the Video. # The properties of the video.
                "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                    # videos created in the Slides editor.
                    #
                    # If these fields are unset, they may be inherited from a parent placeholder
                    # if it exists. If there is no parent, the fields will default to the value
                    # used for new page elements created in the Slides editor, which may depend on
                    # the page element kind.
                  "outlineFill": { # The fill of the outline. # The fill of the outline.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "propertyState": "A String", # The outline property state.
                      #
                      # Updating the the outline on a page element will implicitly update this
                      # field to`RENDERED`, unless another value is specified in the same request.
                      # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                      # this case, any other outline fields set in the same request will be
                      # ignored.
                  "dashStyle": "A String", # The dash style of the outline.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
              "id": "A String", # The video source's unique identifier for this video.
              "source": "A String", # The video source.
            },
            "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                # joined collection of PageElements.
              "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                # Object with schema name: PageElement
              ],
            },
            "table": { # A PageElement kind representing a # A table page element.
                # table.
              "tableColumns": [ # Properties of each column.
                { # Properties of each column in a table.
                  "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "tableRows": [ # Properties and contents of each row.
                  #
                  # Cells that span multiple rows are contained in only one of these rows and
                  # have a row_span greater
                  # than 1.
                { # Properties and contents of each row in a table.
                  "tableCells": [ # Properties and contents of each cell.
                      #
                      # Cells that span multiple columns are represented only once with a
                      # column_span greater
                      # than 1. As a result, the length of this collection does not always match
                      # the number of columns of the entire table.
                    { # Properties and contents of each table cell.
                      "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                          # text box or rectangle) or a table cell in a page.
                        "lists": { # The bulleted lists contained in this text, keyed by list ID.
                          "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                              # associated with a list. A paragraph that is part of a list has an implicit
                              # reference to that list's ID.
                            "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                # level. A list has at most nine levels of nesting, so the possible values
                                # for the keys of this map are 0 through 8, inclusive.
                              "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                  # level of nesting.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                            "listId": "A String", # The ID of the list.
                          },
                        },
                        "textElements": [ # The text contents broken down into its component parts, including styling
                            # information. This property is read-only.
                          { # A TextElement describes the content of a range of indices in the text content
                              # of a Shape or TableCell.
                            "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                # replaced with content that can change over time.
                              "content": "A String", # The rendered content of this auto text, if available.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                              "type": "A String", # The type of this auto text.
                            },
                            "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                # units.
                            "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                            "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                #
                                # The `start_index` and `end_index` of this TextElement represent the
                                # range of the paragraph. Other TextElements with an index range contained
                                # inside this paragraph's range are considered to be part of this
                                # paragraph. The range of indices of two separate paragraphs will never
                                # overlap.
                              "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                  # inherited from the parent. Which paragraph styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A paragraph not in a list will inherit its paragraph style from the
                                  #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                  # * A paragraph in a list will inherit its paragraph style from the paragraph
                                  #   at its corresponding nesting level of the list inside the parent
                                  #   placeholder.
                                  #
                                  # Inherited paragraph styles are represented as unset fields in this message.
                                "spacingMode": "A String", # The spacing mode for the paragraph.
                                "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                    # LEFT_TO_RIGHT since
                                    # text direction is not inherited.
                                "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                    # is represented as 100.0. If unset, the value is inherited from the parent.
                                "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the start of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                    # inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                    # the end of the text, based on the current text direction. If unset, the
                                    # value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                    # If unset, the value is inherited from the parent.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "alignment": "A String", # The text alignment for this paragraph.
                              },
                              "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                  # belong to a list.
                                "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                "listId": "A String", # The ID of the list this paragraph belongs to.
                                "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "glyph": "A String", # The rendered bullet glyph for this paragraph.
                              },
                            },
                            "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                # in the run have the same TextStyle.
                                #
                                # The `start_index` and `end_index` of TextRuns will always be fully
                                # contained in the index range of a single `paragraph_marker` TextElement.
                                # In other words, a TextRun will never span multiple paragraphs.
                                # styling.
                              "content": "A String", # The text of this run.
                              "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                  #
                                  # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                  # inherited from the parent. Which text styles are inherited depend on the
                                  # nesting level of lists:
                                  #
                                  # * A text run in a paragraph that is not in a list will inherit its text style
                                  #   from the the newline character in the paragraph at the 0 nesting level of
                                  #   the list inside the parent placeholder.
                                  # * A text run in a paragraph that is in a list will inherit its text style
                                  #   from the newline character in the paragraph at its corresponding nesting
                                  #   level of the list inside the parent placeholder.
                                  #
                                  # Inherited text styles are represented as unset fields in this message. If
                                  # text is contained in a shape without a parent placeholder, unsetting these
                                  # fields will revert the style to a value matching the defaults in the Slides
                                  # editor.
                                "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "bold": True or False, # Whether or not the text is rendered as bold.
                                "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                    #
                                    # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                    # rendered in a smaller font size, computed based on the `font_size` field.
                                    # The `font_size` itself is not affected by changes in this field.
                                "strikethrough": True or False, # Whether or not the text is struck through.
                                "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                    #
                                    # This field is an extension of `font_family` meant to support explicit font
                                    # weights without breaking backwards compatibility. As such, when reading the
                                    # style of a range of text, the value of `weighted_font_family#font_family`
                                    # will always be equal to that of `font_family`. However, when writing, if
                                    # both fields are included in the field mask (either explicitly or through
                                    # the wildcard `"*"`), their values are reconciled as follows:
                                    #
                                    # * If `font_family` is set and `weighted_font_family` is not, the value of
                                    #   `font_family` is applied with weight `400` ("normal").
                                    # * If both fields are set, the value of `font_family` must match that of
                                    #   `weighted_font_family#font_family`. If so, the font family and weight of
                                    #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                    #   returned.
                                    # * If `weighted_font_family` is set and `font_family` is not, the font
                                    #   family and weight of `weighted_font_family` is applied.
                                    # * If neither field is set, the font family and weight of the text inherit
                                    #   from the parent. Note that these properties cannot inherit separately
                                    #   from each other.
                                    #
                                    # If an update request specifies values for both `weighted_font_family` and
                                    # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                    #
                                    # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                    #
                                    # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                    # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                    # is returned.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                  "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                      # multiple of `100` between `100` and `900`, inclusive. This range
                                      # corresponds to the numerical values described in the CSS 2.1
                                      # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                      # with non-numerical values disallowed. Weights greater than or equal to
                                      # `700` are considered bold, and weights less than `700`are not bold. The
                                      # default value is `400` ("normal").
                                },
                                "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                    #
                                    # Some fonts can affect the weight of the text. If an update request
                                    # specifies values for both `font_family` and `bold`, the explicitly-set
                                    # `bold` value is used.
                                "italic": True or False, # Whether or not the text is italicized.
                                "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                    # are not inherited from parent text.
                                    #
                                    # Changing the link in an update request causes some other changes to the
                                    # text style of the range:
                                    #
                                    # * When setting a link, the text foreground color will be set to
                                    #   ThemeColorType.HYPERLINK and the text will
                                    #   be underlined. If these fields are modified in the same
                                    #   request, those values will be used instead of the link defaults.
                                    # * Setting a link on a text range that overlaps with an existing link will
                                    #   also update the existing link to point to the new URL.
                                    # * Links are not settable on newline characters. As a result, setting a link
                                    #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                    #   will separate the newline character(s) into their own text runs. The
                                    #   link will be applied separately to the runs before and after the newline.
                                    # * Removing a link will update the text style of the range to match the
                                    #   style of the preceding text (or the default text styles if the preceding
                                    #   text is another link) unless different styles are being set in the same
                                    #   request.
                                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                      # in the presentation. There may not be a slide at this index.
                                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                      # presentation with this ID. A page with this ID may not exist.
                                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                      # addressed by its position.
                                },
                                "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                    # transparent, depending on if the `opaque_color` field in it is set.
                                  "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                      # a transparent color.
                                    "themeColor": "A String", # An opaque theme color.
                                    "rgbColor": { # An RGB color. # An opaque RGB color.
                                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                    },
                                  },
                                },
                                "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                    # points.
                                  "magnitude": 3.14, # The magnitude.
                                  "unit": "A String", # The units for magnitude.
                                },
                                "underline": True or False, # Whether or not the text is underlined.
                              },
                            },
                          },
                        ],
                      },
                      "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                        "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                            # for newly created table cells in the Slides editor.
                          "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                              # specified color value.
                              #
                              # If any field is unset, its value may be inherited from a parent placeholder
                              # if it exists.
                            "color": { # A themeable solid color value. # The color value of the solid fill.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                            "alpha": 3.14, # 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 * (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.
                          },
                          "propertyState": "A String", # The background fill property state.
                              #
                              # Updating the the fill on a table cell will implicitly update this field
                              # to `RENDERED`, unless another value is specified in the same request. To
                              # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                              # case, any other fill fields set in the same request will be ignored.
                        },
                      },
                      "rowSpan": 42, # Row span of the cell.
                      "columnSpan": 42, # Column span of the cell.
                      "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                        "rowIndex": 42, # The 0-based row index.
                        "columnIndex": 42, # The 0-based column index.
                      },
                    },
                  ],
                  "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              ],
              "rows": 42, # Number of rows in the table.
              "columns": 42, # Number of columns in the table.
            },
            "line": { # A PageElement kind representing a # A line page element.
                # line, curved connector, or bent connector.
              "lineProperties": { # The properties of the Line. # The properties of the line.
                  #
                  # When unset, these fields default to values that match the appearance of
                  # new lines created in the Slides editor.
                "dashStyle": "A String", # The dash style of the line.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "endArrow": "A String", # The style of the arrow at the end of the line.
                "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                  "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                  "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                      # in the presentation. There may not be a slide at this index.
                  "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                      # presentation with this ID. A page with this ID may not exist.
                  "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                      # addressed by its position.
                },
                "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                    # lines created in the Slides editor.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # 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 * (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.
                  },
                },
                "startArrow": "A String", # The style of the arrow at the beginning of the line.
              },
              "lineType": "A String", # The type of the line.
            },
            "size": { # A width and height. # The size of the page element.
              "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
        ],
        "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
            # relevant for pages with page_type NOTES.
          "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
              # notes for the corresponding slide.
              # The actual shape may not always exist on the notes page. Inserting text
              # using this object ID will automatically create the shape. In this case, the
              # actual shape may have different object ID. The `GetPresentation` or
              # `GetPage` action will always return the latest object ID.
        },
        "objectId": "A String", # The object ID for this page. Object IDs used by
            # Page and
            # PageElement share the same namespace.
        "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
            # update requests to assert that the presentation revision hasn't changed
            # since the last read operation. Only populated if the user has edit access
            # to the presentation.
            #
            # The format of the revision ID may change over time, so it should be treated
            # opaquely. A returned revision ID is only guaranteed to be valid for 24
            # hours after it has been returned and cannot be shared across users. If the
            # revision ID is unchanged between calls, then the presentation has not
            # changed. Conversely, a changed ID (for the same presentation and user)
            # usually means the presentation has been updated; however, a changed ID can
            # also be due to internal factors such as ID format changes.
        "pageProperties": { # The properties of the Page. # The properties of the page.
            #
            # The page will inherit properties from the parent page. Depending on the page
            # type the hierarchy is defined in either
            # SlideProperties or
            # LayoutProperties.
          "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
              # from a parent page if it exists. If the page has no parent, then the
              # background fill defaults to the corresponding fill in the Slides editor.
            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                # specified color value.
                #
                # If any field is unset, its value may be inherited from a parent placeholder
                # if it exists.
              "color": { # A themeable solid color value. # The color value of the solid fill.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "alpha": 3.14, # 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 * (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.
            },
            "propertyState": "A String", # The background fill property state.
                #
                # Updating the the fill on a page will implicitly update this field to
                # `RENDERED`, unless another value is specified in the same request. To
                # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                # any other fill fields set in the same request will be ignored.
            "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                # the specified picture. The picture is stretched to fit its container.
              "contentUrl": "A String", # Reading the content_url:
                  #
                  # An URL to a picture with a default lifetime of 30 minutes.
                  # This URL is tagged with the account of the requester. Anyone with the URL
                  # effectively accesses the picture as the original requester. Access to the
                  # picture may be lost if the presentation's sharing settings change.
                  #
                  # Writing the content_url:
                  #
                  # The picture is fetched once at insertion time and a copy is stored for
                  # display inside the presentation. Pictures must be less than 50MB in size,
                  # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                  # format.
              "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          },
          "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
              # a parent page. If the page has no parent, the color scheme uses a default
              # Slides color scheme. This field is read-only.
            "colors": [ # The ThemeColorType and corresponding concrete color pairs.
              { # A pair mapping a theme color type to the concrete color it represents.
                "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
                "type": "A String", # The type of the theme color.
              },
            ],
          },
        },
        "pageType": "A String", # The type of the page.
        "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
            # relevant for pages with page_type SLIDE.
          "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
              # appearance of a notes page when printing or exporting slides with speaker
              # notes. A notes page inherits properties from the
              # notes master.
              # The placeholder shape with type BODY on the notes page contains the speaker
              # notes for this slide. The ID of this shape is identified by the
              # speakerNotesObjectId field.
              # The notes page is read-only except for the text content and styles of the
              # speaker notes shape.
          "masterObjectId": "A String", # The object ID of the master that this slide is based on.
          "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
        },
      },
      "pageSize": { # A width and height. # The size of pages in the presentation.
        "width": { # A magnitude in a single direction in the specified units. # The width of the object.
          "magnitude": 3.14, # The magnitude.
          "unit": "A String", # The units for magnitude.
        },
        "height": { # A magnitude in a single direction in the specified units. # The height of the object.
          "magnitude": 3.14, # The magnitude.
          "unit": "A String", # The units for magnitude.
        },
      },
      "title": "A String", # The title of the presentation.
      "locale": "A String", # The locale of the presentation, as an IETF BCP 47 language tag.
      "revisionId": "A String", # The revision ID of the presentation. Can be used in update requests
          # to assert that the presentation revision hasn't changed since the last
          # read operation. Only populated if the user has edit access to the
          # presentation.
          #
          # The format of the revision ID may change over time, so it should be treated
          # opaquely. A returned revision ID is only guaranteed to be valid for 24
          # hours after it has been returned and cannot be shared across users. If the
          # revision ID is unchanged between calls, then the presentation has not
          # changed. Conversely, a changed ID (for the same presentation and user)
          # usually means the presentation has been updated; however, a changed ID can
          # also be due to internal factors such as ID format changes.
      "masters": [ # The slide masters in the presentation. A slide master contains all common
          # page elements and the common properties for a set of layouts. They serve
          # three purposes:
          #
          # - Placeholder shapes on a master contain the default text styles and shape
          #   properties of all placeholder shapes on pages that use that master.
          # - The master page properties define the common page properties inherited by
          #   its layouts.
          # - Any other shapes on the master slide will appear on all slides using that
          #   master, regardless of their layout.
        { # A page in a presentation.
          "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
              # relevant for pages with page_type LAYOUT.
            "displayName": "A String", # The human readable name of the layout in the presentation's locale.
            "name": "A String", # The name of the layout.
            "masterObjectId": "A String", # The object ID of the master that this layout is based on.
          },
          "pageElements": [ # The page elements rendered on the page.
            { # A visual element rendered on a page.
              "wordArt": { # A PageElement kind representing # A word art page element.
                  # word art.
                "renderedText": "A String", # The text rendered as word art.
              },
              "description": "A String", # The description of the page element. Combined with title to display alt
                  # text.
              "objectId": "A String", # The object ID for this page element. Object IDs used by
                  # google.apps.slides.v1.Page and
                  # google.apps.slides.v1.PageElement share the same namespace.
              "title": "A String", # The title of the page element. Combined with description to display alt
                  # text.
              "image": { # A PageElement kind representing an # An image page element.
                  # image.
                "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the presentation's sharing settings change.
                "imageProperties": { # The properties of the Image. # The properties of the image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "shape": { # A PageElement kind representing a # A generic shape.
                  # generic shape that does not have a more specific classification.
                "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                    # text box or rectangle) or a table cell in a page.
                  "lists": { # The bulleted lists contained in this text, keyed by list ID.
                    "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                        # associated with a list. A paragraph that is part of a list has an implicit
                        # reference to that list's ID.
                      "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                          # level. A list has at most nine levels of nesting, so the possible values
                          # for the keys of this map are 0 through 8, inclusive.
                        "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                            # level of nesting.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                      "listId": "A String", # The ID of the list.
                    },
                  },
                  "textElements": [ # The text contents broken down into its component parts, including styling
                      # information. This property is read-only.
                    { # A TextElement describes the content of a range of indices in the text content
                        # of a Shape or TableCell.
                      "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                          # replaced with content that can change over time.
                        "content": "A String", # The rendered content of this auto text, if available.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "type": "A String", # The type of this auto text.
                      },
                      "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                          # units.
                      "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                      "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                          #
                          # The `start_index` and `end_index` of this TextElement represent the
                          # range of the paragraph. Other TextElements with an index range contained
                          # inside this paragraph's range are considered to be part of this
                          # paragraph. The range of indices of two separate paragraphs will never
                          # overlap.
                        "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                            #
                            # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                            # inherited from the parent. Which paragraph styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A paragraph not in a list will inherit its paragraph style from the
                            #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                            # * A paragraph in a list will inherit its paragraph style from the paragraph
                            #   at its corresponding nesting level of the list inside the parent
                            #   placeholder.
                            #
                            # Inherited paragraph styles are represented as unset fields in this message.
                          "spacingMode": "A String", # The spacing mode for the paragraph.
                          "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                              # LEFT_TO_RIGHT since
                              # text direction is not inherited.
                          "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                              # is represented as 100.0. If unset, the value is inherited from the parent.
                          "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the start of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the end of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                              # If unset, the value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "alignment": "A String", # The text alignment for this paragraph.
                        },
                        "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                            # belong to a list.
                          "nestingLevel": 42, # The nesting level of this paragraph in the list.
                          "listId": "A String", # The ID of the list this paragraph belongs to.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "glyph": "A String", # The rendered bullet glyph for this paragraph.
                        },
                      },
                      "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                          # in the run have the same TextStyle.
                          #
                          # The `start_index` and `end_index` of TextRuns will always be fully
                          # contained in the index range of a single `paragraph_marker` TextElement.
                          # In other words, a TextRun will never span multiple paragraphs.
                          # styling.
                        "content": "A String", # The text of this run.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                  ],
                },
                "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                    #
                    # If the shape is a placeholder shape as determined by the
                    # placeholder field, then these
                    # properties may be inherited from a parent placeholder shape.
                    # Determining the rendered value of the property depends on the corresponding
                    # property_state field value.
                  "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                      # a parent placeholder if it exists. If the shape has no parent, then the
                      # default shadow matches the defaults for new shapes created in the Slides
                      # editor. This property is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                      # inherited from a parent placeholder if it exists. If the shape has no
                      # parent, then the default background fill depends on the shape type,
                      # matching the defaults for new shapes created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                    "propertyState": "A String", # The background fill property state.
                        #
                        # Updating the the fill on a shape will implicitly update this field to
                        # `RENDERED`, unless another value is specified in the same request. To
                        # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                        # any other fill fields set in the same request will be ignored.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                      # are not inherited from parent placeholders.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                      # parent placeholder if it exists. If the shape has no parent, then the
                      # default outline depends on the shape type, matching the defaults for
                      # new shapes created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                    # layouts and masters.
                    #
                    # If set, the shape is a placeholder shape and any inherited properties
                    # can be resolved by looking at the parent placeholder identified by the
                    # Placeholder.parent_object_id field.
                  "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                      # If unset, the parent placeholder shape does not exist, so the shape does
                      # not inherit properties from any other shape.
                  "index": 42, # The index of the placeholder. If the same placeholder types are present in
                      # the same page, they would have different index values.
                  "type": "A String", # The type of the placeholder.
                },
                "shapeType": "A String", # The type of the shape.
              },
              "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                  # represented as images.
                  # a linked chart embedded from Google Sheets.
                "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                    # minutes. This URL is tagged with the account of the requester. Anyone with
                    # the URL effectively accesses the image as the original requester. Access to
                    # the image may be lost if the presentation's sharing settings change.
                "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
                "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                  "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                    "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "outlineFill": { # The fill of the outline. # The fill of the outline.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                      },
                      "propertyState": "A String", # The outline property state.
                          #
                          # Updating the the outline on a page element will implicitly update this
                          # field to`RENDERED`, unless another value is specified in the same request.
                          # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                          # this case, any other outline fields set in the same request will be
                          # ignored.
                      "dashStyle": "A String", # The dash style of the outline.
                      "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                    },
                    "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                    "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                        # This property is read-only.
                      "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                          # stops.
                          #
                          # The colors in the gradient will replace the corresponding colors at
                          # the same position in the color palette and apply to the image. This
                          # property is read-only.
                        { # A color and position in a gradient band.
                          "color": { # A themeable solid color value. # The color of the gradient stop.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                              # fully opaque.
                          "position": 3.14, # The relative position of the color stop in the gradient band measured
                              # in percentage. The value should be in the interval [0.0, 1.0].
                        },
                      ],
                      "name": "A String", # The name of the recolor effect.
                          #
                          # The name is determined from the `recolor_stops` by matching the gradient
                          # against the colors in the page's current color scheme. This property is
                          # read-only.
                    },
                    "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                        # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                        # This property is read-only.
                    "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                        # This property is read-only.
                        # Image.
                        #
                        # The crop properties is represented by the offsets of four edges which define
                        # a crop rectangle. The offsets are measured in percentage from the
                        # corresponding edges of the object's original bounding rectangle towards
                        # inside, relative to the object's original dimensions.
                        #
                        # - If the offset is in the interval (0, 1), the corresponding edge of crop
                        # rectangle is positioned inside of the object's original bounding rectangle.
                        # - If the offset is negative or greater than 1, the corresponding edge of crop
                        # rectangle is positioned outside of the object's original bounding rectangle.
                        # - If the left edge of the crop rectangle is on the right side of its right
                        # edge, the object will be flipped horizontally.
                        # - If the top edge of the crop rectangle is below its bottom edge, the object
                        # will be flipped vertically.
                        # - If all offsets and rotation angle is 0, the object is not cropped.
                        #
                        # After cropping, the content in the crop rectangle will be stretched to fit
                        # its container.
                      "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                          # the right of the original bounding rectangle left edge, relative to the
                          # object's original width.
                      "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                          # Rotation angle is applied after the offset.
                      "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                          # to the left of the original bounding rectangle right edge, relative to the
                          # object's original width.
                      "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                          # above the original bounding rectangle bottom edge, relative to the object's
                          # original height.
                      "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                          # below the original bounding rectangle top edge, relative to the object's
                          # original height.
                    },
                    "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                        # is read-only.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "color": { # A themeable solid color value. # The shadow color value.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                          # relative to the alignment position.
                          # to transform source coordinates (x,y) into destination coordinates (x', y')
                          # according to:
                          #
                          #       x'  x  =   shear_y  scale_y  translate_y
                          #       1  [ 1 ]
                          #
                          # After transformation,
                          #
                          #      x' = scale_x * x + shear_x * y + translate_x;
                          #      y' = scale_y * y + shear_y * x + translate_y;
                          #
                          # This message is therefore composed of these six matrix elements.
                        "translateX": 3.14, # The X coordinate translation element.
                        "translateY": 3.14, # The Y coordinate translation element.
                        "scaleX": 3.14, # The X coordinate scaling element.
                        "scaleY": 3.14, # The Y coordinate scaling element.
                        "shearY": 3.14, # The Y coordinate shearing element.
                        "shearX": 3.14, # The X coordinate shearing element.
                        "unit": "A String", # The units for translate elements.
                      },
                      "propertyState": "A String", # The shadow property state.
                          #
                          # Updating the the shadow on a page element will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                          # case, any other shadow fields set in the same request will be ignored.
                      "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                          # shadow becomes.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                      "type": "A String", # The type of the shadow.
                      "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                          # scale and skew of the shadow.
                      "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                    },
                    "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  },
                },
                "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
              "video": { # A PageElement kind representing a # A video page element.
                  # video.
                "url": "A String", # An URL to a video. The URL is valid as long as the source video
                    # exists and sharing settings do not change.
                "videoProperties": { # The properties of the Video. # The properties of the video.
                  "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                      # videos created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "id": "A String", # The video source's unique identifier for this video.
                "source": "A String", # The video source.
              },
              "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                  # joined collection of PageElements.
                "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                  # Object with schema name: PageElement
                ],
              },
              "table": { # A PageElement kind representing a # A table page element.
                  # table.
                "tableColumns": [ # Properties of each column.
                  { # Properties of each column in a table.
                    "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "tableRows": [ # Properties and contents of each row.
                    #
                    # Cells that span multiple rows are contained in only one of these rows and
                    # have a row_span greater
                    # than 1.
                  { # Properties and contents of each row in a table.
                    "tableCells": [ # Properties and contents of each cell.
                        #
                        # Cells that span multiple columns are represented only once with a
                        # column_span greater
                        # than 1. As a result, the length of this collection does not always match
                        # the number of columns of the entire table.
                      { # Properties and contents of each table cell.
                        "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                            # text box or rectangle) or a table cell in a page.
                          "lists": { # The bulleted lists contained in this text, keyed by list ID.
                            "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                                # associated with a list. A paragraph that is part of a list has an implicit
                                # reference to that list's ID.
                              "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                  # level. A list has at most nine levels of nesting, so the possible values
                                  # for the keys of this map are 0 through 8, inclusive.
                                "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                    # level of nesting.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                },
                              },
                              "listId": "A String", # The ID of the list.
                            },
                          },
                          "textElements": [ # The text contents broken down into its component parts, including styling
                              # information. This property is read-only.
                            { # A TextElement describes the content of a range of indices in the text content
                                # of a Shape or TableCell.
                              "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                  # replaced with content that can change over time.
                                "content": "A String", # The rendered content of this auto text, if available.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "type": "A String", # The type of this auto text.
                              },
                              "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                  # units.
                              "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                              "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                  #
                                  # The `start_index` and `end_index` of this TextElement represent the
                                  # range of the paragraph. Other TextElements with an index range contained
                                  # inside this paragraph's range are considered to be part of this
                                  # paragraph. The range of indices of two separate paragraphs will never
                                  # overlap.
                                "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                    # inherited from the parent. Which paragraph styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A paragraph not in a list will inherit its paragraph style from the
                                    #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                    # * A paragraph in a list will inherit its paragraph style from the paragraph
                                    #   at its corresponding nesting level of the list inside the parent
                                    #   placeholder.
                                    #
                                    # Inherited paragraph styles are represented as unset fields in this message.
                                  "spacingMode": "A String", # The spacing mode for the paragraph.
                                  "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                      # LEFT_TO_RIGHT since
                                      # text direction is not inherited.
                                  "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                      # is represented as 100.0. If unset, the value is inherited from the parent.
                                  "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the start of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the end of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                      # If unset, the value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "alignment": "A String", # The text alignment for this paragraph.
                                },
                                "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                    # belong to a list.
                                  "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                  "listId": "A String", # The ID of the list this paragraph belongs to.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                  "glyph": "A String", # The rendered bullet glyph for this paragraph.
                                },
                              },
                              "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                  # in the run have the same TextStyle.
                                  #
                                  # The `start_index` and `end_index` of TextRuns will always be fully
                                  # contained in the index range of a single `paragraph_marker` TextElement.
                                  # In other words, a TextRun will never span multiple paragraphs.
                                  # styling.
                                "content": "A String", # The text of this run.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                          ],
                        },
                        "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                          "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                              # for newly created table cells in the Slides editor.
                            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                                # specified color value.
                                #
                                # If any field is unset, its value may be inherited from a parent placeholder
                                # if it exists.
                              "color": { # A themeable solid color value. # The color value of the solid fill.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                              "alpha": 3.14, # 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 * (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.
                            },
                            "propertyState": "A String", # The background fill property state.
                                #
                                # Updating the the fill on a table cell will implicitly update this field
                                # to `RENDERED`, unless another value is specified in the same request. To
                                # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                                # case, any other fill fields set in the same request will be ignored.
                          },
                        },
                        "rowSpan": 42, # Row span of the cell.
                        "columnSpan": 42, # Column span of the cell.
                        "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                          "rowIndex": 42, # The 0-based row index.
                          "columnIndex": 42, # The 0-based column index.
                        },
                      },
                    ],
                    "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "rows": 42, # Number of rows in the table.
                "columns": 42, # Number of columns in the table.
              },
              "line": { # A PageElement kind representing a # A line page element.
                  # line, curved connector, or bent connector.
                "lineProperties": { # The properties of the Line. # The properties of the line.
                    #
                    # When unset, these fields default to values that match the appearance of
                    # new lines created in the Slides editor.
                  "dashStyle": "A String", # The dash style of the line.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "endArrow": "A String", # The style of the arrow at the end of the line.
                  "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                      # lines created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "startArrow": "A String", # The style of the arrow at the beginning of the line.
                },
                "lineType": "A String", # The type of the line.
              },
              "size": { # A width and height. # The size of the page element.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          ],
          "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
              # relevant for pages with page_type NOTES.
            "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
                # notes for the corresponding slide.
                # The actual shape may not always exist on the notes page. Inserting text
                # using this object ID will automatically create the shape. In this case, the
                # actual shape may have different object ID. The `GetPresentation` or
                # `GetPage` action will always return the latest object ID.
          },
          "objectId": "A String", # The object ID for this page. Object IDs used by
              # Page and
              # PageElement share the same namespace.
          "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
              # update requests to assert that the presentation revision hasn't changed
              # since the last read operation. Only populated if the user has edit access
              # to the presentation.
              #
              # The format of the revision ID may change over time, so it should be treated
              # opaquely. A returned revision ID is only guaranteed to be valid for 24
              # hours after it has been returned and cannot be shared across users. If the
              # revision ID is unchanged between calls, then the presentation has not
              # changed. Conversely, a changed ID (for the same presentation and user)
              # usually means the presentation has been updated; however, a changed ID can
              # also be due to internal factors such as ID format changes.
          "pageProperties": { # The properties of the Page. # The properties of the page.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "pageType": "A String", # The type of the page.
          "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
              # relevant for pages with page_type SLIDE.
            "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
                # appearance of a notes page when printing or exporting slides with speaker
                # notes. A notes page inherits properties from the
                # notes master.
                # The placeholder shape with type BODY on the notes page contains the speaker
                # notes for this slide. The ID of this shape is identified by the
                # speakerNotesObjectId field.
                # The notes page is read-only except for the text content and styles of the
                # speaker notes shape.
            "masterObjectId": "A String", # The object ID of the master that this slide is based on.
            "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
          },
        },
      ],
      "slides": [ # The slides in the presentation.
          # A slide inherits properties from a slide layout.
        { # A page in a presentation.
          "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
              # relevant for pages with page_type LAYOUT.
            "displayName": "A String", # The human readable name of the layout in the presentation's locale.
            "name": "A String", # The name of the layout.
            "masterObjectId": "A String", # The object ID of the master that this layout is based on.
          },
          "pageElements": [ # The page elements rendered on the page.
            { # A visual element rendered on a page.
              "wordArt": { # A PageElement kind representing # A word art page element.
                  # word art.
                "renderedText": "A String", # The text rendered as word art.
              },
              "description": "A String", # The description of the page element. Combined with title to display alt
                  # text.
              "objectId": "A String", # The object ID for this page element. Object IDs used by
                  # google.apps.slides.v1.Page and
                  # google.apps.slides.v1.PageElement share the same namespace.
              "title": "A String", # The title of the page element. Combined with description to display alt
                  # text.
              "image": { # A PageElement kind representing an # An image page element.
                  # image.
                "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the presentation's sharing settings change.
                "imageProperties": { # The properties of the Image. # The properties of the image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "shape": { # A PageElement kind representing a # A generic shape.
                  # generic shape that does not have a more specific classification.
                "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                    # text box or rectangle) or a table cell in a page.
                  "lists": { # The bulleted lists contained in this text, keyed by list ID.
                    "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                        # associated with a list. A paragraph that is part of a list has an implicit
                        # reference to that list's ID.
                      "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                          # level. A list has at most nine levels of nesting, so the possible values
                          # for the keys of this map are 0 through 8, inclusive.
                        "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                            # level of nesting.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                      "listId": "A String", # The ID of the list.
                    },
                  },
                  "textElements": [ # The text contents broken down into its component parts, including styling
                      # information. This property is read-only.
                    { # A TextElement describes the content of a range of indices in the text content
                        # of a Shape or TableCell.
                      "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                          # replaced with content that can change over time.
                        "content": "A String", # The rendered content of this auto text, if available.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "type": "A String", # The type of this auto text.
                      },
                      "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                          # units.
                      "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                      "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                          #
                          # The `start_index` and `end_index` of this TextElement represent the
                          # range of the paragraph. Other TextElements with an index range contained
                          # inside this paragraph's range are considered to be part of this
                          # paragraph. The range of indices of two separate paragraphs will never
                          # overlap.
                        "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                            #
                            # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                            # inherited from the parent. Which paragraph styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A paragraph not in a list will inherit its paragraph style from the
                            #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                            # * A paragraph in a list will inherit its paragraph style from the paragraph
                            #   at its corresponding nesting level of the list inside the parent
                            #   placeholder.
                            #
                            # Inherited paragraph styles are represented as unset fields in this message.
                          "spacingMode": "A String", # The spacing mode for the paragraph.
                          "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                              # LEFT_TO_RIGHT since
                              # text direction is not inherited.
                          "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                              # is represented as 100.0. If unset, the value is inherited from the parent.
                          "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the start of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the end of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                              # If unset, the value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "alignment": "A String", # The text alignment for this paragraph.
                        },
                        "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                            # belong to a list.
                          "nestingLevel": 42, # The nesting level of this paragraph in the list.
                          "listId": "A String", # The ID of the list this paragraph belongs to.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "glyph": "A String", # The rendered bullet glyph for this paragraph.
                        },
                      },
                      "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                          # in the run have the same TextStyle.
                          #
                          # The `start_index` and `end_index` of TextRuns will always be fully
                          # contained in the index range of a single `paragraph_marker` TextElement.
                          # In other words, a TextRun will never span multiple paragraphs.
                          # styling.
                        "content": "A String", # The text of this run.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                  ],
                },
                "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                    #
                    # If the shape is a placeholder shape as determined by the
                    # placeholder field, then these
                    # properties may be inherited from a parent placeholder shape.
                    # Determining the rendered value of the property depends on the corresponding
                    # property_state field value.
                  "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                      # a parent placeholder if it exists. If the shape has no parent, then the
                      # default shadow matches the defaults for new shapes created in the Slides
                      # editor. This property is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                      # inherited from a parent placeholder if it exists. If the shape has no
                      # parent, then the default background fill depends on the shape type,
                      # matching the defaults for new shapes created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                    "propertyState": "A String", # The background fill property state.
                        #
                        # Updating the the fill on a shape will implicitly update this field to
                        # `RENDERED`, unless another value is specified in the same request. To
                        # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                        # any other fill fields set in the same request will be ignored.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                      # are not inherited from parent placeholders.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                      # parent placeholder if it exists. If the shape has no parent, then the
                      # default outline depends on the shape type, matching the defaults for
                      # new shapes created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                    # layouts and masters.
                    #
                    # If set, the shape is a placeholder shape and any inherited properties
                    # can be resolved by looking at the parent placeholder identified by the
                    # Placeholder.parent_object_id field.
                  "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                      # If unset, the parent placeholder shape does not exist, so the shape does
                      # not inherit properties from any other shape.
                  "index": 42, # The index of the placeholder. If the same placeholder types are present in
                      # the same page, they would have different index values.
                  "type": "A String", # The type of the placeholder.
                },
                "shapeType": "A String", # The type of the shape.
              },
              "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                  # represented as images.
                  # a linked chart embedded from Google Sheets.
                "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                    # minutes. This URL is tagged with the account of the requester. Anyone with
                    # the URL effectively accesses the image as the original requester. Access to
                    # the image may be lost if the presentation's sharing settings change.
                "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
                "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                  "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                    "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "outlineFill": { # The fill of the outline. # The fill of the outline.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                      },
                      "propertyState": "A String", # The outline property state.
                          #
                          # Updating the the outline on a page element will implicitly update this
                          # field to`RENDERED`, unless another value is specified in the same request.
                          # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                          # this case, any other outline fields set in the same request will be
                          # ignored.
                      "dashStyle": "A String", # The dash style of the outline.
                      "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                    },
                    "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                    "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                        # This property is read-only.
                      "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                          # stops.
                          #
                          # The colors in the gradient will replace the corresponding colors at
                          # the same position in the color palette and apply to the image. This
                          # property is read-only.
                        { # A color and position in a gradient band.
                          "color": { # A themeable solid color value. # The color of the gradient stop.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                              # fully opaque.
                          "position": 3.14, # The relative position of the color stop in the gradient band measured
                              # in percentage. The value should be in the interval [0.0, 1.0].
                        },
                      ],
                      "name": "A String", # The name of the recolor effect.
                          #
                          # The name is determined from the `recolor_stops` by matching the gradient
                          # against the colors in the page's current color scheme. This property is
                          # read-only.
                    },
                    "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                        # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                        # This property is read-only.
                    "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                        # This property is read-only.
                        # Image.
                        #
                        # The crop properties is represented by the offsets of four edges which define
                        # a crop rectangle. The offsets are measured in percentage from the
                        # corresponding edges of the object's original bounding rectangle towards
                        # inside, relative to the object's original dimensions.
                        #
                        # - If the offset is in the interval (0, 1), the corresponding edge of crop
                        # rectangle is positioned inside of the object's original bounding rectangle.
                        # - If the offset is negative or greater than 1, the corresponding edge of crop
                        # rectangle is positioned outside of the object's original bounding rectangle.
                        # - If the left edge of the crop rectangle is on the right side of its right
                        # edge, the object will be flipped horizontally.
                        # - If the top edge of the crop rectangle is below its bottom edge, the object
                        # will be flipped vertically.
                        # - If all offsets and rotation angle is 0, the object is not cropped.
                        #
                        # After cropping, the content in the crop rectangle will be stretched to fit
                        # its container.
                      "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                          # the right of the original bounding rectangle left edge, relative to the
                          # object's original width.
                      "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                          # Rotation angle is applied after the offset.
                      "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                          # to the left of the original bounding rectangle right edge, relative to the
                          # object's original width.
                      "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                          # above the original bounding rectangle bottom edge, relative to the object's
                          # original height.
                      "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                          # below the original bounding rectangle top edge, relative to the object's
                          # original height.
                    },
                    "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                        # is read-only.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "color": { # A themeable solid color value. # The shadow color value.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                          # relative to the alignment position.
                          # to transform source coordinates (x,y) into destination coordinates (x', y')
                          # according to:
                          #
                          #       x'  x  =   shear_y  scale_y  translate_y
                          #       1  [ 1 ]
                          #
                          # After transformation,
                          #
                          #      x' = scale_x * x + shear_x * y + translate_x;
                          #      y' = scale_y * y + shear_y * x + translate_y;
                          #
                          # This message is therefore composed of these six matrix elements.
                        "translateX": 3.14, # The X coordinate translation element.
                        "translateY": 3.14, # The Y coordinate translation element.
                        "scaleX": 3.14, # The X coordinate scaling element.
                        "scaleY": 3.14, # The Y coordinate scaling element.
                        "shearY": 3.14, # The Y coordinate shearing element.
                        "shearX": 3.14, # The X coordinate shearing element.
                        "unit": "A String", # The units for translate elements.
                      },
                      "propertyState": "A String", # The shadow property state.
                          #
                          # Updating the the shadow on a page element will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                          # case, any other shadow fields set in the same request will be ignored.
                      "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                          # shadow becomes.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                      "type": "A String", # The type of the shadow.
                      "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                          # scale and skew of the shadow.
                      "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                    },
                    "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  },
                },
                "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
              "video": { # A PageElement kind representing a # A video page element.
                  # video.
                "url": "A String", # An URL to a video. The URL is valid as long as the source video
                    # exists and sharing settings do not change.
                "videoProperties": { # The properties of the Video. # The properties of the video.
                  "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                      # videos created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "id": "A String", # The video source's unique identifier for this video.
                "source": "A String", # The video source.
              },
              "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                  # joined collection of PageElements.
                "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                  # Object with schema name: PageElement
                ],
              },
              "table": { # A PageElement kind representing a # A table page element.
                  # table.
                "tableColumns": [ # Properties of each column.
                  { # Properties of each column in a table.
                    "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "tableRows": [ # Properties and contents of each row.
                    #
                    # Cells that span multiple rows are contained in only one of these rows and
                    # have a row_span greater
                    # than 1.
                  { # Properties and contents of each row in a table.
                    "tableCells": [ # Properties and contents of each cell.
                        #
                        # Cells that span multiple columns are represented only once with a
                        # column_span greater
                        # than 1. As a result, the length of this collection does not always match
                        # the number of columns of the entire table.
                      { # Properties and contents of each table cell.
                        "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                            # text box or rectangle) or a table cell in a page.
                          "lists": { # The bulleted lists contained in this text, keyed by list ID.
                            "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                                # associated with a list. A paragraph that is part of a list has an implicit
                                # reference to that list's ID.
                              "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                  # level. A list has at most nine levels of nesting, so the possible values
                                  # for the keys of this map are 0 through 8, inclusive.
                                "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                    # level of nesting.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                },
                              },
                              "listId": "A String", # The ID of the list.
                            },
                          },
                          "textElements": [ # The text contents broken down into its component parts, including styling
                              # information. This property is read-only.
                            { # A TextElement describes the content of a range of indices in the text content
                                # of a Shape or TableCell.
                              "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                  # replaced with content that can change over time.
                                "content": "A String", # The rendered content of this auto text, if available.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "type": "A String", # The type of this auto text.
                              },
                              "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                  # units.
                              "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                              "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                  #
                                  # The `start_index` and `end_index` of this TextElement represent the
                                  # range of the paragraph. Other TextElements with an index range contained
                                  # inside this paragraph's range are considered to be part of this
                                  # paragraph. The range of indices of two separate paragraphs will never
                                  # overlap.
                                "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                    # inherited from the parent. Which paragraph styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A paragraph not in a list will inherit its paragraph style from the
                                    #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                    # * A paragraph in a list will inherit its paragraph style from the paragraph
                                    #   at its corresponding nesting level of the list inside the parent
                                    #   placeholder.
                                    #
                                    # Inherited paragraph styles are represented as unset fields in this message.
                                  "spacingMode": "A String", # The spacing mode for the paragraph.
                                  "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                      # LEFT_TO_RIGHT since
                                      # text direction is not inherited.
                                  "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                      # is represented as 100.0. If unset, the value is inherited from the parent.
                                  "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the start of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the end of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                      # If unset, the value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "alignment": "A String", # The text alignment for this paragraph.
                                },
                                "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                    # belong to a list.
                                  "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                  "listId": "A String", # The ID of the list this paragraph belongs to.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                  "glyph": "A String", # The rendered bullet glyph for this paragraph.
                                },
                              },
                              "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                  # in the run have the same TextStyle.
                                  #
                                  # The `start_index` and `end_index` of TextRuns will always be fully
                                  # contained in the index range of a single `paragraph_marker` TextElement.
                                  # In other words, a TextRun will never span multiple paragraphs.
                                  # styling.
                                "content": "A String", # The text of this run.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                          ],
                        },
                        "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                          "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                              # for newly created table cells in the Slides editor.
                            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                                # specified color value.
                                #
                                # If any field is unset, its value may be inherited from a parent placeholder
                                # if it exists.
                              "color": { # A themeable solid color value. # The color value of the solid fill.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                              "alpha": 3.14, # 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 * (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.
                            },
                            "propertyState": "A String", # The background fill property state.
                                #
                                # Updating the the fill on a table cell will implicitly update this field
                                # to `RENDERED`, unless another value is specified in the same request. To
                                # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                                # case, any other fill fields set in the same request will be ignored.
                          },
                        },
                        "rowSpan": 42, # Row span of the cell.
                        "columnSpan": 42, # Column span of the cell.
                        "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                          "rowIndex": 42, # The 0-based row index.
                          "columnIndex": 42, # The 0-based column index.
                        },
                      },
                    ],
                    "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "rows": 42, # Number of rows in the table.
                "columns": 42, # Number of columns in the table.
              },
              "line": { # A PageElement kind representing a # A line page element.
                  # line, curved connector, or bent connector.
                "lineProperties": { # The properties of the Line. # The properties of the line.
                    #
                    # When unset, these fields default to values that match the appearance of
                    # new lines created in the Slides editor.
                  "dashStyle": "A String", # The dash style of the line.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "endArrow": "A String", # The style of the arrow at the end of the line.
                  "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                      # lines created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "startArrow": "A String", # The style of the arrow at the beginning of the line.
                },
                "lineType": "A String", # The type of the line.
              },
              "size": { # A width and height. # The size of the page element.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          ],
          "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
              # relevant for pages with page_type NOTES.
            "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
                # notes for the corresponding slide.
                # The actual shape may not always exist on the notes page. Inserting text
                # using this object ID will automatically create the shape. In this case, the
                # actual shape may have different object ID. The `GetPresentation` or
                # `GetPage` action will always return the latest object ID.
          },
          "objectId": "A String", # The object ID for this page. Object IDs used by
              # Page and
              # PageElement share the same namespace.
          "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
              # update requests to assert that the presentation revision hasn't changed
              # since the last read operation. Only populated if the user has edit access
              # to the presentation.
              #
              # The format of the revision ID may change over time, so it should be treated
              # opaquely. A returned revision ID is only guaranteed to be valid for 24
              # hours after it has been returned and cannot be shared across users. If the
              # revision ID is unchanged between calls, then the presentation has not
              # changed. Conversely, a changed ID (for the same presentation and user)
              # usually means the presentation has been updated; however, a changed ID can
              # also be due to internal factors such as ID format changes.
          "pageProperties": { # The properties of the Page. # The properties of the page.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "pageType": "A String", # The type of the page.
          "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
              # relevant for pages with page_type SLIDE.
            "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
                # appearance of a notes page when printing or exporting slides with speaker
                # notes. A notes page inherits properties from the
                # notes master.
                # The placeholder shape with type BODY on the notes page contains the speaker
                # notes for this slide. The ID of this shape is identified by the
                # speakerNotesObjectId field.
                # The notes page is read-only except for the text content and styles of the
                # speaker notes shape.
            "masterObjectId": "A String", # The object ID of the master that this slide is based on.
            "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
          },
        },
      ],
      "layouts": [ # The layouts in the presentation. A layout is a template that determines
          # how content is arranged and styled on the slides that inherit from that
          # layout.
        { # A page in a presentation.
          "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
              # relevant for pages with page_type LAYOUT.
            "displayName": "A String", # The human readable name of the layout in the presentation's locale.
            "name": "A String", # The name of the layout.
            "masterObjectId": "A String", # The object ID of the master that this layout is based on.
          },
          "pageElements": [ # The page elements rendered on the page.
            { # A visual element rendered on a page.
              "wordArt": { # A PageElement kind representing # A word art page element.
                  # word art.
                "renderedText": "A String", # The text rendered as word art.
              },
              "description": "A String", # The description of the page element. Combined with title to display alt
                  # text.
              "objectId": "A String", # The object ID for this page element. Object IDs used by
                  # google.apps.slides.v1.Page and
                  # google.apps.slides.v1.PageElement share the same namespace.
              "title": "A String", # The title of the page element. Combined with description to display alt
                  # text.
              "image": { # A PageElement kind representing an # An image page element.
                  # image.
                "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the presentation's sharing settings change.
                "imageProperties": { # The properties of the Image. # The properties of the image.
                  "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                  "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                      # This property is read-only.
                    "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                        # stops.
                        #
                        # The colors in the gradient will replace the corresponding colors at
                        # the same position in the color palette and apply to the image. This
                        # property is read-only.
                      { # A color and position in a gradient band.
                        "color": { # A themeable solid color value. # The color of the gradient stop.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                            # fully opaque.
                        "position": 3.14, # The relative position of the color stop in the gradient band measured
                            # in percentage. The value should be in the interval [0.0, 1.0].
                      },
                    ],
                    "name": "A String", # The name of the recolor effect.
                        #
                        # The name is determined from the `recolor_stops` by matching the gradient
                        # against the colors in the page's current color scheme. This property is
                        # read-only.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                      # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                      # This property is read-only.
                  "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                      # This property is read-only.
                      # Image.
                      #
                      # The crop properties is represented by the offsets of four edges which define
                      # a crop rectangle. The offsets are measured in percentage from the
                      # corresponding edges of the object's original bounding rectangle towards
                      # inside, relative to the object's original dimensions.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the object's original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the object's original bounding rectangle.
                      # - If the left edge of the crop rectangle is on the right side of its right
                      # edge, the object will be flipped horizontally.
                      # - If the top edge of the crop rectangle is below its bottom edge, the object
                      # will be flipped vertically.
                      # - If all offsets and rotation angle is 0, the object is not cropped.
                      #
                      # After cropping, the content in the crop rectangle will be stretched to fit
                      # its container.
                    "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                        # the right of the original bounding rectangle left edge, relative to the
                        # object's original width.
                    "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                        # Rotation angle is applied after the offset.
                    "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                        # to the left of the original bounding rectangle right edge, relative to the
                        # object's original width.
                    "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                        # above the original bounding rectangle bottom edge, relative to the object's
                        # original height.
                    "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                        # below the original bounding rectangle top edge, relative to the object's
                        # original height.
                  },
                  "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                      # is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "shape": { # A PageElement kind representing a # A generic shape.
                  # generic shape that does not have a more specific classification.
                "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
                    # text box or rectangle) or a table cell in a page.
                  "lists": { # The bulleted lists contained in this text, keyed by list ID.
                    "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                        # associated with a list. A paragraph that is part of a list has an implicit
                        # reference to that list's ID.
                      "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                          # level. A list has at most nine levels of nesting, so the possible values
                          # for the keys of this map are 0 through 8, inclusive.
                        "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                            # level of nesting.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                      "listId": "A String", # The ID of the list.
                    },
                  },
                  "textElements": [ # The text contents broken down into its component parts, including styling
                      # information. This property is read-only.
                    { # A TextElement describes the content of a range of indices in the text content
                        # of a Shape or TableCell.
                      "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                          # replaced with content that can change over time.
                        "content": "A String", # The rendered content of this auto text, if available.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                        "type": "A String", # The type of this auto text.
                      },
                      "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                          # units.
                      "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                      "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                          #
                          # The `start_index` and `end_index` of this TextElement represent the
                          # range of the paragraph. Other TextElements with an index range contained
                          # inside this paragraph's range are considered to be part of this
                          # paragraph. The range of indices of two separate paragraphs will never
                          # overlap.
                        "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                            #
                            # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                            # inherited from the parent. Which paragraph styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A paragraph not in a list will inherit its paragraph style from the
                            #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                            # * A paragraph in a list will inherit its paragraph style from the paragraph
                            #   at its corresponding nesting level of the list inside the parent
                            #   placeholder.
                            #
                            # Inherited paragraph styles are represented as unset fields in this message.
                          "spacingMode": "A String", # The spacing mode for the paragraph.
                          "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                              # LEFT_TO_RIGHT since
                              # text direction is not inherited.
                          "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                              # is represented as 100.0. If unset, the value is inherited from the parent.
                          "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the start of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                              # inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                              # the end of the text, based on the current text direction. If unset, the
                              # value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                              # If unset, the value is inherited from the parent.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "alignment": "A String", # The text alignment for this paragraph.
                        },
                        "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                            # belong to a list.
                          "nestingLevel": 42, # The nesting level of this paragraph in the list.
                          "listId": "A String", # The ID of the list this paragraph belongs to.
                          "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "glyph": "A String", # The rendered bullet glyph for this paragraph.
                        },
                      },
                      "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                          # in the run have the same TextStyle.
                          #
                          # The `start_index` and `end_index` of TextRuns will always be fully
                          # contained in the index range of a single `paragraph_marker` TextElement.
                          # In other words, a TextRun will never span multiple paragraphs.
                          # styling.
                        "content": "A String", # The text of this run.
                        "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                            #
                            # If this text is contained in a shape with a parent placeholder, then these text styles may be
                            # inherited from the parent. Which text styles are inherited depend on the
                            # nesting level of lists:
                            #
                            # * A text run in a paragraph that is not in a list will inherit its text style
                            #   from the the newline character in the paragraph at the 0 nesting level of
                            #   the list inside the parent placeholder.
                            # * A text run in a paragraph that is in a list will inherit its text style
                            #   from the newline character in the paragraph at its corresponding nesting
                            #   level of the list inside the parent placeholder.
                            #
                            # Inherited text styles are represented as unset fields in this message. If
                            # text is contained in a shape without a parent placeholder, unsetting these
                            # fields will revert the style to a value matching the defaults in the Slides
                            # editor.
                          "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "bold": True or False, # Whether or not the text is rendered as bold.
                          "baselineOffset": "A String", # The text's vertical offset from its normal position.
                              #
                              # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                              # rendered in a smaller font size, computed based on the `font_size` field.
                              # The `font_size` itself is not affected by changes in this field.
                          "strikethrough": True or False, # Whether or not the text is struck through.
                          "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                              #
                              # This field is an extension of `font_family` meant to support explicit font
                              # weights without breaking backwards compatibility. As such, when reading the
                              # style of a range of text, the value of `weighted_font_family#font_family`
                              # will always be equal to that of `font_family`. However, when writing, if
                              # both fields are included in the field mask (either explicitly or through
                              # the wildcard `"*"`), their values are reconciled as follows:
                              #
                              # * If `font_family` is set and `weighted_font_family` is not, the value of
                              #   `font_family` is applied with weight `400` ("normal").
                              # * If both fields are set, the value of `font_family` must match that of
                              #   `weighted_font_family#font_family`. If so, the font family and weight of
                              #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                              #   returned.
                              # * If `weighted_font_family` is set and `font_family` is not, the font
                              #   family and weight of `weighted_font_family` is applied.
                              # * If neither field is set, the font family and weight of the text inherit
                              #   from the parent. Note that these properties cannot inherit separately
                              #   from each other.
                              #
                              # If an update request specifies values for both `weighted_font_family` and
                              # `bold`, the `weighted_font_family` is applied first, then `bold`.
                              #
                              # If `weighted_font_family#weight` is not set, it defaults to `400`.
                              #
                              # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                              # must also be set with a non-empty value. Otherwise, a 400 bad request error
                              # is returned.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                # multiple of `100` between `100` and `900`, inclusive. This range
                                # corresponds to the numerical values described in the CSS 2.1
                                # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                # with non-numerical values disallowed. Weights greater than or equal to
                                # `700` are considered bold, and weights less than `700`are not bold. The
                                # default value is `400` ("normal").
                          },
                          "smallCaps": True or False, # Whether or not the text is in small capital letters.
                          "fontFamily": "A String", # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Slides or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                              #
                              # Some fonts can affect the weight of the text. If an update request
                              # specifies values for both `font_family` and `bold`, the explicitly-set
                              # `bold` value is used.
                          "italic": True or False, # Whether or not the text is italicized.
                          "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                              # are not inherited from parent text.
                              #
                              # Changing the link in an update request causes some other changes to the
                              # text style of the range:
                              #
                              # * When setting a link, the text foreground color will be set to
                              #   ThemeColorType.HYPERLINK and the text will
                              #   be underlined. If these fields are modified in the same
                              #   request, those values will be used instead of the link defaults.
                              # * Setting a link on a text range that overlaps with an existing link will
                              #   also update the existing link to point to the new URL.
                              # * Links are not settable on newline characters. As a result, setting a link
                              #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                              #   will separate the newline character(s) into their own text runs. The
                              #   link will be applied separately to the runs before and after the newline.
                              # * Removing a link will update the text style of the range to match the
                              #   style of the preceding text (or the default text styles if the preceding
                              #   text is another link) unless different styles are being set in the same
                              #   request.
                            "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                            "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                # in the presentation. There may not be a slide at this index.
                            "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                # presentation with this ID. A page with this ID may not exist.
                            "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                # addressed by its position.
                          },
                          "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                              # transparent, depending on if the `opaque_color` field in it is set.
                            "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              "themeColor": "A String", # An opaque theme color.
                              "rgbColor": { # An RGB color. # An opaque RGB color.
                                "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                              # points.
                            "magnitude": 3.14, # The magnitude.
                            "unit": "A String", # The units for magnitude.
                          },
                          "underline": True or False, # Whether or not the text is underlined.
                        },
                      },
                    },
                  ],
                },
                "shapeProperties": { # The properties of a Shape. # The properties of the shape.
                    #
                    # If the shape is a placeholder shape as determined by the
                    # placeholder field, then these
                    # properties may be inherited from a parent placeholder shape.
                    # Determining the rendered value of the property depends on the corresponding
                    # property_state field value.
                  "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                      # a parent placeholder if it exists. If the shape has no parent, then the
                      # default shadow matches the defaults for new shapes created in the Slides
                      # editor. This property is read-only.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "color": { # A themeable solid color value. # The shadow color value.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                        # relative to the alignment position.
                        # to transform source coordinates (x,y) into destination coordinates (x', y')
                        # according to:
                        #
                        #       x'  x  =   shear_y  scale_y  translate_y
                        #       1  [ 1 ]
                        #
                        # After transformation,
                        #
                        #      x' = scale_x * x + shear_x * y + translate_x;
                        #      y' = scale_y * y + shear_y * x + translate_y;
                        #
                        # This message is therefore composed of these six matrix elements.
                      "translateX": 3.14, # The X coordinate translation element.
                      "translateY": 3.14, # The Y coordinate translation element.
                      "scaleX": 3.14, # The X coordinate scaling element.
                      "scaleY": 3.14, # The Y coordinate scaling element.
                      "shearY": 3.14, # The Y coordinate shearing element.
                      "shearX": 3.14, # The X coordinate shearing element.
                      "unit": "A String", # The units for translate elements.
                    },
                    "propertyState": "A String", # The shadow property state.
                        #
                        # Updating the the shadow on a page element will implicitly update this field
                        # to `RENDERED`, unless another value is specified in the same request. To
                        # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                        # case, any other shadow fields set in the same request will be ignored.
                    "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                        # shadow becomes.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                    "type": "A String", # The type of the shadow.
                    "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                        # scale and skew of the shadow.
                    "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                  },
                  "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                      # inherited from a parent placeholder if it exists. If the shape has no
                      # parent, then the default background fill depends on the shape type,
                      # matching the defaults for new shapes created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                    "propertyState": "A String", # The background fill property state.
                        #
                        # Updating the the fill on a shape will implicitly update this field to
                        # `RENDERED`, unless another value is specified in the same request. To
                        # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                        # any other fill fields set in the same request will be ignored.
                  },
                  "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                      # are not inherited from parent placeholders.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                      # parent placeholder if it exists. If the shape has no parent, then the
                      # default outline depends on the shape type, matching the defaults for
                      # new shapes created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
                    # layouts and masters.
                    #
                    # If set, the shape is a placeholder shape and any inherited properties
                    # can be resolved by looking at the parent placeholder identified by the
                    # Placeholder.parent_object_id field.
                  "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                      # If unset, the parent placeholder shape does not exist, so the shape does
                      # not inherit properties from any other shape.
                  "index": 42, # The index of the placeholder. If the same placeholder types are present in
                      # the same page, they would have different index values.
                  "type": "A String", # The type of the placeholder.
                },
                "shapeType": "A String", # The type of the shape.
              },
              "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
                  # represented as images.
                  # a linked chart embedded from Google Sheets.
                "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
                    # minutes. This URL is tagged with the account of the requester. Anyone with
                    # the URL effectively accesses the image as the original requester. Access to
                    # the image may be lost if the presentation's sharing settings change.
                "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
                "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
                  "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
                    "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "outlineFill": { # The fill of the outline. # The fill of the outline.
                        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                            # specified color value.
                            #
                            # If any field is unset, its value may be inherited from a parent placeholder
                            # if it exists.
                          "color": { # A themeable solid color value. # The color value of the solid fill.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # 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 * (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.
                        },
                      },
                      "propertyState": "A String", # The outline property state.
                          #
                          # Updating the the outline on a page element will implicitly update this
                          # field to`RENDERED`, unless another value is specified in the same request.
                          # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                          # this case, any other outline fields set in the same request will be
                          # ignored.
                      "dashStyle": "A String", # The dash style of the outline.
                      "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                    },
                    "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                    "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                        # This property is read-only.
                      "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                          # stops.
                          #
                          # The colors in the gradient will replace the corresponding colors at
                          # the same position in the color palette and apply to the image. This
                          # property is read-only.
                        { # A color and position in a gradient band.
                          "color": { # A themeable solid color value. # The color of the gradient stop.
                            "themeColor": "A String", # An opaque theme color.
                            "rgbColor": { # An RGB color. # An opaque RGB color.
                              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                            },
                          },
                          "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                              # fully opaque.
                          "position": 3.14, # The relative position of the color stop in the gradient band measured
                              # in percentage. The value should be in the interval [0.0, 1.0].
                        },
                      ],
                      "name": "A String", # The name of the recolor effect.
                          #
                          # The name is determined from the `recolor_stops` by matching the gradient
                          # against the colors in the page's current color scheme. This property is
                          # read-only.
                    },
                    "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                        # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                        # This property is read-only.
                    "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                        # This property is read-only.
                        # Image.
                        #
                        # The crop properties is represented by the offsets of four edges which define
                        # a crop rectangle. The offsets are measured in percentage from the
                        # corresponding edges of the object's original bounding rectangle towards
                        # inside, relative to the object's original dimensions.
                        #
                        # - If the offset is in the interval (0, 1), the corresponding edge of crop
                        # rectangle is positioned inside of the object's original bounding rectangle.
                        # - If the offset is negative or greater than 1, the corresponding edge of crop
                        # rectangle is positioned outside of the object's original bounding rectangle.
                        # - If the left edge of the crop rectangle is on the right side of its right
                        # edge, the object will be flipped horizontally.
                        # - If the top edge of the crop rectangle is below its bottom edge, the object
                        # will be flipped vertically.
                        # - If all offsets and rotation angle is 0, the object is not cropped.
                        #
                        # After cropping, the content in the crop rectangle will be stretched to fit
                        # its container.
                      "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                          # the right of the original bounding rectangle left edge, relative to the
                          # object's original width.
                      "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                          # Rotation angle is applied after the offset.
                      "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                          # to the left of the original bounding rectangle right edge, relative to the
                          # object's original width.
                      "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                          # above the original bounding rectangle bottom edge, relative to the object's
                          # original height.
                      "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                          # below the original bounding rectangle top edge, relative to the object's
                          # original height.
                    },
                    "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                        # is read-only.
                        #
                        # If these fields are unset, they may be inherited from a parent placeholder
                        # if it exists. If there is no parent, the fields will default to the value
                        # used for new page elements created in the Slides editor, which may depend on
                        # the page element kind.
                      "color": { # A themeable solid color value. # The shadow color value.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                          # relative to the alignment position.
                          # to transform source coordinates (x,y) into destination coordinates (x', y')
                          # according to:
                          #
                          #       x'  x  =   shear_y  scale_y  translate_y
                          #       1  [ 1 ]
                          #
                          # After transformation,
                          #
                          #      x' = scale_x * x + shear_x * y + translate_x;
                          #      y' = scale_y * y + shear_y * x + translate_y;
                          #
                          # This message is therefore composed of these six matrix elements.
                        "translateX": 3.14, # The X coordinate translation element.
                        "translateY": 3.14, # The Y coordinate translation element.
                        "scaleX": 3.14, # The X coordinate scaling element.
                        "scaleY": 3.14, # The Y coordinate scaling element.
                        "shearY": 3.14, # The Y coordinate shearing element.
                        "shearX": 3.14, # The X coordinate shearing element.
                        "unit": "A String", # The units for translate elements.
                      },
                      "propertyState": "A String", # The shadow property state.
                          #
                          # Updating the the shadow on a page element will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                          # case, any other shadow fields set in the same request will be ignored.
                      "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                          # shadow becomes.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                      "type": "A String", # The type of the shadow.
                      "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                          # scale and skew of the shadow.
                      "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
                    },
                    "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                        # [-1.0, 1.0], where 0 means no effect. This property is read-only.
                  },
                },
                "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
              "video": { # A PageElement kind representing a # A video page element.
                  # video.
                "url": "A String", # An URL to a video. The URL is valid as long as the source video
                    # exists and sharing settings do not change.
                "videoProperties": { # The properties of the Video. # The properties of the video.
                  "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                      # videos created in the Slides editor.
                      #
                      # If these fields are unset, they may be inherited from a parent placeholder
                      # if it exists. If there is no parent, the fields will default to the value
                      # used for new page elements created in the Slides editor, which may depend on
                      # the page element kind.
                    "outlineFill": { # The fill of the outline. # The fill of the outline.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # 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 * (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.
                      },
                    },
                    "propertyState": "A String", # The outline property state.
                        #
                        # Updating the the outline on a page element will implicitly update this
                        # field to`RENDERED`, unless another value is specified in the same request.
                        # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                        # this case, any other outline fields set in the same request will be
                        # ignored.
                    "dashStyle": "A String", # The dash style of the outline.
                    "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                },
                "id": "A String", # The video source's unique identifier for this video.
                "source": "A String", # The video source.
              },
              "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
                  # joined collection of PageElements.
                "children": [ # The collection of elements in the group. The minimum size of a group is 2.
                  # Object with schema name: PageElement
                ],
              },
              "table": { # A PageElement kind representing a # A table page element.
                  # table.
                "tableColumns": [ # Properties of each column.
                  { # Properties of each column in a table.
                    "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "tableRows": [ # Properties and contents of each row.
                    #
                    # Cells that span multiple rows are contained in only one of these rows and
                    # have a row_span greater
                    # than 1.
                  { # Properties and contents of each row in a table.
                    "tableCells": [ # Properties and contents of each cell.
                        #
                        # Cells that span multiple columns are represented only once with a
                        # column_span greater
                        # than 1. As a result, the length of this collection does not always match
                        # the number of columns of the entire table.
                      { # Properties and contents of each table cell.
                        "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                            # text box or rectangle) or a table cell in a page.
                          "lists": { # The bulleted lists contained in this text, keyed by list ID.
                            "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                                # associated with a list. A paragraph that is part of a list has an implicit
                                # reference to that list's ID.
                              "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                                  # level. A list has at most nine levels of nesting, so the possible values
                                  # for the keys of this map are 0 through 8, inclusive.
                                "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                                    # level of nesting.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                },
                              },
                              "listId": "A String", # The ID of the list.
                            },
                          },
                          "textElements": [ # The text contents broken down into its component parts, including styling
                              # information. This property is read-only.
                            { # A TextElement describes the content of a range of indices in the text content
                                # of a Shape or TableCell.
                              "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                                  # replaced with content that can change over time.
                                "content": "A String", # The rendered content of this auto text, if available.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                                "type": "A String", # The type of this auto text.
                              },
                              "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                                  # units.
                              "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                              "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                                  #
                                  # The `start_index` and `end_index` of this TextElement represent the
                                  # range of the paragraph. Other TextElements with an index range contained
                                  # inside this paragraph's range are considered to be part of this
                                  # paragraph. The range of indices of two separate paragraphs will never
                                  # overlap.
                                "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                                    # inherited from the parent. Which paragraph styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A paragraph not in a list will inherit its paragraph style from the
                                    #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                                    # * A paragraph in a list will inherit its paragraph style from the paragraph
                                    #   at its corresponding nesting level of the list inside the parent
                                    #   placeholder.
                                    #
                                    # Inherited paragraph styles are represented as unset fields in this message.
                                  "spacingMode": "A String", # The spacing mode for the paragraph.
                                  "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                      # LEFT_TO_RIGHT since
                                      # text direction is not inherited.
                                  "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                      # is represented as 100.0. If unset, the value is inherited from the parent.
                                  "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the start of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                      # inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                      # the end of the text, based on the current text direction. If unset, the
                                      # value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                      # If unset, the value is inherited from the parent.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "alignment": "A String", # The text alignment for this paragraph.
                                },
                                "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                                    # belong to a list.
                                  "nestingLevel": 42, # The nesting level of this paragraph in the list.
                                  "listId": "A String", # The ID of the list this paragraph belongs to.
                                  "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                      #
                                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                      # inherited from the parent. Which text styles are inherited depend on the
                                      # nesting level of lists:
                                      #
                                      # * A text run in a paragraph that is not in a list will inherit its text style
                                      #   from the the newline character in the paragraph at the 0 nesting level of
                                      #   the list inside the parent placeholder.
                                      # * A text run in a paragraph that is in a list will inherit its text style
                                      #   from the newline character in the paragraph at its corresponding nesting
                                      #   level of the list inside the parent placeholder.
                                      #
                                      # Inherited text styles are represented as unset fields in this message. If
                                      # text is contained in a shape without a parent placeholder, unsetting these
                                      # fields will revert the style to a value matching the defaults in the Slides
                                      # editor.
                                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "bold": True or False, # Whether or not the text is rendered as bold.
                                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                        #
                                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                        # rendered in a smaller font size, computed based on the `font_size` field.
                                        # The `font_size` itself is not affected by changes in this field.
                                    "strikethrough": True or False, # Whether or not the text is struck through.
                                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                        #
                                        # This field is an extension of `font_family` meant to support explicit font
                                        # weights without breaking backwards compatibility. As such, when reading the
                                        # style of a range of text, the value of `weighted_font_family#font_family`
                                        # will always be equal to that of `font_family`. However, when writing, if
                                        # both fields are included in the field mask (either explicitly or through
                                        # the wildcard `"*"`), their values are reconciled as follows:
                                        #
                                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                                        #   `font_family` is applied with weight `400` ("normal").
                                        # * If both fields are set, the value of `font_family` must match that of
                                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                        #   returned.
                                        # * If `weighted_font_family` is set and `font_family` is not, the font
                                        #   family and weight of `weighted_font_family` is applied.
                                        # * If neither field is set, the font family and weight of the text inherit
                                        #   from the parent. Note that these properties cannot inherit separately
                                        #   from each other.
                                        #
                                        # If an update request specifies values for both `weighted_font_family` and
                                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                        #
                                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                        #
                                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                        # is returned.
                                      "fontFamily": "A String", # The font family of the text.
                                          #
                                          # The font family can be any font from the Font menu in Slides or from
                                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                                          # unrecognized, the text is rendered in `Arial`.
                                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                          # multiple of `100` between `100` and `900`, inclusive. This range
                                          # corresponds to the numerical values described in the CSS 2.1
                                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                          # with non-numerical values disallowed. Weights greater than or equal to
                                          # `700` are considered bold, and weights less than `700`are not bold. The
                                          # default value is `400` ("normal").
                                    },
                                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                        #
                                        # Some fonts can affect the weight of the text. If an update request
                                        # specifies values for both `font_family` and `bold`, the explicitly-set
                                        # `bold` value is used.
                                    "italic": True or False, # Whether or not the text is italicized.
                                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                        # are not inherited from parent text.
                                        #
                                        # Changing the link in an update request causes some other changes to the
                                        # text style of the range:
                                        #
                                        # * When setting a link, the text foreground color will be set to
                                        #   ThemeColorType.HYPERLINK and the text will
                                        #   be underlined. If these fields are modified in the same
                                        #   request, those values will be used instead of the link defaults.
                                        # * Setting a link on a text range that overlaps with an existing link will
                                        #   also update the existing link to point to the new URL.
                                        # * Links are not settable on newline characters. As a result, setting a link
                                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                        #   will separate the newline character(s) into their own text runs. The
                                        #   link will be applied separately to the runs before and after the newline.
                                        # * Removing a link will update the text style of the range to match the
                                        #   style of the preceding text (or the default text styles if the preceding
                                        #   text is another link) unless different styles are being set in the same
                                        #   request.
                                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                          # in the presentation. There may not be a slide at this index.
                                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                          # presentation with this ID. A page with this ID may not exist.
                                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                          # addressed by its position.
                                    },
                                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                        # transparent, depending on if the `opaque_color` field in it is set.
                                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                          # a transparent color.
                                        "themeColor": "A String", # An opaque theme color.
                                        "rgbColor": { # An RGB color. # An opaque RGB color.
                                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                        },
                                      },
                                    },
                                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                        # points.
                                      "magnitude": 3.14, # The magnitude.
                                      "unit": "A String", # The units for magnitude.
                                    },
                                    "underline": True or False, # Whether or not the text is underlined.
                                  },
                                  "glyph": "A String", # The rendered bullet glyph for this paragraph.
                                },
                              },
                              "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                                  # in the run have the same TextStyle.
                                  #
                                  # The `start_index` and `end_index` of TextRuns will always be fully
                                  # contained in the index range of a single `paragraph_marker` TextElement.
                                  # In other words, a TextRun will never span multiple paragraphs.
                                  # styling.
                                "content": "A String", # The text of this run.
                                "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                                    #
                                    # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                    # inherited from the parent. Which text styles are inherited depend on the
                                    # nesting level of lists:
                                    #
                                    # * A text run in a paragraph that is not in a list will inherit its text style
                                    #   from the the newline character in the paragraph at the 0 nesting level of
                                    #   the list inside the parent placeholder.
                                    # * A text run in a paragraph that is in a list will inherit its text style
                                    #   from the newline character in the paragraph at its corresponding nesting
                                    #   level of the list inside the parent placeholder.
                                    #
                                    # Inherited text styles are represented as unset fields in this message. If
                                    # text is contained in a shape without a parent placeholder, unsetting these
                                    # fields will revert the style to a value matching the defaults in the Slides
                                    # editor.
                                  "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "bold": True or False, # Whether or not the text is rendered as bold.
                                  "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                      #
                                      # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                      # rendered in a smaller font size, computed based on the `font_size` field.
                                      # The `font_size` itself is not affected by changes in this field.
                                  "strikethrough": True or False, # Whether or not the text is struck through.
                                  "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                      #
                                      # This field is an extension of `font_family` meant to support explicit font
                                      # weights without breaking backwards compatibility. As such, when reading the
                                      # style of a range of text, the value of `weighted_font_family#font_family`
                                      # will always be equal to that of `font_family`. However, when writing, if
                                      # both fields are included in the field mask (either explicitly or through
                                      # the wildcard `"*"`), their values are reconciled as follows:
                                      #
                                      # * If `font_family` is set and `weighted_font_family` is not, the value of
                                      #   `font_family` is applied with weight `400` ("normal").
                                      # * If both fields are set, the value of `font_family` must match that of
                                      #   `weighted_font_family#font_family`. If so, the font family and weight of
                                      #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                      #   returned.
                                      # * If `weighted_font_family` is set and `font_family` is not, the font
                                      #   family and weight of `weighted_font_family` is applied.
                                      # * If neither field is set, the font family and weight of the text inherit
                                      #   from the parent. Note that these properties cannot inherit separately
                                      #   from each other.
                                      #
                                      # If an update request specifies values for both `weighted_font_family` and
                                      # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                      #
                                      # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                      #
                                      # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                      # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                      # is returned.
                                    "fontFamily": "A String", # The font family of the text.
                                        #
                                        # The font family can be any font from the Font menu in Slides or from
                                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                                        # unrecognized, the text is rendered in `Arial`.
                                    "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                        # multiple of `100` between `100` and `900`, inclusive. This range
                                        # corresponds to the numerical values described in the CSS 2.1
                                        # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                        # with non-numerical values disallowed. Weights greater than or equal to
                                        # `700` are considered bold, and weights less than `700`are not bold. The
                                        # default value is `400` ("normal").
                                  },
                                  "smallCaps": True or False, # Whether or not the text is in small capital letters.
                                  "fontFamily": "A String", # The font family of the text.
                                      #
                                      # The font family can be any font from the Font menu in Slides or from
                                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                                      # unrecognized, the text is rendered in `Arial`.
                                      #
                                      # Some fonts can affect the weight of the text. If an update request
                                      # specifies values for both `font_family` and `bold`, the explicitly-set
                                      # `bold` value is used.
                                  "italic": True or False, # Whether or not the text is italicized.
                                  "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                      # are not inherited from parent text.
                                      #
                                      # Changing the link in an update request causes some other changes to the
                                      # text style of the range:
                                      #
                                      # * When setting a link, the text foreground color will be set to
                                      #   ThemeColorType.HYPERLINK and the text will
                                      #   be underlined. If these fields are modified in the same
                                      #   request, those values will be used instead of the link defaults.
                                      # * Setting a link on a text range that overlaps with an existing link will
                                      #   also update the existing link to point to the new URL.
                                      # * Links are not settable on newline characters. As a result, setting a link
                                      #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                      #   will separate the newline character(s) into their own text runs. The
                                      #   link will be applied separately to the runs before and after the newline.
                                      # * Removing a link will update the text style of the range to match the
                                      #   style of the preceding text (or the default text styles if the preceding
                                      #   text is another link) unless different styles are being set in the same
                                      #   request.
                                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                        # in the presentation. There may not be a slide at this index.
                                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                        # presentation with this ID. A page with this ID may not exist.
                                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                        # addressed by its position.
                                  },
                                  "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                      # transparent, depending on if the `opaque_color` field in it is set.
                                    "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                        # a transparent color.
                                      "themeColor": "A String", # An opaque theme color.
                                      "rgbColor": { # An RGB color. # An opaque RGB color.
                                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                      },
                                    },
                                  },
                                  "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                      # points.
                                    "magnitude": 3.14, # The magnitude.
                                    "unit": "A String", # The units for magnitude.
                                  },
                                  "underline": True or False, # Whether or not the text is underlined.
                                },
                              },
                            },
                          ],
                        },
                        "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                          "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                              # for newly created table cells in the Slides editor.
                            "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                                # specified color value.
                                #
                                # If any field is unset, its value may be inherited from a parent placeholder
                                # if it exists.
                              "color": { # A themeable solid color value. # The color value of the solid fill.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                              "alpha": 3.14, # 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 * (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.
                            },
                            "propertyState": "A String", # The background fill property state.
                                #
                                # Updating the the fill on a table cell will implicitly update this field
                                # to `RENDERED`, unless another value is specified in the same request. To
                                # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                                # case, any other fill fields set in the same request will be ignored.
                          },
                        },
                        "rowSpan": 42, # Row span of the cell.
                        "columnSpan": 42, # Column span of the cell.
                        "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                          "rowIndex": 42, # The 0-based row index.
                          "columnIndex": 42, # The 0-based column index.
                        },
                      },
                    ],
                    "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                  },
                ],
                "rows": 42, # Number of rows in the table.
                "columns": 42, # Number of columns in the table.
              },
              "line": { # A PageElement kind representing a # A line page element.
                  # line, curved connector, or bent connector.
                "lineProperties": { # The properties of the Line. # The properties of the line.
                    #
                    # When unset, these fields default to values that match the appearance of
                    # new lines created in the Slides editor.
                  "dashStyle": "A String", # The dash style of the line.
                  "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "endArrow": "A String", # The style of the arrow at the end of the line.
                  "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
                    "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                    "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                        # in the presentation. There may not be a slide at this index.
                    "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                        # presentation with this ID. A page with this ID may not exist.
                    "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                        # addressed by its position.
                  },
                  "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                      # lines created in the Slides editor.
                    "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                        # specified color value.
                        #
                        # If any field is unset, its value may be inherited from a parent placeholder
                        # if it exists.
                      "color": { # A themeable solid color value. # The color value of the solid fill.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                      "alpha": 3.14, # 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 * (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.
                    },
                  },
                  "startArrow": "A String", # The style of the arrow at the beginning of the line.
                },
                "lineType": "A String", # The type of the line.
              },
              "size": { # A width and height. # The size of the page element.
                "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
            },
          ],
          "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
              # relevant for pages with page_type NOTES.
            "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
                # notes for the corresponding slide.
                # The actual shape may not always exist on the notes page. Inserting text
                # using this object ID will automatically create the shape. In this case, the
                # actual shape may have different object ID. The `GetPresentation` or
                # `GetPage` action will always return the latest object ID.
          },
          "objectId": "A String", # The object ID for this page. Object IDs used by
              # Page and
              # PageElement share the same namespace.
          "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
              # update requests to assert that the presentation revision hasn't changed
              # since the last read operation. Only populated if the user has edit access
              # to the presentation.
              #
              # The format of the revision ID may change over time, so it should be treated
              # opaquely. A returned revision ID is only guaranteed to be valid for 24
              # hours after it has been returned and cannot be shared across users. If the
              # revision ID is unchanged between calls, then the presentation has not
              # changed. Conversely, a changed ID (for the same presentation and user)
              # usually means the presentation has been updated; however, a changed ID can
              # also be due to internal factors such as ID format changes.
          "pageProperties": { # The properties of the Page. # The properties of the page.
              #
              # The page will inherit properties from the parent page. Depending on the page
              # type the hierarchy is defined in either
              # SlideProperties or
              # LayoutProperties.
            "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
                # from a parent page if it exists. If the page has no parent, then the
                # background fill defaults to the corresponding fill in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # 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 * (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.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a page will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
              "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
                  # the specified picture. The picture is stretched to fit its container.
                "contentUrl": "A String", # Reading the content_url:
                    #
                    # An URL to a picture with a default lifetime of 30 minutes.
                    # This URL is tagged with the account of the requester. Anyone with the URL
                    # effectively accesses the picture as the original requester. Access to the
                    # picture may be lost if the presentation's sharing settings change.
                    #
                    # Writing the content_url:
                    #
                    # The picture is fetched once at insertion time and a copy is stored for
                    # display inside the presentation. Pictures must be less than 50MB in size,
                    # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
                    # format.
                "size": { # A width and height. # The original size of the picture fill. This field is read-only.
                  "width": { # A magnitude in a single direction in the specified units. # The width of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                  "height": { # A magnitude in a single direction in the specified units. # The height of the object.
                    "magnitude": 3.14, # The magnitude.
                    "unit": "A String", # The units for magnitude.
                  },
                },
              },
            },
            "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
                # a parent page. If the page has no parent, the color scheme uses a default
                # Slides color scheme. This field is read-only.
              "colors": [ # The ThemeColorType and corresponding concrete color pairs.
                { # A pair mapping a theme color type to the concrete color it represents.
                  "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                  "type": "A String", # The type of the theme color.
                },
              ],
            },
          },
          "pageType": "A String", # The type of the page.
          "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
              # relevant for pages with page_type SLIDE.
            "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
                # appearance of a notes page when printing or exporting slides with speaker
                # notes. A notes page inherits properties from the
                # notes master.
                # The placeholder shape with type BODY on the notes page contains the speaker
                # notes for this slide. The ID of this shape is identified by the
                # speakerNotesObjectId field.
                # The notes page is read-only except for the text content and styles of the
                # speaker notes shape.
            "masterObjectId": "A String", # The object ID of the master that this slide is based on.
            "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
          },
        },
      ],
    }</pre>
</div>

</body></html>