encoding/protobuf: remove extra space in comment

Change-Id: Ia325389e474003fc20917aea45cfef4a268b4b96
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2940
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/encoding/protobuf/examples_test.go b/encoding/protobuf/examples_test.go
index 8d12d4d..08b3e68 100644
--- a/encoding/protobuf/examples_test.go
+++ b/encoding/protobuf/examples_test.go
@@ -42,14 +42,14 @@
 	fmt.Println(string(b))
 
 	// Output:
-	// //  Package basic is just that: basic.
+	// // Package basic is just that: basic.
 	// package basic
 	//
-	// //  This is my type.
+	// // This is my type.
 	// MyType: {
-	// 	stringValue?: string @protobuf(1,name=string_value) //  just any 'ole string
+	// 	stringValue?: string @protobuf(1,name=string_value) // just any 'ole string
 	//
-	// 	//  A method must start with a capital letter.
+	// 	// A method must start with a capital letter.
 	// 	method?: [...string] @protobuf(2)
 	// 	method?: [...=~"^[A-Z]"]
 	// }
diff --git a/encoding/protobuf/protobuf.go b/encoding/protobuf/protobuf.go
index 0baed41..ee3cde3 100644
--- a/encoding/protobuf/protobuf.go
+++ b/encoding/protobuf/protobuf.go
@@ -61,7 +61,7 @@
 //   StringValue    string           See struct.proto.
 //   NumberValue    number           See struct.proto.
 //   StringValue    string           See struct.proto.
-//   Empty          struct.MaxFields(0)
+//   Empty          close({})
 //   Timestamp      time.Time        See struct.proto.
 //   Duration       time.Duration    See struct.proto.
 //
diff --git a/encoding/protobuf/testdata/attributes.proto.out.cue b/encoding/protobuf/testdata/attributes.proto.out.cue
index 4911be4..e75dd01 100644
--- a/encoding/protobuf/testdata/attributes.proto.out.cue
+++ b/encoding/protobuf/testdata/attributes.proto.out.cue
@@ -1,17 +1,17 @@
 
-//  Copyright 2016 Istio Authors
-// 
-//  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
-// 
-//      http://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.
+// Copyright 2016 Istio Authors
+//
+// 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
+//
+//     http://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.
 package v1
 
 import (
@@ -29,57 +29,57 @@
 	numberVal?: number @protobuf(6,type=google.protobuf.NumberValue)
 }
 
-//  Attributes represents a set of typed name/value pairs. Many of Mixer's
-//  API either consume and/or return attributes.
-// 
-//  Istio uses attributes to control the runtime behavior of services running in the service mesh.
-//  Attributes are named and typed pieces of metadata describing ingress and egress traffic and the
-//  environment this traffic occurs in. An Istio attribute carries a specific piece
-//  of information such as the error code of an API request, the latency of an API request, or the
-//  original IP address of a TCP connection. For example:
-// 
-//  ```yaml
-//  request.path: xyz/abc
-//  request.size: 234
-//  request.time: 12:34:56.789 04/17/2017
-//  source.ip: 192.168.0.1
-//  target.service: example
-//  ```
-// 
+// Attributes represents a set of typed name/value pairs. Many of Mixer's
+// API either consume and/or return attributes.
+//
+// Istio uses attributes to control the runtime behavior of services running in the service mesh.
+// Attributes are named and typed pieces of metadata describing ingress and egress traffic and the
+// environment this traffic occurs in. An Istio attribute carries a specific piece
+// of information such as the error code of an API request, the latency of an API request, or the
+// original IP address of a TCP connection. For example:
+//
+// ```yaml
+// request.path: xyz/abc
+// request.size: 234
+// request.time: 12:34:56.789 04/17/2017
+// source.ip: 192.168.0.1
+// target.service: example
+// ```
+//
 Attributes: {
-	//  A map of attribute name to its value.
+	// A map of attribute name to its value.
 	attributes: {
 		<_>: Attributes_AttributeValue
 	} @protobuf(1,type=map<string,AttributeValue>)
 }
 
-//  Specifies one attribute value with different type.
+// Specifies one attribute value with different type.
 Attributes_AttributeValue: {
 }
-//  The attribute value.
+// The attribute value.
 Attributes_AttributeValue: {
-	//  Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI
+	// Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI
 	stringValue: string @protobuf(2,name=string_value)
 } | {
-	//  Used for values of type INT64
+	// Used for values of type INT64
 	int64Value: int64 @protobuf(3,name=int64_value)
 } | {
-	//  Used for values of type DOUBLE
+	// Used for values of type DOUBLE
 	doubleValue: float64 @protobuf(4,type=double,name=double_value)
 } | {
-	//  Used for values of type BOOL
+	// Used for values of type BOOL
 	boolValue: bool @protobuf(5,name=bool_value)
 } | {
-	//  Used for values of type BYTES
+	// Used for values of type BYTES
 	bytesValue: bytes @protobuf(6,name=bytes_value)
 } | {
-	//  Used for values of type TIMESTAMP
+	// Used for values of type TIMESTAMP
 	timestampValue: time.Time @protobuf(7,type=google.protobuf.Timestamp,name=timestamp_value)
 } | {
-	//  Used for values of type DURATION
+	// Used for values of type DURATION
 	durationValue: time.Duration @protobuf(8,type=google.protobuf.Duration,name=duration_value)
 } | {
-	//  Used for values of type STRING_MAP
+	// Used for values of type STRING_MAP
 	stringMapValue: Attributes_StringMap @protobuf(9,type=StringMap,name=string_map_value)
 } | {
 	testValue: test.Test @protobuf(10,type=acme.test.Test,name=test_value)
@@ -87,61 +87,61 @@
 	testValue: test_test.AnotherTest @protobuf(11,type=acme.test.test.AnotherTest,name=test_value)
 }
 
-//  Defines a string map.
+// Defines a string map.
 Attributes_StringMap: {
-	//  Holds a set of name/value pairs.
+	// Holds a set of name/value pairs.
 	entries: {
 		<_>: string
 	} @protobuf(1,type=map<string,string>)
 }
 
-//  Defines a list of attributes in compressed format optimized for transport.
-//  Within this message, strings are referenced using integer indices into
-//  one of two string dictionaries. Positive integers index into the global
-//  deployment-wide dictionary, whereas negative integers index into the message-level
-//  dictionary instead. The message-level dictionary is carried by the
-//  `words` field of this message, the deployment-wide dictionary is determined via
-//  configuration.
+// Defines a list of attributes in compressed format optimized for transport.
+// Within this message, strings are referenced using integer indices into
+// one of two string dictionaries. Positive integers index into the global
+// deployment-wide dictionary, whereas negative integers index into the message-level
+// dictionary instead. The message-level dictionary is carried by the
+// `words` field of this message, the deployment-wide dictionary is determined via
+// configuration.
 CompressedAttributes: {
-	//  The message-level dictionary.
+	// The message-level dictionary.
 	words?: [...string] @protobuf(1)
 
-	//  Holds attributes of type STRING, DNS_NAME, EMAIL_ADDRESS, URI
+	// Holds attributes of type STRING, DNS_NAME, EMAIL_ADDRESS, URI
 	strings: {
 		<_>: int32
 	} @protobuf(2,type=map<sint32,sint32>)
 
-	//  Holds attributes of type INT64
+	// Holds attributes of type INT64
 	int64s: {
 		<_>: int64
 	} @protobuf(3,type=map<sint32,int64>)
 
-	//  Holds attributes of type DOUBLE
+	// Holds attributes of type DOUBLE
 	doubles: {
 		<_>: float64
 	} @protobuf(4,type=map<sint32,double>)
 
-	//  Holds attributes of type BOOL
+	// Holds attributes of type BOOL
 	bools: {
 		<_>: bool
 	} @protobuf(5,type=map<sint32,bool>)
 
-	//  Holds attributes of type TIMESTAMP
+	// Holds attributes of type TIMESTAMP
 	time: {
 		<_>: __time.Time
 	} @protobuf(6,type=map<sint32,google.protobuf.Timestamp>,"(gogoproto.nullable)=false","(gogoproto.stdtime)")
 
-	//  Holds attributes of type DURATION
+	// Holds attributes of type DURATION
 	durations: {
 		<_>: __time.Duration
 	} @protobuf(7,type=map<sint32,google.protobuf.Duration>,"(gogoproto.nullable)=false","(gogoproto.stdduration)")
 
-	//  Holds attributes of type BYTES
+	// Holds attributes of type BYTES
 	bytes: {
 		<_>: __bytes
 	} @protobuf(8,type=map<sint32,bytes>)
 
-	//  Holds attributes of type STRING_MAP
+	// Holds attributes of type STRING_MAP
 	stringMaps: {
 		<_>: StringMap
 	} @protobuf(9,type=map<sint32,StringMap>,string_maps,"(gogoproto.nullable)=false")
@@ -149,10 +149,10 @@
 __time = time
 __bytes = bytes
 
-//  A map of string to string. The keys and values in this map are dictionary
-//  indices (see the [Attributes][istio.mixer.v1.CompressedAttributes] message for an explanation)
+// A map of string to string. The keys and values in this map are dictionary
+// indices (see the [Attributes][istio.mixer.v1.CompressedAttributes] message for an explanation)
 StringMap: {
-	//  Holds a set of name/value pairs.
+	// Holds a set of name/value pairs.
 	entries: {
 		<_>: int32
 	} @protobuf(1,type=map<sint32,sint32>)
diff --git a/encoding/protobuf/testdata/client_config.proto.out.cue b/encoding/protobuf/testdata/client_config.proto.out.cue
index f8535a7..527eead 100644
--- a/encoding/protobuf/testdata/client_config.proto.out.cue
+++ b/encoding/protobuf/testdata/client_config.proto.out.cue
@@ -1,23 +1,23 @@
 
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 
-//  $title: Mixer Client
-//  $description: Configuration state for the Mixer client library.
-//  $location: https://istio.io/docs/reference/config/policy-and-telemetry/istio.mixer.v1.config.client
+// $title: Mixer Client
+// $description: Configuration state for the Mixer client library.
+// $location: https://istio.io/docs/reference/config/policy-and-telemetry/istio.mixer.v1.config.client
 
-//  Describes the configuration state for the Mixer client library that's built into Envoy.
+// Describes the configuration state for the Mixer client library that's built into Envoy.
 package client
 
 import (
@@ -25,165 +25,165 @@
 	"time"
 )
 
-//  Specifies the behavior when the client is unable to connect to Mixer.
+// Specifies the behavior when the client is unable to connect to Mixer.
 NetworkFailPolicy: {
 
-	//  Specifies the behavior when the client is unable to connect to Mixer.
+	// Specifies the behavior when the client is unable to connect to Mixer.
 	policy?: NetworkFailPolicy_FailPolicy @protobuf(1,type=FailPolicy)
 
-	//  Max retries on transport error.
+	// Max retries on transport error.
 	maxRetry?: uint32 @protobuf(2,name=max_retry)
 
-	//  Base time to wait between retries.  Will be adjusted by exponential
-	//  backoff and jitter.
+	// Base time to wait between retries.  Will be adjusted by exponential
+	// backoff and jitter.
 	baseRetryWait?: time.Duration @protobuf(3,type=google.protobuf.Duration,name=base_retry_wait)
 
-	//  Max time to wait between retries.
+	// Max time to wait between retries.
 	maxRetryWait?: time.Duration @protobuf(4,type=google.protobuf.Duration,name=max_retry_wait)
 }
 
-//  Example of single-value enum.
+// Example of single-value enum.
 NetworkFailPolicy_FailPolicy:
-	//  If network connection fails, request is allowed and delivered to the
-	//  service.
+	// If network connection fails, request is allowed and delivered to the
+	// service.
 	"FAIL_OPEN"
 
 NetworkFailPolicy_FailPolicy_value FAIL_OPEN: 0
 
-//  Defines the per-service client configuration.
+// Defines the per-service client configuration.
 ServiceConfig: {
-	//  If true, do not call Mixer Check.
+	// If true, do not call Mixer Check.
 	disableCheckCalls?: bool @protobuf(1,name=disable_check_calls)
 
-	//  If true, do not call Mixer Report.
+	// If true, do not call Mixer Report.
 	disableReportCalls?: bool @protobuf(2,name=disable_report_calls)
 
-	//  Send these attributes to Mixer in both Check and Report. This
-	//  typically includes the "destination.service" attribute.
-	//  In case of a per-route override, per-route attributes take precedence
-	//  over the attributes supplied in the client configuration.
+	// Send these attributes to Mixer in both Check and Report. This
+	// typically includes the "destination.service" attribute.
+	// In case of a per-route override, per-route attributes take precedence
+	// over the attributes supplied in the client configuration.
 	mixerAttributes?: v1.Attributes @protobuf(3,type=Attributes,name=mixer_attributes)
 
-	//  HTTP API specifications to generate API attributes.
+	// HTTP API specifications to generate API attributes.
 	httpApiSpec?: [...HTTPAPISpec] @protobuf(4,name=http_api_spec)
 
-	//  Quota specifications to generate quota requirements.
+	// Quota specifications to generate quota requirements.
 	quotaSpec?: [...QuotaSpec] @protobuf(5,name=quota_spec)
 
-	//  Specifies the behavior when the client is unable to connect to Mixer.
-	//  This is the service-level policy. It overrides
-	//  [mesh-level
-	//  policy][istio.mixer.v1.config.client.TransportConfig.network_fail_policy].
+	// Specifies the behavior when the client is unable to connect to Mixer.
+	// This is the service-level policy. It overrides
+	// [mesh-level
+	// policy][istio.mixer.v1.config.client.TransportConfig.network_fail_policy].
 	networkFailPolicy?: NetworkFailPolicy @protobuf(7,name=network_fail_policy)
 
-	//  Default attributes to forward to upstream. This typically
-	//  includes the "source.ip" and "source.uid" attributes.
-	//  In case of a per-route override, per-route attributes take precedence
-	//  over the attributes supplied in the client configuration.
-	// 
-	//  Forwarded attributes take precedence over the static Mixer attributes.
-	//  The full order of application is as follows:
-	//  1. static Mixer attributes from the filter config;
-	//  2. static Mixer attributes from the route config;
-	//  3. forwarded attributes from the source filter config (if any);
-	//  4. forwarded attributes from the source route config (if any);
-	//  5. derived attributes from the request metadata.
+	// Default attributes to forward to upstream. This typically
+	// includes the "source.ip" and "source.uid" attributes.
+	// In case of a per-route override, per-route attributes take precedence
+	// over the attributes supplied in the client configuration.
+	//
+	// Forwarded attributes take precedence over the static Mixer attributes.
+	// The full order of application is as follows:
+	// 1. static Mixer attributes from the filter config;
+	// 2. static Mixer attributes from the route config;
+	// 3. forwarded attributes from the source filter config (if any);
+	// 4. forwarded attributes from the source route config (if any);
+	// 5. derived attributes from the request metadata.
 	forwardAttributes?: v1.Attributes @protobuf(8,type=Attributes,name=forward_attributes)
 }
 
-//  Defines the transport config on how to call Mixer.
+// Defines the transport config on how to call Mixer.
 TransportConfig: {
-	//  The flag to disable check cache.
+	// The flag to disable check cache.
 	disableCheckCache?: bool @protobuf(1,name=disable_check_cache)
 
-	//  The flag to disable quota cache.
+	// The flag to disable quota cache.
 	disableQuotaCache?: bool @protobuf(2,name=disable_quota_cache)
 
-	//  The flag to disable report batch.
+	// The flag to disable report batch.
 	disableReportBatch?: bool @protobuf(3,name=disable_report_batch)
 
-	//  Specifies the behavior when the client is unable to connect to Mixer.
-	//  This is the mesh level policy. The default value for policy is FAIL_OPEN.
+	// Specifies the behavior when the client is unable to connect to Mixer.
+	// This is the mesh level policy. The default value for policy is FAIL_OPEN.
 	networkFailPolicy?: NetworkFailPolicy @protobuf(4,name=network_fail_policy)
 
-	//  Specify refresh interval to write Mixer client statistics to Envoy share
-	//  memory. If not specified, the interval is 10 seconds.
+	// Specify refresh interval to write Mixer client statistics to Envoy share
+	// memory. If not specified, the interval is 10 seconds.
 	statsUpdateInterval?: time.Duration @protobuf(5,type=google.protobuf.Duration,name=stats_update_interval)
 
-	//  Name of the cluster that will forward check calls to a pool of mixer
-	//  servers. Defaults to "mixer_server". By using different names for
-	//  checkCluster and reportCluster, it is possible to have one set of
-	//  Mixer servers handle check calls, while another set of Mixer servers
-	//  handle report calls.
-	// 
-	//  NOTE: Any value other than the default "mixer_server" will require the
-	//  Istio Grafana dashboards to be reconfigured to use the new name.
+	// Name of the cluster that will forward check calls to a pool of mixer
+	// servers. Defaults to "mixer_server". By using different names for
+	// checkCluster and reportCluster, it is possible to have one set of
+	// Mixer servers handle check calls, while another set of Mixer servers
+	// handle report calls.
+	//
+	// NOTE: Any value other than the default "mixer_server" will require the
+	// Istio Grafana dashboards to be reconfigured to use the new name.
 	checkCluster?: string @protobuf(6,name=check_cluster)
 
-	//  Name of the cluster that will forward report calls to a pool of mixer
-	//  servers. Defaults to "mixer_server". By using different names for
-	//  checkCluster and reportCluster, it is possible to have one set of
-	//  Mixer servers handle check calls, while another set of Mixer servers
-	//  handle report calls.
-	// 
-	//  NOTE: Any value other than the default "mixer_server" will require the
-	//  Istio Grafana dashboards to be reconfigured to use the new name.
+	// Name of the cluster that will forward report calls to a pool of mixer
+	// servers. Defaults to "mixer_server". By using different names for
+	// checkCluster and reportCluster, it is possible to have one set of
+	// Mixer servers handle check calls, while another set of Mixer servers
+	// handle report calls.
+	//
+	// NOTE: Any value other than the default "mixer_server" will require the
+	// Istio Grafana dashboards to be reconfigured to use the new name.
 	reportCluster?: string @protobuf(7,name=report_cluster)
 
-	//  Default attributes to forward to Mixer upstream. This typically
-	//  includes the "source.ip" and "source.uid" attributes. These
-	//  attributes are consumed by the proxy in front of mixer.
+	// Default attributes to forward to Mixer upstream. This typically
+	// includes the "source.ip" and "source.uid" attributes. These
+	// attributes are consumed by the proxy in front of mixer.
 	attributesForMixerProxy?: v1.Attributes @protobuf(8,type=Attributes,name=attributes_for_mixer_proxy)
 }
 
-//  Defines the client config for HTTP.
+// Defines the client config for HTTP.
 HttpClientConfig: {
-	//  The transport config.
+	// The transport config.
 	transport?: TransportConfig @protobuf(1)
 
-	//  Map of control configuration indexed by destination.service. This
-	//  is used to support per-service configuration for cases where a
-	//  mixerclient serves multiple services.
+	// Map of control configuration indexed by destination.service. This
+	// is used to support per-service configuration for cases where a
+	// mixerclient serves multiple services.
 	serviceConfigs: {
 		<_>: ServiceConfig
 	} @protobuf(2,type=map<string,ServiceConfig>,service_configs)
 
-	//  Default destination service name if none was specified in the
-	//  client request.
+	// Default destination service name if none was specified in the
+	// client request.
 	defaultDestinationService?: string @protobuf(3,name=default_destination_service)
 
-	//  Default attributes to send to Mixer in both Check and
-	//  Report. This typically includes "destination.ip" and
-	//  "destination.uid" attributes.
+	// Default attributes to send to Mixer in both Check and
+	// Report. This typically includes "destination.ip" and
+	// "destination.uid" attributes.
 	mixerAttributes?: v1.Attributes @protobuf(4,type=Attributes,name=mixer_attributes)
 
-	//  Default attributes to forward to upstream. This typically
-	//  includes the "source.ip" and "source.uid" attributes.
+	// Default attributes to forward to upstream. This typically
+	// includes the "source.ip" and "source.uid" attributes.
 	forwardAttributes?: v1.Attributes @protobuf(5,type=Attributes,name=forward_attributes)
 }
 
-//  Defines the client config for TCP.
+// Defines the client config for TCP.
 TcpClientConfig: {
-	//  The transport config.
+	// The transport config.
 	transport?: TransportConfig @protobuf(1)
 
-	//  Default attributes to send to Mixer in both Check and
-	//  Report. This typically includes "destination.ip" and
-	//  "destination.uid" attributes.
+	// Default attributes to send to Mixer in both Check and
+	// Report. This typically includes "destination.ip" and
+	// "destination.uid" attributes.
 	mixerAttributes?: v1.Attributes @protobuf(2,type=Attributes,name=mixer_attributes)
 
-	//  If set to true, disables Mixer check calls.
+	// If set to true, disables Mixer check calls.
 	disableCheckCalls?: bool @protobuf(3,name=disable_check_calls)
 
-	//  If set to true, disables Mixer check calls.
+	// If set to true, disables Mixer check calls.
 	disableReportCalls?: bool @protobuf(4,name=disable_report_calls)
 
-	//  Quota specifications to generate quota requirements.
-	//  It applies on the new TCP connections.
+	// Quota specifications to generate quota requirements.
+	// It applies on the new TCP connections.
 	connectionQuotaSpec?: QuotaSpec @protobuf(5,name=connection_quota_spec)
 
-	//  Specify report interval to send periodical reports for long TCP
-	//  connections. If not specified, the interval is 10 seconds. This interval
-	//  should not be less than 1 second, otherwise it will be reset to 1 second.
+	// Specify report interval to send periodical reports for long TCP
+	// connections. If not specified, the interval is 10 seconds. This interval
+	// should not be less than 1 second, otherwise it will be reset to 1 second.
 	reportInterval?: time.Duration @protobuf(6,type=google.protobuf.Duration,name=report_interval)
 }
diff --git a/encoding/protobuf/testdata/gateway.proto.out.cue b/encoding/protobuf/testdata/gateway.proto.out.cue
index ac72914..b8061e5 100644
--- a/encoding/protobuf/testdata/gateway.proto.out.cue
+++ b/encoding/protobuf/testdata/gateway.proto.out.cue
@@ -1,417 +1,417 @@
 
-//  Copyright 2019 CUE Authors
-// 
-//  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
-//  
-//      http://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.
+// Copyright 2019 CUE Authors
+//
+// 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
+//
+//     http://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.
 
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 
-//  $title: Gateway
-//  $description: Configuration affecting edge load balancer.
-//  $location: https://istio.io/docs/reference/config/networking/v1alpha3/gateway.html
+// $title: Gateway
+// $description: Configuration affecting edge load balancer.
+// $location: https://istio.io/docs/reference/config/networking/v1alpha3/gateway.html
 
-//  `Gateway` describes a load balancer operating at the edge of the mesh
-//  receiving incoming or outgoing HTTP/TCP connections. The specification
-//  describes a set of ports that should be exposed, the type of protocol to
-//  use, SNI configuration for the load balancer, etc.
-// 
-//  For example, the following Gateway configuration sets up a proxy to act
-//  as a load balancer exposing port 80 and 9080 (http), 443 (https),
-//  9443(https) and port 2379 (TCP) for ingress.  The gateway will be
-//  applied to the proxy running on a pod with labels `app:
-//  my-gateway-controller`. While Istio will configure the proxy to listen
-//  on these ports, it is the responsibility of the user to ensure that
-//  external traffic to these ports are allowed into the mesh.
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-gateway
-//    namespace: some-config-namespace
-//  spec:
-//    selector:
-//      app: my-gateway-controller
-//    servers:
-//    - port:
-//        number: 80
-//        name: http
-//        protocol: HTTP
-//      hosts:
-//      - uk.bookinfo.com
-//      - eu.bookinfo.com
-//      tls:
-//        httpsRedirect: true # sends 301 redirect for http requests
-//    - port:
-//        number: 443
-//        name: https-443
-//        protocol: HTTPS
-//      hosts:
-//      - uk.bookinfo.com
-//      - eu.bookinfo.com
-//      tls:
-//        mode: SIMPLE # enables HTTPS on this port
-//        serverCertificate: /etc/certs/servercert.pem
-//        privateKey: /etc/certs/privatekey.pem
-//    - port:
-//        number: 9443
-//        name: https-9443
-//        protocol: HTTPS
-//      hosts:
-//      - "bookinfo-namespace/*.bookinfo.com"
-//      tls:
-//        mode: SIMPLE # enables HTTPS on this port
-//        credentialName: bookinfo-secret # fetches certs from Kubernetes secret
-//    - port:
-//        number: 9080
-//        name: http-wildcard
-//        protocol: HTTP
-//      hosts:
-//      - "*"
-//    - port:
-//        number: 2379 # to expose internal service via external port 2379
-//        name: mongo
-//        protocol: MONGO
-//      hosts:
-//      - "*"
-//  ```
-// 
-//  The Gateway specification above describes the L4-L6 properties of a load
-//  balancer. A `VirtualService` can then be bound to a gateway to control
-//  the forwarding of traffic arriving at a particular host or gateway port.
-// 
-//  For example, the following VirtualService splits traffic for
-//  `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`,
-//  `http://uk.bookinfo.com:9080/reviews`,
-//  `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of
-//  an internal reviews service on port 9080. In addition, requests
-//  containing the cookie "user: dev-123" will be sent to special port 7777
-//  in the qa version. The same rule is also applicable inside the mesh for
-//  requests to the "reviews.prod.svc.cluster.local" service. This rule is
-//  applicable across ports 443, 9080. Note that `http://uk.bookinfo.com`
-//  gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443).
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: VirtualService
-//  metadata:
-//    name: bookinfo-rule
-//    namespace: bookinfo-namespace
-//  spec:
-//    hosts:
-//    - reviews.prod.svc.cluster.local
-//    - uk.bookinfo.com
-//    - eu.bookinfo.com
-//    gateways:
-//    - some-config-namespace/my-gateway
-//    - mesh # applies to all the sidecars in the mesh
-//    http:
-//    - match:
-//      - headers:
-//          cookie:
-//            exact: "user=dev-123"
-//      route:
-//      - destination:
-//          port:
-//            number: 7777
-//          host: reviews.qa.svc.cluster.local
-//    - match:
-//      - uri:
-//          prefix: /reviews/
-//      route:
-//      - destination:
-//          port:
-//            number: 9080 # can be omitted if it's the only port for reviews
-//          host: reviews.prod.svc.cluster.local
-//        weight: 80
-//      - destination:
-//          host: reviews.qa.svc.cluster.local
-//        weight: 20
-//  ```
-// 
-//  The following VirtualService forwards traffic arriving at (external)
-//  port 27017 to internal Mongo server on port 5555. This rule is not
-//  applicable internally in the mesh as the gateway list omits the
-//  reserved name `mesh`.
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: VirtualService
-//  metadata:
-//    name: bookinfo-Mongo
-//    namespace: bookinfo-namespace
-//  spec:
-//    hosts:
-//    - mongosvr.prod.svc.cluster.local # name of internal Mongo service
-//    gateways:
-//    - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
-//                                         namespace as virtual service.
-//    tcp:
-//    - match:
-//      - port: 27017
-//      route:
-//      - destination:
-//          host: mongo.prod.svc.cluster.local
-//          port:
-//            number: 5555
-//  ```
-// 
-//  It is possible to restrict the set of virtual services that can bind to
-//  a gateway server using the namespace/hostname syntax in the hosts field.
-//  For example, the following Gateway allows any virtual service in the ns1
-//  namespace to bind to it, while restricting only the virtual service with
-//  foo.bar.com host in the ns2 namespace to bind to it.
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-gateway
-//    namespace: some-config-namespace
-//  spec:
-//    selector:
-//      app: my-gateway-controller
-//    servers:
-//    - port:
-//        number: 80
-//        name: http
-//        protocol: HTTP
-//      hosts:
-//      - "ns1/*"
-//      - "ns2/foo.bar.com"
-//  ```
-// 
+// `Gateway` describes a load balancer operating at the edge of the mesh
+// receiving incoming or outgoing HTTP/TCP connections. The specification
+// describes a set of ports that should be exposed, the type of protocol to
+// use, SNI configuration for the load balancer, etc.
+//
+// For example, the following Gateway configuration sets up a proxy to act
+// as a load balancer exposing port 80 and 9080 (http), 443 (https),
+// 9443(https) and port 2379 (TCP) for ingress.  The gateway will be
+// applied to the proxy running on a pod with labels `app:
+// my-gateway-controller`. While Istio will configure the proxy to listen
+// on these ports, it is the responsibility of the user to ensure that
+// external traffic to these ports are allowed into the mesh.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-gateway
+//   namespace: some-config-namespace
+// spec:
+//   selector:
+//     app: my-gateway-controller
+//   servers:
+//   - port:
+//       number: 80
+//       name: http
+//       protocol: HTTP
+//     hosts:
+//     - uk.bookinfo.com
+//     - eu.bookinfo.com
+//     tls:
+//       httpsRedirect: true # sends 301 redirect for http requests
+//   - port:
+//       number: 443
+//       name: https-443
+//       protocol: HTTPS
+//     hosts:
+//     - uk.bookinfo.com
+//     - eu.bookinfo.com
+//     tls:
+//       mode: SIMPLE # enables HTTPS on this port
+//       serverCertificate: /etc/certs/servercert.pem
+//       privateKey: /etc/certs/privatekey.pem
+//   - port:
+//       number: 9443
+//       name: https-9443
+//       protocol: HTTPS
+//     hosts:
+//     - "bookinfo-namespace/*.bookinfo.com"
+//     tls:
+//       mode: SIMPLE # enables HTTPS on this port
+//       credentialName: bookinfo-secret # fetches certs from Kubernetes secret
+//   - port:
+//       number: 9080
+//       name: http-wildcard
+//       protocol: HTTP
+//     hosts:
+//     - "*"
+//   - port:
+//       number: 2379 # to expose internal service via external port 2379
+//       name: mongo
+//       protocol: MONGO
+//     hosts:
+//     - "*"
+// ```
+//
+// The Gateway specification above describes the L4-L6 properties of a load
+// balancer. A `VirtualService` can then be bound to a gateway to control
+// the forwarding of traffic arriving at a particular host or gateway port.
+//
+// For example, the following VirtualService splits traffic for
+// `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`,
+// `http://uk.bookinfo.com:9080/reviews`,
+// `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of
+// an internal reviews service on port 9080. In addition, requests
+// containing the cookie "user: dev-123" will be sent to special port 7777
+// in the qa version. The same rule is also applicable inside the mesh for
+// requests to the "reviews.prod.svc.cluster.local" service. This rule is
+// applicable across ports 443, 9080. Note that `http://uk.bookinfo.com`
+// gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443).
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+//   name: bookinfo-rule
+//   namespace: bookinfo-namespace
+// spec:
+//   hosts:
+//   - reviews.prod.svc.cluster.local
+//   - uk.bookinfo.com
+//   - eu.bookinfo.com
+//   gateways:
+//   - some-config-namespace/my-gateway
+//   - mesh # applies to all the sidecars in the mesh
+//   http:
+//   - match:
+//     - headers:
+//         cookie:
+//           exact: "user=dev-123"
+//     route:
+//     - destination:
+//         port:
+//           number: 7777
+//         host: reviews.qa.svc.cluster.local
+//   - match:
+//     - uri:
+//         prefix: /reviews/
+//     route:
+//     - destination:
+//         port:
+//           number: 9080 # can be omitted if it's the only port for reviews
+//         host: reviews.prod.svc.cluster.local
+//       weight: 80
+//     - destination:
+//         host: reviews.qa.svc.cluster.local
+//       weight: 20
+// ```
+//
+// The following VirtualService forwards traffic arriving at (external)
+// port 27017 to internal Mongo server on port 5555. This rule is not
+// applicable internally in the mesh as the gateway list omits the
+// reserved name `mesh`.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+//   name: bookinfo-Mongo
+//   namespace: bookinfo-namespace
+// spec:
+//   hosts:
+//   - mongosvr.prod.svc.cluster.local # name of internal Mongo service
+//   gateways:
+//   - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
+//                                        namespace as virtual service.
+//   tcp:
+//   - match:
+//     - port: 27017
+//     route:
+//     - destination:
+//         host: mongo.prod.svc.cluster.local
+//         port:
+//           number: 5555
+// ```
+//
+// It is possible to restrict the set of virtual services that can bind to
+// a gateway server using the namespace/hostname syntax in the hosts field.
+// For example, the following Gateway allows any virtual service in the ns1
+// namespace to bind to it, while restricting only the virtual service with
+// foo.bar.com host in the ns2 namespace to bind to it.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-gateway
+//   namespace: some-config-namespace
+// spec:
+//   selector:
+//     app: my-gateway-controller
+//   servers:
+//   - port:
+//       number: 80
+//       name: http
+//       protocol: HTTP
+//     hosts:
+//     - "ns1/*"
+//     - "ns2/foo.bar.com"
+// ```
+//
 package v1alpha3
 
 Gateway: {
-	//  REQUIRED: A list of server specifications.
+	// REQUIRED: A list of server specifications.
 	servers?: [...Server] @protobuf(1)
 
-	//  REQUIRED: One or more labels that indicate a specific set of pods/VMs
-	//  on which this gateway configuration should be applied. The scope of
-	//  label search is restricted to the configuration namespace in which the
-	//  the resource is present. In other words, the Gateway resource must
-	//  reside in the same namespace as the gateway workload instance.
+	// REQUIRED: One or more labels that indicate a specific set of pods/VMs
+	// on which this gateway configuration should be applied. The scope of
+	// label search is restricted to the configuration namespace in which the
+	// the resource is present. In other words, the Gateway resource must
+	// reside in the same namespace as the gateway workload instance.
 	selector: {
 		<_>: string
 	} @protobuf(2,type=map<string,string>)
 	selector? <name>: name
 }
 
-//  `Server` describes the properties of the proxy on a given load balancer
-//  port. For example,
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-ingress
-//  spec:
-//    selector:
-//      app: my-ingress-gateway
-//    servers:
-//    - port:
-//        number: 80
-//        name: http2
-//        protocol: HTTP2
-//      hosts:
-//      - "*"
-//  ```
-// 
-//  Another example
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-tcp-ingress
-//  spec:
-//    selector:
-//      app: my-tcp-ingress-gateway
-//    servers:
-//    - port:
-//        number: 27018
-//        name: mongo
-//        protocol: MONGO
-//      hosts:
-//      - "*"
-//  ```
-// 
-//  The following is an example of TLS configuration for port 443
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-tls-ingress
-//  spec:
-//    selector:
-//      app: my-tls-ingress-gateway
-//    servers:
-//    - port:
-//        number: 443
-//        name: https
-//        protocol: HTTPS
-//      hosts:
-//      - "*"
-//      tls:
-//        mode: SIMPLE
-//        serverCertificate: /etc/certs/server.pem
-//        privateKey: /etc/certs/privatekey.pem
-//  ```
+// `Server` describes the properties of the proxy on a given load balancer
+// port. For example,
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-ingress
+// spec:
+//   selector:
+//     app: my-ingress-gateway
+//   servers:
+//   - port:
+//       number: 80
+//       name: http2
+//       protocol: HTTP2
+//     hosts:
+//     - "*"
+// ```
+//
+// Another example
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-tcp-ingress
+// spec:
+//   selector:
+//     app: my-tcp-ingress-gateway
+//   servers:
+//   - port:
+//       number: 27018
+//       name: mongo
+//       protocol: MONGO
+//     hosts:
+//     - "*"
+// ```
+//
+// The following is an example of TLS configuration for port 443
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-tls-ingress
+// spec:
+//   selector:
+//     app: my-tls-ingress-gateway
+//   servers:
+//   - port:
+//       number: 443
+//       name: https
+//       protocol: HTTPS
+//     hosts:
+//     - "*"
+//     tls:
+//       mode: SIMPLE
+//       serverCertificate: /etc/certs/server.pem
+//       privateKey: /etc/certs/privatekey.pem
+// ```
 Server: {
-	//  REQUIRED: The Port on which the proxy should listen for incoming
-	//  connections.
+	// REQUIRED: The Port on which the proxy should listen for incoming
+	// connections.
 	port?: Port @protobuf(1)
 	port?: >10 & <100
 
-	//  $hide_from_docs
-	//  The ip or the Unix domain socket to which the listener should be bound
-	//  to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar`
-	//  (Linux abstract namespace). When using Unix domain sockets, the port
-	//  number should be 0.
+	// $hide_from_docs
+	// The ip or the Unix domain socket to which the listener should be bound
+	// to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar`
+	// (Linux abstract namespace). When using Unix domain sockets, the port
+	// number should be 0.
 	bind?: string @protobuf(4)
 
-	//  REQUIRED. One or more hosts exposed by this gateway.
-	//  While typically applicable to
-	//  HTTP services, it can also be used for TCP services using TLS with SNI.
-	//  A host is specified as a `dnsName` with an optional `namespace/` prefix.
-	//  The `dnsName` should be specified using FQDN format, optionally including
-	//  a wildcard character in the left-most component (e.g., `prod/*.example.com`).
-	//  Set the `dnsName` to `*` to select all `VirtualService` hosts from the
-	//  specified namespace (e.g.,`prod/*`). If no `namespace/` is specified,
-	//  the `VirtualService` hosts will be selected from any available namespace.
-	//  Any associated `DestinationRule` in the same namespace will also be used.
-	// 
-	//  A `VirtualService` must be bound to the gateway and must have one or
-	//  more hosts that match the hosts specified in a server. The match
-	//  could be an exact match or a suffix match with the server's hosts. For
-	//  example, if the server's hosts specifies `*.example.com`, a
-	//  `VirtualService` with hosts `dev.example.com` or `prod.example.com` will
-	//  match. However, a `VirtualService` with host `example.com` or
-	//  `newexample.com` will not match.
-	// 
-	//  NOTE: Only virtual services exported to the gateway's namespace
-	//  (e.g., `exportTo` value of `*`) can be referenced.
-	//  Private configurations (e.g., `exportTo` set to `.`) will not be
-	//  available. Refer to the `exportTo` setting in `VirtualService`,
-	//  `DestinationRule`, and `ServiceEntry` configurations for details.
+	// REQUIRED. One or more hosts exposed by this gateway.
+	// While typically applicable to
+	// HTTP services, it can also be used for TCP services using TLS with SNI.
+	// A host is specified as a `dnsName` with an optional `namespace/` prefix.
+	// The `dnsName` should be specified using FQDN format, optionally including
+	// a wildcard character in the left-most component (e.g., `prod/*.example.com`).
+	// Set the `dnsName` to `*` to select all `VirtualService` hosts from the
+	// specified namespace (e.g.,`prod/*`). If no `namespace/` is specified,
+	// the `VirtualService` hosts will be selected from any available namespace.
+	// Any associated `DestinationRule` in the same namespace will also be used.
+	//
+	// A `VirtualService` must be bound to the gateway and must have one or
+	// more hosts that match the hosts specified in a server. The match
+	// could be an exact match or a suffix match with the server's hosts. For
+	// example, if the server's hosts specifies `*.example.com`, a
+	// `VirtualService` with hosts `dev.example.com` or `prod.example.com` will
+	// match. However, a `VirtualService` with host `example.com` or
+	// `newexample.com` will not match.
+	//
+	// NOTE: Only virtual services exported to the gateway's namespace
+	// (e.g., `exportTo` value of `*`) can be referenced.
+	// Private configurations (e.g., `exportTo` set to `.`) will not be
+	// available. Refer to the `exportTo` setting in `VirtualService`,
+	// `DestinationRule`, and `ServiceEntry` configurations for details.
 	hosts?: [...string] @protobuf(2)
 
-	//  Set of TLS related options that govern the server's behavior. Use
-	//  these options to control if all http requests should be redirected to
-	//  https, and the TLS modes to use.
+	// Set of TLS related options that govern the server's behavior. Use
+	// these options to control if all http requests should be redirected to
+	// https, and the TLS modes to use.
 	tls?: Server_TLSOptions @protobuf(3,type=TLSOptions)
 
-	//  The loopback IP endpoint or Unix domain socket to which traffic should
-	//  be forwarded to by default. Format should be `127.0.0.1:PORT` or
-	//  `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace).
+	// The loopback IP endpoint or Unix domain socket to which traffic should
+	// be forwarded to by default. Format should be `127.0.0.1:PORT` or
+	// `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace).
 	defaultEndpoint?: string @protobuf(5,name=default_endpoint)
 }
 
 Server_TLSOptions: {
-	//  If set to true, the load balancer will send a 301 redirect for all
-	//  http connections, asking the clients to use HTTPS.
+	// If set to true, the load balancer will send a 301 redirect for all
+	// http connections, asking the clients to use HTTPS.
 	httpsRedirect?: bool @protobuf(1,name=https_redirect)
 
-	//  Optional: Indicates whether connections to this port should be
-	//  secured using TLS. The value of this field determines how TLS is
-	//  enforced.
+	// Optional: Indicates whether connections to this port should be
+	// secured using TLS. The value of this field determines how TLS is
+	// enforced.
 	mode?: Server_TLSOptions_TLSmode @protobuf(2,type=TLSmode)
 
-	//  Extra comment.
+	// Extra comment.
 
-	//  REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
-	//  holding the server-side TLS certificate to use.
+	// REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
+	// holding the server-side TLS certificate to use.
 	serverCertificate?: string @protobuf(3,name=server_certificate)
 
-	//  REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
-	//  holding the server's private key.
+	// REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
+	// holding the server's private key.
 	privateKey?: string @protobuf(4,name=private_key)
 
-	//  REQUIRED if mode is `MUTUAL`. The path to a file containing
-	//  certificate authority certificates to use in verifying a presented
-	//  client side certificate.
+	// REQUIRED if mode is `MUTUAL`. The path to a file containing
+	// certificate authority certificates to use in verifying a presented
+	// client side certificate.
 	caCertificates?: string @protobuf(5,name=ca_certificates)
 
-	//  The credentialName stands for a unique identifier that can be used
-	//  to identify the serverCertificate and the privateKey. The
-	//  credentialName appended with suffix "-cacert" is used to identify
-	//  the CaCertificates associated with this server. Gateway workloads
-	//  capable of fetching credentials from a remote credential store such
-	//  as Kubernetes secrets, will be configured to retrieve the
-	//  serverCertificate and the privateKey using credentialName, instead
-	//  of using the file system paths specified above. If using mutual TLS,
-	//  gateway workload instances will retrieve the CaCertificates using
-	//  credentialName-cacert. The semantics of the name are platform
-	//  dependent.  In Kubernetes, the default Istio supplied credential
-	//  server expects the credentialName to match the name of the
-	//  Kubernetes secret that holds the server certificate, the private
-	//  key, and the CA certificate (if using mutual TLS). Set the
-	//  `ISTIO_META_USER_SDS` metadata variable in the gateway's proxy to
-	//  enable the dynamic credential fetching feature.
+	// The credentialName stands for a unique identifier that can be used
+	// to identify the serverCertificate and the privateKey. The
+	// credentialName appended with suffix "-cacert" is used to identify
+	// the CaCertificates associated with this server. Gateway workloads
+	// capable of fetching credentials from a remote credential store such
+	// as Kubernetes secrets, will be configured to retrieve the
+	// serverCertificate and the privateKey using credentialName, instead
+	// of using the file system paths specified above. If using mutual TLS,
+	// gateway workload instances will retrieve the CaCertificates using
+	// credentialName-cacert. The semantics of the name are platform
+	// dependent.  In Kubernetes, the default Istio supplied credential
+	// server expects the credentialName to match the name of the
+	// Kubernetes secret that holds the server certificate, the private
+	// key, and the CA certificate (if using mutual TLS). Set the
+	// `ISTIO_META_USER_SDS` metadata variable in the gateway's proxy to
+	// enable the dynamic credential fetching feature.
 	credentialName?: string @protobuf(10,name=credential_name)
 
-	//  A list of alternate names to verify the subject identity in the
-	//  certificate presented by the client.
+	// A list of alternate names to verify the subject identity in the
+	// certificate presented by the client.
 	subjectAltNames?: [...string] @protobuf(6,name=subject_alt_names)
 
-	//  Optional: Minimum TLS protocol version.
+	// Optional: Minimum TLS protocol version.
 	minProtocolVersion?: Server_TLSOptions_TLSProtocol @protobuf(7,type=TLSProtocol,name=min_protocol_version)
 
-	//  Optional: Maximum TLS protocol version.
+	// Optional: Maximum TLS protocol version.
 	maxProtocolVersion?: Server_TLSOptions_TLSProtocol @protobuf(8,type=TLSProtocol,name=max_protocol_version)
 
-	//  Optional: If specified, only support the specified cipher list.
-	//  Otherwise default to the default cipher list supported by Envoy.
+	// Optional: If specified, only support the specified cipher list.
+	// Otherwise default to the default cipher list supported by Envoy.
 	cipherSuites?: [...string] @protobuf(9,name=cipher_suites)
 }
 
-//  TLS modes enforced by the proxy
+// TLS modes enforced by the proxy
 Server_TLSOptions_TLSmode:
-	//  The SNI string presented by the client will be used as the match
-	//  criterion in a VirtualService TLS route to determine the
-	//  destination service from the service registry.
+	// The SNI string presented by the client will be used as the match
+	// criterion in a VirtualService TLS route to determine the
+	// destination service from the service registry.
 	*"PASSTHROUGH" |
 
-	//  Secure connections with standard TLS semantics.
+	// Secure connections with standard TLS semantics.
 	"SIMPLE" |
 
-	//  Secure connections to the upstream using mutual TLS by presenting
-	//  client certificates for authentication.
+	// Secure connections to the upstream using mutual TLS by presenting
+	// client certificates for authentication.
 	"MUTUAL" |
 
-	//  Similar to the passthrough mode, except servers with this TLS mode
-	//  do not require an associated VirtualService to map from the SNI
-	//  value to service in the registry. The destination details such as
-	//  the service/subset/port are encoded in the SNI value. The proxy
-	//  will forward to the upstream (Envoy) cluster (a group of
-	//  endpoints) specified by the SNI value. This server is typically
-	//  used to provide connectivity between services in disparate L3
-	//  networks that otherwise do not have direct connectivity between
-	//  their respective endpoints. Use of this mode assumes that both the
-	//  source and the destination are using Istio mTLS to secure traffic.
+	// Similar to the passthrough mode, except servers with this TLS mode
+	// do not require an associated VirtualService to map from the SNI
+	// value to service in the registry. The destination details such as
+	// the service/subset/port are encoded in the SNI value. The proxy
+	// will forward to the upstream (Envoy) cluster (a group of
+	// endpoints) specified by the SNI value. This server is typically
+	// used to provide connectivity between services in disparate L3
+	// networks that otherwise do not have direct connectivity between
+	// their respective endpoints. Use of this mode assumes that both the
+	// source and the destination are using Istio mTLS to secure traffic.
 	"AUTO_PASSTHROUGH"
 
 Server_TLSOptions_TLSmode_value: {
@@ -421,13 +421,13 @@
 	AUTO_PASSTHROUGH: 3
 }
 
-//  TLS protocol versions.
+// TLS protocol versions.
 Server_TLSOptions_TLSProtocol:
-	*"TLS_AUTO" | //  Automatically choose the optimal TLS version.
-	"TLSV1_0" | //  TLS version 1.0
-	"TLSV1_1" | //  TLS version 1.1
-	"TLSV1_2" | //  TLS version 1.2
-	"TLSV1_3" //  TLS version 1.3
+	*"TLS_AUTO" | // Automatically choose the optimal TLS version.
+	"TLSV1_0" | // TLS version 1.0
+	"TLSV1_1" | // TLS version 1.1
+	"TLSV1_2" | // TLS version 1.2
+	"TLSV1_3" // TLS version 1.3
 
 Server_TLSOptions_TLSProtocol_value: {
 	TLS_AUTO: 0
@@ -437,17 +437,17 @@
 	TLSV1_3:  4
 }
 
-//  Port describes the properties of a specific port of a service.
+// Port describes the properties of a specific port of a service.
 Port: {
-	//  REQUIRED: A valid non-negative integer port number.
+	// REQUIRED: A valid non-negative integer port number.
 	number?: uint32 @protobuf(1)
 
-	//  REQUIRED: The protocol exposed on the port.
-	//  MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.
-	//  TLS implies the connection will be routed based on the SNI header to
-	//  the destination without terminating the TLS connection.
+	// REQUIRED: The protocol exposed on the port.
+	// MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.
+	// TLS implies the connection will be routed based on the SNI header to
+	// the destination without terminating the TLS connection.
 	protocol?: string @protobuf(2)
 
-	//  Label assigned to the port.
+	// Label assigned to the port.
 	name?: string @protobuf(3)
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/mixer/v1/attributes_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/mixer/v1/attributes_proto_gen.cue
index cf13972..3211820 100644
--- a/encoding/protobuf/testdata/istio.io/api/mixer/v1/attributes_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/mixer/v1/attributes_proto_gen.cue
@@ -1,17 +1,17 @@
 
-//  Copyright 2016 Istio Authors
-// 
-//  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
-// 
-//      http://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.
+// Copyright 2016 Istio Authors
+//
+// 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
+//
+//     http://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.
 package v1
 
 import (
@@ -29,57 +29,57 @@
 	numberVal?: number @protobuf(6,type=google.protobuf.NumberValue)
 }
 
-//  Attributes represents a set of typed name/value pairs. Many of Mixer's
-//  API either consume and/or return attributes.
-// 
-//  Istio uses attributes to control the runtime behavior of services running in the service mesh.
-//  Attributes are named and typed pieces of metadata describing ingress and egress traffic and the
-//  environment this traffic occurs in. An Istio attribute carries a specific piece
-//  of information such as the error code of an API request, the latency of an API request, or the
-//  original IP address of a TCP connection. For example:
-// 
-//  ```yaml
-//  request.path: xyz/abc
-//  request.size: 234
-//  request.time: 12:34:56.789 04/17/2017
-//  source.ip: 192.168.0.1
-//  target.service: example
-//  ```
-// 
+// Attributes represents a set of typed name/value pairs. Many of Mixer's
+// API either consume and/or return attributes.
+//
+// Istio uses attributes to control the runtime behavior of services running in the service mesh.
+// Attributes are named and typed pieces of metadata describing ingress and egress traffic and the
+// environment this traffic occurs in. An Istio attribute carries a specific piece
+// of information such as the error code of an API request, the latency of an API request, or the
+// original IP address of a TCP connection. For example:
+//
+// ```yaml
+// request.path: xyz/abc
+// request.size: 234
+// request.time: 12:34:56.789 04/17/2017
+// source.ip: 192.168.0.1
+// target.service: example
+// ```
+//
 Attributes: {
-	//  A map of attribute name to its value.
+	// A map of attribute name to its value.
 	attributes: {
 		<_>: Attributes_AttributeValue
 	} @protobuf(1,type=map<string,AttributeValue>)
 }
 
-//  Specifies one attribute value with different type.
+// Specifies one attribute value with different type.
 Attributes_AttributeValue: {
 }
-//  The attribute value.
+// The attribute value.
 Attributes_AttributeValue: {
-	//  Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI
+	// Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI
 	stringValue: string @protobuf(2,name=string_value)
 } | {
-	//  Used for values of type INT64
+	// Used for values of type INT64
 	int64Value: int64 @protobuf(3,name=int64_value)
 } | {
-	//  Used for values of type DOUBLE
+	// Used for values of type DOUBLE
 	doubleValue: float64 @protobuf(4,type=double,name=double_value)
 } | {
-	//  Used for values of type BOOL
+	// Used for values of type BOOL
 	boolValue: bool @protobuf(5,name=bool_value)
 } | {
-	//  Used for values of type BYTES
+	// Used for values of type BYTES
 	bytesValue: bytes @protobuf(6,name=bytes_value)
 } | {
-	//  Used for values of type TIMESTAMP
+	// Used for values of type TIMESTAMP
 	timestampValue: time.Time @protobuf(7,type=google.protobuf.Timestamp,name=timestamp_value)
 } | {
-	//  Used for values of type DURATION
+	// Used for values of type DURATION
 	durationValue: time.Duration @protobuf(8,type=google.protobuf.Duration,name=duration_value)
 } | {
-	//  Used for values of type STRING_MAP
+	// Used for values of type STRING_MAP
 	stringMapValue: Attributes_StringMap @protobuf(9,type=StringMap,name=string_map_value)
 } | {
 	testValue: test.Test @protobuf(10,type=acme.test.Test,name=test_value)
@@ -87,61 +87,61 @@
 	testValue: test_test.AnotherTest @protobuf(11,type=acme.test.test.AnotherTest,name=test_value)
 }
 
-//  Defines a string map.
+// Defines a string map.
 Attributes_StringMap: {
-	//  Holds a set of name/value pairs.
+	// Holds a set of name/value pairs.
 	entries: {
 		<_>: string
 	} @protobuf(1,type=map<string,string>)
 }
 
-//  Defines a list of attributes in compressed format optimized for transport.
-//  Within this message, strings are referenced using integer indices into
-//  one of two string dictionaries. Positive integers index into the global
-//  deployment-wide dictionary, whereas negative integers index into the message-level
-//  dictionary instead. The message-level dictionary is carried by the
-//  `words` field of this message, the deployment-wide dictionary is determined via
-//  configuration.
+// Defines a list of attributes in compressed format optimized for transport.
+// Within this message, strings are referenced using integer indices into
+// one of two string dictionaries. Positive integers index into the global
+// deployment-wide dictionary, whereas negative integers index into the message-level
+// dictionary instead. The message-level dictionary is carried by the
+// `words` field of this message, the deployment-wide dictionary is determined via
+// configuration.
 CompressedAttributes: {
-	//  The message-level dictionary.
+	// The message-level dictionary.
 	words?: [...string] @protobuf(1)
 
-	//  Holds attributes of type STRING, DNS_NAME, EMAIL_ADDRESS, URI
+	// Holds attributes of type STRING, DNS_NAME, EMAIL_ADDRESS, URI
 	strings: {
 		<_>: int32
 	} @protobuf(2,type=map<sint32,sint32>)
 
-	//  Holds attributes of type INT64
+	// Holds attributes of type INT64
 	int64s: {
 		<_>: int64
 	} @protobuf(3,type=map<sint32,int64>)
 
-	//  Holds attributes of type DOUBLE
+	// Holds attributes of type DOUBLE
 	doubles: {
 		<_>: float64
 	} @protobuf(4,type=map<sint32,double>)
 
-	//  Holds attributes of type BOOL
+	// Holds attributes of type BOOL
 	bools: {
 		<_>: bool
 	} @protobuf(5,type=map<sint32,bool>)
 
-	//  Holds attributes of type TIMESTAMP
+	// Holds attributes of type TIMESTAMP
 	time: {
 		<_>: __time.Time
 	} @protobuf(6,type=map<sint32,google.protobuf.Timestamp>,"(gogoproto.nullable)=false","(gogoproto.stdtime)")
 
-	//  Holds attributes of type DURATION
+	// Holds attributes of type DURATION
 	durations: {
 		<_>: __time.Duration
 	} @protobuf(7,type=map<sint32,google.protobuf.Duration>,"(gogoproto.nullable)=false","(gogoproto.stdduration)")
 
-	//  Holds attributes of type BYTES
+	// Holds attributes of type BYTES
 	bytes: {
 		<_>: __bytes
 	} @protobuf(8,type=map<sint32,bytes>)
 
-	//  Holds attributes of type STRING_MAP
+	// Holds attributes of type STRING_MAP
 	stringMaps: {
 		<_>: StringMap
 	} @protobuf(9,type=map<sint32,StringMap>,string_maps,"(gogoproto.nullable)=false")
@@ -149,10 +149,10 @@
 __time = time
 __bytes = bytes
 
-//  A map of string to string. The keys and values in this map are dictionary
-//  indices (see the [Attributes][istio.mixer.v1.CompressedAttributes] message for an explanation)
+// A map of string to string. The keys and values in this map are dictionary
+// indices (see the [Attributes][istio.mixer.v1.CompressedAttributes] message for an explanation)
 StringMap: {
-	//  Holds a set of name/value pairs.
+	// Holds a set of name/value pairs.
 	entries: {
 		<_>: int32
 	} @protobuf(1,type=map<sint32,sint32>)
diff --git a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/api_spec_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/api_spec_proto_gen.cue
index 3650de8..6594c92 100644
--- a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/api_spec_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/api_spec_proto_gen.cue
@@ -1,228 +1,228 @@
 
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 package client
 
 import "istio.io/api/mixer/v1"
 
-//  HTTPAPISpec defines the canonical configuration for generating
-//  API-related attributes from HTTP requests based on the method and
-//  uri templated path matches. It is sufficient for defining the API
-//  surface of a service for the purposes of API attribute
-//  generation. It is not intended to represent auth, quota,
-//  documentation, or other information commonly found in other API
-//  specifications, e.g. OpenAPI.
-// 
-//  Existing standards that define operations (or methods) in terms of
-//  HTTP methods and paths can be normalized to this format for use in
-//  Istio. For example, a simple petstore API described by OpenAPIv2
-//  [here](https://github.com/googleapis/gnostic/blob/master/examples/v2.0/yaml/petstore-simple.yaml)
-//  can be represented with the following HTTPAPISpec.
-// 
-//  ```yaml
-//  apiVersion: config.istio.io/v1alpha2
-//  kind: HTTPAPISpec
-//  metadata:
-//    name: petstore
-//    namespace: default
-//  spec:
-//    attributes:
-//      attributes:
-//        api.service:
-//          stringValue: petstore.swagger.io
-//        api.version:
-//          stringValue: 1.0.0
-//    patterns:
-//    - attributes:
-//        attributes:
-//          api.operation:
-//            stringValue: findPets
-//      httpMethod: GET
-//      uriTemplate: /api/pets
-//    - attributes:
-//        attributes:
-//          api.operation:
-//            stringValue: addPet
-//      httpMethod: POST
-//      uriTemplate: /api/pets
-//    - attributes:
-//        attributes:
-//          api.operation:
-//            stringValue: findPetById
-//      httpMethod: GET
-//      uriTemplate: /api/pets/{id}
-//    - attributes:
-//        attributes:
-//          api.operation:
-//            stringValue: deletePet
-//      httpMethod: DELETE
-//      uriTemplate: /api/pets/{id}
-//    api_keys:
-//    - query: api-key
-//  ```
+// HTTPAPISpec defines the canonical configuration for generating
+// API-related attributes from HTTP requests based on the method and
+// uri templated path matches. It is sufficient for defining the API
+// surface of a service for the purposes of API attribute
+// generation. It is not intended to represent auth, quota,
+// documentation, or other information commonly found in other API
+// specifications, e.g. OpenAPI.
+//
+// Existing standards that define operations (or methods) in terms of
+// HTTP methods and paths can be normalized to this format for use in
+// Istio. For example, a simple petstore API described by OpenAPIv2
+// [here](https://github.com/googleapis/gnostic/blob/master/examples/v2.0/yaml/petstore-simple.yaml)
+// can be represented with the following HTTPAPISpec.
+//
+// ```yaml
+// apiVersion: config.istio.io/v1alpha2
+// kind: HTTPAPISpec
+// metadata:
+//   name: petstore
+//   namespace: default
+// spec:
+//   attributes:
+//     attributes:
+//       api.service:
+//         stringValue: petstore.swagger.io
+//       api.version:
+//         stringValue: 1.0.0
+//   patterns:
+//   - attributes:
+//       attributes:
+//         api.operation:
+//           stringValue: findPets
+//     httpMethod: GET
+//     uriTemplate: /api/pets
+//   - attributes:
+//       attributes:
+//         api.operation:
+//           stringValue: addPet
+//     httpMethod: POST
+//     uriTemplate: /api/pets
+//   - attributes:
+//       attributes:
+//         api.operation:
+//           stringValue: findPetById
+//     httpMethod: GET
+//     uriTemplate: /api/pets/{id}
+//   - attributes:
+//       attributes:
+//         api.operation:
+//           stringValue: deletePet
+//     httpMethod: DELETE
+//     uriTemplate: /api/pets/{id}
+//   api_keys:
+//   - query: api-key
+// ```
 HTTPAPISpec: {
-	//  List of attributes that are generated when *any* of the HTTP
-	//  patterns match. This list typically includes the "api.service"
-	//  and "api.version" attributes.
+	// List of attributes that are generated when *any* of the HTTP
+	// patterns match. This list typically includes the "api.service"
+	// and "api.version" attributes.
 	attributes?: v1.Attributes @protobuf(1,type=Attributes)
 
-	//  List of HTTP patterns to match.
+	// List of HTTP patterns to match.
 	patterns?: [...HTTPAPISpecPattern] @protobuf(2)
 
-	//  List of APIKey that describes how to extract an API-KEY from an
-	//  HTTP request. The first API-Key match found in the list is used,
-	//  i.e. 'OR' semantics.
-	// 
-	//  The following default policies are used to generate the
-	//  `request.api_key` attribute if no explicit APIKey is defined.
-	// 
-	//      `query: key, `query: api_key`, and then `header: x-api-key`
-	// 
+	// List of APIKey that describes how to extract an API-KEY from an
+	// HTTP request. The first API-Key match found in the list is used,
+	// i.e. 'OR' semantics.
+	//
+	// The following default policies are used to generate the
+	// `request.api_key` attribute if no explicit APIKey is defined.
+	//
+	//     `query: key, `query: api_key`, and then `header: x-api-key`
+	//
 	apiKeys?: [...APIKey] @protobuf(3,name=api_keys)
 }
 
-//  HTTPAPISpecPattern defines a single pattern to match against
-//  incoming HTTP requests. The per-pattern list of attributes is
-//  generated if both the http_method and uri_template match. In
-//  addition, the top-level list of attributes in the HTTPAPISpec is also
-//  generated.
-// 
-//  ```yaml
-//  pattern:
-//  - attributes
-//      api.operation: doFooBar
-//    httpMethod: GET
-//    uriTemplate: /foo/bar
-//  ```
+// HTTPAPISpecPattern defines a single pattern to match against
+// incoming HTTP requests. The per-pattern list of attributes is
+// generated if both the http_method and uri_template match. In
+// addition, the top-level list of attributes in the HTTPAPISpec is also
+// generated.
+//
+// ```yaml
+// pattern:
+// - attributes
+//     api.operation: doFooBar
+//   httpMethod: GET
+//   uriTemplate: /foo/bar
+// ```
 HTTPAPISpecPattern: {
-	//  List of attributes that are generated if the HTTP request matches
-	//  the specified http_method and uri_template. This typically
-	//  includes the "api.operation" attribute.
+	// List of attributes that are generated if the HTTP request matches
+	// the specified http_method and uri_template. This typically
+	// includes the "api.operation" attribute.
 	attributes?: v1.Attributes @protobuf(1,type=Attributes)
 
-	//  HTTP request method to match against as defined by
-	//  [rfc7231](https://tools.ietf.org/html/rfc7231#page-21). For
-	//  example: GET, HEAD, POST, PUT, DELETE.
+	// HTTP request method to match against as defined by
+	// [rfc7231](https://tools.ietf.org/html/rfc7231#page-21). For
+	// example: GET, HEAD, POST, PUT, DELETE.
 	httpMethod?: string @protobuf(2,name=http_method)
 }
 HTTPAPISpecPattern: {
-	//  URI template to match against as defined by
-	//  [rfc6570](https://tools.ietf.org/html/rfc6570). For example, the
-	//  following are valid URI templates:
-	// 
-	//      /pets
-	//      /pets/{id}
-	//      /dictionary/{term:1}/{term}
-	//      /search{?q*,lang}
-	// 
+	// URI template to match against as defined by
+	// [rfc6570](https://tools.ietf.org/html/rfc6570). For example, the
+	// following are valid URI templates:
+	//
+	//     /pets
+	//     /pets/{id}
+	//     /dictionary/{term:1}/{term}
+	//     /search{?q*,lang}
+	//
 	uriTemplate: string @protobuf(3,name=uri_template)
 } | {
-	//  EXPERIMENTAL:
-	// 
-	//  ecmascript style regex-based match as defined by
-	//  [EDCA-262](http://en.cppreference.com/w/cpp/regex/ecmascript). For
-	//  example,
-	// 
-	//      "^/pets/(.*?)?"
-	// 
+	// EXPERIMENTAL:
+	//
+	// ecmascript style regex-based match as defined by
+	// [EDCA-262](http://en.cppreference.com/w/cpp/regex/ecmascript). For
+	// example,
+	//
+	//     "^/pets/(.*?)?"
+	//
 	regex: string @protobuf(4)
 }
 
-//  APIKey defines the explicit configuration for generating the
-//  `request.api_key` attribute from HTTP requests.
-// 
-//  See [API Keys](https://swagger.io/docs/specification/authentication/api-keys)
-//  for a general overview of API keys as defined by OpenAPI.
+// APIKey defines the explicit configuration for generating the
+// `request.api_key` attribute from HTTP requests.
+//
+// See [API Keys](https://swagger.io/docs/specification/authentication/api-keys)
+// for a general overview of API keys as defined by OpenAPI.
 APIKey: {
 }
 APIKey: {
-	//  API Key is sent as a query parameter. `query` represents the
-	//  query string parameter name.
-	// 
-	//  For example, `query=api_key` should be used with the
-	//  following request:
-	// 
-	//      GET /something?api_key=abcdef12345
-	// 
+	// API Key is sent as a query parameter. `query` represents the
+	// query string parameter name.
+	//
+	// For example, `query=api_key` should be used with the
+	// following request:
+	//
+	//     GET /something?api_key=abcdef12345
+	//
 	query: string @protobuf(1)
 } | {
-	//  API key is sent in a request header. `header` represents the
-	//  header name.
-	// 
-	//  For example, `header=X-API-KEY` should be used with the
-	//  following request:
-	// 
-	//      GET /something HTTP/1.1
-	//      X-API-Key: abcdef12345
-	// 
+	// API key is sent in a request header. `header` represents the
+	// header name.
+	//
+	// For example, `header=X-API-KEY` should be used with the
+	// following request:
+	//
+	//     GET /something HTTP/1.1
+	//     X-API-Key: abcdef12345
+	//
 	header: string @protobuf(2)
 } | {
-	//  API key is sent in a
-	//  [cookie](https://swagger.io/docs/specification/authentication/cookie-authentication),
-	// 
-	//  For example, `cookie=X-API-KEY` should be used for the
-	//  following request:
-	// 
-	//      GET /something HTTP/1.1
-	//      Cookie: X-API-KEY=abcdef12345
-	// 
+	// API key is sent in a
+	// [cookie](https://swagger.io/docs/specification/authentication/cookie-authentication),
+	//
+	// For example, `cookie=X-API-KEY` should be used for the
+	// following request:
+	//
+	//     GET /something HTTP/1.1
+	//     Cookie: X-API-KEY=abcdef12345
+	//
 	cookie: string @protobuf(3)
 }
 
-//  HTTPAPISpecReference defines a reference to an HTTPAPISpec. This is
-//  typically used for establishing bindings between an HTTPAPISpec and an
-//  IstioService. For example, the following defines an
-//  HTTPAPISpecReference for service `foo` in namespace `bar`.
-// 
-//  ```yaml
-//  - name: foo
-//    namespace: bar
-//  ```
+// HTTPAPISpecReference defines a reference to an HTTPAPISpec. This is
+// typically used for establishing bindings between an HTTPAPISpec and an
+// IstioService. For example, the following defines an
+// HTTPAPISpecReference for service `foo` in namespace `bar`.
+//
+// ```yaml
+// - name: foo
+//   namespace: bar
+// ```
 HTTPAPISpecReference: {
-	//  REQUIRED. The short name of the HTTPAPISpec. This is the resource
-	//  name defined by the metadata name field.
+	// REQUIRED. The short name of the HTTPAPISpec. This is the resource
+	// name defined by the metadata name field.
 	name?: string @protobuf(1)
 
-	//  Optional namespace of the HTTPAPISpec. Defaults to the encompassing
-	//  HTTPAPISpecBinding's metadata namespace field.
+	// Optional namespace of the HTTPAPISpec. Defaults to the encompassing
+	// HTTPAPISpecBinding's metadata namespace field.
 	namespace?: string @protobuf(2)
 }
 
-//  HTTPAPISpecBinding defines the binding between HTTPAPISpecs and one or more
-//  IstioService. For example, the following establishes a binding
-//  between the HTTPAPISpec `petstore` and service `foo` in namespace `bar`.
-// 
-//  ```yaml
-//  apiVersion: config.istio.io/v1alpha2
-//  kind: HTTPAPISpecBinding
-//  metadata:
-//    name: my-binding
-//    namespace: default
-//  spec:
-//    services:
-//    - name: foo
-//      namespace: bar
-//    api_specs:
-//    - name: petstore
-//      namespace: default
-//  ```
+// HTTPAPISpecBinding defines the binding between HTTPAPISpecs and one or more
+// IstioService. For example, the following establishes a binding
+// between the HTTPAPISpec `petstore` and service `foo` in namespace `bar`.
+//
+// ```yaml
+// apiVersion: config.istio.io/v1alpha2
+// kind: HTTPAPISpecBinding
+// metadata:
+//   name: my-binding
+//   namespace: default
+// spec:
+//   services:
+//   - name: foo
+//     namespace: bar
+//   api_specs:
+//   - name: petstore
+//     namespace: default
+// ```
 HTTPAPISpecBinding: {
-	//  REQUIRED. One or more services to map the listed HTTPAPISpec onto.
+	// REQUIRED. One or more services to map the listed HTTPAPISpec onto.
 	services?: [...IstioService] @protobuf(1)
 
-	//  REQUIRED. One or more HTTPAPISpec references that should be mapped to
-	//  the specified service(s). The aggregate collection of match
-	//  conditions defined in the HTTPAPISpecs should not overlap.
+	// REQUIRED. One or more HTTPAPISpec references that should be mapped to
+	// the specified service(s). The aggregate collection of match
+	// conditions defined in the HTTPAPISpecs should not overlap.
 	apiSpecs?: [...HTTPAPISpecReference] @protobuf(2,name=api_specs)
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/client_config_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/client_config_proto_gen.cue
index dd44e5c..03a0025 100644
--- a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/client_config_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/client_config_proto_gen.cue
@@ -1,22 +1,22 @@
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 
-//  $title: Mixer Client
-//  $description: Configuration state for the Mixer client library.
-//  $location: https://istio.io/docs/reference/config/policy-and-telemetry/istio.mixer.v1.config.client
+// $title: Mixer Client
+// $description: Configuration state for the Mixer client library.
+// $location: https://istio.io/docs/reference/config/policy-and-telemetry/istio.mixer.v1.config.client
 
-//  Describes the configuration state for the Mixer client library that's built into Envoy.
+// Describes the configuration state for the Mixer client library that's built into Envoy.
 package client
 
 import (
@@ -24,165 +24,165 @@
 	"time"
 )
 
-//  Specifies the behavior when the client is unable to connect to Mixer.
+// Specifies the behavior when the client is unable to connect to Mixer.
 NetworkFailPolicy: {
 
-	//  Specifies the behavior when the client is unable to connect to Mixer.
+	// Specifies the behavior when the client is unable to connect to Mixer.
 	policy?: NetworkFailPolicy_FailPolicy @protobuf(1,type=FailPolicy)
 
-	//  Max retries on transport error.
+	// Max retries on transport error.
 	maxRetry?: uint32 @protobuf(2,name=max_retry)
 
-	//  Base time to wait between retries.  Will be adjusted by exponential
-	//  backoff and jitter.
+	// Base time to wait between retries.  Will be adjusted by exponential
+	// backoff and jitter.
 	baseRetryWait?: time.Duration @protobuf(3,type=google.protobuf.Duration,name=base_retry_wait)
 
-	//  Max time to wait between retries.
+	// Max time to wait between retries.
 	maxRetryWait?: time.Duration @protobuf(4,type=google.protobuf.Duration,name=max_retry_wait)
 }
 
-//  Example of single-value enum.
+// Example of single-value enum.
 NetworkFailPolicy_FailPolicy:
-	//  If network connection fails, request is allowed and delivered to the
-	//  service.
+	// If network connection fails, request is allowed and delivered to the
+	// service.
 	"FAIL_OPEN"
 
 NetworkFailPolicy_FailPolicy_value "FAIL_OPEN": 0
 
-//  Defines the per-service client configuration.
+// Defines the per-service client configuration.
 ServiceConfig: {
-	//  If true, do not call Mixer Check.
+	// If true, do not call Mixer Check.
 	disableCheckCalls?: bool @protobuf(1,name=disable_check_calls)
 
-	//  If true, do not call Mixer Report.
+	// If true, do not call Mixer Report.
 	disableReportCalls?: bool @protobuf(2,name=disable_report_calls)
 
-	//  Send these attributes to Mixer in both Check and Report. This
-	//  typically includes the "destination.service" attribute.
-	//  In case of a per-route override, per-route attributes take precedence
-	//  over the attributes supplied in the client configuration.
+	// Send these attributes to Mixer in both Check and Report. This
+	// typically includes the "destination.service" attribute.
+	// In case of a per-route override, per-route attributes take precedence
+	// over the attributes supplied in the client configuration.
 	mixerAttributes?: v1.Attributes @protobuf(3,type=Attributes,name=mixer_attributes)
 
-	//  HTTP API specifications to generate API attributes.
+	// HTTP API specifications to generate API attributes.
 	httpApiSpec?: [...HTTPAPISpec] @protobuf(4,name=http_api_spec)
 
-	//  Quota specifications to generate quota requirements.
+	// Quota specifications to generate quota requirements.
 	quotaSpec?: [...QuotaSpec] @protobuf(5,name=quota_spec)
 
-	//  Specifies the behavior when the client is unable to connect to Mixer.
-	//  This is the service-level policy. It overrides
-	//  [mesh-level
-	//  policy][istio.mixer.v1.config.client.TransportConfig.network_fail_policy].
+	// Specifies the behavior when the client is unable to connect to Mixer.
+	// This is the service-level policy. It overrides
+	// [mesh-level
+	// policy][istio.mixer.v1.config.client.TransportConfig.network_fail_policy].
 	networkFailPolicy?: NetworkFailPolicy @protobuf(7,name=network_fail_policy)
 
-	//  Default attributes to forward to upstream. This typically
-	//  includes the "source.ip" and "source.uid" attributes.
-	//  In case of a per-route override, per-route attributes take precedence
-	//  over the attributes supplied in the client configuration.
-	// 
-	//  Forwarded attributes take precedence over the static Mixer attributes.
-	//  The full order of application is as follows:
-	//  1. static Mixer attributes from the filter config;
-	//  2. static Mixer attributes from the route config;
-	//  3. forwarded attributes from the source filter config (if any);
-	//  4. forwarded attributes from the source route config (if any);
-	//  5. derived attributes from the request metadata.
+	// Default attributes to forward to upstream. This typically
+	// includes the "source.ip" and "source.uid" attributes.
+	// In case of a per-route override, per-route attributes take precedence
+	// over the attributes supplied in the client configuration.
+	//
+	// Forwarded attributes take precedence over the static Mixer attributes.
+	// The full order of application is as follows:
+	// 1. static Mixer attributes from the filter config;
+	// 2. static Mixer attributes from the route config;
+	// 3. forwarded attributes from the source filter config (if any);
+	// 4. forwarded attributes from the source route config (if any);
+	// 5. derived attributes from the request metadata.
 	forwardAttributes?: v1.Attributes @protobuf(8,type=Attributes,name=forward_attributes)
 }
 
-//  Defines the transport config on how to call Mixer.
+// Defines the transport config on how to call Mixer.
 TransportConfig: {
-	//  The flag to disable check cache.
+	// The flag to disable check cache.
 	disableCheckCache?: bool @protobuf(1,name=disable_check_cache)
 
-	//  The flag to disable quota cache.
+	// The flag to disable quota cache.
 	disableQuotaCache?: bool @protobuf(2,name=disable_quota_cache)
 
-	//  The flag to disable report batch.
+	// The flag to disable report batch.
 	disableReportBatch?: bool @protobuf(3,name=disable_report_batch)
 
-	//  Specifies the behavior when the client is unable to connect to Mixer.
-	//  This is the mesh level policy. The default value for policy is FAIL_OPEN.
+	// Specifies the behavior when the client is unable to connect to Mixer.
+	// This is the mesh level policy. The default value for policy is FAIL_OPEN.
 	networkFailPolicy?: NetworkFailPolicy @protobuf(4,name=network_fail_policy)
 
-	//  Specify refresh interval to write Mixer client statistics to Envoy share
-	//  memory. If not specified, the interval is 10 seconds.
+	// Specify refresh interval to write Mixer client statistics to Envoy share
+	// memory. If not specified, the interval is 10 seconds.
 	statsUpdateInterval?: time.Duration @protobuf(5,type=google.protobuf.Duration,name=stats_update_interval)
 
-	//  Name of the cluster that will forward check calls to a pool of mixer
-	//  servers. Defaults to "mixer_server". By using different names for
-	//  checkCluster and reportCluster, it is possible to have one set of
-	//  Mixer servers handle check calls, while another set of Mixer servers
-	//  handle report calls.
-	// 
-	//  NOTE: Any value other than the default "mixer_server" will require the
-	//  Istio Grafana dashboards to be reconfigured to use the new name.
+	// Name of the cluster that will forward check calls to a pool of mixer
+	// servers. Defaults to "mixer_server". By using different names for
+	// checkCluster and reportCluster, it is possible to have one set of
+	// Mixer servers handle check calls, while another set of Mixer servers
+	// handle report calls.
+	//
+	// NOTE: Any value other than the default "mixer_server" will require the
+	// Istio Grafana dashboards to be reconfigured to use the new name.
 	checkCluster?: string @protobuf(6,name=check_cluster)
 
-	//  Name of the cluster that will forward report calls to a pool of mixer
-	//  servers. Defaults to "mixer_server". By using different names for
-	//  checkCluster and reportCluster, it is possible to have one set of
-	//  Mixer servers handle check calls, while another set of Mixer servers
-	//  handle report calls.
-	// 
-	//  NOTE: Any value other than the default "mixer_server" will require the
-	//  Istio Grafana dashboards to be reconfigured to use the new name.
+	// Name of the cluster that will forward report calls to a pool of mixer
+	// servers. Defaults to "mixer_server". By using different names for
+	// checkCluster and reportCluster, it is possible to have one set of
+	// Mixer servers handle check calls, while another set of Mixer servers
+	// handle report calls.
+	//
+	// NOTE: Any value other than the default "mixer_server" will require the
+	// Istio Grafana dashboards to be reconfigured to use the new name.
 	reportCluster?: string @protobuf(7,name=report_cluster)
 
-	//  Default attributes to forward to Mixer upstream. This typically
-	//  includes the "source.ip" and "source.uid" attributes. These
-	//  attributes are consumed by the proxy in front of mixer.
+	// Default attributes to forward to Mixer upstream. This typically
+	// includes the "source.ip" and "source.uid" attributes. These
+	// attributes are consumed by the proxy in front of mixer.
 	attributesForMixerProxy?: v1.Attributes @protobuf(8,type=Attributes,name=attributes_for_mixer_proxy)
 }
 
-//  Defines the client config for HTTP.
+// Defines the client config for HTTP.
 HttpClientConfig: {
-	//  The transport config.
+	// The transport config.
 	transport?: TransportConfig @protobuf(1)
 
-	//  Map of control configuration indexed by destination.service. This
-	//  is used to support per-service configuration for cases where a
-	//  mixerclient serves multiple services.
+	// Map of control configuration indexed by destination.service. This
+	// is used to support per-service configuration for cases where a
+	// mixerclient serves multiple services.
 	serviceConfigs: {
 		<_>: ServiceConfig
 	} @protobuf(2,type=map<string,ServiceConfig>,service_configs)
 
-	//  Default destination service name if none was specified in the
-	//  client request.
+	// Default destination service name if none was specified in the
+	// client request.
 	defaultDestinationService?: string @protobuf(3,name=default_destination_service)
 
-	//  Default attributes to send to Mixer in both Check and
-	//  Report. This typically includes "destination.ip" and
-	//  "destination.uid" attributes.
+	// Default attributes to send to Mixer in both Check and
+	// Report. This typically includes "destination.ip" and
+	// "destination.uid" attributes.
 	mixerAttributes?: v1.Attributes @protobuf(4,type=Attributes,name=mixer_attributes)
 
-	//  Default attributes to forward to upstream. This typically
-	//  includes the "source.ip" and "source.uid" attributes.
+	// Default attributes to forward to upstream. This typically
+	// includes the "source.ip" and "source.uid" attributes.
 	forwardAttributes?: v1.Attributes @protobuf(5,type=Attributes,name=forward_attributes)
 }
 
-//  Defines the client config for TCP.
+// Defines the client config for TCP.
 TcpClientConfig: {
-	//  The transport config.
+	// The transport config.
 	transport?: TransportConfig @protobuf(1)
 
-	//  Default attributes to send to Mixer in both Check and
-	//  Report. This typically includes "destination.ip" and
-	//  "destination.uid" attributes.
+	// Default attributes to send to Mixer in both Check and
+	// Report. This typically includes "destination.ip" and
+	// "destination.uid" attributes.
 	mixerAttributes?: v1.Attributes @protobuf(2,type=Attributes,name=mixer_attributes)
 
-	//  If set to true, disables Mixer check calls.
+	// If set to true, disables Mixer check calls.
 	disableCheckCalls?: bool @protobuf(3,name=disable_check_calls)
 
-	//  If set to true, disables Mixer check calls.
+	// If set to true, disables Mixer check calls.
 	disableReportCalls?: bool @protobuf(4,name=disable_report_calls)
 
-	//  Quota specifications to generate quota requirements.
-	//  It applies on the new TCP connections.
+	// Quota specifications to generate quota requirements.
+	// It applies on the new TCP connections.
 	connectionQuotaSpec?: QuotaSpec @protobuf(5,name=connection_quota_spec)
 
-	//  Specify report interval to send periodical reports for long TCP
-	//  connections. If not specified, the interval is 10 seconds. This interval
-	//  should not be less than 1 second, otherwise it will be reset to 1 second.
+	// Specify report interval to send periodical reports for long TCP
+	// connections. If not specified, the interval is 10 seconds. This interval
+	// should not be less than 1 second, otherwise it will be reset to 1 second.
 	reportInterval?: time.Duration @protobuf(6,type=google.protobuf.Duration,name=report_interval)
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/quota_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/quota_proto_gen.cue
index e729d01..394d5e3 100644
--- a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/quota_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/quota_proto_gen.cue
@@ -1,136 +1,136 @@
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 
-//  Specifies runtime quota rules.
-//   * Uses Istio attributes to match individual requests
-//   * Specifies list of quotas to use for matched requests.
-// 
-//  Example1:
-//  Charge "request_count" quota with 1 amount for all requests.
-// 
-//    QuotaSpec:
-//      - rules
-//        - quotas:
-//            quota: request_count
-//            charge: 1
-// 
-//  Example2:
-//  For HTTP POST requests with path are prefixed with /books or
-//  api.operation is create_books, charge two quotas:
-//  * write_count of 1 amount
-//  * request_count of 5 amount.
-// 
-//  ```yaml
-//  QuotaSpec:
-//    - rules:
-//      - match:
-//          clause:
-//            request.path:
-//              string_prefix: /books
-//            request.http_method:
-//              string_exact: POST
-//      - match:
-//          clause:
-//            api.operation:
-//              string_exact: create_books
-//      - quotas:
-//          quota: write_count
-//          charge: 1
-//      - quotas:
-//          quota: request_count
-//          charge: 5
-//  ```
+// Specifies runtime quota rules.
+//  * Uses Istio attributes to match individual requests
+//  * Specifies list of quotas to use for matched requests.
+//
+// Example1:
+// Charge "request_count" quota with 1 amount for all requests.
+//
+//   QuotaSpec:
+//     - rules
+//       - quotas:
+//           quota: request_count
+//           charge: 1
+//
+// Example2:
+// For HTTP POST requests with path are prefixed with /books or
+// api.operation is create_books, charge two quotas:
+// * write_count of 1 amount
+// * request_count of 5 amount.
+//
+// ```yaml
+// QuotaSpec:
+//   - rules:
+//     - match:
+//         clause:
+//           request.path:
+//             string_prefix: /books
+//           request.http_method:
+//             string_exact: POST
+//     - match:
+//         clause:
+//           api.operation:
+//             string_exact: create_books
+//     - quotas:
+//         quota: write_count
+//         charge: 1
+//     - quotas:
+//         quota: request_count
+//         charge: 5
+// ```
 package client
 
-//  Determines the quotas used for individual requests.
+// Determines the quotas used for individual requests.
 QuotaSpec: {
-	//  A list of Quota rules.
+	// A list of Quota rules.
 	rules?: [...QuotaRule] @protobuf(1)
 }
 
-//  Specifies a rule with list of matches and list of quotas.
-//  If any clause matched, the list of quotas will be used.
+// Specifies a rule with list of matches and list of quotas.
+// If any clause matched, the list of quotas will be used.
 QuotaRule: {
-	//  If empty, match all request.
-	//  If any of match is true, it is matched.
+	// If empty, match all request.
+	// If any of match is true, it is matched.
 	match?: [...AttributeMatch] @protobuf(1)
 
-	//  The list of quotas to charge.
+	// The list of quotas to charge.
 	quotas?: [...Quota] @protobuf(2)
 }
 
-//  Describes how to match a given string in HTTP headers. Match is
-//  case-sensitive.
+// Describes how to match a given string in HTTP headers. Match is
+// case-sensitive.
 StringMatch: {
 }
 StringMatch: {
-	//  exact string match
+	// exact string match
 	exact: string @protobuf(1)
 } | {
-	//  prefix-based match
+	// prefix-based match
 	prefix: string @protobuf(2)
 } | {
-	//  ECMAscript style regex-based match
+	// ECMAscript style regex-based match
 	regex: string @protobuf(3)
 }
 
-//  Specifies a match clause to match Istio attributes
+// Specifies a match clause to match Istio attributes
 AttributeMatch: {
-	//  Map of attribute names to StringMatch type.
-	//  Each map element specifies one condition to match.
-	// 
-	//  Example:
-	// 
-	//    clause:
-	//      source.uid:
-	//        exact: SOURCE_UID
-	//      request.http_method:
-	//        exact: POST
+	// Map of attribute names to StringMatch type.
+	// Each map element specifies one condition to match.
+	//
+	// Example:
+	//
+	//   clause:
+	//     source.uid:
+	//       exact: SOURCE_UID
+	//     request.http_method:
+	//       exact: POST
 	clause: {
 		<_>: StringMatch
 	} @protobuf(1,type=map<string,StringMatch>)
 }
 
-//  Specifies a quota to use with quota name and amount.
+// Specifies a quota to use with quota name and amount.
 Quota: {
-	//  The quota name to charge
+	// The quota name to charge
 	quota?: string @protobuf(1)
 
-	//  The quota amount to charge
+	// The quota amount to charge
 	charge?: int64 @protobuf(2)
 }
 
-//  QuotaSpecBinding defines the binding between QuotaSpecs and one or more
-//  IstioService.
+// QuotaSpecBinding defines the binding between QuotaSpecs and one or more
+// IstioService.
 QuotaSpecBinding: {
-	//  REQUIRED. One or more services to map the listed QuotaSpec onto.
+	// REQUIRED. One or more services to map the listed QuotaSpec onto.
 	services?: [...IstioService] @protobuf(1)
 
-	//  REQUIRED. One or more QuotaSpec references that should be mapped to
-	//  the specified service(s). The aggregate collection of match
-	//  conditions defined in the QuotaSpecs should not overlap.
+	// REQUIRED. One or more QuotaSpec references that should be mapped to
+	// the specified service(s). The aggregate collection of match
+	// conditions defined in the QuotaSpecs should not overlap.
 	quotaSpecs?: [...QuotaSpecBinding_QuotaSpecReference] @protobuf(2,type=QuotaSpecReference,name=quota_specs)
 }
 
-//  QuotaSpecReference uniquely identifies the QuotaSpec used in the
-//  Binding.
+// QuotaSpecReference uniquely identifies the QuotaSpec used in the
+// Binding.
 QuotaSpecBinding_QuotaSpecReference: {
-	//  REQUIRED. The short name of the QuotaSpec. This is the resource
-	//  name defined by the metadata name field.
+	// REQUIRED. The short name of the QuotaSpec. This is the resource
+	// name defined by the metadata name field.
 	name?: string @protobuf(1)
 
-	//  Optional namespace of the QuotaSpec. Defaults to the value of the
-	//  metadata namespace field.
+	// Optional namespace of the QuotaSpec. Defaults to the value of the
+	// metadata namespace field.
 	namespace?: string @protobuf(2)
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/service_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/service_proto_gen.cue
index 46b03df..03e034e 100644
--- a/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/service_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/mixer/v1/config/client/service_proto_gen.cue
@@ -1,47 +1,47 @@
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 
-//  NOTE: this is a duplicate of proxy.v1.config.IstioService from
-//  proxy/v1alpha1/config/route_rules.proto.
-// 
-//  Mixer protobufs have gogoproto specific options which are not
-//  compatiable with the proxy's vanilla protobufs. Ideally, these
-//  protobuf options be reconciled so fundamental Istio concepts and
-//  types can be shared by components. Until then, make a copy of
-//  IstioService for mixerclient to use.
+// NOTE: this is a duplicate of proxy.v1.config.IstioService from
+// proxy/v1alpha1/config/route_rules.proto.
+//
+// Mixer protobufs have gogoproto specific options which are not
+// compatiable with the proxy's vanilla protobufs. Ideally, these
+// protobuf options be reconciled so fundamental Istio concepts and
+// types can be shared by components. Until then, make a copy of
+// IstioService for mixerclient to use.
 package client
 
-//  IstioService identifies a service and optionally service version.
-//  The FQDN of the service is composed from the name, namespace, and implementation-specific domain suffix
-//  (e.g. on Kubernetes, "reviews" + "default" + "svc.cluster.local" -> "reviews.default.svc.cluster.local").
+// IstioService identifies a service and optionally service version.
+// The FQDN of the service is composed from the name, namespace, and implementation-specific domain suffix
+// (e.g. on Kubernetes, "reviews" + "default" + "svc.cluster.local" -> "reviews.default.svc.cluster.local").
 IstioService: {
-	//  The short name of the service such as "foo".
+	// The short name of the service such as "foo".
 	name?: string @protobuf(1)
 
-	//  Optional namespace of the service. Defaults to value of metadata namespace field.
+	// Optional namespace of the service. Defaults to value of metadata namespace field.
 	namespace?: string @protobuf(2)
 
-	//  Domain suffix used to construct the service FQDN in implementations that support such specification.
+	// Domain suffix used to construct the service FQDN in implementations that support such specification.
 	domain?: string @protobuf(3)
 
-	//  The service FQDN.
+	// The service FQDN.
 	service?: string @protobuf(4)
 
-	//  Optional one or more labels that uniquely identify the service version.
-	// 
-	//  *Note:* When used for a VirtualService destination, labels MUST be empty.
-	// 
+	// Optional one or more labels that uniquely identify the service version.
+	//
+	// *Note:* When used for a VirtualService destination, labels MUST be empty.
+	//
 	labels: {
 		<_>: string
 	} @protobuf(5,type=map<string,string>)
diff --git a/encoding/protobuf/testdata/istio.io/api/mixer/v1/mixer_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/mixer/v1/mixer_proto_gen.cue
index c369365..ded5e39 100644
--- a/encoding/protobuf/testdata/istio.io/api/mixer/v1/mixer_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/mixer/v1/mixer_proto_gen.cue
@@ -1,19 +1,19 @@
-//  Copyright 2016 Istio Authors
-// 
-//  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
-// 
-//      http://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.
+// Copyright 2016 Istio Authors
+//
+// 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
+//
+//     http://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.
 
-//  This package defines the Mixer API that the sidecar proxy uses to perform
-//  precondition checks, manage quotas, and report telemetry.
+// This package defines the Mixer API that the sidecar proxy uses to perform
+// precondition checks, manage quotas, and report telemetry.
 package v1
 
 import (
@@ -21,106 +21,106 @@
 	"time"
 )
 
-//  Used to get a thumbs-up/thumbs-down before performing an action.
+// Used to get a thumbs-up/thumbs-down before performing an action.
 CheckRequest: {
 
-	//  The attributes to use for this request.
-	// 
-	//  Mixer's configuration determines how these attributes are used to
-	//  establish the result returned in the response.
+	// The attributes to use for this request.
+	//
+	// Mixer's configuration determines how these attributes are used to
+	// establish the result returned in the response.
 	attributes?: CompressedAttributes @protobuf(1,"(gogoproto.nullable)=false")
 
-	//  The number of words in the global dictionary, used with to populate the attributes.
-	//  This value is used as a quick way to determine whether the client is using a dictionary that
-	//  the server understands.
+	// The number of words in the global dictionary, used with to populate the attributes.
+	// This value is used as a quick way to determine whether the client is using a dictionary that
+	// the server understands.
 	globalWordCount?: uint32 @protobuf(2,name=global_word_count)
 
-	//  Used for deduplicating `Check` calls in the case of failed RPCs and retries. This should be a UUID
-	//  per call, where the same UUID is used for retries of the same call.
+	// Used for deduplicating `Check` calls in the case of failed RPCs and retries. This should be a UUID
+	// per call, where the same UUID is used for retries of the same call.
 	deduplicationId?: string @protobuf(3,name=deduplication_id)
 
-	//  The individual quotas to allocate
+	// The individual quotas to allocate
 	quotas: {
 		<_>: CheckRequest_QuotaParams
 	} @protobuf(4,type=map<string,QuotaParams>,"(gogoproto.nullable)=false")
 }
 
-//  parameters for a quota allocation
+// parameters for a quota allocation
 CheckRequest_QuotaParams: {
-	//  Amount of quota to allocate
+	// Amount of quota to allocate
 	amount?: int64 @protobuf(1)
 
-	//  When true, supports returning less quota than what was requested.
+	// When true, supports returning less quota than what was requested.
 	bestEffort?: bool @protobuf(2,name=best_effort)
 }
 
-//  The response generated by the Check method.
+// The response generated by the Check method.
 CheckResponse: {
 
-	//  The precondition check results.
+	// The precondition check results.
 	precondition?: CheckResponse_PreconditionResult @protobuf(2,type=PreconditionResult,"(gogoproto.nullable)=false")
 
-	//  The resulting quota, one entry per requested quota.
+	// The resulting quota, one entry per requested quota.
 	quotas: {
 		<_>: CheckResponse_QuotaResult
 	} @protobuf(3,type=map<string,QuotaResult>,"(gogoproto.nullable)=false")
 }
 
-//  Expresses the result of a precondition check.
+// Expresses the result of a precondition check.
 CheckResponse_PreconditionResult: {
 
-	//  A status code of OK indicates all preconditions were satisfied. Any other code indicates not
-	//  all preconditions were satisfied and details describe why.
+	// A status code of OK indicates all preconditions were satisfied. Any other code indicates not
+	// all preconditions were satisfied and details describe why.
 	status?: __status.Status @protobuf(1,type=google.rpc.Status,"(gogoproto.nullable)=false")
 
-	//  The amount of time for which this result can be considered valid.
+	// The amount of time for which this result can be considered valid.
 	validDuration?: time.Duration @protobuf(2,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")
 
-	//  The number of uses for which this result can be considered valid.
+	// The number of uses for which this result can be considered valid.
 	validUseCount?: int32 @protobuf(3,name=valid_use_count)
 
-	//  The total set of attributes that were used in producing the result
-	//  along with matching conditions.
+	// The total set of attributes that were used in producing the result
+	// along with matching conditions.
 	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes)
 
-	//  An optional routing directive, used to manipulate the traffic metadata
-	//  whenever all preconditions are satisfied.
+	// An optional routing directive, used to manipulate the traffic metadata
+	// whenever all preconditions are satisfied.
 	routeDirective?: RouteDirective @protobuf(6,name=route_directive)
 }
 __status = status
 
-//  Expresses the result of a quota allocation.
+// Expresses the result of a quota allocation.
 CheckResponse_QuotaResult: {
-	//  The amount of time for which this result can be considered valid.
+	// The amount of time for which this result can be considered valid.
 	validDuration?: time.Duration @protobuf(1,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")
 
-	//  The amount of granted quota. When `QuotaParams.best_effort` is true, this will be >= 0.
-	//  If `QuotaParams.best_effort` is false, this will be either 0 or >= `QuotaParams.amount`.
+	// The amount of granted quota. When `QuotaParams.best_effort` is true, this will be >= 0.
+	// If `QuotaParams.best_effort` is false, this will be either 0 or >= `QuotaParams.amount`.
 	grantedAmount?: int64 @protobuf(2,name=granted_amount)
 
-	//  The total set of attributes that were used in producing the result
-	//  along with matching conditions.
+	// The total set of attributes that were used in producing the result
+	// along with matching conditions.
 	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes,"(gogoproto.nullable)=false")
 }
 
-//  Describes the attributes that were used to determine the response.
-//  This can be used to construct a response cache.
+// Describes the attributes that were used to determine the response.
+// This can be used to construct a response cache.
 ReferencedAttributes: {
 
-	//  The message-level dictionary. Refer to [CompressedAttributes][istio.mixer.v1.CompressedAttributes] for information
-	//  on using dictionaries.
+	// The message-level dictionary. Refer to [CompressedAttributes][istio.mixer.v1.CompressedAttributes] for information
+	// on using dictionaries.
 	words?: [...string] @protobuf(1)
 
-	//  Describes a set of attributes.
+	// Describes a set of attributes.
 	attributeMatches?: [...ReferencedAttributes_AttributeMatch] @protobuf(2,type=AttributeMatch,name=attribute_matches,"(gogoproto.nullable)=false")
 }
 
-//  How an attribute's value was matched
+// How an attribute's value was matched
 ReferencedAttributes_Condition:
-	*"CONDITION_UNSPECIFIED" | //  should not occur
-	"ABSENCE" | //  match when attribute doesn't exist
-	"EXACT" | //  match when attribute value is an exact byte-for-byte match
-	"REGEX" //  match when attribute value matches the included regex
+	*"CONDITION_UNSPECIFIED" | // should not occur
+	"ABSENCE" | // match when attribute doesn't exist
+	"EXACT" | // match when attribute value is an exact byte-for-byte match
+	"REGEX" // match when attribute value matches the included regex
 
 ReferencedAttributes_Condition_value: {
 	"CONDITION_UNSPECIFIED": 0
@@ -129,53 +129,53 @@
 	"REGEX":                 3
 }
 
-//  Describes a single attribute match.
+// Describes a single attribute match.
 ReferencedAttributes_AttributeMatch: {
-	//  The name of the attribute. This is a dictionary index encoded in a manner identical
-	//  to all strings in the [CompressedAttributes][istio.mixer.v1.CompressedAttributes] message.
+	// The name of the attribute. This is a dictionary index encoded in a manner identical
+	// to all strings in the [CompressedAttributes][istio.mixer.v1.CompressedAttributes] message.
 	name?: int32 @protobuf(1,type=sint32)
 
-	//  The kind of match against the attribute value.
+	// The kind of match against the attribute value.
 	condition?: ReferencedAttributes_Condition @protobuf(2,type=Condition)
 
-	//  If a REGEX condition is provided for a STRING_MAP attribute,
-	//  clients should use the regex value to match against map keys.
+	// If a REGEX condition is provided for a STRING_MAP attribute,
+	// clients should use the regex value to match against map keys.
 	regex?: string @protobuf(3)
 
-	//  A key in a STRING_MAP. When multiple keys from a STRING_MAP
-	//  attribute were referenced, there will be multiple AttributeMatch
-	//  messages with different map_key values. Values for map_key SHOULD
-	//  be ignored for attributes that are not STRING_MAP.
-	// 
-	//  Indices for the keys are used (taken either from the
-	//  message dictionary from the `words` field or the global dictionary).
-	// 
-	//  If no map_key value is provided for a STRING_MAP attribute, the
-	//  entire STRING_MAP will be used.
+	// A key in a STRING_MAP. When multiple keys from a STRING_MAP
+	// attribute were referenced, there will be multiple AttributeMatch
+	// messages with different map_key values. Values for map_key SHOULD
+	// be ignored for attributes that are not STRING_MAP.
+	//
+	// Indices for the keys are used (taken either from the
+	// message dictionary from the `words` field or the global dictionary).
+	//
+	// If no map_key value is provided for a STRING_MAP attribute, the
+	// entire STRING_MAP will be used.
 	mapKey?: int32 @protobuf(4,type=sint32,name=map_key)
 }
 
-//  Operation on HTTP headers to replace, append, or remove a header. Header
-//  names are normalized to lower-case with dashes, e.g.  "x-request-id".
-//  Pseudo-headers ":path", ":authority", and ":method" are supported to modify
-//  the request headers.
+// Operation on HTTP headers to replace, append, or remove a header. Header
+// names are normalized to lower-case with dashes, e.g.  "x-request-id".
+// Pseudo-headers ":path", ":authority", and ":method" are supported to modify
+// the request headers.
 HeaderOperation: {
 
-	//  Header name.
+	// Header name.
 	name?: string @protobuf(1)
 
-	//  Header value.
+	// Header value.
 	value?: string @protobuf(2)
 
-	//  Header operation.
+	// Header operation.
 	operation?: HeaderOperation_Operation @protobuf(3,type=Operation)
 }
 
-//  Operation type.
+// Operation type.
 HeaderOperation_Operation:
-	*"REPLACE" | //  replaces the header with the given name
-	"REMOVE" | //  removes the header with the given name (the value is ignored)
-	"APPEND" //  appends the value to the header value, or sets it if not present
+	*"REPLACE" | // replaces the header with the given name
+	"REMOVE" | // removes the header with the given name (the value is ignored)
+	"APPEND" // appends the value to the header value, or sets it if not present
 
 HeaderOperation_Operation_value: {
 	"REPLACE": 0
@@ -183,63 +183,63 @@
 	"APPEND":  2
 }
 
-//  Expresses the routing manipulation actions to be performed on behalf of
-//  Mixer in response to a precondition check.
+// Expresses the routing manipulation actions to be performed on behalf of
+// Mixer in response to a precondition check.
 RouteDirective: {
-	//  Operations on the request headers.
+	// Operations on the request headers.
 	requestHeaderOperations?: [...HeaderOperation] @protobuf(1,name=request_header_operations,"(gogoproto.nullable)=false")
 
-	//  Operations on the response headers.
+	// Operations on the response headers.
 	responseHeaderOperations?: [...HeaderOperation] @protobuf(2,name=response_header_operations,"(gogoproto.nullable)=false")
 
-	//  If set, enables a direct response without proxying the request to the routing
-	//  destination. Required to be a value in the 2xx or 3xx range.
+	// If set, enables a direct response without proxying the request to the routing
+	// destination. Required to be a value in the 2xx or 3xx range.
 	directResponseCode?: uint32 @protobuf(3,name=direct_response_code)
 
-	//  Supplies the response body for the direct response.
-	//  If this setting is omitted, no body is included in the generated response.
+	// Supplies the response body for the direct response.
+	// If this setting is omitted, no body is included in the generated response.
 	directResponseBody?: string @protobuf(4,name=direct_response_body)
 }
 
-//  Used to report telemetry after performing one or more actions.
+// Used to report telemetry after performing one or more actions.
 ReportRequest: {
 
-	//  next value: 5
+	// next value: 5
 
-	//  The attributes to use for this request.
-	// 
-	//  Each `Attributes` element represents the state of a single action. Multiple actions
-	//  can be provided in a single message in order to improve communication efficiency. The
-	//  client can accumulate a set of actions and send them all in one single message.
+	// The attributes to use for this request.
+	//
+	// Each `Attributes` element represents the state of a single action. Multiple actions
+	// can be provided in a single message in order to improve communication efficiency. The
+	// client can accumulate a set of actions and send them all in one single message.
 	attributes?: [...CompressedAttributes] @protobuf(1,"(gogoproto.nullable)=false")
 
-	//  Indicates how to decode the attributes sets in this request.
+	// Indicates how to decode the attributes sets in this request.
 	repeatedAttributesSemantics?: ReportRequest_RepeatedAttributesSemantics @protobuf(4,type=RepeatedAttributesSemantics,name=repeated_attributes_semantics)
 
-	//  The default message-level dictionary for all the attributes.
-	//  Individual attribute messages can have their own dictionaries, but if they don't
-	//  then this set of words, if it is provided, is used instead.
-	// 
-	//  This makes it possible to share the same dictionary for all attributes in this
-	//  request, which can substantially reduce the overall request size.
+	// The default message-level dictionary for all the attributes.
+	// Individual attribute messages can have their own dictionaries, but if they don't
+	// then this set of words, if it is provided, is used instead.
+	//
+	// This makes it possible to share the same dictionary for all attributes in this
+	// request, which can substantially reduce the overall request size.
 	defaultWords?: [...string] @protobuf(2,name=default_words)
 
-	//  The number of words in the global dictionary.
-	//  To detect global dictionary out of sync between client and server.
+	// The number of words in the global dictionary.
+	// To detect global dictionary out of sync between client and server.
 	globalWordCount?: uint32 @protobuf(3,name=global_word_count)
 }
 
-//  Used to signal how the sets of compressed attributes should be reconstitued server-side.
+// Used to signal how the sets of compressed attributes should be reconstitued server-side.
 ReportRequest_RepeatedAttributesSemantics:
-	//  Use delta encoding between sets of compressed attributes to reduce the overall on-wire
-	//  request size. Each individual set of attributes is used to modify the previous set.
-	//  NOTE: There is no way with this encoding to specify attribute value deletion. This 
-	//  option should be used with extreme caution.
+	// Use delta encoding between sets of compressed attributes to reduce the overall on-wire
+	// request size. Each individual set of attributes is used to modify the previous set.
+	// NOTE: There is no way with this encoding to specify attribute value deletion. This
+	// option should be used with extreme caution.
 	*"DELTA_ENCODING" |
 
-	//  Treat each set of compressed attributes as complete - independent from other sets
-	//  in this request. This will result in on-wire duplication of attributes and values, but
-	//  will allow for proper accounting of absent values in overall encoding.
+	// Treat each set of compressed attributes as complete - independent from other sets
+	// in this request. This will result in on-wire duplication of attributes and values, but
+	// will allow for proper accounting of absent values in overall encoding.
 	"INDEPENDENT_ENCODING"
 
 ReportRequest_RepeatedAttributesSemantics_value: {
@@ -247,6 +247,6 @@
 	"INDEPENDENT_ENCODING": 1
 }
 
-//  Used to carry responses to telemetry reports
+// Used to carry responses to telemetry reports
 ReportResponse: {
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/networking/v1alpha3/gateway_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/networking/v1alpha3/gateway_proto_gen.cue
index 26f4a97..024937e 100644
--- a/encoding/protobuf/testdata/istio.io/api/networking/v1alpha3/gateway_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/networking/v1alpha3/gateway_proto_gen.cue
@@ -1,416 +1,416 @@
-//  Copyright 2019 CUE Authors
-// 
-//  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
-//  
-//      http://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.
+// Copyright 2019 CUE Authors
+//
+// 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
+//
+//     http://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.
 
-//  Copyright 2017 Istio Authors
-// 
-//    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
-// 
-//        http://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.
+// Copyright 2017 Istio Authors
+//
+//   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
+//
+//       http://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.
 
-//  $title: Gateway
-//  $description: Configuration affecting edge load balancer.
-//  $location: https://istio.io/docs/reference/config/networking/v1alpha3/gateway.html
+// $title: Gateway
+// $description: Configuration affecting edge load balancer.
+// $location: https://istio.io/docs/reference/config/networking/v1alpha3/gateway.html
 
-//  `Gateway` describes a load balancer operating at the edge of the mesh
-//  receiving incoming or outgoing HTTP/TCP connections. The specification
-//  describes a set of ports that should be exposed, the type of protocol to
-//  use, SNI configuration for the load balancer, etc.
-// 
-//  For example, the following Gateway configuration sets up a proxy to act
-//  as a load balancer exposing port 80 and 9080 (http), 443 (https),
-//  9443(https) and port 2379 (TCP) for ingress.  The gateway will be
-//  applied to the proxy running on a pod with labels `app:
-//  my-gateway-controller`. While Istio will configure the proxy to listen
-//  on these ports, it is the responsibility of the user to ensure that
-//  external traffic to these ports are allowed into the mesh.
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-gateway
-//    namespace: some-config-namespace
-//  spec:
-//    selector:
-//      app: my-gateway-controller
-//    servers:
-//    - port:
-//        number: 80
-//        name: http
-//        protocol: HTTP
-//      hosts:
-//      - uk.bookinfo.com
-//      - eu.bookinfo.com
-//      tls:
-//        httpsRedirect: true # sends 301 redirect for http requests
-//    - port:
-//        number: 443
-//        name: https-443
-//        protocol: HTTPS
-//      hosts:
-//      - uk.bookinfo.com
-//      - eu.bookinfo.com
-//      tls:
-//        mode: SIMPLE # enables HTTPS on this port
-//        serverCertificate: /etc/certs/servercert.pem
-//        privateKey: /etc/certs/privatekey.pem
-//    - port:
-//        number: 9443
-//        name: https-9443
-//        protocol: HTTPS
-//      hosts:
-//      - "bookinfo-namespace/*.bookinfo.com"
-//      tls:
-//        mode: SIMPLE # enables HTTPS on this port
-//        credentialName: bookinfo-secret # fetches certs from Kubernetes secret
-//    - port:
-//        number: 9080
-//        name: http-wildcard
-//        protocol: HTTP
-//      hosts:
-//      - "*"
-//    - port:
-//        number: 2379 # to expose internal service via external port 2379
-//        name: mongo
-//        protocol: MONGO
-//      hosts:
-//      - "*"
-//  ```
-// 
-//  The Gateway specification above describes the L4-L6 properties of a load
-//  balancer. A `VirtualService` can then be bound to a gateway to control
-//  the forwarding of traffic arriving at a particular host or gateway port.
-// 
-//  For example, the following VirtualService splits traffic for
-//  `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`,
-//  `http://uk.bookinfo.com:9080/reviews`,
-//  `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of
-//  an internal reviews service on port 9080. In addition, requests
-//  containing the cookie "user: dev-123" will be sent to special port 7777
-//  in the qa version. The same rule is also applicable inside the mesh for
-//  requests to the "reviews.prod.svc.cluster.local" service. This rule is
-//  applicable across ports 443, 9080. Note that `http://uk.bookinfo.com`
-//  gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443).
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: VirtualService
-//  metadata:
-//    name: bookinfo-rule
-//    namespace: bookinfo-namespace
-//  spec:
-//    hosts:
-//    - reviews.prod.svc.cluster.local
-//    - uk.bookinfo.com
-//    - eu.bookinfo.com
-//    gateways:
-//    - some-config-namespace/my-gateway
-//    - mesh # applies to all the sidecars in the mesh
-//    http:
-//    - match:
-//      - headers:
-//          cookie:
-//            exact: "user=dev-123"
-//      route:
-//      - destination:
-//          port:
-//            number: 7777
-//          host: reviews.qa.svc.cluster.local
-//    - match:
-//      - uri:
-//          prefix: /reviews/
-//      route:
-//      - destination:
-//          port:
-//            number: 9080 # can be omitted if it's the only port for reviews
-//          host: reviews.prod.svc.cluster.local
-//        weight: 80
-//      - destination:
-//          host: reviews.qa.svc.cluster.local
-//        weight: 20
-//  ```
-// 
-//  The following VirtualService forwards traffic arriving at (external)
-//  port 27017 to internal Mongo server on port 5555. This rule is not
-//  applicable internally in the mesh as the gateway list omits the
-//  reserved name `mesh`.
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: VirtualService
-//  metadata:
-//    name: bookinfo-Mongo
-//    namespace: bookinfo-namespace
-//  spec:
-//    hosts:
-//    - mongosvr.prod.svc.cluster.local # name of internal Mongo service
-//    gateways:
-//    - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
-//                                         namespace as virtual service.
-//    tcp:
-//    - match:
-//      - port: 27017
-//      route:
-//      - destination:
-//          host: mongo.prod.svc.cluster.local
-//          port:
-//            number: 5555
-//  ```
-// 
-//  It is possible to restrict the set of virtual services that can bind to
-//  a gateway server using the namespace/hostname syntax in the hosts field.
-//  For example, the following Gateway allows any virtual service in the ns1
-//  namespace to bind to it, while restricting only the virtual service with
-//  foo.bar.com host in the ns2 namespace to bind to it.
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-gateway
-//    namespace: some-config-namespace
-//  spec:
-//    selector:
-//      app: my-gateway-controller
-//    servers:
-//    - port:
-//        number: 80
-//        name: http
-//        protocol: HTTP
-//      hosts:
-//      - "ns1/*"
-//      - "ns2/foo.bar.com"
-//  ```
-// 
+// `Gateway` describes a load balancer operating at the edge of the mesh
+// receiving incoming or outgoing HTTP/TCP connections. The specification
+// describes a set of ports that should be exposed, the type of protocol to
+// use, SNI configuration for the load balancer, etc.
+//
+// For example, the following Gateway configuration sets up a proxy to act
+// as a load balancer exposing port 80 and 9080 (http), 443 (https),
+// 9443(https) and port 2379 (TCP) for ingress.  The gateway will be
+// applied to the proxy running on a pod with labels `app:
+// my-gateway-controller`. While Istio will configure the proxy to listen
+// on these ports, it is the responsibility of the user to ensure that
+// external traffic to these ports are allowed into the mesh.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-gateway
+//   namespace: some-config-namespace
+// spec:
+//   selector:
+//     app: my-gateway-controller
+//   servers:
+//   - port:
+//       number: 80
+//       name: http
+//       protocol: HTTP
+//     hosts:
+//     - uk.bookinfo.com
+//     - eu.bookinfo.com
+//     tls:
+//       httpsRedirect: true # sends 301 redirect for http requests
+//   - port:
+//       number: 443
+//       name: https-443
+//       protocol: HTTPS
+//     hosts:
+//     - uk.bookinfo.com
+//     - eu.bookinfo.com
+//     tls:
+//       mode: SIMPLE # enables HTTPS on this port
+//       serverCertificate: /etc/certs/servercert.pem
+//       privateKey: /etc/certs/privatekey.pem
+//   - port:
+//       number: 9443
+//       name: https-9443
+//       protocol: HTTPS
+//     hosts:
+//     - "bookinfo-namespace/*.bookinfo.com"
+//     tls:
+//       mode: SIMPLE # enables HTTPS on this port
+//       credentialName: bookinfo-secret # fetches certs from Kubernetes secret
+//   - port:
+//       number: 9080
+//       name: http-wildcard
+//       protocol: HTTP
+//     hosts:
+//     - "*"
+//   - port:
+//       number: 2379 # to expose internal service via external port 2379
+//       name: mongo
+//       protocol: MONGO
+//     hosts:
+//     - "*"
+// ```
+//
+// The Gateway specification above describes the L4-L6 properties of a load
+// balancer. A `VirtualService` can then be bound to a gateway to control
+// the forwarding of traffic arriving at a particular host or gateway port.
+//
+// For example, the following VirtualService splits traffic for
+// `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`,
+// `http://uk.bookinfo.com:9080/reviews`,
+// `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of
+// an internal reviews service on port 9080. In addition, requests
+// containing the cookie "user: dev-123" will be sent to special port 7777
+// in the qa version. The same rule is also applicable inside the mesh for
+// requests to the "reviews.prod.svc.cluster.local" service. This rule is
+// applicable across ports 443, 9080. Note that `http://uk.bookinfo.com`
+// gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443).
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+//   name: bookinfo-rule
+//   namespace: bookinfo-namespace
+// spec:
+//   hosts:
+//   - reviews.prod.svc.cluster.local
+//   - uk.bookinfo.com
+//   - eu.bookinfo.com
+//   gateways:
+//   - some-config-namespace/my-gateway
+//   - mesh # applies to all the sidecars in the mesh
+//   http:
+//   - match:
+//     - headers:
+//         cookie:
+//           exact: "user=dev-123"
+//     route:
+//     - destination:
+//         port:
+//           number: 7777
+//         host: reviews.qa.svc.cluster.local
+//   - match:
+//     - uri:
+//         prefix: /reviews/
+//     route:
+//     - destination:
+//         port:
+//           number: 9080 # can be omitted if it's the only port for reviews
+//         host: reviews.prod.svc.cluster.local
+//       weight: 80
+//     - destination:
+//         host: reviews.qa.svc.cluster.local
+//       weight: 20
+// ```
+//
+// The following VirtualService forwards traffic arriving at (external)
+// port 27017 to internal Mongo server on port 5555. This rule is not
+// applicable internally in the mesh as the gateway list omits the
+// reserved name `mesh`.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+//   name: bookinfo-Mongo
+//   namespace: bookinfo-namespace
+// spec:
+//   hosts:
+//   - mongosvr.prod.svc.cluster.local # name of internal Mongo service
+//   gateways:
+//   - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
+//                                        namespace as virtual service.
+//   tcp:
+//   - match:
+//     - port: 27017
+//     route:
+//     - destination:
+//         host: mongo.prod.svc.cluster.local
+//         port:
+//           number: 5555
+// ```
+//
+// It is possible to restrict the set of virtual services that can bind to
+// a gateway server using the namespace/hostname syntax in the hosts field.
+// For example, the following Gateway allows any virtual service in the ns1
+// namespace to bind to it, while restricting only the virtual service with
+// foo.bar.com host in the ns2 namespace to bind to it.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-gateway
+//   namespace: some-config-namespace
+// spec:
+//   selector:
+//     app: my-gateway-controller
+//   servers:
+//   - port:
+//       number: 80
+//       name: http
+//       protocol: HTTP
+//     hosts:
+//     - "ns1/*"
+//     - "ns2/foo.bar.com"
+// ```
+//
 package v1alpha3
 
 Gateway: {
-	//  REQUIRED: A list of server specifications.
+	// REQUIRED: A list of server specifications.
 	servers?: [...Server] @protobuf(1)
 
-	//  REQUIRED: One or more labels that indicate a specific set of pods/VMs
-	//  on which this gateway configuration should be applied. The scope of
-	//  label search is restricted to the configuration namespace in which the
-	//  the resource is present. In other words, the Gateway resource must
-	//  reside in the same namespace as the gateway workload instance.
+	// REQUIRED: One or more labels that indicate a specific set of pods/VMs
+	// on which this gateway configuration should be applied. The scope of
+	// label search is restricted to the configuration namespace in which the
+	// the resource is present. In other words, the Gateway resource must
+	// reside in the same namespace as the gateway workload instance.
 	selector: {
 		<_>: string
 	} @protobuf(2,type=map<string,string>)
 	selector?: {<name>: name}
 }
 
-//  `Server` describes the properties of the proxy on a given load balancer
-//  port. For example,
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-ingress
-//  spec:
-//    selector:
-//      app: my-ingress-gateway
-//    servers:
-//    - port:
-//        number: 80
-//        name: http2
-//        protocol: HTTP2
-//      hosts:
-//      - "*"
-//  ```
-// 
-//  Another example
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-tcp-ingress
-//  spec:
-//    selector:
-//      app: my-tcp-ingress-gateway
-//    servers:
-//    - port:
-//        number: 27018
-//        name: mongo
-//        protocol: MONGO
-//      hosts:
-//      - "*"
-//  ```
-// 
-//  The following is an example of TLS configuration for port 443
-// 
-//  ```yaml
-//  apiVersion: networking.istio.io/v1alpha3
-//  kind: Gateway
-//  metadata:
-//    name: my-tls-ingress
-//  spec:
-//    selector:
-//      app: my-tls-ingress-gateway
-//    servers:
-//    - port:
-//        number: 443
-//        name: https
-//        protocol: HTTPS
-//      hosts:
-//      - "*"
-//      tls:
-//        mode: SIMPLE
-//        serverCertificate: /etc/certs/server.pem
-//        privateKey: /etc/certs/privatekey.pem
-//  ```
+// `Server` describes the properties of the proxy on a given load balancer
+// port. For example,
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-ingress
+// spec:
+//   selector:
+//     app: my-ingress-gateway
+//   servers:
+//   - port:
+//       number: 80
+//       name: http2
+//       protocol: HTTP2
+//     hosts:
+//     - "*"
+// ```
+//
+// Another example
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-tcp-ingress
+// spec:
+//   selector:
+//     app: my-tcp-ingress-gateway
+//   servers:
+//   - port:
+//       number: 27018
+//       name: mongo
+//       protocol: MONGO
+//     hosts:
+//     - "*"
+// ```
+//
+// The following is an example of TLS configuration for port 443
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: Gateway
+// metadata:
+//   name: my-tls-ingress
+// spec:
+//   selector:
+//     app: my-tls-ingress-gateway
+//   servers:
+//   - port:
+//       number: 443
+//       name: https
+//       protocol: HTTPS
+//     hosts:
+//     - "*"
+//     tls:
+//       mode: SIMPLE
+//       serverCertificate: /etc/certs/server.pem
+//       privateKey: /etc/certs/privatekey.pem
+// ```
 Server: {
-	//  REQUIRED: The Port on which the proxy should listen for incoming
-	//  connections.
+	// REQUIRED: The Port on which the proxy should listen for incoming
+	// connections.
 	port?: Port @protobuf(1)
 	port?: >10 & <100
 
-	//  $hide_from_docs
-	//  The ip or the Unix domain socket to which the listener should be bound
-	//  to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar`
-	//  (Linux abstract namespace). When using Unix domain sockets, the port
-	//  number should be 0.
+	// $hide_from_docs
+	// The ip or the Unix domain socket to which the listener should be bound
+	// to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar`
+	// (Linux abstract namespace). When using Unix domain sockets, the port
+	// number should be 0.
 	bind?: string @protobuf(4)
 
-	//  REQUIRED. One or more hosts exposed by this gateway.
-	//  While typically applicable to
-	//  HTTP services, it can also be used for TCP services using TLS with SNI.
-	//  A host is specified as a `dnsName` with an optional `namespace/` prefix.
-	//  The `dnsName` should be specified using FQDN format, optionally including
-	//  a wildcard character in the left-most component (e.g., `prod/*.example.com`).
-	//  Set the `dnsName` to `*` to select all `VirtualService` hosts from the
-	//  specified namespace (e.g.,`prod/*`). If no `namespace/` is specified,
-	//  the `VirtualService` hosts will be selected from any available namespace.
-	//  Any associated `DestinationRule` in the same namespace will also be used.
-	// 
-	//  A `VirtualService` must be bound to the gateway and must have one or
-	//  more hosts that match the hosts specified in a server. The match
-	//  could be an exact match or a suffix match with the server's hosts. For
-	//  example, if the server's hosts specifies `*.example.com`, a
-	//  `VirtualService` with hosts `dev.example.com` or `prod.example.com` will
-	//  match. However, a `VirtualService` with host `example.com` or
-	//  `newexample.com` will not match.
-	// 
-	//  NOTE: Only virtual services exported to the gateway's namespace
-	//  (e.g., `exportTo` value of `*`) can be referenced.
-	//  Private configurations (e.g., `exportTo` set to `.`) will not be
-	//  available. Refer to the `exportTo` setting in `VirtualService`,
-	//  `DestinationRule`, and `ServiceEntry` configurations for details.
+	// REQUIRED. One or more hosts exposed by this gateway.
+	// While typically applicable to
+	// HTTP services, it can also be used for TCP services using TLS with SNI.
+	// A host is specified as a `dnsName` with an optional `namespace/` prefix.
+	// The `dnsName` should be specified using FQDN format, optionally including
+	// a wildcard character in the left-most component (e.g., `prod/*.example.com`).
+	// Set the `dnsName` to `*` to select all `VirtualService` hosts from the
+	// specified namespace (e.g.,`prod/*`). If no `namespace/` is specified,
+	// the `VirtualService` hosts will be selected from any available namespace.
+	// Any associated `DestinationRule` in the same namespace will also be used.
+	//
+	// A `VirtualService` must be bound to the gateway and must have one or
+	// more hosts that match the hosts specified in a server. The match
+	// could be an exact match or a suffix match with the server's hosts. For
+	// example, if the server's hosts specifies `*.example.com`, a
+	// `VirtualService` with hosts `dev.example.com` or `prod.example.com` will
+	// match. However, a `VirtualService` with host `example.com` or
+	// `newexample.com` will not match.
+	//
+	// NOTE: Only virtual services exported to the gateway's namespace
+	// (e.g., `exportTo` value of `*`) can be referenced.
+	// Private configurations (e.g., `exportTo` set to `.`) will not be
+	// available. Refer to the `exportTo` setting in `VirtualService`,
+	// `DestinationRule`, and `ServiceEntry` configurations for details.
 	hosts?: [...string] @protobuf(2)
 
-	//  Set of TLS related options that govern the server's behavior. Use
-	//  these options to control if all http requests should be redirected to
-	//  https, and the TLS modes to use.
+	// Set of TLS related options that govern the server's behavior. Use
+	// these options to control if all http requests should be redirected to
+	// https, and the TLS modes to use.
 	tls?: Server_TLSOptions @protobuf(3,type=TLSOptions)
 
-	//  The loopback IP endpoint or Unix domain socket to which traffic should
-	//  be forwarded to by default. Format should be `127.0.0.1:PORT` or
-	//  `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace).
+	// The loopback IP endpoint or Unix domain socket to which traffic should
+	// be forwarded to by default. Format should be `127.0.0.1:PORT` or
+	// `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace).
 	defaultEndpoint?: string @protobuf(5,name=default_endpoint)
 }
 
 Server_TLSOptions: {
-	//  If set to true, the load balancer will send a 301 redirect for all
-	//  http connections, asking the clients to use HTTPS.
+	// If set to true, the load balancer will send a 301 redirect for all
+	// http connections, asking the clients to use HTTPS.
 	httpsRedirect?: bool @protobuf(1,name=https_redirect)
 
-	//  Optional: Indicates whether connections to this port should be
-	//  secured using TLS. The value of this field determines how TLS is
-	//  enforced.
+	// Optional: Indicates whether connections to this port should be
+	// secured using TLS. The value of this field determines how TLS is
+	// enforced.
 	mode?: Server_TLSOptions_TLSmode @protobuf(2,type=TLSmode)
 
-	//  Extra comment.
+	// Extra comment.
 
-	//  REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
-	//  holding the server-side TLS certificate to use.
+	// REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
+	// holding the server-side TLS certificate to use.
 	serverCertificate?: string @protobuf(3,name=server_certificate)
 
-	//  REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
-	//  holding the server's private key.
+	// REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
+	// holding the server's private key.
 	privateKey?: string @protobuf(4,name=private_key)
 
-	//  REQUIRED if mode is `MUTUAL`. The path to a file containing
-	//  certificate authority certificates to use in verifying a presented
-	//  client side certificate.
+	// REQUIRED if mode is `MUTUAL`. The path to a file containing
+	// certificate authority certificates to use in verifying a presented
+	// client side certificate.
 	caCertificates?: string @protobuf(5,name=ca_certificates)
 
-	//  The credentialName stands for a unique identifier that can be used
-	//  to identify the serverCertificate and the privateKey. The
-	//  credentialName appended with suffix "-cacert" is used to identify
-	//  the CaCertificates associated with this server. Gateway workloads
-	//  capable of fetching credentials from a remote credential store such
-	//  as Kubernetes secrets, will be configured to retrieve the
-	//  serverCertificate and the privateKey using credentialName, instead
-	//  of using the file system paths specified above. If using mutual TLS,
-	//  gateway workload instances will retrieve the CaCertificates using
-	//  credentialName-cacert. The semantics of the name are platform
-	//  dependent.  In Kubernetes, the default Istio supplied credential
-	//  server expects the credentialName to match the name of the
-	//  Kubernetes secret that holds the server certificate, the private
-	//  key, and the CA certificate (if using mutual TLS). Set the
-	//  `ISTIO_META_USER_SDS` metadata variable in the gateway's proxy to
-	//  enable the dynamic credential fetching feature.
+	// The credentialName stands for a unique identifier that can be used
+	// to identify the serverCertificate and the privateKey. The
+	// credentialName appended with suffix "-cacert" is used to identify
+	// the CaCertificates associated with this server. Gateway workloads
+	// capable of fetching credentials from a remote credential store such
+	// as Kubernetes secrets, will be configured to retrieve the
+	// serverCertificate and the privateKey using credentialName, instead
+	// of using the file system paths specified above. If using mutual TLS,
+	// gateway workload instances will retrieve the CaCertificates using
+	// credentialName-cacert. The semantics of the name are platform
+	// dependent.  In Kubernetes, the default Istio supplied credential
+	// server expects the credentialName to match the name of the
+	// Kubernetes secret that holds the server certificate, the private
+	// key, and the CA certificate (if using mutual TLS). Set the
+	// `ISTIO_META_USER_SDS` metadata variable in the gateway's proxy to
+	// enable the dynamic credential fetching feature.
 	credentialName?: string @protobuf(10,name=credential_name)
 
-	//  A list of alternate names to verify the subject identity in the
-	//  certificate presented by the client.
+	// A list of alternate names to verify the subject identity in the
+	// certificate presented by the client.
 	subjectAltNames?: [...string] @protobuf(6,name=subject_alt_names)
 
-	//  Optional: Minimum TLS protocol version.
+	// Optional: Minimum TLS protocol version.
 	minProtocolVersion?: Server_TLSOptions_TLSProtocol @protobuf(7,type=TLSProtocol,name=min_protocol_version)
 
-	//  Optional: Maximum TLS protocol version.
+	// Optional: Maximum TLS protocol version.
 	maxProtocolVersion?: Server_TLSOptions_TLSProtocol @protobuf(8,type=TLSProtocol,name=max_protocol_version)
 
-	//  Optional: If specified, only support the specified cipher list.
-	//  Otherwise default to the default cipher list supported by Envoy.
+	// Optional: If specified, only support the specified cipher list.
+	// Otherwise default to the default cipher list supported by Envoy.
 	cipherSuites?: [...string] @protobuf(9,name=cipher_suites)
 }
 
-//  TLS modes enforced by the proxy
+// TLS modes enforced by the proxy
 Server_TLSOptions_TLSmode:
-	//  The SNI string presented by the client will be used as the match
-	//  criterion in a VirtualService TLS route to determine the
-	//  destination service from the service registry.
+	// The SNI string presented by the client will be used as the match
+	// criterion in a VirtualService TLS route to determine the
+	// destination service from the service registry.
 	*"PASSTHROUGH" |
 
-	//  Secure connections with standard TLS semantics.
+	// Secure connections with standard TLS semantics.
 	"SIMPLE" |
 
-	//  Secure connections to the upstream using mutual TLS by presenting
-	//  client certificates for authentication.
+	// Secure connections to the upstream using mutual TLS by presenting
+	// client certificates for authentication.
 	"MUTUAL" |
 
-	//  Similar to the passthrough mode, except servers with this TLS mode
-	//  do not require an associated VirtualService to map from the SNI
-	//  value to service in the registry. The destination details such as
-	//  the service/subset/port are encoded in the SNI value. The proxy
-	//  will forward to the upstream (Envoy) cluster (a group of
-	//  endpoints) specified by the SNI value. This server is typically
-	//  used to provide connectivity between services in disparate L3
-	//  networks that otherwise do not have direct connectivity between
-	//  their respective endpoints. Use of this mode assumes that both the
-	//  source and the destination are using Istio mTLS to secure traffic.
+	// Similar to the passthrough mode, except servers with this TLS mode
+	// do not require an associated VirtualService to map from the SNI
+	// value to service in the registry. The destination details such as
+	// the service/subset/port are encoded in the SNI value. The proxy
+	// will forward to the upstream (Envoy) cluster (a group of
+	// endpoints) specified by the SNI value. This server is typically
+	// used to provide connectivity between services in disparate L3
+	// networks that otherwise do not have direct connectivity between
+	// their respective endpoints. Use of this mode assumes that both the
+	// source and the destination are using Istio mTLS to secure traffic.
 	"AUTO_PASSTHROUGH"
 
 Server_TLSOptions_TLSmode_value: {
@@ -420,13 +420,13 @@
 	"AUTO_PASSTHROUGH": 3
 }
 
-//  TLS protocol versions.
+// TLS protocol versions.
 Server_TLSOptions_TLSProtocol:
-	*"TLS_AUTO" | //  Automatically choose the optimal TLS version.
-	"TLSV1_0" | //  TLS version 1.0
-	"TLSV1_1" | //  TLS version 1.1
-	"TLSV1_2" | //  TLS version 1.2
-	"TLSV1_3" //  TLS version 1.3
+	*"TLS_AUTO" | // Automatically choose the optimal TLS version.
+	"TLSV1_0" | // TLS version 1.0
+	"TLSV1_1" | // TLS version 1.1
+	"TLSV1_2" | // TLS version 1.2
+	"TLSV1_3" // TLS version 1.3
 
 Server_TLSOptions_TLSProtocol_value: {
 	"TLS_AUTO": 0
@@ -436,17 +436,17 @@
 	"TLSV1_3":  4
 }
 
-//  Port describes the properties of a specific port of a service.
+// Port describes the properties of a specific port of a service.
 Port: {
-	//  REQUIRED: A valid non-negative integer port number.
+	// REQUIRED: A valid non-negative integer port number.
 	number?: uint32 @protobuf(1)
 
-	//  REQUIRED: The protocol exposed on the port.
-	//  MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.
-	//  TLS implies the connection will be routed based on the SNI header to
-	//  the destination without terminating the TLS connection.
+	// REQUIRED: The protocol exposed on the port.
+	// MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.
+	// TLS implies the connection will be routed based on the SNI header to
+	// the destination without terminating the TLS connection.
 	protocol?: string @protobuf(2)
 
-	//  Label assigned to the port.
+	// Label assigned to the port.
 	name?: string @protobuf(3)
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/pkg/github.com/gogo/protobuf/gogoproto/gogo_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/pkg/github.com/gogo/protobuf/gogoproto/gogo_proto_gen.cue
index 044eabf..1896f90 100644
--- a/encoding/protobuf/testdata/istio.io/api/pkg/github.com/gogo/protobuf/gogoproto/gogo_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/pkg/github.com/gogo/protobuf/gogoproto/gogo_proto_gen.cue
@@ -1,29 +1,29 @@
 
-//  Protocol Buffers for Go with Gadgets
-// 
-//  Copyright (c) 2013, The GoGo Authors. All rights reserved.
-//  http://github.com/gogo/protobuf
-// 
-//  Redistribution and use in source and binary forms, with or without
-//  modification, are permitted provided that the following conditions are
-//  met:
-// 
-//      * Redistributions of source code must retain the above copyright
-//  notice, this list of conditions and the following disclaimer.
-//      * Redistributions in binary form must reproduce the above
-//  copyright notice, this list of conditions and the following disclaimer
-//  in the documentation and/or other materials provided with the
-//  distribution.
-// 
-//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-//  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-//  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 package gogoproto
diff --git a/encoding/protobuf/testdata/istio.io/api/pkg/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/pkg/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor_proto_gen.cue
index 7ceb8fc..a897906 100644
--- a/encoding/protobuf/testdata/istio.io/api/pkg/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/pkg/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor_proto_gen.cue
@@ -1,117 +1,117 @@
-//  Protocol Buffers - Google's data interchange format
-//  Copyright 2008 Google Inc.  All rights reserved.
-//  https://developers.google.com/protocol-buffers/
-// 
-//  Redistribution and use in source and binary forms, with or without
-//  modification, are permitted provided that the following conditions are
-//  met:
-// 
-//      * Redistributions of source code must retain the above copyright
-//  notice, this list of conditions and the following disclaimer.
-//      * Redistributions in binary form must reproduce the above
-//  copyright notice, this list of conditions and the following disclaimer
-//  in the documentation and/or other materials provided with the
-//  distribution.
-//      * Neither the name of Google Inc. nor the names of its
-//  contributors may be used to endorse or promote products derived from
-//  this software without specific prior written permission.
-// 
-//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-//  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-//  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-//  Author: kenton@google.com (Kenton Varda)
-//   Based on original Protocol Buffers design by
-//   Sanjay Ghemawat, Jeff Dean, and others.
-// 
-//  The messages in this file describe the definitions found in .proto files.
-//  A valid .proto file can be translated directly to a FileDescriptorProto
-//  without any other information (e.g. without reading its imports).
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// The messages in this file describe the definitions found in .proto files.
+// A valid .proto file can be translated directly to a FileDescriptorProto
+// without any other information (e.g. without reading its imports).
 
-//  ===================================================================
-//  Options
+// ===================================================================
+// Options
 
-//  Each of the definitions above may have "options" attached.  These are
-//  just annotations which may cause code to be generated slightly differently
-//  or may contain hints for code that manipulates protocol messages.
-// 
-//  Clients may define custom options as extensions of the *Options messages.
-//  These extensions may not yet be known at parsing time, so the parser cannot
-//  store the values in them.  Instead it stores them in a field in the *Options
-//  message called uninterpreted_option. This field must have the same name
-//  across all *Options messages. We then use this field to populate the
-//  extensions when we build a descriptor, at which point all protos have been
-//  parsed and so all extensions are known.
-// 
-//  Extension numbers for custom options may be chosen as follows:
-//  * For options which will only be used within a single application or
-//    organization, or for experimental options, use field numbers 50000
-//    through 99999.  It is up to you to ensure that you do not use the
-//    same number for multiple options.
-//  * For options which will be published and used publicly by multiple
-//    independent entities, e-mail protobuf-global-extension-registry@google.com
-//    to reserve extension numbers. Simply provide your project name (e.g.
-//    Objective-C plugin) and your project website (if available) -- there's no
-//    need to explain how you intend to use them. Usually you only need one
-//    extension number. You can declare multiple options with only one extension
-//    number by putting them in a sub-message. See the Custom Options section of
-//    the docs for examples:
-//    https://developers.google.com/protocol-buffers/docs/proto#options
-//    If this turns out to be popular, a web service will be set up
-//    to automatically assign option numbers.
+// Each of the definitions above may have "options" attached.  These are
+// just annotations which may cause code to be generated slightly differently
+// or may contain hints for code that manipulates protocol messages.
+//
+// Clients may define custom options as extensions of the *Options messages.
+// These extensions may not yet be known at parsing time, so the parser cannot
+// store the values in them.  Instead it stores them in a field in the *Options
+// message called uninterpreted_option. This field must have the same name
+// across all *Options messages. We then use this field to populate the
+// extensions when we build a descriptor, at which point all protos have been
+// parsed and so all extensions are known.
+//
+// Extension numbers for custom options may be chosen as follows:
+// * For options which will only be used within a single application or
+//   organization, or for experimental options, use field numbers 50000
+//   through 99999.  It is up to you to ensure that you do not use the
+//   same number for multiple options.
+// * For options which will be published and used publicly by multiple
+//   independent entities, e-mail protobuf-global-extension-registry@google.com
+//   to reserve extension numbers. Simply provide your project name (e.g.
+//   Objective-C plugin) and your project website (if available) -- there's no
+//   need to explain how you intend to use them. Usually you only need one
+//   extension number. You can declare multiple options with only one extension
+//   number by putting them in a sub-message. See the Custom Options section of
+//   the docs for examples:
+//   https://developers.google.com/protocol-buffers/docs/proto#options
+//   If this turns out to be popular, a web service will be set up
+//   to automatically assign option numbers.
 
-//  ===================================================================
-//  Optional source code info
+// ===================================================================
+// Optional source code info
 package descriptor
 
-//  The protocol compiler can output a FileDescriptorSet containing the .proto
-//  files it parses.
+// The protocol compiler can output a FileDescriptorSet containing the .proto
+// files it parses.
 FileDescriptorSet: {
 	file?: [...FileDescriptorProto] @protobuf(1)
 }
 
-//  Describes a complete .proto file.
+// Describes a complete .proto file.
 FileDescriptorProto: {
-	name?:    string @protobuf(1) //  file name, relative to root of source tree
-	package?: string @protobuf(2) //  e.g. "foo", "foo.bar", etc.
+	name?:    string @protobuf(1) // file name, relative to root of source tree
+	package?: string @protobuf(2) // e.g. "foo", "foo.bar", etc.
 
-	//  Names of files imported by this file.
+	// Names of files imported by this file.
 	dependency?: [...string] @protobuf(3)
 
-	//  Indexes of the public imported files in the dependency list above.
+	// Indexes of the public imported files in the dependency list above.
 	publicDependency?: [...int32] @protobuf(10,name=public_dependency)
 
-	//  Indexes of the weak imported files in the dependency list.
-	//  For Google-internal migration only. Do not use.
+	// Indexes of the weak imported files in the dependency list.
+	// For Google-internal migration only. Do not use.
 	weakDependency?: [...int32] @protobuf(11,name=weak_dependency)
 
-	//  All top-level definitions in this file.
+	// All top-level definitions in this file.
 	messageType?: [...DescriptorProto] @protobuf(4,name=message_type)
 	enumType?: [...EnumDescriptorProto] @protobuf(5,name=enum_type)
 	service?: [...ServiceDescriptorProto] @protobuf(6)
 	extension?: [...FieldDescriptorProto] @protobuf(7)
 	options?: FileOptions @protobuf(8)
 
-	//  This field contains optional information about the original source code.
-	//  You may safely remove this entire field without harming runtime
-	//  functionality of the descriptors -- the information is needed only by
-	//  development tools.
+	// This field contains optional information about the original source code.
+	// You may safely remove this entire field without harming runtime
+	// functionality of the descriptors -- the information is needed only by
+	// development tools.
 	sourceCodeInfo?: SourceCodeInfo @protobuf(9,name=source_code_info)
 
-	//  The syntax of the proto file.
-	//  The supported values are "proto2" and "proto3".
+	// The syntax of the proto file.
+	// The supported values are "proto2" and "proto3".
 	syntax?: string @protobuf(12)
 }
 
-//  Describes a message type.
+// Describes a message type.
 DescriptorProto: {
 	name?: string @protobuf(1)
 	field?: [...FieldDescriptorProto] @protobuf(2)
@@ -123,103 +123,103 @@
 	options?: MessageOptions @protobuf(7)
 	reservedRange?: [...DescriptorProto_ReservedRange] @protobuf(9,type=ReservedRange,name=reserved_range)
 
-	//  Reserved field names, which may not be used by fields in the same message.
-	//  A given name may only be reserved once.
+	// Reserved field names, which may not be used by fields in the same message.
+	// A given name may only be reserved once.
 	reservedName?: [...string] @protobuf(10,name=reserved_name)
 }
 
 DescriptorProto_ExtensionRange: {
-	start?:   int32                 @protobuf(1) //  Inclusive.
-	end?:     int32                 @protobuf(2) //  Exclusive.
+	start?:   int32                 @protobuf(1) // Inclusive.
+	end?:     int32                 @protobuf(2) // Exclusive.
 	options?: ExtensionRangeOptions @protobuf(3)
 }
 
-//  Range of reserved tag numbers. Reserved tag numbers may not be used by
-//  fields or extension ranges in the same message. Reserved ranges may
-//  not overlap.
+// Range of reserved tag numbers. Reserved tag numbers may not be used by
+// fields or extension ranges in the same message. Reserved ranges may
+// not overlap.
 DescriptorProto_ReservedRange: {
-	start?: int32 @protobuf(1) //  Inclusive.
-	end?:   int32 @protobuf(2) //  Exclusive.
+	start?: int32 @protobuf(1) // Inclusive.
+	end?:   int32 @protobuf(2) // Exclusive.
 }
 
 ExtensionRangeOptions: {
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
-//  Describes a field within a message.
+// Describes a field within a message.
 FieldDescriptorProto: {
 	name?:   string                     @protobuf(1)
 	number?: int32                      @protobuf(3)
 	label?:  FieldDescriptorProto_Label @protobuf(4,type=Label)
 
-	//  If type_name is set, this need not be set.  If both this and type_name
-	//  are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+	// If type_name is set, this need not be set.  If both this and type_name
+	// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
 	type?: FieldDescriptorProto_Type @protobuf(5,type=Type)
 
-	//  For message and enum types, this is the name of the type.  If the name
-	//  starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
-	//  rules are used to find the type (i.e. first the nested types within this
-	//  message are searched, then within the parent, on up to the root
-	//  namespace).
+	// For message and enum types, this is the name of the type.  If the name
+	// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+	// rules are used to find the type (i.e. first the nested types within this
+	// message are searched, then within the parent, on up to the root
+	// namespace).
 	typeName?: string @protobuf(6,name=type_name)
 
-	//  For extensions, this is the name of the type being extended.  It is
-	//  resolved in the same manner as type_name.
+	// For extensions, this is the name of the type being extended.  It is
+	// resolved in the same manner as type_name.
 	extendee?: string @protobuf(2)
 
-	//  For numeric types, contains the original text representation of the value.
-	//  For booleans, "true" or "false".
-	//  For strings, contains the default text contents (not escaped in any way).
-	//  For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
-	//  TODO(kenton):  Base-64 encode?
+	// For numeric types, contains the original text representation of the value.
+	// For booleans, "true" or "false".
+	// For strings, contains the default text contents (not escaped in any way).
+	// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+	// TODO(kenton):  Base-64 encode?
 	defaultValue?: string @protobuf(7,name=default_value)
 
-	//  If set, gives the index of a oneof in the containing type's oneof_decl
-	//  list.  This field is a member of that oneof.
+	// If set, gives the index of a oneof in the containing type's oneof_decl
+	// list.  This field is a member of that oneof.
 	oneofIndex?: int32 @protobuf(9,name=oneof_index)
 
-	//  JSON name of this field. The value is set by protocol compiler. If the
-	//  user has set a "json_name" option on this field, that option's value
-	//  will be used. Otherwise, it's deduced from the field's name by converting
-	//  it to camelCase.
+	// JSON name of this field. The value is set by protocol compiler. If the
+	// user has set a "json_name" option on this field, that option's value
+	// will be used. Otherwise, it's deduced from the field's name by converting
+	// it to camelCase.
 	jsonName?: string       @protobuf(10,name=json_name)
 	options?:  FieldOptions @protobuf(8)
 }
 FieldDescriptorProto_Type:
-	//  0 is reserved for errors.
-	//  Order is weird for historical reasons.
+	// 0 is reserved for errors.
+	// Order is weird for historical reasons.
 	*"TYPE_DOUBLE" |
 	"TYPE_FLOAT" |
 
-	//  Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
-	//  negative values are likely.
+	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+	// negative values are likely.
 	"TYPE_INT64" |
 	"TYPE_UINT64" |
 
-	//  Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
-	//  negative values are likely.
+	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+	// negative values are likely.
 	"TYPE_INT32" |
 	"TYPE_FIXED64" |
 	"TYPE_FIXED32" |
 	"TYPE_BOOL" |
 	"TYPE_STRING" |
 
-	//  Tag-delimited aggregate.
-	//  Group type is deprecated and not supported in proto3. However, Proto3
-	//  implementations should still be able to parse the group wire format and
-	//  treat group fields as unknown fields.
+	// Tag-delimited aggregate.
+	// Group type is deprecated and not supported in proto3. However, Proto3
+	// implementations should still be able to parse the group wire format and
+	// treat group fields as unknown fields.
 	"TYPE_GROUP" |
-	"TYPE_MESSAGE" | //  Length-delimited aggregate.
+	"TYPE_MESSAGE" | // Length-delimited aggregate.
 
-	//  New in version 2.
+	// New in version 2.
 	"TYPE_BYTES" |
 	"TYPE_UINT32" |
 	"TYPE_ENUM" |
 	"TYPE_SFIXED32" |
 	"TYPE_SFIXED64" |
-	"TYPE_SINT32" | //  Uses ZigZag encoding.
-	"TYPE_SINT64" //  Uses ZigZag encoding.
+	"TYPE_SINT32" | // Uses ZigZag encoding.
+	"TYPE_SINT64" // Uses ZigZag encoding.
 
 FieldDescriptorProto_Type_value: {
 	"TYPE_DOUBLE":   1
@@ -242,7 +242,7 @@
 	"TYPE_SINT64":   18
 }
 FieldDescriptorProto_Label:
-	//  0 is reserved for errors
+	// 0 is reserved for errors
 	*"LABEL_OPTIONAL" |
 	"LABEL_REQUIRED" |
 	"LABEL_REPEATED"
@@ -253,317 +253,317 @@
 	"LABEL_REPEATED": 3
 }
 
-//  Describes a oneof.
+// Describes a oneof.
 OneofDescriptorProto: {
 	name?:    string       @protobuf(1)
 	options?: OneofOptions @protobuf(2)
 }
 
-//  Describes an enum type.
+// Describes an enum type.
 EnumDescriptorProto: {
 	name?: string @protobuf(1)
 	value?: [...EnumValueDescriptorProto] @protobuf(2)
 	options?: EnumOptions @protobuf(3)
 
-	//  Range of reserved numeric values. Reserved numeric values may not be used
-	//  by enum values in the same enum declaration. Reserved ranges may not
-	//  overlap.
+	// Range of reserved numeric values. Reserved numeric values may not be used
+	// by enum values in the same enum declaration. Reserved ranges may not
+	// overlap.
 	reservedRange?: [...EnumDescriptorProto_EnumReservedRange] @protobuf(4,type=EnumReservedRange,name=reserved_range)
 
-	//  Reserved enum value names, which may not be reused. A given name may only
-	//  be reserved once.
+	// Reserved enum value names, which may not be reused. A given name may only
+	// be reserved once.
 	reservedName?: [...string] @protobuf(5,name=reserved_name)
 }
 
-//  Range of reserved numeric values. Reserved values may not be used by
-//  entries in the same enum. Reserved ranges may not overlap.
-// 
-//  Note that this is distinct from DescriptorProto.ReservedRange in that it
-//  is inclusive such that it can appropriately represent the entire int32
-//  domain.
+// Range of reserved numeric values. Reserved values may not be used by
+// entries in the same enum. Reserved ranges may not overlap.
+//
+// Note that this is distinct from DescriptorProto.ReservedRange in that it
+// is inclusive such that it can appropriately represent the entire int32
+// domain.
 EnumDescriptorProto_EnumReservedRange: {
-	start?: int32 @protobuf(1) //  Inclusive.
-	end?:   int32 @protobuf(2) //  Inclusive.
+	start?: int32 @protobuf(1) // Inclusive.
+	end?:   int32 @protobuf(2) // Inclusive.
 }
 
-//  Describes a value within an enum.
+// Describes a value within an enum.
 EnumValueDescriptorProto: {
 	name?:    string           @protobuf(1)
 	number?:  int32            @protobuf(2)
 	options?: EnumValueOptions @protobuf(3)
 }
 
-//  Describes a service.
+// Describes a service.
 ServiceDescriptorProto: {
 	name?: string @protobuf(1)
 	method?: [...MethodDescriptorProto] @protobuf(2)
 	options?: ServiceOptions @protobuf(3)
 }
 
-//  Describes a method of a service.
+// Describes a method of a service.
 MethodDescriptorProto: {
 	name?: string @protobuf(1)
 
-	//  Input and output type names.  These are resolved in the same way as
-	//  FieldDescriptorProto.type_name, but must refer to a message type.
+	// Input and output type names.  These are resolved in the same way as
+	// FieldDescriptorProto.type_name, but must refer to a message type.
 	inputType?:  string        @protobuf(2,name=input_type)
 	outputType?: string        @protobuf(3,name=output_type)
 	options?:    MethodOptions @protobuf(4)
 
-	//  Identifies if client streams multiple client messages
+	// Identifies if client streams multiple client messages
 	clientStreaming?: bool @protobuf(5,name=client_streaming,"default=false")
 
-	//  Identifies if server streams multiple server messages
+	// Identifies if server streams multiple server messages
 	serverStreaming?: bool @protobuf(6,name=server_streaming,"default=false")
 }
 
 FileOptions: {
-	//  Sets the Java package where classes generated from this .proto will be
-	//  placed.  By default, the proto package is used, but this is often
-	//  inappropriate because proto packages do not normally start with backwards
-	//  domain names.
+	// Sets the Java package where classes generated from this .proto will be
+	// placed.  By default, the proto package is used, but this is often
+	// inappropriate because proto packages do not normally start with backwards
+	// domain names.
 	javaPackage?: string @protobuf(1,name=java_package)
 
-	//  If set, all the classes from the .proto file are wrapped in a single
-	//  outer class with the given name.  This applies to both Proto1
-	//  (equivalent to the old "--one_java_file" option) and Proto2 (where
-	//  a .proto always translates to a single class, but you may want to
-	//  explicitly choose the class name).
+	// If set, all the classes from the .proto file are wrapped in a single
+	// outer class with the given name.  This applies to both Proto1
+	// (equivalent to the old "--one_java_file" option) and Proto2 (where
+	// a .proto always translates to a single class, but you may want to
+	// explicitly choose the class name).
 	javaOuterClassname?: string @protobuf(8,name=java_outer_classname)
 
-	//  If set true, then the Java code generator will generate a separate .java
-	//  file for each top-level message, enum, and service defined in the .proto
-	//  file.  Thus, these types will *not* be nested inside the outer class
-	//  named by java_outer_classname.  However, the outer class will still be
-	//  generated to contain the file's getDescriptor() method as well as any
-	//  top-level extensions defined in the file.
+	// If set true, then the Java code generator will generate a separate .java
+	// file for each top-level message, enum, and service defined in the .proto
+	// file.  Thus, these types will *not* be nested inside the outer class
+	// named by java_outer_classname.  However, the outer class will still be
+	// generated to contain the file's getDescriptor() method as well as any
+	// top-level extensions defined in the file.
 	javaMultipleFiles?: bool @protobuf(10,name=java_multiple_files,"default=false")
 
-	//  This option does nothing.
+	// This option does nothing.
 	javaGenerateEqualsAndHash?: bool @protobuf(20,name=java_generate_equals_and_hash,deprecated)
 
-	//  If set true, then the Java2 code generator will generate code that
-	//  throws an exception whenever an attempt is made to assign a non-UTF-8
-	//  byte sequence to a string field.
-	//  Message reflection will do the same.
-	//  However, an extension field still accepts non-UTF-8 byte sequences.
-	//  This option has no effect on when used with the lite runtime.
+	// If set true, then the Java2 code generator will generate code that
+	// throws an exception whenever an attempt is made to assign a non-UTF-8
+	// byte sequence to a string field.
+	// Message reflection will do the same.
+	// However, an extension field still accepts non-UTF-8 byte sequences.
+	// This option has no effect on when used with the lite runtime.
 	javaStringCheckUtf8?: bool                     @protobuf(27,name=java_string_check_utf8,"default=false")
 	optimizeFor?:         FileOptions_OptimizeMode @protobuf(9,type=OptimizeMode,name=optimize_for,"default=SPEED")
 
-	//  Sets the Go package where structs generated from this .proto will be
-	//  placed. If omitted, the Go package will be derived from the following:
-	//    - The basename of the package import path, if provided.
-	//    - Otherwise, the package statement in the .proto file, if present.
-	//    - Otherwise, the basename of the .proto file, without extension.
+	// Sets the Go package where structs generated from this .proto will be
+	// placed. If omitted, the Go package will be derived from the following:
+	//   - The basename of the package import path, if provided.
+	//   - Otherwise, the package statement in the .proto file, if present.
+	//   - Otherwise, the basename of the .proto file, without extension.
 	goPackage?: string @protobuf(11,name=go_package)
 
-	//  Should generic services be generated in each language?  "Generic" services
-	//  are not specific to any particular RPC system.  They are generated by the
-	//  main code generators in each language (without additional plugins).
-	//  Generic services were the only kind of service generation supported by
-	//  early versions of google.protobuf.
-	// 
-	//  Generic services are now considered deprecated in favor of using plugins
-	//  that generate code specific to your particular RPC system.  Therefore,
-	//  these default to false.  Old code which depends on generic services should
-	//  explicitly set them to true.
+	// Should generic services be generated in each language?  "Generic" services
+	// are not specific to any particular RPC system.  They are generated by the
+	// main code generators in each language (without additional plugins).
+	// Generic services were the only kind of service generation supported by
+	// early versions of google.protobuf.
+	//
+	// Generic services are now considered deprecated in favor of using plugins
+	// that generate code specific to your particular RPC system.  Therefore,
+	// these default to false.  Old code which depends on generic services should
+	// explicitly set them to true.
 	ccGenericServices?:   bool @protobuf(16,name=cc_generic_services,"default=false")
 	javaGenericServices?: bool @protobuf(17,name=java_generic_services,"default=false")
 	pyGenericServices?:   bool @protobuf(18,name=py_generic_services,"default=false")
 	phpGenericServices?:  bool @protobuf(42,name=php_generic_services,"default=false")
 
-	//  Is this file deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for everything in the file, or it will be completely ignored; in the very
-	//  least, this is a formalization for deprecating files.
+	// Is this file deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for everything in the file, or it will be completely ignored; in the very
+	// least, this is a formalization for deprecating files.
 	deprecated?: bool @protobuf(23,"default=false")
 
-	//  Enables the use of arenas for the proto messages in this file. This applies
-	//  only to generated classes for C++.
+	// Enables the use of arenas for the proto messages in this file. This applies
+	// only to generated classes for C++.
 	ccEnableArenas?: bool @protobuf(31,name=cc_enable_arenas,"default=false")
 
-	//  Sets the objective c class prefix which is prepended to all objective c
-	//  generated classes from this .proto. There is no default.
+	// Sets the objective c class prefix which is prepended to all objective c
+	// generated classes from this .proto. There is no default.
 	objcClassPrefix?: string @protobuf(36,name=objc_class_prefix)
 
-	//  Namespace for generated classes; defaults to the package.
+	// Namespace for generated classes; defaults to the package.
 	csharpNamespace?: string @protobuf(37,name=csharp_namespace)
 
-	//  By default Swift generators will take the proto package and CamelCase it
-	//  replacing '.' with underscore and use that to prefix the types/symbols
-	//  defined. When this options is provided, they will use this value instead
-	//  to prefix the types/symbols defined.
+	// By default Swift generators will take the proto package and CamelCase it
+	// replacing '.' with underscore and use that to prefix the types/symbols
+	// defined. When this options is provided, they will use this value instead
+	// to prefix the types/symbols defined.
 	swiftPrefix?: string @protobuf(39,name=swift_prefix)
 
-	//  Sets the php class prefix which is prepended to all php generated classes
-	//  from this .proto. Default is empty.
+	// Sets the php class prefix which is prepended to all php generated classes
+	// from this .proto. Default is empty.
 	phpClassPrefix?: string @protobuf(40,name=php_class_prefix)
 
-	//  Use this option to change the namespace of php generated classes. Default
-	//  is empty. When this option is empty, the package name will be used for
-	//  determining the namespace.
+	// Use this option to change the namespace of php generated classes. Default
+	// is empty. When this option is empty, the package name will be used for
+	// determining the namespace.
 	phpNamespace?: string @protobuf(41,name=php_namespace)
 
-	//  Use this option to change the namespace of php generated metadata classes.
-	//  Default is empty. When this option is empty, the proto file name will be
-	//  used for determining the namespace.
+	// Use this option to change the namespace of php generated metadata classes.
+	// Default is empty. When this option is empty, the proto file name will be
+	// used for determining the namespace.
 	phpMetadataNamespace?: string @protobuf(44,name=php_metadata_namespace)
 
-	//  Use this option to change the package of ruby generated classes. Default
-	//  is empty. When this option is not set, the package name will be used for
-	//  determining the ruby package.
+	// Use this option to change the package of ruby generated classes. Default
+	// is empty. When this option is not set, the package name will be used for
+	// determining the ruby package.
 	rubyPackage?: string @protobuf(45,name=ruby_package)
 
-	//  The parser stores options it doesn't recognize here.
-	//  See the documentation for the "Options" section above.
+	// The parser stores options it doesn't recognize here.
+	// See the documentation for the "Options" section above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
-//  Generated classes can be optimized for speed or code size.
+// Generated classes can be optimized for speed or code size.
 FileOptions_OptimizeMode:
-	*"SPEED" | //  Generate complete code for parsing, serialization,
+	*"SPEED" | // Generate complete code for parsing, serialization,
 
-	//  etc.
+	// etc.
 	"CODE_SIZE" |
-	"LITE_RUNTIME" //  Generate code using MessageLite and the lite runtime.
+	"LITE_RUNTIME" // Generate code using MessageLite and the lite runtime.
 
 FileOptions_OptimizeMode_value: {
 	"SPEED":        1
-	"CODE_SIZE":    2 //  Use ReflectionOps to implement these methods.
+	"CODE_SIZE":    2 // Use ReflectionOps to implement these methods.
 	"LITE_RUNTIME": 3
 }
 
 MessageOptions: {
-	//  Set true to use the old proto1 MessageSet wire format for extensions.
-	//  This is provided for backwards-compatibility with the MessageSet wire
-	//  format.  You should not use this for any other reason:  It's less
-	//  efficient, has fewer features, and is more complicated.
-	// 
-	//  The message must be defined exactly as follows:
-	//    message Foo {
-	//      option message_set_wire_format = true;
-	//      extensions 4 to max;
-	//    }
-	//  Note that the message cannot have any defined fields; MessageSets only
-	//  have extensions.
-	// 
-	//  All extensions of your type must be singular messages; e.g. they cannot
-	//  be int32s, enums, or repeated messages.
-	// 
-	//  Because this is an option, the above two restrictions are not enforced by
-	//  the protocol compiler.
+	// Set true to use the old proto1 MessageSet wire format for extensions.
+	// This is provided for backwards-compatibility with the MessageSet wire
+	// format.  You should not use this for any other reason:  It's less
+	// efficient, has fewer features, and is more complicated.
+	//
+	// The message must be defined exactly as follows:
+	//   message Foo {
+	//     option message_set_wire_format = true;
+	//     extensions 4 to max;
+	//   }
+	// Note that the message cannot have any defined fields; MessageSets only
+	// have extensions.
+	//
+	// All extensions of your type must be singular messages; e.g. they cannot
+	// be int32s, enums, or repeated messages.
+	//
+	// Because this is an option, the above two restrictions are not enforced by
+	// the protocol compiler.
 	messageSetWireFormat?: bool @protobuf(1,name=message_set_wire_format,"default=false")
 
-	//  Disables the generation of the standard "descriptor()" accessor, which can
-	//  conflict with a field of the same name.  This is meant to make migration
-	//  from proto1 easier; new code should avoid fields named "descriptor".
+	// Disables the generation of the standard "descriptor()" accessor, which can
+	// conflict with a field of the same name.  This is meant to make migration
+	// from proto1 easier; new code should avoid fields named "descriptor".
 	noStandardDescriptorAccessor?: bool @protobuf(2,name=no_standard_descriptor_accessor,"default=false")
 
-	//  Is this message deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for the message, or it will be completely ignored; in the very least,
-	//  this is a formalization for deprecating messages.
+	// Is this message deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the message, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating messages.
 	deprecated?: bool @protobuf(3,"default=false")
 
-	//  Whether the message is an automatically generated map entry type for the
-	//  maps field.
-	// 
-	//  For maps fields:
-	//      map<KeyType, ValueType> map_field = 1;
-	//  The parsed descriptor looks like:
-	//      message MapFieldEntry {
-	//          option map_entry = true;
-	//          optional KeyType key = 1;
-	//          optional ValueType value = 2;
-	//      }
-	//      repeated MapFieldEntry map_field = 1;
-	// 
-	//  Implementations may choose not to generate the map_entry=true message, but
-	//  use a native map in the target language to hold the keys and values.
-	//  The reflection APIs in such implementations still need to work as
-	//  if the field is a repeated message field.
-	// 
-	//  NOTE: Do not set the option in .proto files. Always use the maps syntax
-	//  instead. The option should only be implicitly set by the proto compiler
-	//  parser.
+	// Whether the message is an automatically generated map entry type for the
+	// maps field.
+	//
+	// For maps fields:
+	//     map<KeyType, ValueType> map_field = 1;
+	// The parsed descriptor looks like:
+	//     message MapFieldEntry {
+	//         option map_entry = true;
+	//         optional KeyType key = 1;
+	//         optional ValueType value = 2;
+	//     }
+	//     repeated MapFieldEntry map_field = 1;
+	//
+	// Implementations may choose not to generate the map_entry=true message, but
+	// use a native map in the target language to hold the keys and values.
+	// The reflection APIs in such implementations still need to work as
+	// if the field is a repeated message field.
+	//
+	// NOTE: Do not set the option in .proto files. Always use the maps syntax
+	// instead. The option should only be implicitly set by the proto compiler
+	// parser.
 	mapEntry?: bool @protobuf(7,name=map_entry)
 
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
 FieldOptions: {
-	//  The ctype option instructs the C++ code generator to use a different
-	//  representation of the field than it normally would.  See the specific
-	//  options below.  This option is not yet implemented in the open source
-	//  release -- sorry, we'll try to include it in a future version!
+	// The ctype option instructs the C++ code generator to use a different
+	// representation of the field than it normally would.  See the specific
+	// options below.  This option is not yet implemented in the open source
+	// release -- sorry, we'll try to include it in a future version!
 	ctype?: FieldOptions_CType @protobuf(1,type=CType,"default=STRING")
 
-	//  The packed option can be enabled for repeated primitive fields to enable
-	//  a more efficient representation on the wire. Rather than repeatedly
-	//  writing the tag and type for each element, the entire array is encoded as
-	//  a single length-delimited blob. In proto3, only explicit setting it to
-	//  false will avoid using packed encoding.
+	// The packed option can be enabled for repeated primitive fields to enable
+	// a more efficient representation on the wire. Rather than repeatedly
+	// writing the tag and type for each element, the entire array is encoded as
+	// a single length-delimited blob. In proto3, only explicit setting it to
+	// false will avoid using packed encoding.
 	packed?: bool @protobuf(2)
 
-	//  The jstype option determines the JavaScript type used for values of the
-	//  field.  The option is permitted only for 64 bit integral and fixed types
-	//  (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
-	//  is represented as JavaScript string, which avoids loss of precision that
-	//  can happen when a large value is converted to a floating point JavaScript.
-	//  Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
-	//  use the JavaScript "number" type.  The behavior of the default option
-	//  JS_NORMAL is implementation dependent.
-	// 
-	//  This option is an enum to permit additional types to be added, e.g.
-	//  goog.math.Integer.
+	// The jstype option determines the JavaScript type used for values of the
+	// field.  The option is permitted only for 64 bit integral and fixed types
+	// (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
+	// is represented as JavaScript string, which avoids loss of precision that
+	// can happen when a large value is converted to a floating point JavaScript.
+	// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
+	// use the JavaScript "number" type.  The behavior of the default option
+	// JS_NORMAL is implementation dependent.
+	//
+	// This option is an enum to permit additional types to be added, e.g.
+	// goog.math.Integer.
 	jstype?: FieldOptions_JSType @protobuf(6,type=JSType,"default=JS_NORMAL")
 
-	//  Should this field be parsed lazily?  Lazy applies only to message-type
-	//  fields.  It means that when the outer message is initially parsed, the
-	//  inner message's contents will not be parsed but instead stored in encoded
-	//  form.  The inner message will actually be parsed when it is first accessed.
-	// 
-	//  This is only a hint.  Implementations are free to choose whether to use
-	//  eager or lazy parsing regardless of the value of this option.  However,
-	//  setting this option true suggests that the protocol author believes that
-	//  using lazy parsing on this field is worth the additional bookkeeping
-	//  overhead typically needed to implement it.
-	// 
-	//  This option does not affect the public interface of any generated code;
-	//  all method signatures remain the same.  Furthermore, thread-safety of the
-	//  interface is not affected by this option; const methods remain safe to
-	//  call from multiple threads concurrently, while non-const methods continue
-	//  to require exclusive access.
-	// 
-	// 
-	//  Note that implementations may choose not to check required fields within
-	//  a lazy sub-message.  That is, calling IsInitialized() on the outer message
-	//  may return true even if the inner message has missing required fields.
-	//  This is necessary because otherwise the inner message would have to be
-	//  parsed in order to perform the check, defeating the purpose of lazy
-	//  parsing.  An implementation which chooses not to check required fields
-	//  must be consistent about it.  That is, for any particular sub-message, the
-	//  implementation must either *always* check its required fields, or *never*
-	//  check its required fields, regardless of whether or not the message has
-	//  been parsed.
+	// Should this field be parsed lazily?  Lazy applies only to message-type
+	// fields.  It means that when the outer message is initially parsed, the
+	// inner message's contents will not be parsed but instead stored in encoded
+	// form.  The inner message will actually be parsed when it is first accessed.
+	//
+	// This is only a hint.  Implementations are free to choose whether to use
+	// eager or lazy parsing regardless of the value of this option.  However,
+	// setting this option true suggests that the protocol author believes that
+	// using lazy parsing on this field is worth the additional bookkeeping
+	// overhead typically needed to implement it.
+	//
+	// This option does not affect the public interface of any generated code;
+	// all method signatures remain the same.  Furthermore, thread-safety of the
+	// interface is not affected by this option; const methods remain safe to
+	// call from multiple threads concurrently, while non-const methods continue
+	// to require exclusive access.
+	//
+	//
+	// Note that implementations may choose not to check required fields within
+	// a lazy sub-message.  That is, calling IsInitialized() on the outer message
+	// may return true even if the inner message has missing required fields.
+	// This is necessary because otherwise the inner message would have to be
+	// parsed in order to perform the check, defeating the purpose of lazy
+	// parsing.  An implementation which chooses not to check required fields
+	// must be consistent about it.  That is, for any particular sub-message, the
+	// implementation must either *always* check its required fields, or *never*
+	// check its required fields, regardless of whether or not the message has
+	// been parsed.
 	lazy?: bool @protobuf(5,"default=false")
 
-	//  Is this field deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for accessors, or it will be completely ignored; in the very least, this
-	//  is a formalization for deprecating fields.
+	// Is this field deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for accessors, or it will be completely ignored; in the very least, this
+	// is a formalization for deprecating fields.
 	deprecated?: bool @protobuf(3,"default=false")
 
-	//  For Google-internal migration only. Do not use.
+	// For Google-internal migration only. Do not use.
 	weak?: bool @protobuf(10,"default=false")
 
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 FieldOptions_CType:
-	//  Default mode.
+	// Default mode.
 	*"STRING" |
 	"CORD" |
 	"STRING_PIECE"
@@ -574,13 +574,13 @@
 	"STRING_PIECE": 2
 }
 FieldOptions_JSType:
-	//  Use the default type.
+	// Use the default type.
 	*"JS_NORMAL" |
 
-	//  Use JavaScript strings.
+	// Use JavaScript strings.
 	"JS_STRING" |
 
-	//  Use JavaScript numbers.
+	// Use JavaScript numbers.
 	"JS_NUMBER"
 
 FieldOptions_JSType_value: {
@@ -590,78 +590,78 @@
 }
 
 OneofOptions: {
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
 EnumOptions: {
-	//  Set this option to true to allow mapping different tag names to the same
-	//  value.
+	// Set this option to true to allow mapping different tag names to the same
+	// value.
 	allowAlias?: bool @protobuf(2,name=allow_alias)
 
-	//  Is this enum deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for the enum, or it will be completely ignored; in the very least, this
-	//  is a formalization for deprecating enums.
+	// Is this enum deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the enum, or it will be completely ignored; in the very least, this
+	// is a formalization for deprecating enums.
 	deprecated?: bool @protobuf(3,"default=false")
 
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
 EnumValueOptions: {
-	//  Is this enum value deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for the enum value, or it will be completely ignored; in the very least,
-	//  this is a formalization for deprecating enum values.
+	// Is this enum value deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the enum value, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating enum values.
 	deprecated?: bool @protobuf(1,"default=false")
 
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
 ServiceOptions: {
 
-	//  Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
-	//    framework.  We apologize for hoarding these numbers to ourselves, but
-	//    we were already using them long before we decided to release Protocol
-	//    Buffers.
+	// Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+	//   framework.  We apologize for hoarding these numbers to ourselves, but
+	//   we were already using them long before we decided to release Protocol
+	//   Buffers.
 
-	//  Is this service deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for the service, or it will be completely ignored; in the very least,
-	//  this is a formalization for deprecating services.
+	// Is this service deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the service, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating services.
 	deprecated?: bool @protobuf(33,"default=false")
 
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
 MethodOptions: {
 
-	//  Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
-	//    framework.  We apologize for hoarding these numbers to ourselves, but
-	//    we were already using them long before we decided to release Protocol
-	//    Buffers.
+	// Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+	//   framework.  We apologize for hoarding these numbers to ourselves, but
+	//   we were already using them long before we decided to release Protocol
+	//   Buffers.
 
-	//  Is this method deprecated?
-	//  Depending on the target platform, this can emit Deprecated annotations
-	//  for the method, or it will be completely ignored; in the very least,
-	//  this is a formalization for deprecating methods.
+	// Is this method deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the method, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating methods.
 	deprecated?:       bool                           @protobuf(33,"default=false")
 	idempotencyLevel?: MethodOptions_IdempotencyLevel @protobuf(34,type=IdempotencyLevel,name=idempotency_level,"default=IDEMPOTENCY_UNKNOWN")
 
-	//  The parser stores options it doesn't recognize here. See above.
+	// The parser stores options it doesn't recognize here. See above.
 	uninterpretedOption?: [...UninterpretedOption] @protobuf(999,name=uninterpreted_option)
 }
 
-//  Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
-//  or neither? HTTP based RPC implementation may choose GET verb for safe
-//  methods, and PUT verb for idempotent methods instead of the default POST.
+// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
+// or neither? HTTP based RPC implementation may choose GET verb for safe
+// methods, and PUT verb for idempotent methods instead of the default POST.
 MethodOptions_IdempotencyLevel:
 	*"IDEMPOTENCY_UNKNOWN" |
-	"NO_SIDE_EFFECTS" | //  implies idempotent
-	"IDEMPOTENT" //  idempotent, but may have side effects
+	"NO_SIDE_EFFECTS" | // implies idempotent
+	"IDEMPOTENT" // idempotent, but may have side effects
 
 MethodOptions_IdempotencyLevel_value: {
 	"IDEMPOTENCY_UNKNOWN": 0
@@ -669,17 +669,17 @@
 	"IDEMPOTENT":          2
 }
 
-//  A message representing a option the parser does not recognize. This only
-//  appears in options protos created by the compiler::Parser class.
-//  DescriptorPool resolves these when building Descriptor objects. Therefore,
-//  options protos in descriptor objects (e.g. returned by Descriptor::options(),
-//  or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
-//  in them.
+// A message representing a option the parser does not recognize. This only
+// appears in options protos created by the compiler::Parser class.
+// DescriptorPool resolves these when building Descriptor objects. Therefore,
+// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+// in them.
 UninterpretedOption: {
 	name?: [...UninterpretedOption_NamePart] @protobuf(2,type=NamePart)
 
-	//  The value of the uninterpreted option, in whatever type the tokenizer
-	//  identified it as during parsing. Exactly one of these should be set.
+	// The value of the uninterpreted option, in whatever type the tokenizer
+	// identified it as during parsing. Exactly one of these should be set.
 	identifierValue?:  string  @protobuf(3,name=identifier_value)
 	positiveIntValue?: uint64  @protobuf(4,name=positive_int_value)
 	negativeIntValue?: int64   @protobuf(5,name=negative_int_value)
@@ -688,173 +688,173 @@
 	aggregateValue?:   string  @protobuf(8,name=aggregate_value)
 }
 
-//  The name of the uninterpreted option.  Each string represents a segment in
-//  a dot-separated name.  is_extension is true iff a segment represents an
-//  extension (denoted with parentheses in options specs in .proto files).
-//  E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
-//  "foo.(bar.baz).qux".
+// The name of the uninterpreted option.  Each string represents a segment in
+// a dot-separated name.  is_extension is true iff a segment represents an
+// extension (denoted with parentheses in options specs in .proto files).
+// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+// "foo.(bar.baz).qux".
 UninterpretedOption_NamePart: {
 	namePart?:    string @protobuf(1,name=name_part)
 	isExtension?: bool   @protobuf(2,name=is_extension)
 }
 
-//  Encapsulates information about the original source file from which a
-//  FileDescriptorProto was generated.
+// Encapsulates information about the original source file from which a
+// FileDescriptorProto was generated.
 SourceCodeInfo: {
-	//  A Location identifies a piece of source code in a .proto file which
-	//  corresponds to a particular definition.  This information is intended
-	//  to be useful to IDEs, code indexers, documentation generators, and similar
-	//  tools.
-	// 
-	//  For example, say we have a file like:
-	//    message Foo {
-	//      optional string foo = 1;
-	//    }
-	//  Let's look at just the field definition:
-	//    optional string foo = 1;
-	//    ^       ^^     ^^  ^  ^^^
-	//    a       bc     de  f  ghi
-	//  We have the following locations:
-	//    span   path               represents
-	//    [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
-	//    [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
-	//    [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
-	//    [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
-	//    [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
-	// 
-	//  Notes:
-	//  - A location may refer to a repeated field itself (i.e. not to any
-	//    particular index within it).  This is used whenever a set of elements are
-	//    logically enclosed in a single code segment.  For example, an entire
-	//    extend block (possibly containing multiple extension definitions) will
-	//    have an outer location whose path refers to the "extensions" repeated
-	//    field without an index.
-	//  - Multiple locations may have the same path.  This happens when a single
-	//    logical declaration is spread out across multiple places.  The most
-	//    obvious example is the "extend" block again -- there may be multiple
-	//    extend blocks in the same scope, each of which will have the same path.
-	//  - A location's span is not always a subset of its parent's span.  For
-	//    example, the "extendee" of an extension declaration appears at the
-	//    beginning of the "extend" block and is shared by all extensions within
-	//    the block.
-	//  - Just because a location's span is a subset of some other location's span
-	//    does not mean that it is a descendant.  For example, a "group" defines
-	//    both a type and a field in a single declaration.  Thus, the locations
-	//    corresponding to the type and field and their components will overlap.
-	//  - Code which tries to interpret locations should probably be designed to
-	//    ignore those that it doesn't understand, as more types of locations could
-	//    be recorded in the future.
+	// A Location identifies a piece of source code in a .proto file which
+	// corresponds to a particular definition.  This information is intended
+	// to be useful to IDEs, code indexers, documentation generators, and similar
+	// tools.
+	//
+	// For example, say we have a file like:
+	//   message Foo {
+	//     optional string foo = 1;
+	//   }
+	// Let's look at just the field definition:
+	//   optional string foo = 1;
+	//   ^       ^^     ^^  ^  ^^^
+	//   a       bc     de  f  ghi
+	// We have the following locations:
+	//   span   path               represents
+	//   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+	//   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+	//   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+	//   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+	//   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+	//
+	// Notes:
+	// - A location may refer to a repeated field itself (i.e. not to any
+	//   particular index within it).  This is used whenever a set of elements are
+	//   logically enclosed in a single code segment.  For example, an entire
+	//   extend block (possibly containing multiple extension definitions) will
+	//   have an outer location whose path refers to the "extensions" repeated
+	//   field without an index.
+	// - Multiple locations may have the same path.  This happens when a single
+	//   logical declaration is spread out across multiple places.  The most
+	//   obvious example is the "extend" block again -- there may be multiple
+	//   extend blocks in the same scope, each of which will have the same path.
+	// - A location's span is not always a subset of its parent's span.  For
+	//   example, the "extendee" of an extension declaration appears at the
+	//   beginning of the "extend" block and is shared by all extensions within
+	//   the block.
+	// - Just because a location's span is a subset of some other location's span
+	//   does not mean that it is a descendant.  For example, a "group" defines
+	//   both a type and a field in a single declaration.  Thus, the locations
+	//   corresponding to the type and field and their components will overlap.
+	// - Code which tries to interpret locations should probably be designed to
+	//   ignore those that it doesn't understand, as more types of locations could
+	//   be recorded in the future.
 	location?: [...SourceCodeInfo_Location] @protobuf(1,type=Location)
 }
 
 SourceCodeInfo_Location: {
-	//  Identifies which part of the FileDescriptorProto was defined at this
-	//  location.
-	// 
-	//  Each element is a field number or an index.  They form a path from
-	//  the root FileDescriptorProto to the place where the definition.  For
-	//  example, this path:
-	//    [ 4, 3, 2, 7, 1 ]
-	//  refers to:
-	//    file.message_type(3)  // 4, 3
-	//        .field(7)         // 2, 7
-	//        .name()           // 1
-	//  This is because FileDescriptorProto.message_type has field number 4:
-	//    repeated DescriptorProto message_type = 4;
-	//  and DescriptorProto.field has field number 2:
-	//    repeated FieldDescriptorProto field = 2;
-	//  and FieldDescriptorProto.name has field number 1:
-	//    optional string name = 1;
-	// 
-	//  Thus, the above path gives the location of a field name.  If we removed
-	//  the last element:
-	//    [ 4, 3, 2, 7 ]
-	//  this path refers to the whole field declaration (from the beginning
-	//  of the label to the terminating semicolon).
+	// Identifies which part of the FileDescriptorProto was defined at this
+	// location.
+	//
+	// Each element is a field number or an index.  They form a path from
+	// the root FileDescriptorProto to the place where the definition.  For
+	// example, this path:
+	//   [ 4, 3, 2, 7, 1 ]
+	// refers to:
+	//   file.message_type(3)  // 4, 3
+	//       .field(7)         // 2, 7
+	//       .name()           // 1
+	// This is because FileDescriptorProto.message_type has field number 4:
+	//   repeated DescriptorProto message_type = 4;
+	// and DescriptorProto.field has field number 2:
+	//   repeated FieldDescriptorProto field = 2;
+	// and FieldDescriptorProto.name has field number 1:
+	//   optional string name = 1;
+	//
+	// Thus, the above path gives the location of a field name.  If we removed
+	// the last element:
+	//   [ 4, 3, 2, 7 ]
+	// this path refers to the whole field declaration (from the beginning
+	// of the label to the terminating semicolon).
 	path?: [...int32] @protobuf(1,packed)
 
-	//  Always has exactly three or four elements: start line, start column,
-	//  end line (optional, otherwise assumed same as start line), end column.
-	//  These are packed into a single field for efficiency.  Note that line
-	//  and column numbers are zero-based -- typically you will want to add
-	//  1 to each before displaying to a user.
+	// Always has exactly three or four elements: start line, start column,
+	// end line (optional, otherwise assumed same as start line), end column.
+	// These are packed into a single field for efficiency.  Note that line
+	// and column numbers are zero-based -- typically you will want to add
+	// 1 to each before displaying to a user.
 	span?: [...int32] @protobuf(2,packed)
 
-	//  If this SourceCodeInfo represents a complete declaration, these are any
-	//  comments appearing before and after the declaration which appear to be
-	//  attached to the declaration.
-	// 
-	//  A series of line comments appearing on consecutive lines, with no other
-	//  tokens appearing on those lines, will be treated as a single comment.
-	// 
-	//  leading_detached_comments will keep paragraphs of comments that appear
-	//  before (but not connected to) the current element. Each paragraph,
-	//  separated by empty lines, will be one comment element in the repeated
-	//  field.
-	// 
-	//  Only the comment content is provided; comment markers (e.g. //) are
-	//  stripped out.  For block comments, leading whitespace and an asterisk
-	//  will be stripped from the beginning of each line other than the first.
-	//  Newlines are included in the output.
-	// 
-	//  Examples:
-	// 
-	//    optional int32 foo = 1;  // Comment attached to foo.
-	//    // Comment attached to bar.
-	//    optional int32 bar = 2;
-	// 
-	//    optional string baz = 3;
-	//    // Comment attached to baz.
-	//    // Another line attached to baz.
-	// 
-	//    // Comment attached to qux.
-	//    //
-	//    // Another line attached to qux.
-	//    optional double qux = 4;
-	// 
-	//    // Detached comment for corge. This is not leading or trailing comments
-	//    // to qux or corge because there are blank lines separating it from
-	//    // both.
-	// 
-	//    // Detached comment for corge paragraph 2.
-	// 
-	//    optional string corge = 5;
-	//    /* Block comment attached
-	//     * to corge.  Leading asterisks
-	//     * will be removed. */
-	//    /* Block comment attached to
-	//     * grault. */
-	//    optional int32 grault = 6;
-	// 
-	//    // ignored detached comments.
+	// If this SourceCodeInfo represents a complete declaration, these are any
+	// comments appearing before and after the declaration which appear to be
+	// attached to the declaration.
+	//
+	// A series of line comments appearing on consecutive lines, with no other
+	// tokens appearing on those lines, will be treated as a single comment.
+	//
+	// leading_detached_comments will keep paragraphs of comments that appear
+	// before (but not connected to) the current element. Each paragraph,
+	// separated by empty lines, will be one comment element in the repeated
+	// field.
+	//
+	// Only the comment content is provided; comment markers (e.g. //) are
+	// stripped out.  For block comments, leading whitespace and an asterisk
+	// will be stripped from the beginning of each line other than the first.
+	// Newlines are included in the output.
+	//
+	// Examples:
+	//
+	//   optional int32 foo = 1;  // Comment attached to foo.
+	//   // Comment attached to bar.
+	//   optional int32 bar = 2;
+	//
+	//   optional string baz = 3;
+	//   // Comment attached to baz.
+	//   // Another line attached to baz.
+	//
+	//   // Comment attached to qux.
+	//   //
+	//   // Another line attached to qux.
+	//   optional double qux = 4;
+	//
+	//   // Detached comment for corge. This is not leading or trailing comments
+	//   // to qux or corge because there are blank lines separating it from
+	//   // both.
+	//
+	//   // Detached comment for corge paragraph 2.
+	//
+	//   optional string corge = 5;
+	//   /* Block comment attached
+	//    * to corge.  Leading asterisks
+	//    * will be removed. */
+	//   /* Block comment attached to
+	//    * grault. */
+	//   optional int32 grault = 6;
+	//
+	//   // ignored detached comments.
 	leadingComments?:  string @protobuf(3,name=leading_comments)
 	trailingComments?: string @protobuf(4,name=trailing_comments)
 	leadingDetachedComments?: [...string] @protobuf(6,name=leading_detached_comments)
 }
 
-//  Describes the relationship between generated code and its original source
-//  file. A GeneratedCodeInfo message is associated with only one generated
-//  source file, but may contain references to different source .proto files.
+// Describes the relationship between generated code and its original source
+// file. A GeneratedCodeInfo message is associated with only one generated
+// source file, but may contain references to different source .proto files.
 GeneratedCodeInfo: {
-	//  An Annotation connects some span of text in generated code to an element
-	//  of its generating .proto file.
+	// An Annotation connects some span of text in generated code to an element
+	// of its generating .proto file.
 	annotation?: [...GeneratedCodeInfo_Annotation] @protobuf(1,type=Annotation)
 }
 
 GeneratedCodeInfo_Annotation: {
-	//  Identifies the element in the original source .proto file. This field
-	//  is formatted the same as SourceCodeInfo.Location.path.
+	// Identifies the element in the original source .proto file. This field
+	// is formatted the same as SourceCodeInfo.Location.path.
 	path?: [...int32] @protobuf(1,packed)
 
-	//  Identifies the filesystem path to the original source .proto.
+	// Identifies the filesystem path to the original source .proto.
 	sourceFile?: string @protobuf(2,name=source_file)
 
-	//  Identifies the starting offset in bytes in the generated code
-	//  that relates to the identified object.
+	// Identifies the starting offset in bytes in the generated code
+	// that relates to the identified object.
 	begin?: int32 @protobuf(3)
 
-	//  Identifies the ending offset in bytes in the generated code that
-	//  relates to the identified offset. The end offset should be one past
-	//  the last relevant byte (so the length of the text = end - begin).
+	// Identifies the ending offset in bytes in the generated code that
+	// relates to the identified offset. The end offset should be one past
+	// the last relevant byte (so the length of the text = end - begin).
 	end?: int32 @protobuf(4)
 }
diff --git a/encoding/protobuf/testdata/istio.io/api/pkg/google.golang.org/genproto/googleapis/rpc/status/status_proto_gen.cue b/encoding/protobuf/testdata/istio.io/api/pkg/google.golang.org/genproto/googleapis/rpc/status/status_proto_gen.cue
index fe83de2..ab7356e 100644
--- a/encoding/protobuf/testdata/istio.io/api/pkg/google.golang.org/genproto/googleapis/rpc/status/status_proto_gen.cue
+++ b/encoding/protobuf/testdata/istio.io/api/pkg/google.golang.org/genproto/googleapis/rpc/status/status_proto_gen.cue
@@ -1,85 +1,85 @@
 
-//  Copyright 2017 Google Inc.
-// 
-//  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
-// 
-//      http://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.
+// Copyright 2017 Google Inc.
+//
+// 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
+//
+//     http://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.
 package status
 
-//  The `Status` type defines a logical error model that is suitable for
-//  different programming environments, including REST APIs and RPC APIs. It is
-//  used by [gRPC](https://github.com/grpc). The error model is designed to be:
-// 
-//  - Simple to use and understand for most users
-//  - Flexible enough to meet unexpected needs
-// 
-//  # Overview
-// 
-//  The `Status` message contains three pieces of data: error code, error
-//  message, and error details. The error code should be an enum value of
-//  [google.rpc.Code][google.rpc.Code], but it may accept additional error codes
-//  if needed.  The error message should be a developer-facing English message
-//  that helps developers *understand* and *resolve* the error. If a localized
-//  user-facing error message is needed, put the localized message in the error
-//  details or localize it in the client. The optional error details may contain
-//  arbitrary information about the error. There is a predefined set of error
-//  detail types in the package `google.rpc` that can be used for common error
-//  conditions.
-// 
-//  # Language mapping
-// 
-//  The `Status` message is the logical representation of the error model, but it
-//  is not necessarily the actual wire format. When the `Status` message is
-//  exposed in different client libraries and different wire protocols, it can be
-//  mapped differently. For example, it will likely be mapped to some exceptions
-//  in Java, but more likely mapped to some error codes in C.
-// 
-//  # Other uses
-// 
-//  The error model and the `Status` message can be used in a variety of
-//  environments, either with or without APIs, to provide a
-//  consistent developer experience across different environments.
-// 
-//  Example uses of this error model include:
-// 
-//  - Partial errors. If a service needs to return partial errors to the client,
-//      it may embed the `Status` in the normal response to indicate the partial
-//      errors.
-// 
-//  - Workflow errors. A typical workflow has multiple steps. Each step may
-//      have a `Status` message for error reporting.
-// 
-//  - Batch operations. If a client uses batch request and batch response, the
-//      `Status` message should be used directly inside batch response, one for
-//      each error sub-response.
-// 
-//  - Asynchronous operations. If an API call embeds asynchronous operation
-//      results in its response, the status of those operations should be
-//      represented directly using the `Status` message.
-// 
-//  - Logging. If some API errors are stored in logs, the message `Status` could
-//      be used directly after any stripping needed for security/privacy reasons.
+// The `Status` type defines a logical error model that is suitable for
+// different programming environments, including REST APIs and RPC APIs. It is
+// used by [gRPC](https://github.com/grpc). The error model is designed to be:
+//
+// - Simple to use and understand for most users
+// - Flexible enough to meet unexpected needs
+//
+// # Overview
+//
+// The `Status` message contains three pieces of data: error code, error
+// message, and error details. The error code should be an enum value of
+// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes
+// if needed.  The error message should be a developer-facing English message
+// that helps developers *understand* and *resolve* the error. If a localized
+// user-facing error message is needed, put the localized message in the error
+// details or localize it in the client. The optional error details may contain
+// arbitrary information about the error. There is a predefined set of error
+// detail types in the package `google.rpc` that can be used for common error
+// conditions.
+//
+// # Language mapping
+//
+// The `Status` message is the logical representation of the error model, but it
+// is not necessarily the actual wire format. When the `Status` message is
+// exposed in different client libraries and different wire protocols, it can be
+// mapped differently. For example, it will likely be mapped to some exceptions
+// in Java, but more likely mapped to some error codes in C.
+//
+// # Other uses
+//
+// The error model and the `Status` message can be used in a variety of
+// environments, either with or without APIs, to provide a
+// consistent developer experience across different environments.
+//
+// Example uses of this error model include:
+//
+// - Partial errors. If a service needs to return partial errors to the client,
+//     it may embed the `Status` in the normal response to indicate the partial
+//     errors.
+//
+// - Workflow errors. A typical workflow has multiple steps. Each step may
+//     have a `Status` message for error reporting.
+//
+// - Batch operations. If a client uses batch request and batch response, the
+//     `Status` message should be used directly inside batch response, one for
+//     each error sub-response.
+//
+// - Asynchronous operations. If an API call embeds asynchronous operation
+//     results in its response, the status of those operations should be
+//     represented directly using the `Status` message.
+//
+// - Logging. If some API errors are stored in logs, the message `Status` could
+//     be used directly after any stripping needed for security/privacy reasons.
 Status: {
-	//  The status code, which should be an enum value of
-	//  [google.rpc.Code][google.rpc.Code].
+	// The status code, which should be an enum value of
+	// [google.rpc.Code][google.rpc.Code].
 	code?: int32 @protobuf(1)
 
-	//  A developer-facing error message, which should be in English. Any
-	//  user-facing error message should be localized and sent in the
-	//  [google.rpc.Status.details][google.rpc.Status.details] field, or localized
-	//  by the client.
+	// A developer-facing error message, which should be in English. Any
+	// user-facing error message should be localized and sent in the
+	// [google.rpc.Status.details][google.rpc.Status.details] field, or localized
+	// by the client.
 	message?: string @protobuf(2)
 
-	//  A list of messages that carry the error details.  There is a common set of
-	//  message types for APIs to use.
+	// A list of messages that carry the error details.  There is a common set of
+	// message types for APIs to use.
 	details?: [...{
 		// A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one "/" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `type.googleapis.com/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading "." is not accepted).
 		// The remaining fields of this object correspond to fields of the proto messsage. If the embedded message is well-known and has a custom JSON representation, that representation is assigned to the 'value' field.
diff --git a/encoding/protobuf/util.go b/encoding/protobuf/util.go
index 38521ab..53b3b43 100644
--- a/encoding/protobuf/util.go
+++ b/encoding/protobuf/util.go
@@ -66,7 +66,8 @@
 		cg.Position = 10
 	}
 	for _, s := range c.Lines {
-		cg.List = append(cg.List, &ast.Comment{Text: "// " + s})
+		s = strings.TrimRight(s, " ")
+		cg.List = append(cg.List, &ast.Comment{Text: "//" + s})
 	}
 	return cg
 }