// Code generated by sidekick. DO NOT EDIT.
//
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#if GeneratorEvaluations
  import Foundation
  import GoogleCloudWkt

  /// Evaluation metrics for summarization generator.
  public struct SummarizationEvaluationMetrics: Codable, Equatable, GoogleCloudWkt._AnyPackable,
    Sendable
  {
    /// Output only. A list of evaluation results per conversation(&summary),
    /// metric and section.
    public var summarizationEvaluationResults:
      [SummarizationEvaluationMetrics.SummarizationEvaluationResult] = []

    /// Output only. User bucket uri for merged evaluation score and aggregation
    /// score csv.
    public var summarizationEvaluationMergedResultsUri: Swift.String = Swift.String()

    /// Output only. A list of aggregated(average) scores per metric section.
    public var overallMetrics: [SummarizationEvaluationMetrics.OverallScoresByMetric] = []

    /// Output only. Overall token per section. This is an aggregated(sum) result
    /// of input token of summary acorss all conversations that are selected for
    /// summarization evaluation.
    public var overallSectionTokens: [SummarizationEvaluationMetrics.SectionToken] = []

    /// Output only. List of conversation details.
    public var conversationDetails: [SummarizationEvaluationMetrics.ConversationDetail] = []

    /// Initialize a new instance of `SummarizationEvaluationMetrics`.
    public init() {}

    /// Use `config` to return a new instance of this object, with some fields updated.
    ///
    /// Commonly used to initialize the value, for example:
    ///
    /// ```
    /// let value = SummarizationEvaluationMetrics().with { $0.summarizationEvaluationResults = ... }
    /// ```
    public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
      var copy = self
      try config(&copy)
      return copy
    }

    /// Decomposition details for accuracy.
    public struct AccuracyDecomposition: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. The breakdown point of the summary.
      public var point: Swift.String = Swift.String()

      /// Output only. The accuracy reasoning of the breakdown point.
      public var accuracyReasoning: Swift.String = Swift.String()

      /// Output only. Whether the breakdown point is accurate or not.
      public var isAccurate: Swift.Bool? = nil

      /// Initialize a new instance of `AccuracyDecomposition`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = AccuracyDecomposition().with { $0.point = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.AccuracyDecomposition"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Decomposition details for adherence.
    @available(*, deprecated)
    public struct AdherenceDecomposition: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. The breakdown point of the given instructions.
      public var point: Swift.String = Swift.String()

      /// Output only. The adherence reasoning of the breakdown point.
      public var adherenceReasoning: Swift.String = Swift.String()

      /// Output only. Whether the breakdown point is adherent or not.
      public var isAdherent: Swift.Bool = Swift.Bool()

      /// Initialize a new instance of `AdherenceDecomposition`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = AdherenceDecomposition().with { $0.point = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.AdherenceDecomposition"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Rubric result of the adherence evaluation. A rubric is ued to determine
    /// if the summary adheres to all aspects of the given instructions.
    public struct AdherenceRubric: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. The question generated from instruction that used to
      /// evaluate summary.
      public var question: Swift.String = Swift.String()

      /// Output only. The reasoning of the rubric question is addressed or not.
      public var reasoning: Swift.String = Swift.String()

      /// Output only. A boolean that indicates whether the rubric question is
      /// addressed or not.
      public var isAddressed: Swift.Bool? = nil

      /// Initialize a new instance of `AdherenceRubric`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = AdherenceRubric().with { $0.question = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.AdherenceRubric"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Rubric details of the completeness evaluation result.
    public struct CompletenessRubric: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. The question generated from instruction that used to
      /// evaluate summary.
      public var question: Swift.String = Swift.String()

      /// Output only. A boolean that indicates whether the rubric question is
      /// addressed or not.
      public var isAddressed: Swift.Bool? = nil

      /// Initialize a new instance of `CompletenessRubric`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = CompletenessRubric().with { $0.question = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.CompletenessRubric"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Decomposition details
    @available(*, deprecated)
    public struct Decomposition: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// One of decomposition details.
      public var decomposition: OneOf_Decomposition? = nil

      /// Initialize a new instance of `Decomposition`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = Decomposition().with { $0.accuracyDecomposition = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      private enum CodingKeys: Swift.String, CodingKey {
        case accuracyDecomposition = "accuracyDecomposition"
        case adherenceDecomposition = "adherenceDecomposition"
      }

      public init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)

        var decomposition: OneOf_Decomposition? = nil
        let decompositionCheckAndSet = {
          if decomposition != nil {
            throw DecodingError.dataCorrupted(
              DecodingError.Context(
                codingPath: decoder.codingPath,
                debugDescription: "Multiple values set for oneof 'decomposition'"))
          }
          decomposition = $0
        }
        if let accuracyDecomposition = try container.decodeIfPresent(
          SummarizationEvaluationMetrics.AccuracyDecomposition?.self, forKey: .accuracyDecomposition
        ) {
          try decompositionCheckAndSet(.accuracyDecomposition(accuracyDecomposition))
        }
        if let adherenceDecomposition = try container.decodeIfPresent(
          SummarizationEvaluationMetrics.AdherenceDecomposition?.self,
          forKey: .adherenceDecomposition)
        {
          try decompositionCheckAndSet(.adherenceDecomposition(adherenceDecomposition))
        }
        self.decomposition = decomposition
      }

      public func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)

        if let choice = self.decomposition {
          switch choice {
          case .accuracyDecomposition(let value):
            try container.encode(value, forKey: .accuracyDecomposition)
          case .adherenceDecomposition(let value):
            try container.encode(value, forKey: .adherenceDecomposition)
          }
        }
      }

      /// One of decomposition details.
      public enum OneOf_Decomposition: Codable, Equatable, Sendable {
        /// only available for accuracy metric.
        indirect case accuracyDecomposition(SummarizationEvaluationMetrics.AccuracyDecomposition?)
        /// only available for adherence metric.
        indirect case adherenceDecomposition(SummarizationEvaluationMetrics.AdherenceDecomposition?)
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.Decomposition"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Evaluation result that contains one of accuracy, adherence or completeness
    /// evaluation result.
    public struct EvaluationResult: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// One of evaluation result details.
      public var result: OneOf_Result? = nil

      /// Initialize a new instance of `EvaluationResult`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = EvaluationResult().with { $0.accuracyDecomposition = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      private enum CodingKeys: Swift.String, CodingKey {
        case accuracyDecomposition = "accuracyDecomposition"
        case adherenceRubric = "adherenceRubric"
        case completenessRubric = "completenessRubric"
      }

      public init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)

        var result: OneOf_Result? = nil
        let resultCheckAndSet = {
          if result != nil {
            throw DecodingError.dataCorrupted(
              DecodingError.Context(
                codingPath: decoder.codingPath,
                debugDescription: "Multiple values set for oneof 'result'"))
          }
          result = $0
        }
        if let accuracyDecomposition = try container.decodeIfPresent(
          SummarizationEvaluationMetrics.AccuracyDecomposition?.self, forKey: .accuracyDecomposition
        ) {
          try resultCheckAndSet(.accuracyDecomposition(accuracyDecomposition))
        }
        if let adherenceRubric = try container.decodeIfPresent(
          SummarizationEvaluationMetrics.AdherenceRubric?.self, forKey: .adherenceRubric)
        {
          try resultCheckAndSet(.adherenceRubric(adherenceRubric))
        }
        if let completenessRubric = try container.decodeIfPresent(
          SummarizationEvaluationMetrics.CompletenessRubric?.self, forKey: .completenessRubric)
        {
          try resultCheckAndSet(.completenessRubric(completenessRubric))
        }
        self.result = result
      }

      public func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)

        if let choice = self.result {
          switch choice {
          case .accuracyDecomposition(let value):
            try container.encode(value, forKey: .accuracyDecomposition)
          case .adherenceRubric(let value):
            try container.encode(value, forKey: .adherenceRubric)
          case .completenessRubric(let value):
            try container.encode(value, forKey: .completenessRubric)
          }
        }
      }

      /// One of evaluation result details.
      public enum OneOf_Result: Codable, Equatable, Sendable {
        /// Only available for accuracy metric.
        indirect case accuracyDecomposition(SummarizationEvaluationMetrics.AccuracyDecomposition?)
        /// Only available for adherence metric.
        indirect case adherenceRubric(SummarizationEvaluationMetrics.AdherenceRubric?)
        /// Only available for completeness metric.
        indirect case completenessRubric(SummarizationEvaluationMetrics.CompletenessRubric?)
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.EvaluationResult"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Evaluation result per conversation(&summary), metric and section.
    public struct SummarizationEvaluationResult: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. conversation session id
      @available(*, deprecated)
      public var sessionId: Swift.String = Swift.String()

      /// Output only. metric name, e.g. accuracy, completeness, adherence, etc.
      public var metric: Swift.String = Swift.String()

      /// Output only. section/task name, e.g. action, situation, etc
      public var section: Swift.String = Swift.String()

      /// Output only. score calculated from decompositions
      public var score: Swift.Float = Swift.Float()

      /// Output only. Summary of this section
      public var sectionSummary: Swift.String = Swift.String()

      /// Output only. List of decompostion details
      @available(*, deprecated)
      public var decompositions: [SummarizationEvaluationMetrics.Decomposition] = []

      /// Output only. List of evaluation results.
      public var evaluationResults: [SummarizationEvaluationMetrics.EvaluationResult] = []

      /// Initialize a new instance of `SummarizationEvaluationResult`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = SummarizationEvaluationResult().with { $0.sessionId = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.SummarizationEvaluationResult"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Overall performance per metric. This is the aggregated score for each
    /// metric across all conversations that are selected for summarization
    /// evaluation.
    public struct OverallScoresByMetric: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. Metric name. e.g. accuracy, adherence, completeness.
      public var metric: Swift.String = Swift.String()

      /// Initialize a new instance of `OverallScoresByMetric`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = OverallScoresByMetric().with { $0.metric = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.OverallScoresByMetric"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// A pair of section name and input token count of the input summary section.
    public struct SectionToken: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. The name of the summary instruction.
      public var section: Swift.String = Swift.String()

      /// Output only. Token count.
      public var tokenCount: Swift.Int64? = nil

      /// Initialize a new instance of `SectionToken`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = SectionToken().with { $0.section = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.SectionToken"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    /// Aggregated evaluation result on conversation level. This conatins
    /// evaluation results of all the metrics and sections.
    public struct ConversationDetail: Codable, Equatable, GoogleCloudWkt._AnyPackable,
      Sendable
    {
      /// Output only. Conversation transcript that used for summarization
      /// evaluation as a reference.
      public var messageEntries: [MessageEntry] = []

      /// Output only. Summary sections that used for summarization evaluation as a
      /// reference.
      public var summarySections: [SummarySuggestion.SummarySection] = []

      /// Output only. List of metric details.
      public var metricDetails: [SummarizationEvaluationMetrics.ConversationDetail.MetricDetail] =
        []

      /// Output only. Conversation level token count per section. This is an
      /// aggregated(sum) result of input token of summary acorss all metrics for a
      /// single conversation.
      public var sectionTokens: [SummarizationEvaluationMetrics.SectionToken] = []

      /// Initialize a new instance of `ConversationDetail`.
      public init() {}

      /// Use `config` to return a new instance of this object, with some fields updated.
      ///
      /// Commonly used to initialize the value, for example:
      ///
      /// ```
      /// let value = ConversationDetail().with { $0.messageEntries = ... }
      /// ```
      public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
        var copy = self
        try config(&copy)
        return copy
      }

      /// Aggregated result on metric level. This conatins the evaluation results
      /// of all the sections.
      public struct MetricDetail: Codable, Equatable, GoogleCloudWkt._AnyPackable,
        Sendable
      {
        /// Output only. Metrics name. e.g. accuracy, adherence, completeness.
        public var metric: Swift.String = Swift.String()

        /// Output only. Aggregated(average) score on this metric across all
        /// sections.
        public var score: Swift.Float? = nil

        /// Output only. List of section details.
        public var sectionDetails:
          [SummarizationEvaluationMetrics.ConversationDetail.MetricDetail.SectionDetail] = []

        /// Initialize a new instance of `MetricDetail`.
        public init() {}

        /// Use `config` to return a new instance of this object, with some fields updated.
        ///
        /// Commonly used to initialize the value, for example:
        ///
        /// ```
        /// let value = MetricDetail().with { $0.metric = ... }
        /// ```
        public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
          var copy = self
          try config(&copy)
          return copy
        }

        /// Section level result.
        public struct SectionDetail: Codable, Equatable, GoogleCloudWkt._AnyPackable,
          Sendable
        {
          /// Output only. The name of the summary instruction.
          public var section: Swift.String = Swift.String()

          /// Output only. Aggregated(average) score on this section across all
          /// evaluation results. Either decompositions or rubrics.
          public var score: Swift.Float? = nil

          /// Output only. Summary for this section
          public var sectionSummary: Swift.String = Swift.String()

          /// Output only. List of evaluation result. The list only contains one
          /// kind of the evaluation result.
          public var evaluationResults: [SummarizationEvaluationMetrics.EvaluationResult] = []

          /// Initialize a new instance of `SectionDetail`.
          public init() {}

          /// Use `config` to return a new instance of this object, with some fields updated.
          ///
          /// Commonly used to initialize the value, for example:
          ///
          /// ```
          /// let value = SectionDetail().with { $0.section = ... }
          /// ```
          public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
            var copy = self
            try config(&copy)
            return copy
          }

          public static var _anyTypeUrl: Swift.String {
            return
              "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.ConversationDetail.MetricDetail.SectionDetail"
          }
          public init(fromAny any: GoogleCloudWkt.`Any`) throws {
            self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
          }
          public func _pack() throws -> GoogleCloudWkt.Struct {
            return try GoogleCloudWkt._slowAnySerialize(message: self)
          }
        }

        public static var _anyTypeUrl: Swift.String {
          return
            "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.ConversationDetail.MetricDetail"
        }
        public init(fromAny any: GoogleCloudWkt.`Any`) throws {
          self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
        }
        public func _pack() throws -> GoogleCloudWkt.Struct {
          return try GoogleCloudWkt._slowAnySerialize(message: self)
        }
      }

      public static var _anyTypeUrl: Swift.String {
        return
          "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics.ConversationDetail"
      }
      public init(fromAny any: GoogleCloudWkt.`Any`) throws {
        self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
      }
      public func _pack() throws -> GoogleCloudWkt.Struct {
        return try GoogleCloudWkt._slowAnySerialize(message: self)
      }
    }

    public static var _anyTypeUrl: Swift.String {
      return "type.googleapis.com/google.cloud.dialogflow.v2.SummarizationEvaluationMetrics"
    }
    public init(fromAny any: GoogleCloudWkt.`Any`) throws {
      self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
    }
    public func _pack() throws -> GoogleCloudWkt.Struct {
      return try GoogleCloudWkt._slowAnySerialize(message: self)
    }
  }
#endif
